o
    i                     @   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)iZ
parentsizer
   r   r    r   o/var/www/html/eduruby.in/lip-sync/lip-sync-env/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tZstart1Zstop1Zstep1Zstart2Zstop2Zstep2r
   r   r   r   r   r   slice_of_sliceX   s   


r4   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]
    )r4   r$   r%   r   r#   )r#   r$   r%   rowcolr   r   r   r    f   s   
r    N)Z"sympy.matrices.expressions.matexprr   Zsympy.core.basicr   Zsympy.core.containersr   Z#sympy.functions.elementary.integersr   r   r   r4   r    r   r   r   r   <module>   s    9