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 <[email protected]> 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 <[email protected]> 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 [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.

-- 
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/CAKgW%3D6LN3PsQPiimfBjszH2LtJe7g_fShqy_FPdRfB7CxDGWAw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to