@@ -386,14 +386,21 @@ def _filter_assumptions(cls, **kwargs):
386386
387387 return assumptions , kwargs
388388
389+ @staticmethod
390+ def __xnew__ (cls , name , ** assumptions ):
391+ # Create the new Symbol
392+ # Note: use __xnew__ to bypass sympy caching
393+ newobj = sympy .Symbol .__xnew__ (cls , name , ** assumptions )
394+ # Prevent the caching of the assumptions that we handle through _eval_is_xxx
395+ newobj ._assumptions = {k : v for k , v in newobj ._assumptions .items ()
396+ if k not in ('real' , 'imaginary' , 'complex' )}
397+ return newobj
398+
389399 def __new__ (cls , * args , ** kwargs ):
390400 name = kwargs .get ('name' ) or args [0 ]
391401 assumptions , kwargs = cls ._filter_assumptions (** kwargs )
392402
393- # Create the new Symbol
394- # Note: use __xnew__ to bypass sympy caching
395- newobj = sympy .Symbol .__xnew__ (cls , name , ** assumptions )
396- newobj ._assumptions = cls .default_assumptions
403+ newobj = cls .__xnew__ (cls , name , ** assumptions )
397404
398405 # Initialization
399406 newobj ._dtype = cls .__dtype_setup__ (** kwargs )
@@ -557,10 +564,7 @@ def __new__(cls, *args, **kwargs):
557564 # Not in cache. Create a new Symbol via sympy.Symbol
558565 args = list (args )
559566 name = kwargs .pop ('name' , None ) or args .pop (0 )
560-
561- # Note: use __xnew__ to bypass sympy caching
562- newobj = sympy .Symbol .__xnew__ (cls , name , ** assumptions )
563- newobj ._assumptions = cls .default_assumptions
567+ newobj = cls .__xnew__ (cls , name , ** assumptions )
564568
565569 # Initialization
566570 newobj ._dtype = cls .__dtype_setup__ (** kwargs )
0 commit comments