Ë
    7^(hó  ã                   ó®   — d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlZ G d	„ d
e«      Z G d„ dee«      Z G d„ de
e«      Zy)é    )ÚBasic)ÚDictÚTuple)ÚS)Ú_sympify)ÚMutableNDimArray)Ú	NDimArrayÚImmutableNDimArray)ÚflattenNc                   ó4   — e Zd Zd„ Zd„ Zed„ «       Zd„ Zd„ Zy)ÚSparseNDimArrayc                 ó   — t        |i |¤ŽS ©N©ÚImmutableSparseNDimArray)ÚselfÚargsÚkwargss      úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/tensor/array/sparse_ndim_array.pyÚ__new__zSparseNDimArray.__new__   s   € Ü'¨Ð8°Ñ8Ð8ó    c                 ój  — | j                  |«      }|�|S | j                  |«      }t        |t        «      r¸t	        d„ |D «       «      r¦| j                  |«      \  }}|D �cg c];  }| j                  j                  | j                  |«      t        j                  «      ‘Œ= }}t        |«      D ��cg c]$  \  }}t        ||   t        «      sŒt        |«      ‘Œ& }}} t        | «      ||«      S | j                  |«      }| j                  j                  |t        j                  «      S c c}w c c}}w )aP  
        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   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©Ú
isinstanceÚslice©Ú.0Úis     r   ú	<genexpr>z.SparseNDimArray.__getitem__.<locals>.<genexpr>7   ó   è ø€ Ò+PÀQ¬J°q¼%×,@Ñ+Pùó   ‚)Ú_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__zSparseNDimArray.__getitem__   s  € ð@ ×,Ñ,¨UÓ3ˆØÐØˆNà×-Ñ-¨eÓ4ˆô �eœUÔ#¬Ñ+PÈ%Ô+PÔ(PØ#'×#HÑ#HÈÓ#OÑ ˆJ˜ØS[Ö\Èa�T×'Ñ'×+Ñ+¨D×,=Ñ,=¸aÓ,@Ä!Ç&Á&ÕIÐ\ˆEÐ\Ü+4°ZÓ+@×`¡% ! RÄJÈuÐUVÉxÔY^ÕD_”c˜"•gÐ`ˆFÑ`Ø”4˜“:˜e VÓ,Ð,à×%Ñ% eÓ,ˆEØ×%Ñ%×)Ñ)¨%´·±Ó8Ð8ùò ]ùÛ`s   Á!A D*Â1D/ÃD/c                 ó   —  | i |«      S )z7
        Return a sparse N-dim array of zeros.
        © )ÚclsÚshapes     r   ÚzeroszSparseNDimArray.zeros@   s   € ñ
 �2�u‹~Ðr   c                 ó  — ddl m} | j                  «       dk7  rt        d«      ‚i }| j                  j                  «       D ]  \  }}||| j                  |«      <   Œ  || j                  d   | j                  d   |«      S )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.matricesr=   ÚrankÚ
ValueErrorr(   ÚitemsÚ_get_tuple_indexr:   )r   r=   Ú
mat_sparseÚkeyÚvalues        r   ÚtomatrixzSparseNDimArray.tomatrixG   s~   € õ  	0Ø�9‰9‹;˜!ÒÜÐ>Ó?Ð?àˆ
Ø×,Ñ,×2Ñ2Ó4ò 	;‰JˆC�Ø5:ˆJ�t×,Ñ,¨SÓ1Ò2ð	;ñ ˜DŸJ™J q™M¨4¯:©:°a©=¸*ÓEÐEr   c                 ó¢   — t        j                  d„ |«      }|| j                  k7  rt        d|z   «      ‚ t	        | «      | j
                  |«      S )Nc                 ó   — | |z  S r   r8   ©ÚxÚys     r   ú<lambda>z)SparseNDimArray.reshape.<locals>.<lambda>b   s
   € °a¸±c€ r   zInvalid reshape parameters )Ú	functoolsÚreduceÚ
