+
    h!                         ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHtHtHt ^ R	IHt  ! R
 R]4      t ! R R]]4      t ! R R]]4      tR# )    N)List)Basic)Tuple)S)_sympify)MutableNDimArray)	NDimArrayImmutableNDimArray	ArrayKind)flattenc                   p   a  ] tR t^t o R t]V 3R lR l4       tR t]R 4       t	R t
R tV 3R ltR	tV tR
# )DenseNDimArrayc                    \        V/ VB # NImmutableDenseNDimArray)selfargskwargss   &*,E/usr/lib/python3/dist-packages/sympy/tensor/array/dense_ndim_array.py__new__DenseNDimArray.__new__   s    &777    c                    < V ^8  d   QhRS[ /# )   return)r   )format__classdict__s   "r   __annotate__DenseNDimArray.__annotate__   s     - -i -r   c                B    \         P                  ! V P                  4      # r   )r   _union_arrayr   s   &r   kindDenseNDimArray.kind   s    ,,r   c                   V P                  V4      pVe   V# V P                  V4      p\        V\        4      '       d   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   V P                  V4      w  r4V Uu. uF$  qPP                  V P                  V4      ,          NK&  	  pp\        V4       UUu. uF.  w  rW\        W,          \        4      '       g   K#  \        V4      NK0  	  ppp\        V 4      ! Wh4      # V P                  V4      pV P                  V,          # u upi u uppi )a  
Allows to get items from N-dim array.

Examples
========

>>> from sympy import MutableDenseNDimArray
>>> a = MutableDenseNDimArray([0, 1, 2, 3], (2, 2))
>>> a
[[0, 1], [2, 3]]
>>> a[0, 0]
0
>>> a[1, 1]
3
>>> a[0]
[0, 1]
>>> a[1]
[2, 3]


Symbolic index:

>>> from sympy.abc import i, j
>>> a[i, j]
[[0, 1], [2, 3]][i, j]

Replace `i` and `j` to get element `(1, 1)`:

>>> a[i, j].subs({i: 1, j: 1})
3

c              3   B   "   T F  p\        V\        4      x  K  	  R # 5ir   
isinstanceslice.0is   & r   	<genexpr>-DenseNDimArray.__getitem__.<locals>.<genexpr>?        +P%QJq%,@,@%   TF)_check_symbolic_index_check_index_for_getitemr*   tupleany _get_slice_data_for_array_accessr#   _parse_index	enumerater+   lentype)	r   indexsyindex
sl_factorseindicesr.   arrayelnshapes	   &&       r   __getitem__DenseNDimArray.__getitem__   s    B ,,U3N--e4eU##+P%+P+P%+P(P(P#'#H#H#O J@HI1[[!2!21!566EI+4Z+@`+@%!JuxY^D_gc"g+@F`:e,,%%e,E;;u%% J`s   *D6
 D;/D;c                    \         P                  ! R  V\        P                  4      pV P	                  ^ .V,          3V4      # )c                     W,          # r    xys   &&r   <lambda>&DenseNDimArray.zeros.<locals>.<lambda>J   s    ACr   )	functoolsreducer   One_new)clsshapelist_lengths   &* r   zerosDenseNDimArray.zerosH   s5    &&'7Fxx![*E22r   c                    ^ RI Hp V P                  4       ^8w  d   \        R4      hV! V P                  ^ ,          V P                  ^,          V P
                  4      # )a$  
Converts MutableDenseNDimArray to Matrix. Can convert only 2-dim array, else will raise error.

Examples
========

>>> from sympy import MutableDenseNDimArray
>>> a = MutableDenseNDimArray([1 for i in range(9)], (3, 3))
>>> b = a.tomatrix()
>>> b
Matrix([
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])

)MatrixzDimensions must be of size of 2)sympy.matricesrW   rank
ValueErrorrR   r#   )r   rW   s   & r   tomatrixDenseNDimArray.tomatrixM   sD    " 	*99;!>??djjmTZZ]DKK@@r   c                    \         P                  ! R V4      pW P                  8w  d)   \        RV P                  \	        V4      V3,          4      h\        V 4      ! V P                  V4      # )a  
Returns MutableDenseNDimArray instance with new shape. Elements number
must be        suitable to new shape. The only argument of method sets
new shape.

Examples
========

>>> from sympy import MutableDenseNDimArray
>>> a = MutableDenseNDimArray([1, 2, 3, 4, 5, 6], (2, 3))
>>> a.shape
(2, 3)
>>> a
[[1, 2, 3], [4, 5, 6]]
>>> b = a.reshape(3, 2)
>>> b.shape
(3, 2)
>>> b
[[1, 2], [3, 4], [5, 6]]

