ó
    ‹*£hó  ã                   ó®   • S SK Jr  S SKJrJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJr  S SKJr  S SKr " S	 S
\5      r " S S\\5      r " S S\
\5      rg)é    )ÚBasic)ÚDictÚTuple)ÚS)Ú_sympify)ÚMutableNDimArray)Ú	NDimArrayÚImmutableNDimArray)ÚflattenNc                   ó<   • \ rS rSrS rS r\S 5       rS rS r	Sr
g)	ÚSparseNDimArrayé   c                 ó   • [        U0 UD6$ ©N©ÚImmutableSparseNDimArray)ÚselfÚargsÚkwargss      Úa/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/tensor/array/sparse_ndim_array.pyÚ__new__ÚSparseNDimArray.__new__   s   € Ü'¨Ð8°Ñ8Ð8ó    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                  R                  U R                  U5      [        R                  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                  R                  U[        R                  5      $ s  snf s  snnf )a˜  
Get an element from a sparse N-dim array.

Examples
========

>>> from sympy import MutableSparseNDimArray
>>> a = MutableSparseNDimArray(range(4), (2, 2))
>>> a
[[0, 1], [2, 3]]
>>> a[0, 0]
0
>>> a[1, 1]
3
>>> a[0]
[0, 1]
>>> a[1]
[2, 3]

Symbolic indexing:

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

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

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

c              3   óB   #   • U  H  n[        U[        5      v •  M     g 7fr   ©Ú
isinstanceÚslice©Ú.0Úis     r   Ú	<genexpr>Ú.SparseNDimArray.__getitem__.<locals>.<genexpr>7   ó   é € Ð+PÊ%ÀQ¬J°q¼%×,@Ð,@Ê%ùó   ‚)Ú_check_symbolic_indexÚ_check_index_for_getitemr   ÚtupleÚanyÚ _get_slice_data_for_array_accessÚ_sparse_arrayÚgetÚ_parse_indexr   ÚZeroÚ	enumerater   ÚlenÚtype)	r   ÚindexÚsyindexÚ
sl_factorsÚeindicesr!   ÚarrayÚelÚnshapes	            r   Ú__getitem__ÚSparseNDimArray.__getitem__   s  € ð@ ×,Ñ,¨UÓ3ˆØÑØˆNà×-Ñ-¨eÓ4ˆô �eœU×#Ñ#¬Ñ+PÉ%Ó+P×(PÑ(PØ#'×#HÑ#HÈÓ#OÑ ˆJÙS[Ó\ÒS[Èa×'Ñ'×+Ñ+¨D×,=Ñ,=¸aÓ,@Ä!Ç&Á&ÖIÑS[ˆEÐ\Ü+4°ZÔ+@Ô`Ò+@¡% !ÄJÈuÉxÔY^×D_“g”c˜"–gÑ+@ˆFÑ`Ü˜”:˜eÓ,Ð,à×%Ñ% eÓ,ˆEØ×%Ñ%×)Ñ)¨%´·±Ó8Ð8ùò ]ùÛ`s   Á+AD<Â=EÃEc                 ó   • U " 0 U5      $ )z'
Return a sparse N-dim array of zeros.
© )ÚclsÚshapes     r   ÚzerosÚSparseNDimArray.zeros@   s   € ñ
 �2�u‹~Ðr   c                 ó  • SSK Jn  U R                  5       S:w  a  [        S5      e0 nU R                  R                  5        H  u  p4XBU R                  U5      '   M     U" U R                  S   U R                  S   U5      $ )a%  
Converts MutableDenseNDimArray to Matrix. Can convert only 2-dim array, else will raise error.

Examples
========

>>> from sympy import MutableSparseNDimArray
>>> a = MutableSparseNDimArray([1 for i in range(9)], (3, 3))
>>> b = a.tomatrix()
>>> b
Matrix([
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
r   )ÚSparseMatrixé   zDimensions must be of size of 2é   )Úsympy.matricesrB   ÚrankÚ
ValueErrorr+   ÚitemsÚ_get_tuple_indexr>   )r   rB   Ú
mat_sparseÚkeyÚvalues        r   ÚtomatrixÚSparseNDimArray.tomatrixG   su   € õ  	0Ø�9‰9‹;˜!ÓÜÐ>Ó?Ð?àˆ
Ø×,Ñ,×2Ñ2Ö4‰JˆCØ5:�t×,Ñ,¨SÓ1Ó2ñ 5ñ ˜DŸJ™J q™M¨4¯:©:°a©=¸*ÓEÐEr   c                 ó¤   • [         R                  " S U5      nX R                  :w  a  [        SU-   5      e[	        U 5      " U R
                  U5      $ )Nc                 ó
   • X-  $ r   r<   ©ÚxÚys     r   Ú<lambda>Ú)SparseNDimArray.reshape.<locals>.<lambda>b   s   € °a²cr   zInvalid reshape parameters )Ú	functoolsÚreduceÚ
