Ë
    7^(h!  ã                   óº   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d d	lmZ  G d
„ de«      Z G d„ dee«      Z G d„ dee«      Zy)é    N)ÚList)ÚBasic)ÚTuple)ÚS)Ú_sympify)ÚMutableNDimArray)Ú	NDimArrayÚImmutableNDimArrayÚ	ArrayKind)Úflattenc                   ó\   — e Zd ZU ee   ed<   d„ Zedefd„«       Z	d„ Z
ed„ «       Zd„ Zd„ Zy	)
ÚDenseNDimArrayÚ_arrayc                 ó   — t        |i |¤ŽS ©N©ÚImmutableDenseNDimArray)ÚselfÚargsÚkwargss      úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/tensor/array/dense_ndim_array.pyÚ__new__zDenseNDimArray.__new__   s   € Ü&¨Ð7°Ñ7Ð7ó    Úreturnc                 ó@   — t        j                  | j                  «      S r   )r   Ú_unionr   ©r   s    r   ÚkindzDenseNDimArray.kind   s   € ä×Ñ §¡Ó,Ð,r   c                 óþ  — | j                  |«      }|�|S | j                  |«      }t        |t        «      r�t	        d„ |D «       «      r‹| j                  |«      \  }}|D �cg c]   }| j                  | j                  |«         ‘Œ" }}t        |«      D ��cg c]$  \  }}t        ||   t        «      sŒt        |«      ‘Œ& }}} t        | «      ||«      S | j                  |«      }| j                  |   S c c}w c c}}w )aL  
        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   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©Ú
isinstanceÚslice©Ú.0Úis     r   ú	<genexpr>z-DenseNDimArray.__getitem__.<locals>.<genexpr>?   ó   è ø€ Ò+PÀQ¬J°q¼%×,@Ñ+Pùó   ‚)Ú_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__zDenseNDimArray.__getitem__   sí   € ðB ×,Ñ,¨UÓ3ˆØÐØˆNà×-Ñ-¨eÓ4ˆä�eœUÔ#¬Ñ+PÈ%Ô+PÔ(PØ#'×#HÑ#HÈÓ#OÑ ˆJ˜Ø@HÖI¸1�T—[‘[ ×!2Ñ!2°1Ó!5Ó6ÐIˆEÐIÜ+4°ZÓ+@×`¡% ! RÄJÈuÐUVÉxÔY^ÕD_”c˜"•gÐ`ˆFÑ`Ø”4˜“:˜e VÓ,Ð,à×%Ñ% eÓ,ˆEØ—;‘;˜uÑ%Ð%ùò JùÛ`s   Á!%C4ÂC9Â2C9c                 ó|   — t        j                  d„ |t        j                  «      }| j	                  dg|z  f|«      S )Nc                 ó   — | |z  S r   © ©ÚxÚys     r   ú<lambda>z&DenseNDimArray.zeros.<locals>.<lambda>J   s
   € °A°a±C€ r   r   )Ú	functoolsÚreducer   ÚOneÚ_new)ÚclsÚshapeÚlist_lengths      r   ÚzeroszDenseNDimArray.zerosH   s5   € ä×&Ñ&Ñ'7¸ÄÇÁÓFˆØ�x‰x˜!˜˜[™Ð*¨EÓ2Ð2r   c                 ó¦   — ddl m} | j                  «       dk7  rt        d«      ‚ || j                  d   | j                  d   | j
                  «      S )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.matricesrK   ÚrankÚ
ValueErrorrG   r   )r   rK   s     r   ÚtomatrixzDenseNDimArray.tomatrixM   sD   € õ" 	*à�9‰9‹;˜!ÒÜÐ>Ó?Ð?á�d—j‘j ‘m T§Z¡Z°¡]°D·K±KÓ@Ð@r   c                 óÎ   — t        j                  d„ |«      }|| j                  k7  r$t        d| j                  t	        |«      |fz  «      ‚ t        | «      | j                  |«      S )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                 ó   — | |z  S r   r=   r>   s     r   rA   z(DenseNDimArray.reshape.<locals>.<lambda>{   s
   € °a¸±c€ r   z2Expecting reshape size to %d but got prod(%s) = %d)rB   rC   Ú
_loop_sizerP   Ústrr2   r   )r   ÚnewshapeÚnew_total_sizes      r   ÚreshapezDenseNDimArray.reshapee   si   € ô, #×)Ñ)©/¸8ÓDˆØ˜TŸ_™_Ò,ÜÐQØ—‘¤ X£°ðU@ñ @ó Að Að Œt�D‹z˜$Ÿ+™+ xÓ0Ð0r   N)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   Úpropertyr   r   r:   ÚclassmethodrI   rQ   rX   r=   r   r   r   r      sQ   … à�‰KÓò8ð ð-�iò -ó ð-ò.&ð` ñ3ó ð3òAó01r   r   c                   ó6   — e Zd Zdd„Zed„ «       Zd„ Zd„ Zd„ Zy)r   Nc                 ó*   —  | j                   ||fi |¤ŽS r   ©rE   ©rF   ÚiterablerG   r   s       r   r   zImmutableDenseNDimArray.__new__…   ó   € Øˆs�x‰x˜ %Ñ2¨6Ñ2Ð2r   c                 ób  —  | j                   ||fi |¤Ž\  }}t        t        t        |«      Ž }| j	                  ||«       t        |«      }t        |Ž }t        j                  | ||fi |¤Ž}||_        t        |«      |_
        t        |«      |_        t        j                  d„ |d«      |_        |S )Nc                 ó   — | |z  S r   r=   r>   s     r   rA   z.ImmutableDenseNDimArray._new.<locals>.<lambda>“   ó
   € °q¸±s€ r   rM   )Ú_handle_ndarray_creation_inputsr   Úmapr   Ú_check_special_boundsr   r   r   Ú_shapeÚlistr   r1   Ú_rankrB   rC   rT   ©rF   rc   rG   r   Ú	flat_listr   s         r   rE   zImmutableDenseNDimArray._newˆ   s¥   € à>˜3×>Ñ>¸xÈÑYÐRXÑYÑˆˆyÜ”sœ8 UÓ+Ð,ˆØ×!Ñ! )¨UÔ3Ü˜IÓ&ˆ	Ü˜9Ð%ˆ	Ü�}‰}˜S )¨UÑ=°fÑ=ˆØˆŒÜ˜9“oˆŒÜ˜“ZˆŒ