c                     W,          # r   rG   rH   s   &&r   rK   (DenseNDimArray.reshape.<locals>.<lambda>{   s    acr   z2Expecting reshape size to %d but got prod(%s) = %d)rM   rN   
_loop_sizerZ   strr;   r#   )r   newshapenew_total_sizes   &* r   reshapeDenseNDimArray.reshapee   se    , #))/8D__,QXU@ @ A A Dz$++x00r   c                6   < V ^8  d   Qh/ S[ S[,          ;R&   # )r   r#   )r   r   )r   r   s   "r   r   r       s     K r   rG   N)__name__
__module____qualname____firstlineno__r   propertyr%   rC   classmethodrT   r[   rd   __annotate_func____static_attributes____classdictcell__r   s   @r   r   r      sK     8 - -.&` 3 3A01q  r   r   c                   L   a  ] tR t^t o RR lt]R 4       tR tR tR t	Rt
V tR# )	r   Nc                (    V P                   ! W3/ VB # r   rP   rQ   iterablerR   r   s   &&&,r   r   ImmutableDenseNDimArray.__new__       xx2622r   c                `   V P                   ! W3/ VB w  r$\        \        \        V4      !  pV P	                  WB4       \        V4      p\        V!  p\        P                  ! WV3/ VB pW%n        \        V4      Vn
        \        V4      Vn        \        P                  ! R  V^4      Vn        V# )c                     W,          # r   rG   rH   s   &&r   rK   .ImmutableDenseNDimArray._new.<locals>.<lambda>       qsr   )_handle_ndarray_creation_inputsr   mapr   _check_special_boundsr   r   r   _shapelistr#   r:   _rankrM   rN   r`   rQ   ru   rR   r   	flat_listr   s   &&&,  r   rP   ImmutableDenseNDimArray._new   s    >>xYRXYs8U+,!!)3I&	9%	}}SU=f=9oZ
#**?E1Er   c                    \        R 4      h)zimmutable N-dim array)	TypeError)r   r<   values   &&&r   __setitem__#ImmutableDenseNDimArray.__setitem__   s    /00r   c                    \        V 4      # r   )MutableDenseNDimArrayr$   s   &r   
as_mutable"ImmutableDenseNDimArray.as_mutable   s    $T**r   c                0    ^ RI Hp V P                  V4      # )r   )simplify)sympy.simplify.simplifyr   	applyfunc)r   r   r   s   &, r   _eval_simplify&ImmutableDenseNDimArray._eval_simplify   s    4~~h''r   r#   r`   r   r   r   )rg   rh   ri   rj   r   rl   rP   r   r   r   rn   ro   rp   s   @r   r   r      s2     3  1+( (r   r   c                   V   a  ] tR t^t o RR lt]R 4       tR tR t]	R 4       t
RtV tR# )	r   Nc                (    V P                   ! W3/ VB # r   rs   rt   s   &&&,r   r   MutableDenseNDimArray.__new__   rw   r   c                *   V P                   ! W3/ VB w  r$\        V4      p\        P                  V 4      pW%n        \        V4      Vn        \        V4      Vn        V'       d    \        P                  ! R  V4      Vn        V# \        V4      Vn        V# )c                     W,          # r   rG   rH   s   &&r   rK   ,MutableDenseNDimArray._new.<locals>.<lambda>   r{   r   )r|   r   objectr   r   r   r#   r:   r   rM   rN   r`   r   s   &&&,  r   rP   MutableDenseNDimArray._new   s    >>xYRXYI&	~~c"9oZ
FK)**?EB RUU^Q_r   c                   \        V\        4      '       d   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       dn   V P                  W4      w  r#pV FQ  p\	        WT4       UUu. uF  w  rgVf   K  Wg,
          NK  	  pppW(,          V P
                  V P                  V4      &   KS  	  R# V P                  V4      pV P                  V4       \        V4      pW P
                  V&   R# u uppi )zAllows to set items to MutableDenseNDimArray.

Examples
========

>>> from sympy import MutableDenseNDimArray
>>> a = MutableDenseNDimArray.zeros(2,  2)
>>> a[0,0] = 1
>>> a[1,1] = 1
>>> a
[[1, 0], [0, 1]]

c              3   B   "   T F  p\        V\        4      x  K  	  R # 5ir   r)   r,   s   & r   r/   4MutableDenseNDimArray.__setitem__.<locals>.<genexpr>   r1   r2   TFN)	r*   r5   r6   $_get_slice_data_for_array_assignmentzipr#   r8   _setter_iterable_checkr   )	r   r<   r   r?   slice_offsetsr.   indjother_is	   &&&      r   r   !MutableDenseNDimArray.__setitem__   s     eU##+P%+P+P%+P(P(P-1-V-VW\-d*E]14Q1FX1Fvs!73771FX49ND--a01  %%e,E''.UOE!&KK Ys   8C;C;c                    \        V 4      # r   r   r$   s   &r   as_immutable"MutableDenseNDimArray.as_immutable   s    &t,,r   c                l    V P                    UUu0 uF  qP                   F  q"kK  	  K  	  upp# u uppi r   )r#   free_symbols)r   r   r.   s   &  r   r   "MutableDenseNDimArray.free_symbols   s(    ;;?;a1;???s   0r   )NN)rg   rh   ri   rj   r   rl   rP   r   r   rk   r   rn   ro   rp   s   @r   r   r      s>     3  '2- @ @r   r   )rM   typingr   sympy.core.basicr   sympy.core.containersr   sympy.core.singletonr   sympy.core.sympifyr   %sympy.tensor.array.mutable_ndim_arrayr   sympy.tensor.array.ndim_arrayr	   r
   r   sympy.utilities.iterablesr   r   r   r   rG   r   r   <module>r      sR      " ' " ' B R R -t1Y t1n(n.@ (8.@N,< .@r   