123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709 |
- import inspect
- import copy
- import pickle
- from sympy.physics.units import meter
- from sympy.testing.pytest import XFAIL, raises
- from sympy.core.basic import Atom, Basic
- from sympy.core.singleton import SingletonRegistry
- from sympy.core.symbol import Str, Dummy, Symbol, Wild
- from sympy.core.numbers import (E, I, pi, oo, zoo, nan, Integer,
- Rational, Float, AlgebraicNumber)
- from sympy.core.relational import (Equality, GreaterThan, LessThan, Relational,
- StrictGreaterThan, StrictLessThan, Unequality)
- from sympy.core.add import Add
- from sympy.core.mul import Mul
- from sympy.core.power import Pow
- from sympy.core.function import Derivative, Function, FunctionClass, Lambda, \
- WildFunction
- from sympy.sets.sets import Interval
- from sympy.core.multidimensional import vectorize
- from sympy.external.gmpy import HAS_GMPY
- from sympy.utilities.exceptions import SymPyDeprecationWarning
- from sympy.core.singleton import S
- from sympy.core.symbol import symbols
- from sympy.external import import_module
- cloudpickle = import_module('cloudpickle')
- excluded_attrs = {
- '_assumptions', # This is a local cache that isn't automatically filled on creation
- '_mhash', # Cached after __hash__ is called but set to None after creation
- 'is_EmptySet', # Deprecated from SymPy 1.5. This can be removed when is_EmptySet is removed.
- 'expr_free_symbols', # Deprecated from SymPy 1.9. This can be removed when exr_free_symbols is removed.
- '_mat', # Deprecated from SymPy 1.9. This can be removed when Matrix._mat is removed
- '_smat', # Deprecated from SymPy 1.9. This can be removed when SparseMatrix._smat is removed
- }
- def check(a, exclude=[], check_attr=True):
- """ Check that pickling and copying round-trips.
- """
- # Pickling with protocols 0 and 1 is disabled for Basic instances:
- if isinstance(a, Basic):
- for protocol in [0, 1]:
- raises(NotImplementedError, lambda: pickle.dumps(a, protocol))
- protocols = [2, copy.copy, copy.deepcopy, 3, 4]
- if cloudpickle:
- protocols.extend([cloudpickle])
- for protocol in protocols:
- if protocol in exclude:
- continue
- if callable(protocol):
- if isinstance(a, type):
- # Classes can't be copied, but that's okay.
- continue
- b = protocol(a)
- elif inspect.ismodule(protocol):
- b = protocol.loads(protocol.dumps(a))
- else:
- b = pickle.loads(pickle.dumps(a, protocol))
- d1 = dir(a)
- d2 = dir(b)
- assert set(d1) == set(d2)
- if not check_attr:
- continue
- def c(a, b, d):
- for i in d:
- if i in excluded_attrs:
- continue
- if not hasattr(a, i):
- continue
- attr = getattr(a, i)
- if not hasattr(attr, "__call__"):
- assert hasattr(b, i), i
- assert getattr(b, i) == attr, "%s != %s, protocol: %s" % (getattr(b, i), attr, protocol)
- c(a, b, d1)
- c(b, a, d2)
- #================== core =========================
- def test_core_basic():
- for c in (Atom, Atom(), Basic, Basic(), SingletonRegistry, S):
- check(c)
- def test_core_Str():
- check(Str('x'))
- def test_core_symbol():
- # make the Symbol a unique name that doesn't class with any other
- # testing variable in this file since after this test the symbol
- # having the same name will be cached as noncommutative
- for c in (Dummy, Dummy("x", commutative=False), Symbol,
- Symbol("_issue_3130", commutative=False), Wild, Wild("x")):
- check(c)
- def test_core_numbers():
- for c in (Integer(2), Rational(2, 3), Float("1.2")):
- check(c)
- for c in (AlgebraicNumber, AlgebraicNumber(sqrt(3))):
- check(c, check_attr=False)
- def test_core_float_copy():
- # See gh-7457
- y = Symbol("x") + 1.0
- check(y) # does not raise TypeError ("argument is not an mpz")
- def test_core_relational():
- x = Symbol("x")
- y = Symbol("y")
- for c in (Equality, Equality(x, y), GreaterThan, GreaterThan(x, y),
- LessThan, LessThan(x, y), Relational, Relational(x, y),
- StrictGreaterThan, StrictGreaterThan(x, y), StrictLessThan,
- StrictLessThan(x, y), Unequality, Unequality(x, y)):
- check(c)
- def test_core_add():
- x = Symbol("x")
- for c in (Add, Add(x, 4)):
- check(c)
- def test_core_mul():
- x = Symbol("x")
- for c in (Mul, Mul(x, 4)):
- check(c)
- def test_core_power():
- x = Symbol("x")
- for c in (Pow, Pow(x, 4)):
- check(c)
- def test_core_function():
- x = Symbol("x")
- for f in (Derivative, Derivative(x), Function, FunctionClass, Lambda,
- WildFunction):
- check(f)
- def test_core_undefinedfunctions():
- f = Function("f")
- # Full XFAILed test below
- exclude = list(range(5))
- # https://github.com/cloudpipe/cloudpickle/issues/65
- # https://github.com/cloudpipe/cloudpickle/issues/190
- exclude.append(cloudpickle)
- check(f, exclude=exclude)
- @XFAIL
- def test_core_undefinedfunctions_fail():
- # This fails because f is assumed to be a class at sympy.basic.function.f
- f = Function("f")
- check(f)
- def test_core_interval():
- for c in (Interval, Interval(0, 2)):
- check(c)
- def test_core_multidimensional():
- for c in (vectorize, vectorize(0)):
- check(c)
- def test_Singletons():
- protocols = [0, 1, 2, 3, 4]
- copiers = [copy.copy, copy.deepcopy]
- copiers += [lambda x: pickle.loads(pickle.dumps(x, proto))
- for proto in protocols]
- if cloudpickle:
- copiers += [lambda x: cloudpickle.loads(cloudpickle.dumps(x))]
- for obj in (Integer(-1), Integer(0), Integer(1), Rational(1, 2), pi, E, I,
- oo, -oo, zoo, nan, S.GoldenRatio, S.TribonacciConstant,
- S.EulerGamma, S.Catalan, S.EmptySet, S.IdentityFunction):
- for func in copiers:
- assert func(obj) is obj
- #================== functions ===================
- from sympy.functions import (Piecewise, lowergamma, acosh, chebyshevu,
- chebyshevt, ln, chebyshevt_root, legendre, Heaviside, bernoulli, coth,
- tanh, assoc_legendre, sign, arg, asin, DiracDelta, re, rf, Abs,
- uppergamma, binomial, sinh, cos, cot, acos, acot, gamma, bell,
- hermite, harmonic, LambertW, zeta, log, factorial, asinh, acoth, cosh,
- dirichlet_eta, Eijk, loggamma, erf, ceiling, im, fibonacci,
- tribonacci, conjugate, tan, chebyshevu_root, floor, atanh, sqrt, sin,
- atan, ff, lucas, atan2, polygamma, exp)
- def test_functions():
- one_var = (acosh, ln, Heaviside, factorial, bernoulli, coth, tanh,
- sign, arg, asin, DiracDelta, re, Abs, sinh, cos, cot, acos, acot,
- gamma, bell, harmonic, LambertW, zeta, log, factorial, asinh,
- acoth, cosh, dirichlet_eta, loggamma, erf, ceiling, im, fibonacci,
- tribonacci, conjugate, tan, floor, atanh, sin, atan, lucas, exp)
- two_var = (rf, ff, lowergamma, chebyshevu, chebyshevt, binomial,
- atan2, polygamma, hermite, legendre, uppergamma)
- x, y, z = symbols("x,y,z")
- others = (chebyshevt_root, chebyshevu_root, Eijk(x, y, z),
- Piecewise( (0, x < -1), (x**2, x <= 1), (x**3, True)),
- assoc_legendre)
- for cls in one_var:
- check(cls)
- c = cls(x)
- check(c)
- for cls in two_var:
- check(cls)
- c = cls(x, y)
- check(c)
- for cls in others:
- check(cls)
- #================== geometry ====================
- from sympy.geometry.entity import GeometryEntity
- from sympy.geometry.point import Point
- from sympy.geometry.ellipse import Circle, Ellipse
- from sympy.geometry.line import Line, LinearEntity, Ray, Segment
- from sympy.geometry.polygon import Polygon, RegularPolygon, Triangle
- def test_geometry():
- p1 = Point(1, 2)
- p2 = Point(2, 3)
- p3 = Point(0, 0)
- p4 = Point(0, 1)
- for c in (
- GeometryEntity, GeometryEntity(), Point, p1, Circle, Circle(p1, 2),
- Ellipse, Ellipse(p1, 3, 4), Line, Line(p1, p2), LinearEntity,
- LinearEntity(p1, p2), Ray, Ray(p1, p2), Segment, Segment(p1, p2),
- Polygon, Polygon(p1, p2, p3, p4), RegularPolygon,
- RegularPolygon(p1, 4, 5), Triangle, Triangle(p1, p2, p3)):
- check(c, check_attr=False)
- #================== integrals ====================
- from sympy.integrals.integrals import Integral
- def test_integrals():
- x = Symbol("x")
- for c in (Integral, Integral(x)):
- check(c)
- #==================== logic =====================
- from sympy.core.logic import Logic
- def test_logic():
- for c in (Logic, Logic(1)):
- check(c)
- #================== matrices ====================
- from sympy.matrices import Matrix, SparseMatrix
- def test_matrices():
- for c in (Matrix, Matrix([1, 2, 3]), SparseMatrix, SparseMatrix([[1, 2], [3, 4]])):
- check(c)
- #================== ntheory =====================
- from sympy.ntheory.generate import Sieve
- def test_ntheory():
- for c in (Sieve, Sieve()):
- check(c)
- #================== physics =====================
- from sympy.physics.paulialgebra import Pauli
- from sympy.physics.units import Unit
- def test_physics():
- for c in (Unit, meter, Pauli, Pauli(1)):
- check(c)
- #================== plotting ====================
- # XXX: These tests are not complete, so XFAIL them
- @XFAIL
- def test_plotting():
- from sympy.plotting.pygletplot.color_scheme import ColorGradient, ColorScheme
- from sympy.plotting.pygletplot.managed_window import ManagedWindow
- from sympy.plotting.plot import Plot, ScreenShot
- from sympy.plotting.pygletplot.plot_axes import PlotAxes, PlotAxesBase, PlotAxesFrame, PlotAxesOrdinate
- from sympy.plotting.pygletplot.plot_camera import PlotCamera
- from sympy.plotting.pygletplot.plot_controller import PlotController
- from sympy.plotting.pygletplot.plot_curve import PlotCurve
- from sympy.plotting.pygletplot.plot_interval import PlotInterval
- from sympy.plotting.pygletplot.plot_mode import PlotMode
- from sympy.plotting.pygletplot.plot_modes import Cartesian2D, Cartesian3D, Cylindrical, \
- ParametricCurve2D, ParametricCurve3D, ParametricSurface, Polar, Spherical
- from sympy.plotting.pygletplot.plot_object import PlotObject
- from sympy.plotting.pygletplot.plot_surface import PlotSurface
- from sympy.plotting.pygletplot.plot_window import PlotWindow
- for c in (
- ColorGradient, ColorGradient(0.2, 0.4), ColorScheme, ManagedWindow,
- ManagedWindow, Plot, ScreenShot, PlotAxes, PlotAxesBase,
- PlotAxesFrame, PlotAxesOrdinate, PlotCamera, PlotController,
- PlotCurve, PlotInterval, PlotMode, Cartesian2D, Cartesian3D,
- Cylindrical, ParametricCurve2D, ParametricCurve3D,
- ParametricSurface, Polar, Spherical, PlotObject, PlotSurface,
- PlotWindow):
- check(c)
- @XFAIL
- def test_plotting2():
- #from sympy.plotting.color_scheme import ColorGradient
- from sympy.plotting.pygletplot.color_scheme import ColorScheme
- #from sympy.plotting.managed_window import ManagedWindow
- from sympy.plotting.plot import Plot
- #from sympy.plotting.plot import ScreenShot
- from sympy.plotting.pygletplot.plot_axes import PlotAxes
- #from sympy.plotting.plot_axes import PlotAxesBase, PlotAxesFrame, PlotAxesOrdinate
- #from sympy.plotting.plot_camera import PlotCamera
- #from sympy.plotting.plot_controller import PlotController
- #from sympy.plotting.plot_curve import PlotCurve
- #from sympy.plotting.plot_interval import PlotInterval
- #from sympy.plotting.plot_mode import PlotMode
- #from sympy.plotting.plot_modes import Cartesian2D, Cartesian3D, Cylindrical, \
- # ParametricCurve2D, ParametricCurve3D, ParametricSurface, Polar, Spherical
- #from sympy.plotting.plot_object import PlotObject
- #from sympy.plotting.plot_surface import PlotSurface
- # from sympy.plotting.plot_window import PlotWindow
- check(ColorScheme("rainbow"))
- check(Plot(1, visible=False))
- check(PlotAxes())
- #================== polys =======================
- from sympy.polys.domains.integerring import ZZ
- from sympy.polys.domains.rationalfield import QQ
- from sympy.polys.orderings import lex
- from sympy.polys.polytools import Poly
- def test_pickling_polys_polytools():
- from sympy.polys.polytools import PurePoly
- # from sympy.polys.polytools import GroebnerBasis
- x = Symbol('x')
- for c in (Poly, Poly(x, x)):
- check(c)
- for c in (PurePoly, PurePoly(x)):
- check(c)
- # TODO: fix pickling of Options class (see GroebnerBasis._options)
- # for c in (GroebnerBasis, GroebnerBasis([x**2 - 1], x, order=lex)):
- # check(c)
- def test_pickling_polys_polyclasses():
- from sympy.polys.polyclasses import DMP, DMF, ANP
- for c in (DMP, DMP([[ZZ(1)], [ZZ(2)], [ZZ(3)]], ZZ)):
- check(c)
- for c in (DMF, DMF(([ZZ(1), ZZ(2)], [ZZ(1), ZZ(3)]), ZZ)):
- check(c)
- for c in (ANP, ANP([QQ(1), QQ(2)], [QQ(1), QQ(2), QQ(3)], QQ)):
- check(c)
- @XFAIL
- def test_pickling_polys_rings():
- # NOTE: can't use protocols < 2 because we have to execute __new__ to
- # make sure caching of rings works properly.
- from sympy.polys.rings import PolyRing
- ring = PolyRing("x,y,z", ZZ, lex)
- for c in (PolyRing, ring):
- check(c, exclude=[0, 1])
- for c in (ring.dtype, ring.one):
- check(c, exclude=[0, 1], check_attr=False) # TODO: Py3k
- def test_pickling_polys_fields():
- pass
- # NOTE: can't use protocols < 2 because we have to execute __new__ to
- # make sure caching of fields works properly.
- # from sympy.polys.fields import FracField
- # field = FracField("x,y,z", ZZ, lex)
- # TODO: AssertionError: assert id(obj) not in self.memo
- # for c in (FracField, field):
- # check(c, exclude=[0, 1])
- # TODO: AssertionError: assert id(obj) not in self.memo
- # for c in (field.dtype, field.one):
- # check(c, exclude=[0, 1])
- def test_pickling_polys_elements():
- from sympy.polys.domains.pythonrational import PythonRational
- #from sympy.polys.domains.pythonfinitefield import PythonFiniteField
- #from sympy.polys.domains.mpelements import MPContext
- for c in (PythonRational, PythonRational(1, 7)):
- check(c)
- #gf = PythonFiniteField(17)
- # TODO: fix pickling of ModularInteger
- # for c in (gf.dtype, gf(5)):
- # check(c)
- #mp = MPContext()
- # TODO: fix pickling of RealElement
- # for c in (mp.mpf, mp.mpf(1.0)):
- # check(c)
- # TODO: fix pickling of ComplexElement
- # for c in (mp.mpc, mp.mpc(1.0, -1.5)):
- # check(c)
- def test_pickling_polys_domains():
- # from sympy.polys.domains.pythonfinitefield import PythonFiniteField
- from sympy.polys.domains.pythonintegerring import PythonIntegerRing
- from sympy.polys.domains.pythonrationalfield import PythonRationalField
- # TODO: fix pickling of ModularInteger
- # for c in (PythonFiniteField, PythonFiniteField(17)):
- # check(c)
- for c in (PythonIntegerRing, PythonIntegerRing()):
- check(c, check_attr=False)
- for c in (PythonRationalField, PythonRationalField()):
- check(c, check_attr=False)
- if HAS_GMPY:
- # from sympy.polys.domains.gmpyfinitefield import GMPYFiniteField
- from sympy.polys.domains.gmpyintegerring import GMPYIntegerRing
- from sympy.polys.domains.gmpyrationalfield import GMPYRationalField
- # TODO: fix pickling of ModularInteger
- # for c in (GMPYFiniteField, GMPYFiniteField(17)):
- # check(c)
- for c in (GMPYIntegerRing, GMPYIntegerRing()):
- check(c, check_attr=False)
- for c in (GMPYRationalField, GMPYRationalField()):
- check(c, check_attr=False)
- #from sympy.polys.domains.realfield import RealField
- #from sympy.polys.domains.complexfield import ComplexField
- from sympy.polys.domains.algebraicfield import AlgebraicField
- #from sympy.polys.domains.polynomialring import PolynomialRing
- #from sympy.polys.domains.fractionfield import FractionField
- from sympy.polys.domains.expressiondomain import ExpressionDomain
- # TODO: fix pickling of RealElement
- # for c in (RealField, RealField(100)):
- # check(c)
- # TODO: fix pickling of ComplexElement
- # for c in (ComplexField, ComplexField(100)):
- # check(c)
- for c in (AlgebraicField, AlgebraicField(QQ, sqrt(3))):
- check(c, check_attr=False)
- # TODO: AssertionError
- # for c in (PolynomialRing, PolynomialRing(ZZ, "x,y,z")):
- # check(c)
- # TODO: AttributeError: 'PolyElement' object has no attribute 'ring'
- # for c in (FractionField, FractionField(ZZ, "x,y,z")):
- # check(c)
- for c in (ExpressionDomain, ExpressionDomain()):
- check(c, check_attr=False)
- def test_pickling_polys_orderings():
- from sympy.polys.orderings import (LexOrder, GradedLexOrder,
- ReversedGradedLexOrder, InverseOrder)
- # from sympy.polys.orderings import ProductOrder
- for c in (LexOrder, LexOrder()):
- check(c)
- for c in (GradedLexOrder, GradedLexOrder()):
- check(c)
- for c in (ReversedGradedLexOrder, ReversedGradedLexOrder()):
- check(c)
- # TODO: Argh, Python is so naive. No lambdas nor inner function support in
- # pickling module. Maybe someone could figure out what to do with this.
- #
- # for c in (ProductOrder, ProductOrder((LexOrder(), lambda m: m[:2]),
- # (GradedLexOrder(), lambda m: m[2:]))):
- # check(c)
- for c in (InverseOrder, InverseOrder(LexOrder())):
- check(c)
- def test_pickling_polys_monomials():
- from sympy.polys.monomials import MonomialOps, Monomial
- x, y, z = symbols("x,y,z")
- for c in (MonomialOps, MonomialOps(3)):
- check(c)
- for c in (Monomial, Monomial((1, 2, 3), (x, y, z))):
- check(c)
- def test_pickling_polys_errors():
- from sympy.polys.polyerrors import (HeuristicGCDFailed,
- HomomorphismFailed, IsomorphismFailed, ExtraneousFactors,
- EvaluationFailed, RefinementFailed, CoercionFailed, NotInvertible,
- NotReversible, NotAlgebraic, DomainError, PolynomialError,
- UnificationFailed, GeneratorsError, GeneratorsNeeded,
- UnivariatePolynomialError, MultivariatePolynomialError, OptionError,
- FlagError)
- # from sympy.polys.polyerrors import (ExactQuotientFailed,
- # OperationNotSupported, ComputationFailed, PolificationFailed)
- # x = Symbol('x')
- # TODO: TypeError: __init__() takes at least 3 arguments (1 given)
- # for c in (ExactQuotientFailed, ExactQuotientFailed(x, 3*x, ZZ)):
- # check(c)
- # TODO: TypeError: can't pickle instancemethod objects
- # for c in (OperationNotSupported, OperationNotSupported(Poly(x), Poly.gcd)):
- # check(c)
- for c in (HeuristicGCDFailed, HeuristicGCDFailed()):
- check(c)
- for c in (HomomorphismFailed, HomomorphismFailed()):
- check(c)
- for c in (IsomorphismFailed, IsomorphismFailed()):
- check(c)
- for c in (ExtraneousFactors, ExtraneousFactors()):
- check(c)
- for c in (EvaluationFailed, EvaluationFailed()):
- check(c)
- for c in (RefinementFailed, RefinementFailed()):
- check(c)
- for c in (CoercionFailed, CoercionFailed()):
- check(c)
- for c in (NotInvertible, NotInvertible()):
- check(c)
- for c in (NotReversible, NotReversible()):
- check(c)
- for c in (NotAlgebraic, NotAlgebraic()):
- check(c)
- for c in (DomainError, DomainError()):
- check(c)
- for c in (PolynomialError, PolynomialError()):
- check(c)
- for c in (UnificationFailed, UnificationFailed()):
- check(c)
- for c in (GeneratorsError, GeneratorsError()):
- check(c)
- for c in (GeneratorsNeeded, GeneratorsNeeded()):
- check(c)
- # TODO: PicklingError: Can't pickle <function <lambda> at 0x38578c0>: it's not found as __main__.<lambda>
- # for c in (ComputationFailed, ComputationFailed(lambda t: t, 3, None)):
- # check(c)
- for c in (UnivariatePolynomialError, UnivariatePolynomialError()):
- check(c)
- for c in (MultivariatePolynomialError, MultivariatePolynomialError()):
- check(c)
- # TODO: TypeError: __init__() takes at least 3 arguments (1 given)
- # for c in (PolificationFailed, PolificationFailed({}, x, x, False)):
- # check(c)
- for c in (OptionError, OptionError()):
- check(c)
- for c in (FlagError, FlagError()):
- check(c)
- #def test_pickling_polys_options():
- #from sympy.polys.polyoptions import Options
- # TODO: fix pickling of `symbols' flag
- # for c in (Options, Options((), dict(domain='ZZ', polys=False))):
- # check(c)
- # TODO: def test_pickling_polys_rootisolation():
- # RealInterval
- # ComplexInterval
- def test_pickling_polys_rootoftools():
- from sympy.polys.rootoftools import CRootOf, RootSum
- x = Symbol('x')
- f = x**3 + x + 3
- for c in (CRootOf, CRootOf(f, 0)):
- check(c)
- for c in (RootSum, RootSum(f, exp)):
- check(c)
- #================== printing ====================
- from sympy.printing.latex import LatexPrinter
- from sympy.printing.mathml import MathMLContentPrinter, MathMLPresentationPrinter
- from sympy.printing.pretty.pretty import PrettyPrinter
- from sympy.printing.pretty.stringpict import prettyForm, stringPict
- from sympy.printing.printer import Printer
- from sympy.printing.python import PythonPrinter
- def test_printing():
- for c in (LatexPrinter, LatexPrinter(), MathMLContentPrinter,
- MathMLPresentationPrinter, PrettyPrinter, prettyForm, stringPict,
- stringPict("a"), Printer, Printer(), PythonPrinter,
- PythonPrinter()):
- check(c)
- @XFAIL
- def test_printing1():
- check(MathMLContentPrinter())
- @XFAIL
- def test_printing2():
- check(MathMLPresentationPrinter())
- @XFAIL
- def test_printing3():
- check(PrettyPrinter())
- #================== series ======================
- from sympy.series.limits import Limit
- from sympy.series.order import Order
- def test_series():
- e = Symbol("e")
- x = Symbol("x")
- for c in (Limit, Limit(e, x, 1), Order, Order(e)):
- check(c)
- #================== concrete ==================
- from sympy.concrete.products import Product
- from sympy.concrete.summations import Sum
- def test_concrete():
- x = Symbol("x")
- for c in (Product, Product(x, (x, 2, 4)), Sum, Sum(x, (x, 2, 4))):
- check(c)
- def test_deprecation_warning():
- w = SymPyDeprecationWarning("message", deprecated_since_version='1.0', active_deprecations_target="active-deprecations")
- check(w)
- def test_issue_18438():
- assert pickle.loads(pickle.dumps(S.Half)) == S.Half
- #================= old pickles =================
- def test_unpickle_from_older_versions():
- data = (
- b'\x80\x04\x95^\x00\x00\x00\x00\x00\x00\x00\x8c\x10sympy.core.power'
- b'\x94\x8c\x03Pow\x94\x93\x94\x8c\x12sympy.core.numbers\x94\x8c'
- b'\x07Integer\x94\x93\x94K\x02\x85\x94R\x94}\x94bh\x03\x8c\x04Half'
- b'\x94\x93\x94)R\x94}\x94b\x86\x94R\x94}\x94b.'
- )
- assert pickle.loads(data) == sqrt(2)
|