Ü#×*Ñ*©?¸EÀ1ÓEˆŒØˆr   c                 ó   — t        d«      ‚)Nzimmutable N-dim array)Ú	TypeError)r   r3   Úvalues      r   Ú__setitem__z#ImmutableDenseNDimArray.__setitem__–   s   € ÜÐ/Ó0Ð0r   c                 ó   — t        | «      S r   )ÚMutableDenseNDimArrayr   s    r   Ú
as_mutablez"ImmutableDenseNDimArray.as_mutable™   s   € Ü$ TÓ*Ð*r   c                 ó0   — ddl m} | j                  |«      S )Nr   )Úsimplify)Úsympy.simplify.simplifyrx   Ú	applyfunc)r   r   rx   s      r   Ú_eval_simplifyz&ImmutableDenseNDimArray._eval_simplifyœ   s   € Ý4Ø�~‰~˜hÓ'Ð'r   r   )	rY   rZ   r[   r   r^   rE   rs   rv   r{   r=   r   r   r   r   „   s*   „ ó3ð ñó ðò1ò+ó(r   r   c                   ó@   — e Zd Zdd„Zed„ «       Zd„ Zd„ Zed„ «       Z	y)ru   Nc                 ó*   —  | j                   ||fi |¤ŽS r   ra   rb   s       r   r   zMutableDenseNDimArray.__new__¢   rd   r   c                 ó"  —  | j                   ||fi |¤Ž\  }}t        |«      }t        j                  | «      }||_        t        |«      |_        t        |«      |_        |rt        j                  d„ |«      |_        |S t        |«      |_        |S )Nc                 ó   — | |z  S r   r=   r>   s     r   rA   z,MutableDenseNDimArray._new.<locals>.<lambda>­   rg   r   )rh   r   Úobjectr   rk   rl   r   r1   rm   rB   rC   rT   rn   s         r   rE   zMutableDenseNDimArray._new¥   s‡   € à>˜3×>Ñ>¸xÈÑYÐRXÑYÑˆˆyÜ˜IÓ&ˆ	Ü�~‰~˜cÓ"ˆØˆŒÜ˜9“oˆŒÜ˜“ZˆŒ
ÙFKœ)×*Ñ*©?¸EÓBˆŒØˆô RUÐU^ÓQ_ˆŒØˆr   c                 ó’  — t        |t        «      rut        d„ |D «       «      rc| j                  ||«      \  }}}|D ]G  }t	        ||«      D ��cg c]  \  }}|€Œ	||z
  ‘Œ }}}||   | j
                  | j                  |«      <   ŒI y| j                  |«      }| j                  |«       t        |«      }|| j
                  |<   yc c}}w )a  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   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   r!   r$   s     r   r'   z4MutableDenseNDimArray.__setitem__.<locals>.<genexpr>¾   r(   r)   N)	r"   r,   r-   Ú$_get_slice_data_for_array_assignmentÚzipr   r/   Ú_setter_iterable_checkr   )	r   r3   rr   r6   Úslice_offsetsr&   ÚindÚjÚother_is	            r   rs   z!MutableDenseNDimArray.__setitem__°   sÇ   € ô �eœUÔ#¬Ñ+PÈ%Ô+PÔ(PØ-1×-VÑ-VÐW\Ð^cÓ-dÑ*ˆE�8˜]Øò C�Ü14°Q¸Ó1F×X¡v s¨AÈ!É-˜3 ›7ÐX�ÑXØ49¸'±N�—‘˜D×-Ñ-¨aÓ0Ò1ñCð ×%Ñ% eÓ,ˆEØ×'Ñ'¨Ô.Ü˜U“OˆEØ!&ˆD�K‰K˜Òùó Ys   Á
CÁCc                 ó   — t        | «      S r   r   r   s    r   Úas_immutablez"MutableDenseNDimArray.as_immutableÉ   s   € Ü& tÓ,Ð,r   c                 óh   — | j                   D ��ch c]  }|j                  D ]  }|’Œ Œ c}}S c c}}w r   )r   Úfree_symbols)r   rˆ   r&   s      r   r�   z"MutableDenseNDimArray.free_symbolsÌ   s*   € àŸ;™;×?�a°·±Ò?¨1’Ð?�Ó?Ð?ùÓ?s   �.)NN)
rY   rZ   r[   r   r^   rE   rs   r‹   r]   r�   r=   r   r   ru   ru       s;   „ ó3ð ñó ðò'ò2-ð ñ@ó ñ@r   ru   )rB   Ú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   ru   r=   r   r   ú<module>r–      sR   ðÛ Ý å "Ý 'Ý "Ý 'Ý Bß RÑ RÝ -ôt1�Yô t1ôn(˜nÐ.@ô (ô8.@˜NÐ,<õ .@r   