o
    oÇh  ã                   @   s\   d dl mZ d dlmZ d dlmZ d dlmZ dd„ ZG dd„ deƒZ	d	d
„ Z
dd„ ZdS )é    )Ú
MatrixExpr)ÚBasic)ÚTuple)Úfloorc                 C   sÜ   t | tƒr| j| j| jf} t | tttfƒs&| dk dkr| |7 } | | d df} t| ƒ} t| ƒdkr5|  	d¡ | \}}}|p=d}|d u rD|}|dk dkrN||7 }|dk dkrX||7 }|p[d}|| | dk dkrit
ƒ ‚|||fS )Nr   Té   é   )Ú
isinstanceÚsliceÚstartÚstopÚstepÚtupleÚlistr   ÚlenÚappendÚ
IndexError)ÚiÚ
parentsizer
   r   r   © r   út/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/matrices/expressions/slice.pyÚ	normalize   s*   



r   c                   @   s\   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zedd	„ ƒZ	d
d„ Z
edd„ ƒZdS )ÚMatrixSlicea‡   A MatrixSlice of a Matrix Expression

    Examples
    ========

    >>> from sympy import MatrixSlice, ImmutableMatrix
    >>> M = ImmutableMatrix(4, 4, range(16))
    >>> M
    Matrix([
    [ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11],
    [12, 13, 14, 15]])

    >>> B = MatrixSlice(M, (0, 2), (2, 4))
    >>> ImmutableMatrix(B)
    Matrix([
    [2, 3],
    [6, 7]])
    c                 C   ó
   | j d S )Nr   ©Úargs©Úselfr   r   r   Ú<lambda>4   ó   
 zMatrixSlice.<lambda>c                 C   r   )Nr   r   r   r   r   r   r   5   r   c                 C   r   )Nr   r   r   r   r   r   r   6   r   c                 C   sÈ   t ||jd ƒ}t ||jd ƒ}t|ƒt|ƒ  kr dks$tƒ ‚ tƒ ‚d|d kdksJ|jd |d k dksJd|d kdksJ|jd |d k dkrMtƒ ‚t|tƒrXt|||ƒS t | |t	|Ž t	|Ž ¡S )Nr   r   é   T)
r   Úshaper   r   r   r   Úmat_slice_of_slicer   Ú__new__r   )ÚclsÚparentÚrowsliceÚcolslicer   r   r   r"   8   s   ÿ
zMatrixSlice.__new__c                 C   sx   | j d | j d  }| j d dkr|nt|| j d  ƒ}| jd | jd  }| jd dkr/|nt|| jd  ƒ}||fS )Nr   r   r   )r%   r   r&   )r   ÚrowsÚcolsr   r   r   r    F   s
   $$zMatrixSlice.shapec                 K   s>   | j j|| jd  | jd  || jd  | jd  fi |¤ŽS )Nr   r   )r$   Ú_entryr%   r&   )r   r   ÚjÚkwargsr   r   r   r)   N   s
   ÿþzMatrixSlice._entryc                 C   s   | j | jkS ©N)r%   r&   r   r   r   r   Úon_diagS   s   zMatrixSlice.on_diagN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr$   r%   r&   r"   r    r)   r-   r   r   r   r   r      s    
r   c                 C   sL   | \}}}|\}}}|||  }|| }	|||  }
|
|kr!t ƒ ‚||
|	fS r,   )r   )ÚsÚtÚstart1Ústop1Ústep1Ústart2Ústop2Ústep2r
   r   r   r   r   r   Úslice_of_sliceX   s   


r;   c                 C   s&   t | j|ƒ}t | j|ƒ}t| j||ƒS )zË Collapse nested matrix slices

    >>> from sympy import MatrixSymbol
    >>> X = MatrixSymbol('X', 10, 10)
    >>> X[:, 1:5][5:8, :]
    X[5:8, 1:5]
    >>> X[1:9:2, 2:6][1:3, 2]
    X[3:7:2, 4:5]
    )r;   r%   r&   r   r$   )r$   r%   r&   ÚrowÚcolr   r   r   r!   f   s   
r!   N)Ú"sympy.matrices.expressions.matexprr   Úsympy.core.basicr   Úsympy.core.containersr   Ú#sympy.functions.elementary.integersr   r   r   r;   r!   r   r   r   r   Ú<module>   s    9