@@ -543,25 +543,24 @@ def _eval_expand_nest(self, **hints):
543543 Note that this is not always a valid expansion depending on the kwargs
544544 used to construct the derivative.
545545 '''
546- expr = self .args [0 ]
547- if isinstance (expr , self .__class__ ):
548- new_expr = expr .args [0 ]
546+ if isinstance (self .expr , self .__class__ ):
547+ new_expr = self .expr .args [0 ]
549548 new_dims = [
550549 (d , ii )
551550 for d , ii in zip (
552- chain (self .dims , expr .dims ),
553- chain (self .deriv_order , expr .deriv_order )
551+ chain (self .dims , self . expr .dims ),
552+ chain (self .deriv_order , self . expr .deriv_order )
554553 )
555554 ]
556555 # This is necessary as tools.abc.Reconstructable._rebuild will copy
557556 # all kwargs from the self object
558557 # TODO: This dictionary merge needs to be a lot better
559558 # EG: Don't actually expand if derivatives are incompatible
560- new_deriv_order = tuple (chain (self .deriv_order , expr .deriv_order ))
559+ new_deriv_order = tuple (chain (self .deriv_order , self . expr .deriv_order ))
561560 # The `fd_order` may need to be reduced to construct the nested derivative
562561 dcounter = defaultdict (int )
563562 fcounter = defaultdict (int )
564- new_fd_order = tuple (chain (self .fd_order , expr .fd_order ))
563+ new_fd_order = tuple (chain (self .fd_order , self . expr .fd_order ))
565564 for d , do , fo in zip (new_dims , new_deriv_order , new_fd_order ):
566565 if isinstance (d , Iterable ):
567566 dcounter [d [0 ]] += d [1 ]
@@ -572,10 +571,10 @@ def _eval_expand_nest(self, **hints):
572571 for (d , do ), (_ , fo ) in zip (dcounter .items (), fcounter .items ()):
573572 if getattr (d , 'is_Time' , False ):
574573 dim_name = 'time'
575- order = expr .time_order
574+ order = self . expr .time_order
576575 else :
577576 dim_name = 'space'
578- order = expr .space_order
577+ order = self . expr .space_order
579578 if fo > order :
580579 if do > order :
581580 raise ValueError (
@@ -602,9 +601,8 @@ def _eval_expand_mul(self, **hints):
602601 `Derivative(C·f(x)·g(c, y), x)
603602 --> C·g(y)·Derivative(f(x), x)`
604603 '''
605- expr = self .args [0 ]
606- if isinstance (expr , sympy .Mul ):
607- ind , dep = expr .as_independent (* self .dims , as_Mul = True )
604+ if self .expr .is_Mul :
605+ ind , dep = self .expr .as_independent (* self .dims , as_Mul = True )
608606 return ind * self .func (dep , * self .args [1 :])
609607 else :
610608 return self
@@ -614,10 +612,9 @@ def _eval_expand_add(self, **hints):
614612 `Derivative(f(x) + g(x), x)
615613 --> Derivative(f(x), x) + Derivative(g(x), x)`
616614 '''
617- expr = self .args [0 ]
618- if isinstance (expr , sympy .Add ):
619- ind , dep = expr .as_independent (* self .dims , as_Add = True )
620- if isinstance (dep , sympy .Add ):
615+ if self .expr .is_Add :
616+ ind , dep = self .expr .as_independent (* self .dims , as_Add = True )
617+ if dep .is_Add :
621618 return Add (* [self .func (s , * self .args [1 :]) for s in dep .args ])
622619 else :
623620 return self .func (dep , * self .args [1 :])
@@ -633,6 +630,5 @@ def _eval_expand_product_rule(self, **hints):
633630 resultant expression for higher derivatives and mixed derivatives is much
634631 more difficult to implement.
635632 '''
636- # expr = self.args[0]
637- # if isinstance(expr, sympy.Mul):
633+ # if self.expr.is_Mul:
638634 raise NotImplementedError ('Product rule expansion has not been written' )
0 commit comments