
    Ed                     d    d dl mZ d dlmZ d dlmZ d dlmZ d Z G d de          Z	d Z
d	 Zd
S )    )
MatrixExpr)Basic)Tuple)floorc                    t          | t                    r| j        | j        | j        f} t          | t
          t          t          f          s| dk     dk    r| |z  } | | dz   df} t          |           } t          |           dk    r| 	                    d           | \  }}}|pd}||}|dk     dk    r||z  }|dk     dk    r||z  }|pd}||z
  |z  dk     dk    rt                      |||fS )Nr   T      )
isinstanceslicestartstopsteptuplelistr   lenappend
IndexError)i
parentsizer   r   r   s        @lib/python3.11/site-packages/sympy/matrices/expressions/slice.py	normalizer      s&   !U &Wafaf%a%u-.. Ed? 	OA!QKQA
1vv{ 	E4JQE 	d qT 
91D	!d* ll4    c                       e Zd ZdZ ed           Z ed           Z ed           Zd Zed             Z	d Z
e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                     | j         d         S )Nr   argsselfs    r   <lambda>zMatrixSlice.<lambda>4   s    49Q< r   c                     | j         d         S )Nr   r   r   s    r   r    zMatrixSlice.<lambda>5       TYq\ r   c                     | j         d         S )Nr	   r   r   s    r   r    zMatrixSlice.<lambda>6   r"   r   c                 :   t          ||j        d                   }t          ||j        d                   }t          |          t          |          cxk    rdk    sn t                      d|d         k    dk    sF|j        d         |d         k     dk    s+d|d         k    dk    s|j        d         |d         k     dk    rt                      t	          |t
                    rt          |||          S t          j        | |t          | t          |           S )Nr   r      T)
r   shaper   r   r
   r   mat_slice_of_slicer   __new__r   )clsparentrowslicecolslices       r   r(   zMatrixSlice.__new__8   s&   Xv|A77Xv|A77HX 	 	 	 	! 	 	 	 	,,!_% 	\!_x{*t3	!_%	 \!_x{*t3	 ,,fk** 	B%fhAAA}S&%*:E8<LMMMr   c                 6   | j         d         | j         d         z
  }| j         d         dk    r|nt          || j         d         z            }| j        d         | j        d         z
  }| j        d         dk    r|nt          || j        d         z            }||fS )Nr   r   r	   )r+   r   r,   )r   rowscolss      r   r&   zMatrixSlice.shapeF   s    }Q$-"22}Q'1,Ntt%T]1=M8M2N2N}Q$-"22}Q'1,Ntt%T]1=M8M2N2NTzr   c                      | j         j        || j        d         z  | j        d         z   || j        d         z  | j        d         z   fi |S )Nr	   r   )r*   _entryr+   r,   )r   r   jkwargss       r   r1   zMatrixSlice._entryN   s]    !t{!!DM!$4"4t}Q7G"G"#DM!$4"4t}Q7G"G, ,$*, , 	,r   c                 "    | j         | j        k    S N)r+   r,   r   s    r   on_diagzMatrixSlice.on_diagS   s    }--r   N)__name__
__module____qualname____doc__propertyr*   r+   r,   r(   r&   r1   r6    r   r   r   r      s         ( X//00Fx1122Hx1122HN N N   X, , ,
 . . X. . .r   r   c                 v    | \  }}}|\  }}}|||z  z   }||z  }	|||z  z   }
|
|k    rt                      ||
|	fS r5   )r   )ststart1stop1step1start2stop2step2r   r   r   s              r   slice_of_slicerF   X   sb    FE5FE5VE\!E5=DE%KDe| ll$r   c                     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]
    )rF   r+   r,   r   r*   )r*   r+   r,   rowcols        r   r'   r'   f   s:     (
3
3C
(
3
3Cv}c3///r   N)"sympy.matrices.expressions.matexprr   sympy.core.basicr   sympy.core.containersr   #sympy.functions.elementary.integersr   r   r   rF   r'   r<   r   r   <module>rN      s    9 9 9 9 9 9 " " " " " " ' ' ' ' ' ' 5 5 5 5 5 5  26. 6. 6. 6. 6.* 6. 6. 6.r  0 0 0 0 0r   