It is looking for mpmath's phi. See https://github.com/sympy/sympy/blob/master/sympy/core/function.py#L458
Isuru Fernando On Fri, Mar 11, 2016 at 12:33 AM, Aaron Meurer <asmeu...@gmail.com> wrote: > Oh maybe it's just looking up the mpmath function named phi. We do have > > In [7]: import mpmath > > In [8]: mpmath.phi > Out[8]: <Golden ratio phi: 1.61803~> > > Aaron Meurer > > On Thu, Mar 10, 2016 at 2:01 PM, Aaron Meurer <asmeu...@gmail.com> wrote: > > Since this seems to break only when the function name is "phi", this > > looks like an instance of https://github.com/sympy/sympy/issues/6938. > > But I'm not quite sure what other SymPy function is named "phi". I > > didn't find any in a quick grep. > > > > Aaron Meurer > > > > On Thu, Mar 10, 2016 at 1:54 PM, Sartaj Singh <singhsarta...@gmail.com> > wrote: > >> 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 sympy+unsubscr...@googlegroups.com. > >> To post to this group, send email to sympy@googlegroups.com. > >> 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. > > -- > 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 sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > 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/CAKgW%3D6LN3PsQPiimfBjszH2LtJe7g_fShqy_FPdRfB7CxDGWAw%40mail.gmail.com > . > For more options, visit https://groups.google.com/d/optout. > -- 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 sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. 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/CA%2B01voPpT%2B3OVpjiOtpauvndzhLuYrVo0_syHG_Qpfeu9LmqKA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.