U
    ZÊ¹jU
  ã                   @   s`   d dl mZ d dlmZ G dd„ deƒZdd„ Zd dlmZmZ d dl	m
Z
 d	d
„ Zee
d< dS )é    )ÚBasic)Ú
MatrixExprc                   @   sv   e Zd ZdZdZdd„ Zedd„ ƒZedd„ ƒZdd
d„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	Transposea1  
    The transpose of a matrix expression.

    This is a symbolic object that simply stores its argument without
    evaluating it. To actually compute the transpose, use the ``transpose()``
    function, or the ``.T`` attribute of matrices.

    Examples
    ========

    >>> from sympy import MatrixSymbol, Transpose, transpose
    >>> A = MatrixSymbol('A', 3, 5)
    >>> B = MatrixSymbol('B', 5, 3)
    >>> Transpose(A)
    A.T
    >>> A.T == transpose(A) == Transpose(A)
    True
    >>> Transpose(A*B)
    (A*B).T
    >>> transpose(A*B)
    B.T*A.T

    Tc                 K   sb   | j }| dd¡r(t|tƒr(|jf |Ž}t|dd ƒ}|d k	rV|ƒ }|d k	rN|S t|ƒS t|ƒS d S )NÚdeepTÚ_eval_transpose)ÚargÚgetÚ
isinstancer   ÚdoitÚgetattrr   )ÚselfÚhintsr   r   Úresult© r   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/matrices/expressions/transpose.pyr
      s    zTranspose.doitc                 C   s
   | j d S )Nr   )Úargs©r   r   r   r   r   *   s    zTranspose.argc                 C   s   | j jd d d… S )Néÿÿÿÿ)r   Úshaper   r   r   r   r   .   s    zTranspose.shapeFc                 K   s   | j j||fd|i|—ŽS )NÚexpand)r   Ú_entry)r   ÚiÚjr   Úkwargsr   r   r   r   2   s    zTranspose._entryc                 C   s
   | j  ¡ S ©N)r   Ú	conjugater   r   r   r   Ú_eval_adjoint5   s    zTranspose._eval_adjointc                 C   s
   | j  ¡ S r   )r   Zadjointr   r   r   r   Ú_eval_conjugate8   s    zTranspose._eval_conjugatec                 C   s   | j S r   )r   r   r   r   r   r   ;   s    zTranspose._eval_transposec                 C   s   ddl m} || jƒS )Né   )ÚTrace)Útracer   r   )r   r   r   r   r   Ú_eval_trace>   s    zTranspose._eval_tracec                 C   s   ddl m} || jƒS )Nr   )Údet)Z&sympy.matrices.expressions.determinantr"   r   )r   r"   r   r   r   Ú_eval_determinantB   s    zTranspose._eval_determinantc                 C   s   | j  |¡S r   )r   Ú_eval_derivative)r   Úxr   r   r   r$   F   s    zTranspose._eval_derivativec                 C   s   | j d  |¡}dd„ |D ƒS )Nr   c                 S   s   g | ]}|  ¡ ‘qS r   )Ú	transpose)Ú.0r   r   r   r   Ú
<listcomp>L   s     z;Transpose._eval_derivative_matrix_lines.<locals>.<listcomp>)r   Ú_eval_derivative_matrix_lines)r   r%   Úlinesr   r   r   r)   J   s    z'Transpose._eval_derivative_matrix_linesN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zis_Transposer
   Úpropertyr   r   r   r   r   r   r!   r#   r$   r)   r   r   r   r   r      s   


r   c                 C   s   t | ƒjdd�S )zMatrix transposeF)r   )r   r
   )Úexprr   r   r   r&   O   s    r&   )ÚaskÚQ)Úhandlers_dictc                 C   s   t t | ¡|ƒr| jS | S )zÅ
    >>> from sympy import MatrixSymbol, Q, assuming, refine
    >>> X = MatrixSymbol('X', 2, 2)
    >>> X.T
    X.T
    >>> with assuming(Q.symmetric(X)):
    ...     print(refine(X.T))
    X
    )r1   r2   Z	symmetricr   )r0   Zassumptionsr   r   r   Úrefine_TransposeX   s    
r4   N)Zsympy.core.basicr   Z"sympy.matrices.expressions.matexprr   r   r&   Zsympy.assumptions.askr1   r2   Zsympy.assumptions.refiner3   r4   r   r   r   r   Ú<module>   s   J