
    sg                     \    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y
)    )
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| j                  d       | \  }}}|xs d}||}|dk  dk(  r||z  }|dk  dk(  r||z  }|xs 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        S/var/www/html/venv/lib/python3.12/site-packages/sympy/matrices/expressions/slice.py	normalizer      s    !UWWaffaff%a%u-.Ed?OA!QKQA
1v{	E4JQE|	dqT
91D	!d*l4    c                   r    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y	)
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    499Q< r   c                      | j                   d   S )Nr   r   r   s    r   r    zMatrixSlice.<lambda>5       TYYq\ 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t                t               d|d   kD  dk(  s;|j                  d   |d   k  dk(  s#d|d   kD  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Xv||A7HX3!3, 4,!_%\\!_x{*t3!_%\\!_x{*t3,fk*%fhAA}}S&%*:E8<LMMr   c                 B   | 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,t%T]]1=M8M2N}}Q$--"22}}Q'1,t%T]]1=M8M2N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{{!!!DMM!$4"4t}}Q7G"G"#DMM!$4"4t}}Q7G"G,$*, 	,r   c                 4    | 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]    ( /0F12H12HN  ,
 . .r   r   c                 l    | \  }}}|\  }}}|||z  z   }||z  }	|||z  z   }
|
|kD  r
t               ||
|	fS r5   )r   )ststart1stop1step1start2stop2step2r   r   r   s              r   slice_of_slicerF   X   s[    FE5FE5VE\!E5=DE%KDe|l$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   s7     (
3C
(
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 " ' 526.* 6.r0r   