Thanks for clarifying. I generally think of compatibility making it so whatever you do in Py3 you can do in Py2. In this case the common idiom is to reference a builtin from its module (builtins.foo) rather than to try import foo from builtins (which works with Py3 but not with Py2 *with the same name*).
/c On Thursday, May 9, 2019 at 5:19:36 PM UTC-5, Aaron Meurer wrote: > > In Python 2 builtins was called called __builtin__. That's why it's in > the compatibility module (not to be confused with __builtins__, which > is a different thing, hence the rename). You could just as well write > > try: > # Python 3 > from builtins import type > except ImportError: > # Python 2 > from __builtin__ import type > > but the whole point of the SymPy compatibility module is to isolate > such 2/3 compatibility code into one place. So it's better to do > > from sympy.core.compatibility import builtins > builtins.type > > There's also another possible level of confusion here which is that if > you have the 'future' package installed in your Python 2 environment, > it automatically adds a builtins module to the standard library. So in > that case, 'from builtins import type' will work. But it shouldn't be > relied on for SymPy, because we do not have 'future' as a dependency > (and do not want to have it as one). > > Aaron Meurer > > On Thu, May 9, 2019 at 2:56 PM Chris Smith <[email protected] <javascript:>> > wrote: > > > > Hmm - yes, that works for me, too. But in Py3 you can do 'from builtins > import type' -- is the only way to do that in 2 is to use monkey patching? > > > > /c > > > > On Thursday, May 9, 2019 at 2:36:21 PM UTC-5, Aaron Meurer wrote: > >> > >> This works for me: > >> > >> Python 2.7.14 | packaged by conda-forge | (default, Dec 9 2017, > 16:31:12) > >> [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin > >> Type "help", "copyright", "credits" or "license" for more information. > >> >>> from sympy.core.compatibility import builtins > >> >>> builtins.type > >> <type 'type'> > >> > >> Aaron Meurer > >> > >> On Thu, May 9, 2019 at 2:02 AM Chris Smith <[email protected]> wrote: > >> > > >> > builtins is in core.compatibility and it doesn't seem to work for me. > >> > > >> > The issue will go away when we drop Py 2.7...or sooner if someone can > figure out what's wrong. > >> > > >> > On Wednesday, May 8, 2019 at 5:02:05 PM UTC-5, Aaron Meurer wrote: > >> >> > >> >> On Wed, May 8, 2019 at 3:48 PM Oscar Benjamin > >> >> <[email protected]> wrote: > >> >> > > >> >> > On Wed, 8 May 2019 at 22:38, Chris Smith <[email protected]> > wrote: > >> >> > > > >> >> > > None of them work > >> >> > > >> >> > That's what I get for not trying them out! > >> >> > > >> >> > > >>> import sympy.core.compatibility.builtins as builtins > >> >> > > Traceback (most recent call last): > >> >> > > File "<stdin>", line 1, in <module> > >> >> > > ImportError: No module named builtins > >> >> > > > >> >> > > >>> from sympy.core.compatibility.builtins import type > >> >> > > Traceback (most recent call last): > >> >> > > File "<stdin>", line 1, in <module> > >> >> > > ImportError: No module named builtins > >> >> > > >> >> > Yes that's because there is no builtins module in the > compatibility > >> >> > package. In fact compatibility is a module not a package. > >> >> > > >> >> > > >>> sys.modules['builtins']=__builtin__ > >> >> > > Traceback (most recent call last): > >> >> > > File "<stdin>", line 1, in <module> > >> >> > > NameError: name '__builtin__' is not defined > >> >> > > >> >> > This will work if you have imported __builtin__ first: > >> >> > > >> >> > >>> import __builtin__ > >> >> > >>> import sys > >> >> > >>> sys.modules['builtins'] = __builtin__ > >> >> > >>> import builtins > >> >> > >> >> What is this for? We shouldn't be monkey-patching sys.modules in > library code. > >> >> > >> >> Aaron Meurer > >> >> > >> >> > > >> >> > -- > >> >> > Oscar > >> >> > > >> >> > -- > >> >> > 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/CAHVvXxQ59yzRzns5MHiqNmZz09Tx82B4aF_CnvidTwMGPA9E6Q%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 [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/bb44f6d2-8d32-410b-97e7-5bd4e2409a2a%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] <javascript:>. > > To post to this group, send email to [email protected] > <javascript:>. > > 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/13957bcc-ec40-4f21-a2c0-05576db5db53%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/da7fb921-3b3c-4689-af36-9d3d741371fb%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
