This looks like a bug. Can you open an issue for it? I think it should
be using isinstance(MatrixBase) instead of isinstance(Matrix).

Aaron Meurer

On Tue, Apr 28, 2020 at 12:16 PM Edward Dahl <[email protected]> wrote:
>
> I'd like to form some tensor products of sparse matrices, but this does not 
> seem to work:
>
> from sympy import diag
> from sympy.physics.quantum import TensorProduct
> from sympy.matrices import SparseMatrix
>
> spm = SparseMatrix(diag(1,0))
>
> tp = TensorProduct(spm,spm)
>
>
> Here's the failure:
>
> Traceback (most recent call last):
>   File 
> "/Users/ddahl/anaconda3/envs/qiskit/lib/python3.8/site-packages/IPython/core/interactiveshell.py",
>  line 3331, in run_code
>     exec(code_obj, self.user_global_ns, self.user_ns)
>   File "<ipython-input-9-88417d1a4157>", line 1, in <module>
>     tp = TensorProduct(spm,spm)
>   File 
> "/Users/ddahl/anaconda3/envs/qiskit/lib/python3.8/site-packages/sympy/physics/quantum/tensorproduct.py",
>  line 123, in __new__
>     c_part, new_args = cls.flatten(sympify(args))
>   File 
> "/Users/ddahl/anaconda3/envs/qiskit/lib/python3.8/site-packages/sympy/physics/quantum/tensorproduct.py",
>  line 139, in flatten
>     cp, ncp = arg.args_cnc()
>   File 
> "/Users/ddahl/anaconda3/envs/qiskit/lib/python3.8/site-packages/sympy/matrices/matrices.py",
>  line 2339, in __getattr__
>     raise AttributeError(
> AttributeError: ImmutableSparseMatrix has no attribute args_cnc.
>
>
> When I look in sympy/physics/quantum/tensorproduct.py it looks to me like 
> there is an attempted test to determine
> whether the first argument to the TensorProduct(...) function is a sparse 
> SciPy matrix:
>
> def __new__(cls, *args):
>     if isinstance(args[0], (Matrix, numpy_ndarray, scipy_sparse_matrix)):
>         return matrix_tensor_product(*args)
>     c_part, new_args = cls.flatten(sympify(args))
>     c_part = Mul(*c_part)
>     if len(new_args) == 0:
>         return c_part
>     elif len(new_args) == 1:
>         return c_part * new_args[0]
>     else:
>         tp = Expr.__new__(cls, *new_args)
>         return c_part * tp
>
>
> But according to my debugger, the isinstance(...) call in the above code 
> block returns false.
> Looks to me like that sparse matrix should be of type scipy_sparse_matrix.
>
> My environment is a freshly built Anaconda from two weeks ago and I'm running 
> on macOS.
>
> What am I missing?
>
> Thanks,
> -Denny
>
>
> --
> 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/478ff24e-d488-442d-927a-1865b2565850%40googlegroups.com.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6J940a3%3DepnDqWxo6egKh-Z9kNw9kd66OTtjJ3g3r6opg%40mail.gmail.com.

Reply via email to