Hi Sreeraj

Stefan is correct that you should not expect operations from sympy.physics
to interoperate smoothly with operations from sympy.matrices.expressions.
 They have different designs.

sympy.matrix.expressions doesn't have a kronecker product operation but it
could if you're willing to build it.  We'd love the contribution and I'd be
happy to support you if you're willing to do some development work.
You could also build whatever matrix functionality you need into the
sympy.physics family of operations; I'm less able to help here but it's an
equally valid approach and presumably other members of the sympy community
could help out.

If you wanted to get started with a KroneckerProduct operator in
sympy.matrices.expressions I would take a look at our Development
Workflow<https://github.com/sympy/sympy/wiki/Development-workflow>
wiki
page.  I would then take a look at the following files to serve as examples

sympy/matrices/expressions/transpose.py
sympy/matrices/expressions/hadamard.py
sympy/matrices/expressions/fourier.py

Each of them are decent examples of how to add simple operations to matrix
expressions.  Hadamard is probably the closest/simplest to what you're
looking for.  The minimum you need to do is to implement the shape
property.  You might also want to implement _entry for indexing into the
kronecker product or any of the methods like _eval_transpose for any of the
simplifications you want to be done.  For example your example above
of KP(X,Y).T = KP(X.T, Y.T)  can be implemented as follows

def _eval_transpose(self):
    return KroneckerProduct(*[arg.T for arg in self.args])

_eval_transpose will be called automatically whenever anyone uses the .T
property of a matrix expression.

In recent memory this is the second time this operation has come up.
 Sounds like it would be a meaningful contribution.

Best,
-Matthew


On Wed, Jul 24, 2013 at 7:42 AM, Stefan Krastanov <
[email protected]> wrote:

> I guess you will have to implement the Kroenecker product yourself.
> Matthew Rocklin might have more details (he did most of the matrix symbols
> stuff).
>
>
> On 24 July 2013 13:44, Sreeraj Rajendran <[email protected]> wrote:
>
>> Let me explain my needs. MatrixSymbol supports basic matrix operations
>> like
>>
>> With
>>  X = MatrixSymbol('X', 3, 3)
>>  Y = MatrixSymbol('Y', 3, 3)
>>
>>  (X*Y).T will give me
>>
>>  T  T
>> Y ⋅X
>>
>> I just wanted to try similar properties of "kronecker product" i.e
>> KP(X,Y).T = KP(X.T, Y.T). What is the best way to implement these?
>> What if I want to try some basic decompositions, say KP(X,Y) = KP(X,I_m)
>> KP(X,I_n)?
>>
>> I am just a beginner in to sympy. Should I implement some new methods to
>> work on kronecker product (http://en.wikipedia.org/wiki/Kronecker_product)
>> on matrix symbols?
>>
>> Thank you for your previous comments.
>>
>>
>>
>> On Wednesday, July 24, 2013 2:05:53 PM UTC+5:30, Stefan Krastanov wrote:
>>
>>> Well, these two modules do not have anything in common, they are not
>>> meant to be inter-operable.
>>>
>>> The matrixexpr do not have a notion of basis, vector space or linear
>>> operator. `MatrixSymbol` is meant to represent a matrix, not an operator
>>> (though if you wish, you can make the mental assumption that you are
>>> working in certain basis and just consider all matrices to be operators).
>>>
>>> The quantum module has all this (different bases, Hilbert spaces,
>>> operators, etc). If that is what you need just use it.
>>>
>>> There is also the `diffgeom` module for differential geometry which you
>>> might find useful depending on what exactly you want to do.
>>>
>>>
>>> On 24 July 2013 10:22, Sreeraj Rajendran <[email protected]> wrote:
>>>
>>>> Stefan,
>>>>
>>>> My imports
>>>> from sympy.physics.quantum import TensorProduct
>>>> from sympy import MatrixSymbol
>>>>
>>>>
>>>> On Wednesday, July 24, 2013 1:35:38 PM UTC+5:30, Stefan Krastanov wrote:
>>>>
>>>>> From what submodules of sympy are you importing these classes?
>>>>>
>>>>>
>>>>> On 24 July 2013 09:38, Sreeraj Rajendran <[email protected]> wrote:
>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> With
>>>>>>  X = MatrixSymbol('X', 3, 3)
>>>>>>  Y = MatrixSymbol('Y', 3, 3)
>>>>>>
>>>>>>  TensorProduct(X,Y) throws me the following error
>>>>>>  AttributeError: 'MatrixSymbol' object has no attribute 'args_cnc'
>>>>>>
>>>>>> TensorProduct(Matrix(X),**Matrix**(Y)) works fine.
>>>>>> Is tensorproduct over matrixsymbols is currently under development or
>>>>>> am I doing something terribly wrong?
>>>>>>
>>>>>> --
>>>>>> Regards
>>>>>> Sreeraj Rajendran
>>>>>> http://home.iitb.ac.in/~**rsreer**aj<http://home.iitb.ac.in/%7Ersreeraj>
>>>>>>
>>>>>>
>>>>>>  --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "sympy" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to sympy+un...@**googlegroups.com.
>>>>>> To post to this group, send email to [email protected].
>>>>>>
>>>>>> Visit this group at 
>>>>>> http://groups.google.com/**group**/sympy<http://groups.google.com/group/sympy>
>>>>>> .
>>>>>> For more options, visit 
>>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>>> .
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "sympy" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to sympy+un...@**googlegroups.com.
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at 
>>>> http://groups.google.com/**group/sympy<http://groups.google.com/group/sympy>
>>>> .
>>>> For more options, visit 
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>
>>>>
>>>>
>>>
>>>  --
>> You received this message because you are subscribed to the Google Groups
>> "sympy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/sympy.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sympy.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to