@@ -546,9 +546,26 @@ def _gather_for_diff(self):
546546 def _eval_is_even (self ):
547547 return None
548548
549- _eval_is_odd = _eval_is_integer = _eval_is_negative = _eval_is_even
550- _eval_is_extended_negative = _eval_is_positive = _eval_is_even
551- _eval_is_extended_positive = _eval_is_zero = _eval_is_even
549+ def _eval_is_odd (self ):
550+ return None
551+
552+ def _eval_is_integer (self ):
553+ return None
554+
555+ def _eval_is_negative (self ):
556+ return None
557+
558+ def _eval_is_extended_negative (self ):
559+ return None
560+
561+ def _eval_is_positive (self ):
562+ return None
563+
564+ def _eval_is_extended_positive (self ):
565+ return None
566+
567+ def _eval_is_zero (self ):
568+ return None
552569
553570
554571class DifferentiableFunction (DifferentiableOp ):
@@ -827,9 +844,11 @@ def __new__(cls, expr, dimensions, **kwargs):
827844 if not dimensions :
828845 return expr
829846 for d in dimensions :
830- with suppress ( AttributeError ) :
847+ try :
831848 if d .is_Dimension and is_integer (d .symbolic_size ):
832849 continue
850+ except AttributeError :
851+ pass
833852 raise ValueError ("Expected Dimension with numeric size, "
834853 f"got `{ d } ` instead" )
835854
@@ -886,8 +905,11 @@ def _evaluate(self, **kwargs):
886905 return self ._rebuild (expr )
887906
888907 values = product (* [list (d .range ) for d in self .dimensions ])
889- return sum ([expr .xreplace (dict (zip (self .dimensions , i , strict = True )))
890- for i in values ])
908+ terms = []
909+ for i in values :
910+ mapper = dict (zip (self .dimensions , i , strict = True ))
911+ terms .append (expr .xreplace (mapper ))
912+ return sum (terms )
891913
892914 @property
893915 def bound_symbols (self ):
0 commit comments