ó
    ‹*£h!  ã                   óº   • 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      Ú`/home/mande/repo/quber/.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Ê%ÀQ¬J°q¼%×,@Ð,@Ê%ùó   ‚)Ú_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ˆä�eœU×#Ñ#¬Ñ+PÉ%Ó+P×(PÑ(PØ#'×#HÑ#HÈÓ#OÑ ˆJÙ@HÓIÂ¸1—[‘[ ×!2Ñ!2°1Ó!5Ô6ÁˆEÐIÜ+4°ZÔ+@Ô`Ò+@¡% !ÄJÈuÉxÔY^×D_“g”c˜"–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   € °A²Cr   r   )Ú	functoolsÚreducer   ÚOneÚ_new)ÚclsÚshapeÚlist_lengths      r   ÚzerosÚDenseNDimArray.zerosH   s5   € ä×&Ò&Ñ'7¸ÄÇÁÓFˆØ�x‰x˜!˜˜[™Ð*¨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   € õ" 	*à�9‰9‹;˜!ÓÜÐ>Ó?Ð?á�d—j‘j ‘m T§Z¡Z°¡]°D·K±KÓ@Ð@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   € °a²cr   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ô �DŒz˜$Ÿ+™+ 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__…   ó   € Ø�xŠx˜Ñ2¨6Ñ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>“   ó   € °q²sr   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ÑYÐRXÑYÑˆÜ”sœ8 UÓ+Ð,ˆØ×!Ñ! )Ô3Ü˜IÓ&ˆ	Ü˜9Ð%ˆ	Ü�}Š}˜S¨UÑ=°fÑ=ˆØŒÜ˜9“oˆŒÜ˜“ZˆŒ
Ü#×*Ò*©?¸EÀ1Ó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ÑYÐRXÑYÑˆÜ˜IÓ&ˆ	Ü�~‰~˜cÓ"ˆØŒÜ˜9“oˆŒÜ˜“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 )zÏAllows 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º   € ô �eœU×#Ñ#¬Ñ+PÉ%Ó+P×(PÑ(PØ-1×-VÑ-VÐW\Ó-dÑ*ˆE˜]Û�Ü14°QÔ1FÔXÒ1F¡v sÈ!›7˜3œ7Ñ1F�ÑXØ49±N�—‘˜D×-Ñ-¨aÓ0Ó1ò ð ×%Ñ% eÓ,ˆEØ×'Ñ'¨Ô.Ü˜U“OˆEØ!&�K‰K˜Òùó 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1�Yô t1ôn(˜nÐ.@ô (ô8.@˜NÐ,<õ .@r   