The sp shorthand is usually used for scipy. I recommend using 'import sympy as sym' or 'import sympy as sm' (sm is also used by statsmodels so I would avoid that one if you use that library).
Aaron Meurer On Mon, Jun 29, 2020 at 12:38 PM Jonathan Gutow <[email protected]> wrote: > > +1 for encouraging `import sympy as sp`, when every things are not > simple enough for `from sympy import *`. > > Jonathan > > On 6/29/20 11:16 AM, Oscar Benjamin wrote: > > CAUTION: This email originated from outside of the organization. Do not > > click links or open attachments unless you recognize the sender and know > > the content is safe. > > > > > > On Mon, 29 Jun 2020 at 15:54, Javier Arantegui > > <[email protected]> wrote: > >> Hi! > > Hi Javier, > > > >> Most probably, this is a silly question... > > I don't think it's a silly question > > > >> What is the best way to import Sympy? > >> > >> I usually use: > >> > >> from sympy import * > >> > >> I know that using a wild import should be avoided. Is this a better way: > >> > >> import sympy as sp > > This is more of a general Python question than a sympy-specific > > question. My answer is that it really depends on the context but my > > rules of thumb is that star-imports are fine if you're writing a > > single script that uses a single star-import. > > > > Are you writing a small script to do a short calculation or are you > > editing a large codebase with many different modules and internal and > > external imports? > > > > In any significant codebase star-import is a bad idea. It makes it > > hard to trace the origin of an imported name when looking at the code. > > If I'm looking at the code and I see sp.cos then I expect that sp will > > be defined or imported somewhere at the top of the file and I can just > > go to the first occurrence of it in the file to see where it comes > > from. Likewise if you use "from sympy import cos" and I see cos(2) I > > expect that cos will be imported at the top and I can search for that. > > > > There have been issues in sympy where __init__.py files used > > star-imports making some objects importable by accident. The > > conclusion from those examples is that it is bad to use star-imports > > when writing modules that other code will import from. Within the > > sympy codebase itself most imports are more explicit like > > > > from sympy.polys.polymatrix import PolyMatrix > > > > That's a good practice for internal imports in a large codebase. There > > are a few places around the sympy code base where names are imported > > from top level sympy like > > > > from sympy import cos > > > > Those are not fine *within* sympy because they lead to circular import > > problems. For users of sympy though I think that this would be > > considered good practice. > > > > The above is all about large codebases though (e.g. sympy has 750000 > > lines of code). If you are writing a short script that just uses sympy > > to compute something then I don't see anything wrong with using a > > star-import for brevity. Of course there's a big range between a > > 10-line calculation and a 750K-LOC library and you'll have to decide > > where your code fits in that range... > > > > Also are you combining sympy with other libraries such as numpy and > > are you star-importing from all of them? > > > > Many problems of star-import come from things like multiple star > > imports. Both numpy and sympy have a cos function so if you > > star-import both modules which one will you get? The two cos functions > > are deliberately different so it does matter. Because of that even in > > a short script that mixes numpy and sympy I would go with > > > > import sympy as sp > > import numpy as np > > > > or perhaps > > > > from sympy import * > > import numpy as np > > > > but never > > > > from sympy import * > > from numpy import * > > > > Both sympy and numpy have hundreds of names at top-level and many of > > them are the same names. > > > > For simple interactive calculations I use isympy which does this when it > > starts: > > > > >>> 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() > > > > That saves a bunch of boiler-plate so you can quickly get started. > > It's also convenient for pasting examples: I often paste code snippets > > to show someone something with the implication that it works in isympy > > with the above import and symbols. This is the original purpose of > > star-import: to be convenient in an interactive context. > > > > I see lots of examples around where people do different variants like > > > > import sympy; sympy.cos(2) > > import sympy as sp; sp.cos(2) > > import sympy as sy; sy.cos(2) > > > > and other less common examples. I wonder if it would be worthwhile for > > sympy to endorse one of these explicitly in the way that numpy does > > with np. > > > > -- > > 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 view this discussion on the web visit > > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fsympy%2FCAHVvXxRu1Y3CzHJOWJbATOsDvTnY7vZRUb5yYowZvqjQHJqVfw%2540mail.gmail.com&data=02%7C01%7Cgutow%40uwosh.edu%7C49e15f2f542e455d3b3308d81c47a5e9%7C16b8b9f2f7bd431ab739d49428e26316%7C0%7C0%7C637290441336920658&sdata=fXignxLFKK8ek9FnXpEOz%2FJDVjBtsOqDjEB1ymLpsaw%3D&reserved=0. > > -- > Dr. Jonathan Gutow > Chemistry Department > UW Oshkosh > web: https://uwosh.edu/facstaff/gutow > e-mail: [email protected] > Ph: 920-424-1326 > > -- > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/cc227f60-7e26-c920-df9b-78e84b0c0af6%40uwosh.edu. -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6L%3DQ0wkC99LoNeC-3daC5C-F86uvzpcGywePaYQSnyZmg%40mail.gmail.com.