_loop_sizerG   r1   r+   )r   ÚnewshapeÚnew_total_sizes      r   ÚreshapeÚSparseNDimArray.reshapea   sF   € Ü"×)Ò)©/¸8ÓDˆØŸ_™_Ó,ÜÐ:¸XÑEÓFÐFä�DŒz˜$×,Ñ,¨hÓ7Ð7r   r<   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r9   Úclassmethodr?   rM   r[   Ú__static_attributes__r<   r   r   r   r      s,   † ò9ò.9ð` ñó ðòFõ48r   r   c                   ó*   • \ rS rSrSS jrS rS rSrg)r   éh   Nc                 ó  • U R                   " X40 UD6u  p$[        [        [        U5      6 nU R	                  XB5        U(       a  [
        R                  " S U5      O
[        U5      n[        U[        [        45      (       a  [        U5      nO40 n[        [        U5      5       H  u  pxUS:w  d  M  [        U5      Xg'   M     [        U5      n[        R                  " XU40 UD6n	X)l        [        U5      U	l        XYl        Xil        U	$ )Nc                 ó
   • X-  $ r   r<   rQ   s     r   rT   Ú2ImmutableSparseNDimArray.__new__.<locals>.<lambda>n   s   € °²r   r   )Ú_handle_ndarray_creation_inputsr   Úmapr   Ú_check_special_boundsrV   rW   r0   r   Údictr   r/   r   r   r   Ú_shapeÚ_rankrX   r+   )
r=   Úiterabler>   r   Ú	flat_listÚ	loop_sizeÚsparse_arrayr!   r7   r   s
             r   r   Ú ImmutableSparseNDimArray.__new__j   sÞ   € Ø×>Ò>¸xÑYÐRXÑYÑˆÜ”sœ8 UÓ+Ð,ˆØ×!Ñ! )Ô3Þ@E”I×$Ò$¡_°eÔ<Ì3ÈyË>ˆ	ô �i¤$¬ ×.Ñ.Ü 	›?‰LàˆLÜ"¤7¨9Ó#5Ö6‘�Ø˜•7Ü&.¨r£l�L“Oñ 7ô ˜LÓ)ˆä�}Š}˜S°Ñ@¸Ñ@ˆØŒÜ˜“ZˆŒ
Ø#ŒØ)Ôàˆr   c                 ó   • [        S5      e)Nzimmutable N-dim array)Ú	TypeError)r   r2   rL   s      r   Ú__setitem__Ú$ImmutableSparseNDimArray.__setitem__ƒ   s   € ÜÐ/Ó0Ð0r   c                 ó   • [        U 5      $ r   )ÚMutableSparseNDimArray©r   s    r   Ú
as_mutableÚ#ImmutableSparseNDimArray.as_mutable†   s   € Ü% dÓ+Ð+r   ©rX   rm   rl   r+   ©NN)r]   r^   r_   r`   r   ru   rz   rb   r<   r   r   r   r   h   s   † ôò21õ,r   r   c                   ó:   • \ rS rSrSS jrS rS r\S 5       rSr	g)	rx   éŠ   Nc                 óÆ  • U R                   " X40 UD6u  p$[        R                  U 5      nX%l        [	        U5      Ul        U(       a  [        R                  " S U5      O
[	        U5      Ul        [        U[        [        45      (       a  [        U5      Ul        U$ 0 Ul        [        [        U5      5       H%  u  pgUS:w  d  M  [        U5      UR                  U'   M'     U$ )Nc                 ó
   • X-  $ r   r<   rQ   s     r   rT   Ú0MutableSparseNDimArray.__new__.<locals>.<lambda>‘   s   € °q²sr   r   )rh   Úobjectr   rl   r0   rm   rV   rW   rX   r   rk   r   r+   r/   r   r   )r=   rn   r>   r   ro   r   r!   r7   s           r   r   ÚMutableSparseNDimArray.__new__Œ   s¼   € Ø×>Ò>¸xÑYÐRXÑYÑˆÜ�~‰~˜cÓ"ˆØŒÜ˜“ZˆŒ
ÞFKœ)×*Ò*©?¸EÔBÔQTÐU^ÓQ_ˆŒô �i¤$¬ ×.Ñ.Ü!% i£ˆDÔØˆKàˆÔäœw yÓ1Ö2‰EˆAØ�Q�wÜ(0°«�×"Ñ" 1Ó%ñ 3ð ˆr   c                 óT  • [        U[        5      (       a²  [        S U 5       5      (       a›  U R                  X5      u  p#nU H€  n[	        XT5       VVs/ s H  u  pgUc  M
  Xg-
  PM     nnnX(   n	U R                  U5      n
U	S:w  a  X�R                  U
'   MT  X R                  ;   d  Me  U R                  R                  U
5        M‚     gU R                  U5      n[        U5      nUS:X  a+  XR                  ;   a  U R                  R                  U5        gX R                  U'   gs  snnf )zÑAllows to set items to MutableDenseNDimArray.

Examples
========

>>> from sympy import MutableSparseNDimArray
>>> a = MutableSparseNDimArray.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"   Ú5MutableSparseNDimArray.__setitem__.<locals>.<genexpr>­   r$   r%   Nr   )	r   r(   r)   Ú$_get_slice_data_for_array_assignmentÚzipr-   r+   Úpopr   )r   r2   rL   r5   Úslice_offsetsr!   ÚindÚjÚother_iÚother_valueÚcomplete_indexs              r   ru   Ú"MutableSparseNDimArray.__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Ø#™n�Ø!%×!2Ñ!2°1Ó!5�Ø !Ó#Ø9D×&Ñ& ~Ó6Ø#×'9Ñ'9Õ9Ø×&Ñ&×*Ñ*¨>Ö:ò ð ×%Ñ% eÓ,ˆEÜ˜U“OˆEØ˜‹z˜e×'9Ñ'9Ó9Ø×"Ñ"×&Ñ& uÕ-à,1×"Ñ" 5Ò)ùó Ys   Á	D$Á!D$c                 ó   • [        U 5      $ r   r   ry   s    r   Úas_immutableÚ#MutableSparseNDimArray.as_immutable¿   s   € Ü'¨Ó-Ð-r   c                 óŒ   • U R                   R                  5        VVs1 s H  oR                    H  o"iM     M     snn$ s  snnf r   )r+   ÚvaluesÚfree_symbols)r   r�   r!   s      r   r—   Ú#MutableSparseNDimArray.free_symbolsÂ   s5   € à×-Ñ-×4Ñ4Ô6ÔOÒ6�aÇÅ¸1’Á‘Ñ6ÒOÐOùÓOs   žA r|   r}   )
r]   r^   r_   r`   r   ru   r“   Úpropertyr—   rb   r<   r   r   rx   rx   Š   s'   † ôò(2ò>.ð ñPó óPr   rx   )Úsympy.core.basicr   Úsympy.core.containersr   r   Úsympy.core.singletonr   Úsympy.core.sympifyr   Ú%sympy.tensor.array.mutable_ndim_arrayr   Úsympy.tensor.array.ndim_arrayr	   r
   Úsympy.utilities.iterablesr   rV   r   r   rx   r<   r   r   Ú<module>r¡      sM   ðÝ "ß /Ý "Ý 'Ý Bß GÝ -ã ô[8�iô [8ôz,˜Ð0Bô ,ôD:PÐ-¨õ :Pr   