_loop_sizerB   r.   r(   )r   ÚnewshapeÚnew_total_sizes      r   ÚreshapezSparseNDimArray.reshapea   sJ   € Ü"×)Ñ)©/¸8ÓDˆØ˜TŸ_™_Ò,ÜÐ:¸XÑEÓFÐFàŒt�D‹z˜$×,Ñ,¨hÓ7Ð7r   N)	Ú__name__Ú
__module__Ú__qualname__r   r6   Úclassmethodr;   rH   rT   r8   r   r   r   r      s,   „ ò9ò.9ð` ñó ðòFó48r   r   c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)r   Nc                 ó  —  | j                   ||fi |¤Ž\  }}t        t        t        |«      Ž }| j	                  ||«       |rt        j                  d„ |«      n
t        |«      }t        |t        t        f«      rt        |«      }n2i }t        t        |«      «      D ]  \  }}|dk7  sŒt        |«      ||<   Œ t        |«      }t        j                  | ||fi |¤Ž}	||	_        t        |«      |	_        ||	_        ||	_        |	S )Nc                 ó   — | |z  S r   r8   rK   s     r   rN   z2ImmutableSparseNDimArray.__new__.<locals>.<lambda>n   s
   € °°1±€ r   r   )Ú_handle_ndarray_creation_inputsr   Úmapr   Ú_check_special_boundsrO   rP   r-   r   Údictr   r,   r   r   r   Ú_shapeÚ_rankrQ   r(   )
r9   Úiterabler:   r   Ú	flat_listÚ	loop_sizeÚsparse_arrayr   r4   r   s
             r   r   z ImmutableSparseNDimArray.__new__j   sô   € Ø>˜3×>Ñ>¸xÈÑYÐRXÑYÑˆˆyÜ”sœ8 UÓ+Ð,ˆØ×!Ñ! )¨UÔ3Ù@E”I×$Ñ$¡_°eÔ<Ì3ÈyË>ˆ	ô �i¤$¬ Ô.Ü 	›?‰LàˆLÜ"¤7¨9Ó#5Ó6ò 3‘��2Ø˜“7Ü&.¨r£l�L ’Oð3ô ˜LÓ)ˆä�}‰}˜S ,°Ñ@¸Ñ@ˆØˆŒÜ˜“ZˆŒ
Ø#ˆŒØ)ˆÔàˆr   c                 ó   — t        d«      ‚)Nzimmutable N-dim array)Ú	TypeError)r   r/   rG   s      r   Ú__setitem__z$ImmutableSparseNDimArray.__setitem__ƒ   s   € ÜÐ/Ó0Ð0r   c                 ó   — t        | «      S r   )ÚMutableSparseNDimArray©r   s    r   Ú
as_mutablez#ImmutableSparseNDimArray.as_mutable†   s   € Ü% dÓ+Ð+r   ©NN)rU   rV   rW   r   rh   rl   r8   r   r   r   r   h   s   „ óò21ó,r   r   c                   ó0   — e Zd Zdd„Zd„ Zd„ Zed„ «       Zy)rj   Nc                 ó°  —  | j                   ||fi |¤Ž\  }}t        j                  | «      }||_        t	        |«      |_        |rt        j                  d„ |«      n
t	        |«      |_        t        |t        t        f«      rt        |«      |_        |S i |_        t        t        |«      «      D ]#  \  }}|dk7  sŒt        |«      |j                  |<   Œ% |S )Nc                 ó   — | |z  S r   r8   rK   s     r   rN   z0MutableSparseNDimArray.__new__.<locals>.<lambda>‘   s
   € °q¸±s€ r   r   )r\   Úobjectr   r`   r-   ra   rO   rP   rQ   r   r_   r   r(   r,   r   r   )r9   rb   r:   r   rc   r   r   r4   s           r   r   zMutableSparseNDimArray.__new__Œ   sÈ   € Ø>˜3×>Ñ>¸xÈÑYÐRXÑYÑˆˆyÜ�~‰~˜cÓ"ˆØˆŒÜ˜“ZˆŒ
ÙFKœ)×*Ñ*©?¸EÔBÔQTÐU^ÓQ_ˆŒô �i¤$¬ Ô.Ü!% i£ˆDÔØˆKàˆÔäœw yÓ1Ó2ò 	5‰EˆAˆrØ�Q‹wÜ(0°«�×"Ñ" 1Ò%ð	5ð ˆr   c                 ó6  — t        |t        «      r©t        d„ |D «       «      r—| j                  ||«      \  }}}|D ]{  }t	        ||«      D ��cg c]  \  }}|€Œ	||z
  ‘Œ }}}||   }	| j                  |«      }
|	dk7  r|	| j                  |
<   ŒR|
| j                  v sŒa| j                  j                  |
«       Œ} y| j                  |«      }t        |«      }|dk(  r*|| j                  v r| j                  j                  |«       y|| j                  |<   yc c}}w )a  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   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   r   r   s     r   r    z5MutableSparseNDimArray.__setitem__.<locals>.<genexpr>­   r!   r"   Nr   )	r   r%   r&   Ú$_get_slice_data_for_array_assignmentÚzipr*   r(   Úpopr   )r   r/   rG   r2   Úslice_offsetsr   ÚindÚjÚother_iÚother_valueÚcomplete_indexs              r   rh   z"MutableSparseNDimArray.__setitem__    s  € ô �eœUÔ#¬Ñ+PÈ%Ô+PÔ(PØ-1×-VÑ-VÐW\Ð^cÓ-dÑ*ˆE�8˜]Øò ;�Ü14°Q¸Ó1F×X¡v s¨AÈ!É-˜3 ›7ÐX�ÑXØ# G™n�Ø!%×!2Ñ!2°1Ó!5�Ø !Ò#Ø9D�D×&Ñ& ~Ò6Ø# t×'9Ñ'9Ò9Ø×&Ñ&×*Ñ*¨>Õ:ñ;ð ×%Ñ% eÓ,ˆEÜ˜U“OˆEØ˜Šz˜e t×'9Ñ'9Ñ9Ø×"Ñ"×&Ñ& uÕ-à,1�×"Ñ" 5Ò)ùó Ys   Á
DÁDc                 ó   — t        | «      S r   r   rk   s    r   Úas_immutablez#MutableSparseNDimArray.as_immutable¿   s   € Ü'¨Ó-Ð-r   c                 ó„   — | j                   j                  «       D ��ch c]  }|j                  D ]  }|’Œ Œ c}}S c c}}w r   )r(   ÚvaluesÚfree_symbols)r   ry   r   s      r   r�   z#MutableSparseNDimArray.free_symbolsÂ   s5   € à×-Ñ-×4Ñ4Ó6×O�aÀÇÁÒO¸1’ÐO�ÓOÐOùÓOs   ž<rm   )rU   rV   rW   r   rh   r~   Úpropertyr�   r8   r   r   rj   rj   Š   s'   „ óò(2ò>.ð ñPó ñPr   rj   )Ú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   rO   r   r   rj   r8   r   r   ú<module>rŠ      sM   ðÝ "ß /Ý "Ý 'Ý Bß GÝ -ã ô[8�iô [8ôz,˜Ð0Bô ,ôD:PÐ-¨õ :Pr   