Apparently, this also does not work,
# leosartaj at Mothership in ~/projects/sympy on git:master o [0:09:48]
$ isympy
IPython console for SymPy 1.0.1.dev (Python 2.7.11-64-bit) (ground types:
python)
These commands were executed:
>>> from __future__ import division
>>> from sympy import *
>>> x, y, z, t = symbols('x y z t')
>>> k, m, n = symbols('k m n', integer=True)
>>> f, g, h = symbols('f g h', cls=Function)
>>> init_printing()
Documentation can be found at http://docs.sympy.org/dev
In [1]: phi = symbols('phi', cls=Function)
In [2]: phi(5.0)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-68868fcc8946> in <module>()
----> 1 phi(5.0)
/home/leosartaj/projects/sympy/sympy/core/function.pyc in __new__(cls,
*args, **options)
718 def __new__(cls, *args, **options):
719 args = list(map(sympify, args))
--> 720 obj = super(AppliedUndef, cls).__new__(cls, *args,
**options)
721 return obj
722
/home/leosartaj/projects/sympy/sympy/core/cache.pyc in wrapper(*args,
**kwargs)
93 retval = cfunc(*args, **kwargs)
94 except TypeError:
---> 95 retval = func(*args, **kwargs)
96 return retval
97
/home/leosartaj/projects/sympy/sympy/core/function.pyc in __new__(cls,
*args, **options)
390 pr2 = min(cls._should_evalf(a) for a in result.args)
391 if pr2 > 0:
--> 392 return result.evalf(mlib.libmpf.prec_to_dps(pr))
393 return result
394
/home/leosartaj/projects/sympy/sympy/core/evalf.pyc in evalf(self, n, subs,
maxn, chop, strict, quad, verbose)
1384 options['quad'] = quad
1385 try:
-> 1386 result = evalf(self, prec + 4, options)
1387 except NotImplementedError:
1388 # Fall back to the ordinary evalf
/home/leosartaj/projects/sympy/sympy/core/evalf.pyc in evalf(x, prec,
options)
1282 if 'subs' in options:
1283 x = x.subs(evalf_subs(prec, options['subs']))
-> 1284 xe = x._eval_evalf(prec)
1285 re, im = xe.as_real_imag()
1286 if re.has(re_) or im.has(im_):
/home/leosartaj/projects/sympy/sympy/core/function.pyc in _eval_evalf(self,
prec)
501
502 with mpmath.workprec(prec):
--> 503 v = func(*args)
504
505 return Expr._from_mpmath(v, prec)
/home/leosartaj/anaconda/envs/my/lib/python2.7/site-packages/mpmath/ctx_mp_python.pyc
in __call__(self, prec, dps, rounding)
344 if not rounding: rounding = rounding2
345 if dps: prec = dps_to_prec(dps)
--> 346 return self.context.make_mpf(self.func(prec, rounding))
347
348 @property
/home/leosartaj/anaconda/envs/my/lib/python2.7/site-packages/mpmath/libmp/libelefun.pyc
in f(prec, rnd)
114 def f(prec, rnd=round_fast):
115 wp = prec + 20
--> 116 v = fixed(wp)
117 if rnd in (round_up, round_ceiling):
118 v += 1
/home/leosartaj/anaconda/envs/my/lib/python2.7/site-packages/mpmath/libmp/libelefun.pyc
in g(prec, **kwargs)
95 memo_prec = f.memo_prec
96 if prec <= memo_prec:
---> 97 return f.memo_val >> (memo_prec-prec)
98 newprec = int(prec*1.05+10)
99 f.memo_val = f(newprec, **kwargs)
TypeError: unsupported operand type(s) for >>: 'long' and 'mpf'
This does work though,
>>> phi(5)
φ(5)
However,
>>> p = symbols('p', cls=Function)
>>> p(5.0)
p(5.0)
>>> p(t).xreplace({t: 5.0})
p(5.0) # works without any problems
By My understanding, is symbols with cls=Function arg not expected to make
an undefined function?
On Friday, 11 March 2016 00:03:38 UTC+5:30, Jason Moore wrote:
>
> I don't understand this behavior:
>
> Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec 7 2015, 11:16:01)
> Type "copyright", "credits" or "license" for more information.
>
> IPython 4.1.2 -- An enhanced Interactive Python.
> ? -> Introduction and overview of IPython's features.
> %quickref -> Quick reference.
> help -> Python's own help system.
> object? -> Details about 'object', use 'object??' for extra details.
>
> In [1]: from sympy import *
>
> In [2]: phi = symbols('phi', cls=Function)
>
> In [3]: t = symbols('t')
>
> In [4]: phi(t).xreplace({t: 0})
> Out[4]: phi(0)
>
> In [5]: phi(t).xreplace({t: 0.0})
> Out[5]: 1.61803398874989
>
> In [6]: phi(t).xreplace({t: 5.0})
> ---------------------------------------------------------------------------
> KeyError Traceback (most recent call last)
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/evalf.py
> in evalf(x, prec, options)
> 1209 try:
> -> 1210 rf = evalf_table[x.func]
> 1211 r = rf(x, prec, options)
>
> KeyError: phi
>
> During handling of the above exception, another exception occurred:
>
> TypeError Traceback (most recent call last)
> <ipython-input-6-ec5c48b4cb2f> in <module>()
> ----> 1 phi(t).xreplace({t: 5.0})
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/basic.py
> in xreplace(self, rule)
> 1086 args = tuple(args)
> 1087 if not _aresame(args, self.args):
> -> 1088 return self.func(*args)
> 1089 return self
> 1090
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/function.py
>
> in __new__(cls, *args, **options)
> 683 def __new__(cls, *args, **options):
> 684 args = list(map(sympify, args))
> --> 685 obj = super(AppliedUndef, cls).__new__(cls, *args,
> **options)
> 686 return obj
> 687
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/function.py
>
> in __new__(cls, *args, **options)
> 380 pr2 = min(cls._should_evalf(a) for a in result.args)
> 381 if pr2 > 0:
> --> 382 return result.evalf(mlib.libmpf.prec_to_dps(pr))
> 383 return result
> 384
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/evalf.py
> in evalf(self, n, subs, maxn, chop, strict, quad, verbose)
> 1315 options['quad'] = quad
> 1316 try:
> -> 1317 result = evalf(self, prec + 4, options)
> 1318 except NotImplementedError:
> 1319 # Fall back to the ordinary evalf
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/evalf.py
> in evalf(x, prec, options)
> 1215 if 'subs' in options:
> 1216 x = x.subs(evalf_subs(prec, options['subs']))
> -> 1217 re, im = x._eval_evalf(prec).as_real_imag()
> 1218 if re.has(re_) or im.has(im_):
> 1219 raise NotImplementedError
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/core/function.py
>
> in _eval_evalf(self, prec)
> 484
> 485 with mpmath.workprec(prec):
> --> 486 v = func(*args)
> 487
> 488 return Expr._from_mpmath(v, prec)
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/mpmath/ctx_mp_python.py
>
> in __call__(self, prec, dps, rounding)
> 344 if not rounding: rounding = rounding2
> 345 if dps: prec = dps_to_prec(dps)
> --> 346 return self.context.make_mpf(self.func(prec, rounding))
> 347
> 348 @property
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/mpmath/libmp/libelefun.py
>
> in f(prec, rnd)
> 114 def f(prec, rnd=round_fast):
> 115 wp = prec + 20
> --> 116 v = fixed(wp)
> 117 if rnd in (round_up, round_ceiling):
> 118 v += 1
>
> /home/moorepants/miniconda3/lib/python3.5/site-packages/sympy/mpmath/libmp/libelefun.py
>
> in g(prec, **kwargs)
> 95 memo_prec = f.memo_prec
> 96 if prec <= memo_prec:
> ---> 97 return f.memo_val >> (memo_prec-prec)
> 98 newprec = int(prec*1.05+10)
> 99 f.memo_val = f(newprec, **kwargs)
>
> TypeError: unsupported operand type(s) for >>: 'int' and 'mpf'
>
> Can someone explain to me what is going on? I would expect "t" to be
> simply replaced with the number.
>
> Jason
> moorepants.info
> +01 530-601-9791
>
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/b40c4bb2-e74a-4399-8a40-879e380ea65e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.