
    sh!                         S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJr  S S	KJr   " S
 S\5      r " S S\\5      r " S S\\5      rg)    N)List)Basic)Tuple)S)_sympify)MutableNDimArray)	NDimArrayImmutableNDimArray	ArrayKind)flattenc                   f    \ rS rSr% \\   \S'   S r\S\	4S j5       r
S r\S 5       rS rS	 rS
rg)DenseNDimArray   _arrayc                     [        U0 UD6$ NImmutableDenseNDimArray)selfargskwargss      w/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/sympy/tensor/array/dense_ndim_array.py__new__DenseNDimArray.__new__   s    &777    returnc                 B    [         R                  " U R                  5      $ r   )r   _unionr   r   s    r   kindDenseNDimArray.kind   s    ,,r   c                 "   U R                  U5      nUb  U$ U R                  U5      n[        U[        5      (       a  [	        S U 5       5      (       a  U R                  U5      u  p4U Vs/ s H   oPR                  U R                  U5         PM"     nn[        U5       VVs/ s H)  u  pW[        X   [        5      (       d  M  [        U5      PM+     nnn[        U 5      " Xh5      $ U R                  U5      nU R                  U   $ s  snf s  snnf )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   #    U  H  n[        U[        5      v   M     g 7fr   
isinstanceslice.0is     r   	<genexpr>-DenseNDimArray.__getitem__.<locals>.<genexpr>?        +P%QJq%,@,@%   )_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#'#H#H#O J@HI1[[!2!21!56EI+4Z+@`+@%!JuxY^D_gc"g+@F`:e,,%%e,E;;u%% J`s   +'D"DDc                 ~    [         R                  " S U[        R                  5      nU R	                  S/U-  4U5      $ )Nc                 
    X-  $ r    xys     r   <lambda>&DenseNDimArray.zeros.<locals>.<lambda>J   s    ACr   r   )	functoolsreducer   One_new)clsshapelist_lengths      r   zerosDenseNDimArray.zerosH   s5    &&'7Fxx![*E22r   c                     SSK Jn  U R                  5       S:w  a  [        S5      eU" U R                  S   U R                  S   U R
                  5      $ )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]])

r   )Matrix   zDimensions must be of size of 2   )sympy.matricesrR   rank
ValueErrorrM   r   )r   rR   s     r   tomatrixDenseNDimArray.tomatrixM   sD    " 	*99;!>??djjmTZZ]DKK@@r   c                     [         R                  " S U5      nX R                  :w  a$  [        SU R                  [	        U5      U4-  5      e[        U 5      " U R                  U5      $ )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                 
    X-  $ r   rB   rC   s     r   rF   (DenseNDimArray.reshape.<locals>.<lambda>{   s    acr   z2Expecting reshape size to %d but got prod(%s) = %d)rH   rI   
_loop_sizerW   strr6   r   )r   newshapenew_total_sizes      r   reshapeDenseNDimArray.reshapee   se    , #))/8D__,QXU@ @ A A Dz$++x00r   rB   N)__name__
__module____qualname____firstlineno__r   r   __annotations__r   propertyr   r    r>   classmethodrO   rX   ra   __static_attributes__rB   r   r   r   r      sQ    K8 -i - -.&` 3 3A01r   r   c                   @    \ rS rSrS	S jr\S 5       rS rS rS r	Sr
g)
r      Nc                 (    U R                   " X40 UD6$ r   rK   rL   iterablerM   r   s       r   r   ImmutableDenseNDimArray.__new__       xx2622r   c                 \   U R                   " X40 UD6u  p$[        [        [        U5      6 nU R	                  XB5        [        U5      n[        U6 n[        R                  " XU40 UD6nX%l        [        U5      Ul
        [        U5      Ul        [        R                  " S US5      Ul        U$ )Nc                 
    X-  $ r   rB   rC   s     r   rF   .ImmutableDenseNDimArray._new.<locals>.<lambda>       qsr   rT   )_handle_ndarray_creation_inputsr   mapr   _check_special_boundsr   r   r   _shapelistr   r5   _rankrH   rI   r]   rL   rp   rM   r   	flat_listr   s         r   rK   ImmutableDenseNDimArray._new   s    >>xYRXYs8U+,!!)3I&	9%	}}SU=f=9oZ
#**?E1Er   c                     [        S5      e)Nzimmutable N-dim array)	TypeError)r   r7   values      r   __setitem__#ImmutableDenseNDimArray.__setitem__   s    /00r   c                     [        U 5      $ r   )MutableDenseNDimArrayr   s    r   
as_mutable"ImmutableDenseNDimArray.as_mutable   s    $T**r   c                 0    SSK Jn  U R                  U5      $ )Nr   )simplify)sympy.simplify.simplifyr   	applyfunc)r   r   r   s      r   _eval_simplify&ImmutableDenseNDimArray._eval_simplify   s    4~~h''r   r   r]   r|   rz   r   )rc   rd   re   rf   r   ri   rK   r   r   r   rj   rB   r   r   r   r      s*    3  1+(r   r   c                   J    \ rS rSrS	S jr\S 5       rS rS r\	S 5       r
Srg)
r      Nc                 (    U R                   " X40 UD6$ r   rn   ro   s       r   r   MutableDenseNDimArray.__new__   rr   r   c                 (   U R                   " X40 UD6u  p$[        U5      n[        R                  U 5      nX%l        [        U5      Ul        [        U5      Ul        U(       a  [        R                  " S U5      Ul        U$ [        U5      Ul        U$ )Nc                 
    X-  $ r   rB   rC   s     r   rF   ,MutableDenseNDimArray._new.<locals>.<lambda>   rv   r   )rw   r   objectr   rz   r{   r   r5   r|   rH   rI   r]   r}   s         r   rK   MutableDenseNDimArray._new   s    >>xYRXYI&	~~c"9oZ
FK)**?EB RUU^Q_r   c                    [        U[        5      (       a{  [        S U 5       5      (       ad  U R                  X5      u  p#nU HI  n[	        XT5       VVs/ s H  u  pgUc  M
  Xg-
  PM     nnnX(   U R
                  U R                  U5      '   MK     gU R                  U5      nU R                  U5        [        U5      nX R
                  U'   gs  snnf )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   #    U  H  n[        U[        5      v   M     g 7fr   r$   r'   s     r   r*   4MutableDenseNDimArray.__setitem__.<locals>.<genexpr>   r,   r-   N)	r%   r0   r1   $_get_slice_data_for_array_assignmentzipr   r3   _setter_iterable_checkr   )	r   r7   r   r:   slice_offsetsr)   indjother_is	            r   r   !MutableDenseNDimArray.__setitem__   s     eU##+P%+P(P(P-1-V-VW\-d*E]14Q1FX1Fvs!7371FX49ND--a01  %%e,E''.UOE!&KK Ys   	C!Cc                     [        U 5      $ r   r   r   s    r   as_immutable"MutableDenseNDimArray.as_immutable   s    &t,,r   c                 p    U R                    VVs1 s H  oR                    H  o"iM     M     snn$ s  snnf r   )r   free_symbols)r   r   r)   s      r   r   "MutableDenseNDimArray.free_symbols   s(    ;;?;a1;???s   2r   )NN)rc   rd   re   rf   r   ri   rK   r   r   rh   r   rj   rB   r   r   r   r      s;    3  '2- @ @r   r   )rH   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   rB   r   r   <module>r      sR      " ' " ' B R R -t1Y t1n(n.@ (8.@N,< .@r   