U
    L?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sL| dk dkr>| |7 } | | d df} t| } t| dkrj| 	d | \}}}|pzd}|d kr|}|dk dkr||7 }|dk dkr||7 }|pd}|| | dk dkrt
 |||fS )Nr   T      )
isinstanceslicestartstopsteptuplelistr   lenappend
IndexError)iZ
parentsizer
   r   r    r   R/var/www/html/venv/lib/python3.8/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   s
   | j d S )Nr   argsselfr   r   r   <lambda>4       zMatrixSlice.<lambda>c                 C   s
   | j d S )Nr   r   r   r   r   r   r   5   r   c                 C   s
   | j d S )Nr   r   r   r   r   r   r   6   r   c                 C   s   t ||jd }t ||jd }t|t|  kr<dksDn t d|d kdks|jd |d k dksd|d kdks|jd |d k dkrt t|trt|||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|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rBt  ||
|	fS r*   )r   )stZstart1Zstop1Zstep1Zstart2Zstop2Zstep2r
   r   r   r   r   r   slice_of_sliceX   s    

r3   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]
    )r3   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   r3   r   r   r   r   r   <module>   s   9