Hi sympy folk, I've been writing a new class, DifferentialOperator, in sympy.physics.quantum. It takes a symbol (or string to sympify) as an argument, and it is non-commutative (this is all you really need to know for this discussion).
At some point when doing representations of momentum operators in a position basis, we produce an expression like DiracDelta(x-x_1)*DiracDelta(x_1-x_2)*DifferentialOperator(x_1), where x, x_1, and x_2 are all symbols. When I try to integrate this over x_1, I get the output: >>> integrate(DiracDelta(x-x_1)*DiracDelta(x_1-x_2)*DifferentialOperator(x_1), (x_1, -oo, oo)) DiracDelta(x - x_2) * DifferentialOperator(oo) when we expect instead DiracDelta(x - x_2) * DifferentialOperator(x). After some hunting in the code, I think I've isolated this to the behavior of as_independent, which is called in the process of integration. If you run >>> f = DiracDelta(x-x_1)*DiracDelta(x_1-x_2)*DifferentialOperator(x_1) >>> f.as_independent(x_1) (DifferentialOperator(x_1), DiracDelta(x - x_1)â‹…DiracDelta(x_1 - x_2)) So, even though DifferentialOperator(x_1) depends on x_1 (x_1 appears in its free_symbols, and has(x_1) returns True) it still gets separated out as independent and is thus treated as a coefficient in the integral. Does someone who is more familiar with this code know what's going on? Is this desired behavior because the DifferentialOperator is non-commutative, or is there a bug in as_independent? Thanks for your help! Tomo -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
