Ë
    7^(hÂJ  ã                   óÔ   — d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	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Zd dlmZ  G d„ de«      Z G d„ de«      Z G d„ dee«      Zy
)é    )ÚBasic)ÚDictÚTuple)ÚExpr)ÚKindÚ
NumberKindÚUndefinedKind)ÚInteger)ÚS)Úsympify)Ú
SYMPY_INTS)Ú	PrintableN)ÚIterablec                   ó>   ‡ — e Zd ZdZefˆ fd„	Zd„ Zedd„«       Zˆ xZ	S )Ú	ArrayKindaÉ  
    Kind for N-dimensional array in SymPy.

    This kind represents the multidimensional array that algebraic
    operations are defined. Basic class for this kind is ``NDimArray``,
    but any expression representing the array can have this.

    Parameters
    ==========

    element_kind : Kind
        Kind of the element. Default is :obj:NumberKind `<sympy.core.kind.NumberKind>`,
        which means that the array contains only numbers.

    Examples
    ========

    Any instance of array class has ``ArrayKind``.

    >>> from sympy import NDimArray
    >>> NDimArray([1,2,3]).kind
    ArrayKind(NumberKind)

    Although expressions representing an array may be not instance of
    array class, it will have ``ArrayKind`` as well.

    >>> from sympy import Integral
    >>> from sympy.tensor.array import NDimArray
    >>> from sympy.abc import x
    >>> intA = Integral(NDimArray([1,2,3]), x)
    >>> isinstance(intA, NDimArray)
    False
    >>> intA.kind
    ArrayKind(NumberKind)

    Use ``isinstance()`` to check for ``ArrayKind` without specifying
    the element kind. Use ``is`` with specifying the element kind.

    >>> from sympy.tensor.array import ArrayKind
    >>> from sympy.core import NumberKind
    >>> boolA = NDimArray([True, False])
    >>> isinstance(boolA.kind, ArrayKind)
    True
    >>> boolA.kind is ArrayKind(NumberKind)
    False

    See Also
    ========

    shape : Function to return the shape of objects with ``MatrixKind``.

    c                 ó6   •— t         ‰| �  | |«      }||_        |S ©N)ÚsuperÚ__new__Úelement_kind)Úclsr   ÚobjÚ	__class__s      €ú[/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/tensor/array/ndim_array.pyr   zArrayKind.__new__D   s    ø€ Ü‰g‰o˜c <Ó0ˆØ'ˆÔØˆ
ó    c                 ó    — d| j                   z  S )NzArrayKind(%s))r   ©Úselfs    r   Ú__repr__zArrayKind.__repr__I   s   € Ø ×!2Ñ!2Ñ2Ð2r   c                 óš   — |D �ch c]  }|j                   ’Œ }}t        |«      dk(  r|\  }t        |«      S t        }t        |«      S c c}w )Né   )ÚkindÚlenr	   r   )r   ÚkindsÚeÚ
elem_kindsÚelemkinds        r   Ú_unionzArrayKind._unionL   sP   € à&+Ö, �a—f“fÐ,ˆ
Ð,Üˆz‹?˜aÒØ"‰IˆHô ˜Ó"Ð"ô %ˆHÜ˜Ó"Ð"ùò -s   …A)Úreturnr   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Úclassmethodr(   Ú__classcell__)r   s   @r   r   r      s,   ø„ ñ3ðh #-õ ò
3ð ò#ó ô#r   r   c                   ó(  — e Zd ZdZdZdZd+d„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zed„ «       Zed,d„«       Zd„ Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d!„ Z$d"„ Z%d#„ Z&d$„ Z'd%„ Z(d&„ Z)d'„ Z*d(„ Z+ed)„ «       Z,d*„ Z-y)-Ú	NDimArraya½  N-dimensional array.

    Examples
    ========

    Create an N-dim array of zeros:

    >>> from sympy import MutableDenseNDimArray
    >>> a = MutableDenseNDimArray.zeros(2, 3, 4)
    >>> a
    [[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]

    Create an N-dim array from a list;

    >>> a = MutableDenseNDimArray([[2, 3], [4, 5]])
    >>> a
    [[2, 3], [4, 5]]

    >>> b = MutableDenseNDimArray([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]])
    >>> b
    [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]

    Create an N-dim array from a flat list with dimension shape:

    >>> a = MutableDenseNDimArray([1, 2, 3, 4, 5, 6], (2, 3))
    >>> a
    [[1, 2, 3], [4, 5, 6]]

    Create an N-dim array from a matrix:

    >>> from sympy import Matrix
    >>> a = Matrix([[1,2],[3,4]])
    >>> a
    Matrix([
    [1, 2],
    [3, 4]])
    >>> b = MutableDenseNDimArray(a)
    >>> b
    [[1, 2], [3, 4]]

    Arithmetic operations on N-dim arrays

    >>> a = MutableDenseNDimArray([1, 1, 1, 1], (2, 2))
    >>> b = MutableDenseNDimArray([4, 4, 4, 4], (2, 2))
    >>> c = a + b
    >>> c
    [[5, 5], [5, 5]]
    >>> a - b
    [[-3, -3], [-3, -3]]

    TFNc                 ó"   — ddl m}  |||fi |¤ŽS )Nr   )ÚImmutableDenseNDimArray)Úsympy.tensor.arrayr3   )r   ÚiterableÚshapeÚkwargsr3   s        r   r   zNDimArray.__new__Ž   s   € Ý>Ù& x°ÑA¸&ÑAÐAr   c                 ó   — t        d«      ‚)Nz4A subclass of NDimArray should implement __getitem__©ÚNotImplementedError©r   Úindexs     r   Ú__getitem__zNDimArray.__getitem__’   s   € Ü!Ð"XÓYÐYr   c                 óð  — t        |t        t        f«      r|| j                  k\  rt	        d«      ‚|S | j                  dk(  rt	        d«      ‚t        |«      | j                  k7  rt	        d«      ‚d}t        | j                  «      D ]l  }||   | j                  |   k\  s||   | j                  |    k  rt	        dt        |«      z   dz   «      ‚||   dk  r|dz  }|| j                  |   z  ||   z   }Œn |S )NzOnly a tuple index is acceptedr   z#Index not valid with an empty arrayzWrong number of array axeszIndex z out of borderr!   )
Ú
isinstancer   r
   Ú
_loop_sizeÚ
ValueErrorr#   Ú_rankÚranger6   Ústr)r   r<   Ú
real_indexÚis       r   Ú_parse_indexzNDimArray._parse_index•   sù   € Ü�eœj¬'Ð2Ô3Ø˜Ÿ™Ò'Ü Ð!AÓBÐBØˆLà�?‰?˜aÒÜÐBÓCÐCäˆu‹:˜Ÿ™Ò#ÜÐ9Ó:Ð:àˆ
ä�t—z‘zÓ"ò 	=ˆAØ�a‘˜DŸJ™J q™MÒ)¨u°Q©x¸4¿:¹:Àa¹=¸.Ò/HÜ  ¬C°«JÑ!6Ð9IÑ!IÓJÐJØ�Q‰x˜!Š|Ø˜a‘�
Ø# D§J¡J¨q¡MÑ1°E¸!±HÑ<‰Jð	=ð Ðr   c                 ó¢   — g }t        | j                  «      D ]  }|j                  ||z  «       ||z  }Œ |j                  «        t	        |«      S r   )Úreversedr6   ÚappendÚreverseÚtuple)r   Úinteger_indexr<   Úshs       r   Ú_get_tuple_indexzNDimArray._get_tuple_index¬   sO   € ØˆÜ˜4Ÿ:™:Ó&ò 	!ˆBØ�L‰L˜¨Ñ+Ô,Ø˜bÑ ‰Mð	!ð 	�‰ŒÜ�U‹|Ðr   c                 óâ   — t        |t        «      r|n|f}t        d„ |D «       «      rHt        || j                  «      D ]   \  }}|dk  dk(  s	||k\  dk(  sŒt        d«      ‚ ddlm}  || g|¢­Ž S y )Nc              3   óZ   K  — | ]#  }t        |t        «      xr |j                   –— Œ% y ­wr   )r?   r   Ú	is_number©Ú.0rF   s     r   ú	<genexpr>z2NDimArray._check_symbolic_index.<locals>.<genexpr>·   s%   è ø€ ÒP¸q”
˜1œdÓ#Ò9¨Q¯[©[¨Ó9ÑPùs   ‚)+r   Tzindex out of range)ÚIndexed)r?   rL   ÚanyÚzipr6   rA   Úsympy.tensorrV   )r   r<   Útuple_indexrF   Únth_dimrV   s         r   Ú_check_symbolic_indexzNDimArray._check_symbolic_index´   sz   € ä *¨5´%Ô 8‘u¸u¸hˆÜÑPÀKÔPÔPÜ! +¨t¯z©zÓ:ò ;‘
��7Ø˜‘U˜t’O¨!¨w©,¸4Ó)?Ü$Ð%9Ó:Ð:ð;õ -Ù˜4Ð. +Ò.Ð.Ør   c                 óJ   — ddl m} t        |t        |t        f«      rt
        ‚y )Nr   ©Ú
MatrixBase)Úsympy.matrices.matrixbaser_   r?   r   r1   r:   )r   Úvaluer_   s      r   Ú_setter_iterable_checkz NDimArray._setter_iterable_check¿   s"   € Ý8Ü�eœh¨
´IÐ>Ô?Ü%Ð%ð @r   c                 ó   ‡— ˆfd„Š ‰|«      S )Nc                 ó:  •— t        | t        «      s| gdfS t        | «      dk(  rg dfS g }t        | D �cg c]
  } ‰|«      ‘Œ c}Ž \  }}t        t	        |«      «      dk7  rt        d«      ‚|D ]  }|j                  |«       Œ |t        |«      f|d   z   fS c c}w )N© r   ©r   r!   z'could not determine shape unambiguously)r?   r   r#   rX   ÚsetrA   Úextend)ÚpointerÚresultrF   ÚelemsÚshapesÚfs        €r   rm   z)NDimArray._scan_iterable_shape.<locals>.fÆ   s§   ø€ Ü˜g¤xÔ0Ø�y "�}Ð$ä�7‹|˜qÒ Ø˜4�x�àˆFÜ°Ö!8¨1¡! A¥$Ò!8Ð9‰MˆE�6Ü”3�v“;Ó 1Ò$Ü Ð!JÓKÐKØò !�Ø—‘˜aÕ ð!àœC ›K˜>¨&°©)Ñ3Ð3Ð3ùò "9s   ´Bre   )r   r5   rm   s     @r   Ú_scan_iterable_shapezNDimArray._scan_iterable_shapeÄ   s   ø€ ô	4ñ �‹{Ðr   c                 óœ  — ddl m} ddlm} |€‹|€d}d}n„t	        ||«      r|j
                  |j                  fS t	        |t        «      r|j                  }nCt	        |t        «      r| j                  |«      \  }}nt	        ||«      r|j                  }nd}|f}t	        |t        t        f«      r[|�Y|j                  «       }|D ]D  }t	        |t        t        f«      sŒd}t!        |«      D ]  \  }	}
|||	   z  |
z   }Œ ||   ||<   ||= ŒF t	        |t"        t$        f«      r|f}t'        d„ |D «       «      st)        d«      ‚t        |«      |fS )Nr   r^   ©ÚSparseNDimArrayre   c              3   óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr   )r?   r   r
   )rT   Údims     r   rU   z<NDimArray._handle_ndarray_creation_inputs.<locals>.<genexpr>  s   è ø€ ÒK¸c”:˜c¤J´Ð#8×9ÑKùs   ‚ "z#Shape should contain integers only.)r`   r_   r4   rq   r?   Ú_shapeÚ_sparse_arrayr1   r6   r   rn   r   ÚdictÚcopyrL   r   Ú	enumerater   r
   ÚallÚ	TypeError)r   r5   r6   r7   r_   rq   Únew_dictÚkÚnew_keyrF   Úidxs              r   Ú_handle_ndarray_creation_inputsz)NDimArray._handle_ndarray_creation_inputs×   sT  € å8Ý6àˆ=ØÐØ�Ø‘ä˜H oÔ6Ø—‘¨×(>Ñ(>Ð>Ð>ô ˜H¤iÔ0Ø Ÿ™‘ô ˜H¤hÔ/Ø"%×":Ñ":¸8Ó"D‘�™%ô ˜H jÔ1Ø Ÿ™‘ð �Ø$˜;�ä�h¤¤t Ô-°%Ð2CØ—}‘}“ˆHØò $�Ü˜a¤%¬ Õ0Ø�GÜ"+¨A£,ò ;™˜˜3Ø")¨E°!©HÑ"4°sÑ":™ð;à(0°©�H˜WÑ%Ø  ™ð$ô �eœj¬'Ð2Ô3Ø�HˆEäÑKÀUÔKÔKÜÐAÓBÐBä�U‹|˜XÐ%Ð%r   c                 ó   — | j                   S )a-  Overload common function len(). Returns number of elements in array.

        Examples
        ========

        >>> from sympy import MutableDenseNDimArray
        >>> a = MutableDenseNDimArray.zeros(3, 3)
        >>> a
        [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
        >>> len(a)
        9

        )r@   r   s    r   Ú__len__zNDimArray.__len__  s   € ð �‰Ðr   c                 ó   — | j                   S )zà
        Returns array shape (dimension).

        Examples
        ========

        >>> from sympy import MutableDenseNDimArray
        >>> a = MutableDenseNDimArray.zeros(3, 3)
        >>> a.shape
        (3, 3)

        )rt   r   s    r   r6   zNDimArray.shape  s   € ð �{‰{Ðr   c                 ó   — | j                   S )z×
        Returns rank of array.

        Examples
        ========

        >>> from sympy import MutableDenseNDimArray
        >>> a = MutableDenseNDimArray.zeros(3,4,5,6,3)
        >>> a.rank()
        5

        )rB   r   s    r   ÚrankzNDimArray.rank&  s   € ð �z‰zÐr   c                 óf   — ddl m} |j                  dd«        || j                  «       g|¢­i |¤ŽS )a5  
        Calculate the derivative of each element in the array.

        Examples
        ========

        >>> from sympy import ImmutableDenseNDimArray
        >>> from sympy.abc import x, y
        >>> M = ImmutableDenseNDimArray([[x, y], [1, x*y]])
        >>> M.diff(x)
        [[1, 0], [0, y]]

        r   )ÚArrayDerivativeÚevaluateT)Ú$sympy.tensor.array.array_derivativesr†   Ú
setdefaultÚas_immutable)r   Úargsr7   r†   s       r   ÚdiffzNDimArray.diff5  s6   € õ 	IØ×Ñ˜* dÔ+Ù˜t×0Ñ0Ó2ÐD°TÒD¸VÑDÐDr   c                 ó,   ‡— | j                  ˆfd„«      S )Nc                 ó&   •— ‰j                  | «      S r   )rŒ   )ÚxÚbases    €r   ú<lambda>z,NDimArray._eval_derivative.<locals>.<lambda>I  s   ø€ ¨¯	©	°!«€ r   )Ú	applyfunc)r   r�   s    `r   Ú_eval_derivativezNDimArray._eval_derivativeG  s   ø€ à�~‰~Ó4Ó5Ð5r   c                 ó0   — t        j                  | ||«      S r   )r   Ú_eval_derivative_n_times)r   ÚsÚns      r   r•   z"NDimArray._eval_derivative_n_timesK  s   € Ü×-Ñ-¨d°A°qÓ9Ð9r   c           
      ó|  — ddl m} ddlm} t	        | |«      rs |t
        j                  «      dk(  rZ t        | «      | j                  j                  «       D ��ci c]  \  }} ||«      dk7  sŒ| ||«      “Œ c}}| j                  «      S  t        | «      t        | || «      «      | j                  «      S c c}}w )a[  Apply a function to each element of the N-dim array.

        Examples
        ========

        >>> from sympy import ImmutableDenseNDimArray
        >>> m = ImmutableDenseNDimArray([i*2+j for i in range(2) for j in range(2)], (2, 2))
        >>> m
        [[0, 1], [2, 3]]
        >>> m.applyfunc(lambda i: 2*i)
        [[0, 2], [4, 6]]
        r   rp   ©ÚFlatten)r4   rq   Úsympy.tensor.array.arrayoprš   r?   r   ÚZeroÚtyperu   Úitemsr6   Úmap)r   rm   rq   rš   r|   Úvs         r   r’   zNDimArray.applyfuncN  s™   € õ 	7Ý6ä�d˜OÔ,±´1·6±6³¸a²Ø”4˜“:°4×3EÑ3E×3KÑ3KÓ3M×[©4¨1¨aÑQRÐSTÓQUÐYZÓQZ˜q¡! A£$™wÓ[Ð]a×]gÑ]gÓhÐhàŒt�D‹zœ#˜a¡¨£Ó/°·±Ó<Ð<ùó \s   ÁB8
Á.B8
c                 ó  ‡ ‡‡— ˆˆˆ fd„Š‰ j                  «       dk(  r‰j                  ‰ d   «      S d‰ j                  v r&‰ j                  j                  › d‰ j                  › d�S  ‰‰ j
                  ‰ j                  d‰ j
                  «      S )Nc                 ó|  •— t        |«      dk(  rPddj                  t        ||«      D �cg c]%  }‰j                  ‰‰j	                  |«         «      ‘Œ' c}«      z   dz   S | |d   z  } ddj                  t        |d   «      D �cg c]  } ‰| |dd  ||| z  z   ||dz   | z  z   «      ‘Œ! c}«      z   dz   S c c}w c c}w )Nr!   ú[z, ú]r   )r#   ÚjoinrC   Ú_printrO   )rN   Ú
shape_leftrF   Újr%   rm   Úprinterr   s        €€€r   rm   zNDimArray._sympystr.<locals>.fd  sË   ø€ Ü�:‹ !Ò#Ø˜4Ÿ9™9Ô^cÐdeÐghÓ^iÖ%jÐYZ g§n¡n°T¸$×:OÑ:OÐPQÓ:RÑ5SÕ&TÒ%jÓkÑkÐloÑoÐoà�:˜a‘=Ñ ˆBØ˜Ÿ™ÔW\Ð]gÐhiÑ]jÓWkÖ#lÐRS¡A b¨*°Q°R¨.¸!¸A¸b¹D¹&À!ÀQÀqÁSÈ"ÁHÁ*Õ$MÒ#lÓmÑmÐpsÑsÐsùò &kùò $ms   ª*B4
Â$B9
r   re   z([], ú))r„   r¦   r6   r   r*   r@   )r   r©   rm   s   ``@r   Ú	_sympystrzNDimArray._sympystrc  sv   ú€ ö	tð �9‰9‹;˜!ÒØ—>‘> $ r¡(Ó+Ð+Ø�—
‘
‰?Ø—n‘n×-Ñ-Ð.¨e°D·J±J°<¸qÐAÐAÙ�—‘ $§*¡*¨a°·±ÓAÐAr   c                 ód   ‡ ‡— ˆˆ fd„Š ‰‰ j                   ‰ j                  d‰ j                   «      S )a?  
        Converting MutableDenseNDimArray to one-dim list

        Examples
        ========

        >>> from sympy import MutableDenseNDimArray
        >>> a = MutableDenseNDimArray([1, 2, 3, 4], (2, 2))
        >>> a
        [[1, 2], [3, 4]]
        >>> b = a.tolist()
        >>> b
        [[1, 2], [3, 4]]
        c                 ó  •— t        |«      dk(  r,t        ||«      D �cg c]  }‰‰j                  |«         ‘Œ c}S g }| |d   z  } t        |d   «      D ].  }|j                   ‰| |dd  ||| z  z   ||dz   | z  z   «      «       Œ0 |S c c}w )Nr!   r   )r#   rC   rO   rJ   )rN   r§   rF   r¨   r%   rj   rm   r   s         €€r   rm   zNDimArray.tolist.<locals>.f�  sŸ   ø€ Ü�:‹ !Ò#Ü@EÀaÈÃÖL¸1˜˜T×2Ñ2°1Ó5Ó6ÒLÐLØˆFØ�:˜a‘=Ñ ˆBÜ˜: a™=Ó)ò I�Ø—‘™a  J¨q¨r N°A°a¸±d±F¸A¸qÀ¹sÀB¹h¹JÓGÕHðIàˆMùò Ms   žBr   )r@   r6   )r   rm   s   `@r   ÚtolistzNDimArray.tolistq  s'   ù€ õ 	ñ �—‘ $§*¡*¨a°·±ÓAÐAr   c                 ó   — ddl m} t        |t        «      st        S | j
                  |j
                  k7  rt        d«      ‚t         || «       ||«      «      D ��cg c]
  \  }}||z   ‘Œ }}} t        | «      || j
                  «      S c c}}w ©Nr   r™   zarray shape mismatch©	r›   rš   r?   r1   ÚNotImplementedr6   rA   rX   r�   ©r   Úotherrš   rF   r¨   Úresult_lists         r   Ú__add__zNDimArray.__add__Œ  óx   € Ý6ä˜%¤Ô+Ü!Ð!à�:‰:˜Ÿ™Ò$ÜÐ3Ó4Ð4Ü&)©'°$«-¹À»Ó&H×I™s˜q �q˜“sÐIˆÑIàŒt�D‹z˜+ t§z¡zÓ2Ð2ùó Jó   ÁB
c                 ó   — ddl m} t        |t        «      st        S | j
                  |j
                  k7  rt        d«      ‚t         || «       ||«      «      D ��cg c]
  \  }}||z
  ‘Œ }}} t        | «      || j
                  «      S c c}}w r°   r±   r³   s         r   Ú__sub__zNDimArray.__sub__˜  r·   r¸   c           	      óü  — ddl m} ddlm} ddlm} t        |t        t        |f«      rt        d«      ‚t        |«      }t        | |«      rs|j                  r t        | «      i | j                  «      S  t        | «      | j                  j                  «       D ��ci c]  \  }}|||z  “Œ c}}| j                  «      S  || «      D �cg c]  }||z  ‘Œ	 }} t        | «      || j                  «      S c c}}w c c}w ©Nr   r^   rp   r™   z=scalar expected, use tensorproduct(...) for tensorial product©r`   r_   r4   rq   r›   rš   r?   r   r1   rA   r   Úis_zeror�   r6   ru   rž   ©	r   r´   r_   rq   rš   r|   r    rF   rµ   s	            r   Ú__mul__zNDimArray.__mul__¤  sÔ   € Ý8Ý6Ý6ä�eœh¬	°:Ð>Ô?ÜÐ\Ó]Ð]ä˜“ˆÜ�d˜OÔ,Ø�}Š}Ø!”t˜D“z " d§j¡jÓ1Ð1Ø”4˜“:¸×8JÑ8J×8PÑ8PÓ8R×S©f¨q°!˜q %¨¡'™zÓSÐUY×U_ÑU_Ó`Ð`á(/°«Ö6 1�q˜“wÐ6ˆÐ6ØŒt�D‹z˜+ t§z¡zÓ2Ð2ùó Tùâ6ó   ÂC3
Ã	C9c           	      óü  — ddl m} ddlm} ddlm} t        |t        t        |f«      rt        d«      ‚t        |«      }t        | |«      rs|j                  r t        | «      i | j                  «      S  t        | «      | j                  j                  «       D ��ci c]  \  }}|||z  “Œ c}}| j                  «      S  || «      D �cg c]  }||z  ‘Œ	 }} t        | «      || j                  «      S c c}}w c c}w r¼   r½   r¿   s	            r   Ú__rmul__zNDimArray.__rmul__µ  sÔ   € Ý8Ý6Ý6ä�eœh¬	°:Ð>Ô?ÜÐ\Ó]Ð]ä˜“ˆÜ�d˜OÔ,Ø�}Š}Ø!”t˜D“z " d§j¡jÓ1Ð1Ø”4˜“:¸×8JÑ8J×8PÑ8PÓ8R×S©f¨q°!˜q %¨¡'™zÓSÐUY×U_ÑU_Ó`Ð`á(/°«Ö6 1�u˜Q“wÐ6ˆÐ6ØŒt�D‹z˜+ t§z¡zÓ2Ð2ùó Tùâ6rÁ   c           	      óÒ  — ddl m} ddlm} ddlm} t        |t        t        |f«      rt        d«      ‚t        |«      }t        | |«      r^|t        j                  k7  rK t        | «      | j                  j                  «       D ��ci c]  \  }}|||z  “Œ c}}| j                   «      S  || «      D �cg c]  }||z  ‘Œ	 }} t        | «      || j                   «      S c c}}w c c}w )Nr   r^   rp   r™   zscalar expected)r`   r_   r4   rq   r›   rš   r?   r   r1   rA   r   r   rœ   r�   ru   rž   r6   r¿   s	            r   Ú__truediv__zNDimArray.__truediv__Æ  sÀ   € Ý8Ý6Ý6ä�eœh¬	°:Ð>Ô?ÜÐ.Ó/Ð/ä˜“ˆÜ�d˜OÔ,°¼!¿&¹&²Ø”4˜“:¸×8JÑ8J×8PÑ8PÓ8R×S©f¨q°!˜q ! E¡'™zÓSÐUY×U_ÑU_Ó`Ð`á(/°«Ö6 1�q˜“wÐ6ˆÐ6ØŒt�D‹z˜+ t§z¡zÓ2Ð2ùó Tùâ6s   ÂC
Â4C$c                 ó   — t        d«      ‚)Nz"unsupported operation on NDimArrayr9   ©r   r´   s     r   Ú__rtruediv__zNDimArray.__rtruediv__Õ  s   € Ü!Ð"FÓGÐGr   c                 ó>  — ddl m} ddlm} t	        | |«      rI t        | «      | j                  j                  «       D ��ci c]	  \  }}|| “Œ c}}| j                  «      S  || «      D �cg c]  }| ‘Œ }} t        | «      || j                  «      S c c}}w c c}w )Nr   rp   r™   )	r4   rq   r›   rš   r?   r�   ru   rž   r6   )r   rq   rš   r|   r    rF   rµ   s          r   Ú__neg__zNDimArray.__neg__Ø  s‰   € Ý6Ý6ä�d˜OÔ,Ø”4˜“:°4×3EÑ3E×3KÑ3KÓ3M×N©¨!¨Q˜q 1 "™uÓNÐPT×PZÑPZÓ[Ð[á#*¨4£=Ö1˜a˜’rÐ1ˆÐ1ØŒt�D‹z˜+ t§z¡zÓ2Ð2ùó Oùâ1s   ÁB
Á,
Bc                 ó   ‡ — ˆ fd„} |«       S )Nc               3   ó~   •K  — ‰j                   r%t        ‰j                   d   «      D ]	  } ‰|    –— Œ y ‰d   –— y ­w)Nr   re   )rt   rC   )rF   r   s    €r   Úiteratorz$NDimArray.__iter__.<locals>.iteratorã  s>   øè ø€ Ø�{Š{Ü˜tŸ{™{¨1™~Ó.ò "�AØ˜q™'“Mñ"ð ˜2‘h“ùs   ƒ:=re   )r   rÍ   s   ` r   Ú__iter__zNDimArray.__iter__â  s   ø€ ô	ñ ‹zÐr   c                 ó  — ddl m} t        |t        «      sy| j                  |j                  k(  syt        | |«      r7t        ||«      r+t        | j                  «      t        |j                  «      k(  S t        | «      t        |«      k(  S )aê  
        NDimArray instances can be compared to each other.
        Instances equal if they have same shape and data.

        Examples
        ========

        >>> from sympy import MutableDenseNDimArray
        >>> a = MutableDenseNDimArray.zeros(2, 3)
        >>> b = MutableDenseNDimArray.zeros(2, 3)
        >>> a == b
        True
        >>> c = a.reshape(3, 2)
        >>> c == b
        False
        >>> a[0,0] = 1
        >>> b[0,0] = 2
        >>> a == b
        False
        r   rp   F)r4   rq   r?   r1   r6   rv   ru   Úlist)r   r´   rq   s      r   Ú__eq__zNDimArray.__eq__ì  sn   € õ* 	7Ü˜%¤Ô+Øà�z‰z˜UŸ[™[Ò(Øä�d˜OÔ,´¸EÀ?Ô1SÜ˜×*Ñ*Ó+¬t°E×4GÑ4GÓ/HÑHÐHä�D‹zœT %›[Ñ(Ð(r   c                 ó   — | |k(   S r   re   rÇ   s     r   Ú__ne__zNDimArray.__ne__  s   € Ø˜5‘=Ð Ð r   c                 ó\   — | j                  «       dk7  rt        d«      ‚ddlm}  || d«      S )Né   zarray rank not 2r!   )Úpermutedims)r!   r   )r„   rA   ÚarrayoprÖ   )r   rÖ   s     r   Ú_eval_transposezNDimArray._eval_transpose  s,   € Ø�9‰9‹;˜!ÒÜÐ/Ó0Ð0Ý(Ù˜4 Ó(Ð(r   c                 ó"   — | j                  «       S r   )rØ   r   s    r   Ú	transposezNDimArray.transpose  ó   € Ø×#Ñ#Ó%Ð%r   c                 ó”   — ddl m} | j                   || «      D �cg c]  }|j                  «       ‘Œ c}| j                  «      S c c}w )Nr   r™   )r›   rš   ÚfuncÚ	conjugater6   )r   rš   rF   s      r   Ú_eval_conjugatezNDimArray._eval_conjugate  s2   € Ý6à�y‰y±¸³Ö?¨A˜!Ÿ+™+�-Ò?ÀÇÁÓLÐLùÒ?s   œAc                 ó"   — | j                  «       S r   )rß   r   s    r   rÞ   zNDimArray.conjugate  rÛ   r   c                 ó>   — | j                  «       j                  «       S r   )rÚ   rÞ   r   s    r   Ú_eval_adjointzNDimArray._eval_adjoint!  s   € Ø�~‰~Ó×)Ñ)Ó+Ð+r   c                 ó"   — | j                  «       S r   )râ   r   s    r   ÚadjointzNDimArray.adjoint$  s   € Ø×!Ñ!Ó#Ð#r   c                 ó¦   — t        |t        «      s|fS |j                  |«      \  }}}t        ||z
  |z  «      D �cg c]
  }|||z  z   ‘Œ c}S c c}w r   )r?   ÚsliceÚindicesrC   )r   r–   rs   ÚstartÚstopÚsteprF   s          r   Ú_slice_expandzNDimArray._slice_expand'  sQ   € Ü˜!œUÔ#Ø�t�ØŸI™I c›NÑˆˆt�TÜ(-¨t°E©z¸DÑ.@Ó(AÖB 1�˜˜$™“ÒBÐBùÒBs   ¼Ac                 óª   — t        || j                  «      D ��cg c]  \  }}| j                  ||«      ‘Œ }}}t        j                  |Ž }||fS c c}}w r   )rX   r6   rë   Ú	itertoolsÚproduct)r   r<   rF   rs   Ú
sl_factorsÚeindicess         r   Ú _get_slice_data_for_array_accessz*NDimArray._get_slice_data_for_array_access-  sR   € ÜADÀUÈDÏJÉJÓAW×X±X°a¸�d×(Ñ(¨¨CÕ0ÐXˆ
ÑXÜ×$Ñ$ jÐ1ˆØ˜8Ð#Ð#ùó Ys   šAc                 óÔ   — t        |t        «      s t        | «      |«      }| j                  |«      \  }}|D �cg c]  }t        |t        «      rt        |«      nd ‘Œ! }}|||fS c c}w r   )r?   r1   r�   rñ   rÐ   Úmin)r   r<   ra   rï   rð   rF   Úslice_offsetss          r   Ú$_get_slice_data_for_array_assignmentz.NDimArray._get_slice_data_for_array_assignment2  si   € Ü˜%¤Ô+Ø”D˜“J˜uÓ%ˆEØ#×DÑDÀUÓKÑˆ
�HØJTÖUÀQ¤:¨a´Ô#6œ˜Qœ¸DÑ@ÐUˆÐUà�h Ð-Ð-ùò Vs   º$A%c                 ó~   — |dk(  rt        |«      dk7  rt        d«      ‚|dk(  rt        |«      dkD  rt        d«      ‚y y )Nre   r!   z*arrays without shape need one scalar valuerf   r   z/if array shape is (0,) there cannot be elements)r#   rA   )r   Ú	flat_listr6   s      r   Ú_check_special_boundszNDimArray._check_special_bounds:  sE   € à�BŠ;œ3˜y›>¨QÒ.ÜÐIÓJÐJØ�DŠ=œS ›^¨aÒ/ÜÐNÓOÐOð 0ˆ=r   c           	      óF  — t        |t        t        t        f«      r|f}t	        |«      | j                  «       k  r?t        |«      t        d„ t        t	        |«      | j                  «       «      D «       «      z   }t	        |«      | j                  «       kD  rt        d«      ‚|S )Nc              3   ó2   K  — | ]  }t        d «      –— Œ y ­wr   )ræ   rS   s     r   rU   z5NDimArray._check_index_for_getitem.<locals>.<genexpr>G  s   è ø€ ÒT°¤ d§ÑTùs   ‚z-Dimension of index greater than rank of array)	r?   r   r
   ræ   r#   r„   rL   rC   rA   r;   s     r   Ú_check_index_for_getitemz"NDimArray._check_index_for_getitemA  s   € Ü�eœj¬'´5Ð9Ô:Ø�HˆEäˆu‹:˜Ÿ	™	›Ò#Ü˜%“LÜÑT´U¼3¸u»:ÀtÇyÁyÃ{Ó5SÔTÓTñUˆEô ˆu‹:˜Ÿ	™	›Ò#ÜÐLÓMÐMàˆr   r   )NN).r*   r+   r,   r-   Ú	_diff_wrtÚ	is_scalarr   r=   rG   rO   r\   rb   r.   rn   r   r�   Úpropertyr6   r„   rŒ   r“   r•   r’   r«   r®   r¶   rº   rÀ   rÃ   rÅ   rÈ   rÊ   rÎ   rÑ   rÓ   rØ   rÚ   rß   rÞ   râ   rä   rë   rñ   rõ   rø   rû   re   r   r   r1   r1   V   s  „ ñ2ðh €IØ€IóBòZòò.ò	ò&ð
 ñó ðð$ ò,&ó ð,&ò\ð  ñó ðòòEò$6ò:ò=ò*BòBò6
3ò
3ò3ò"3ò"3òHò3òò)òB!ò)ò&òMò
&ò,ò$òCò$ò
.ð ñPó ðPór   r1   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚImmutableNDimArrayg      &@c                 ó,   — t        j                  | «      S r   )r   Ú__hash__r   s    r   r  zImmutableNDimArray.__hash__R  s   € Ü�~‰~˜dÓ#Ð#r   c                 ó   — | S r   re   r   s    r   rŠ   zImmutableNDimArray.as_immutableU  s   € Øˆr   c                 ó   — t        d«      ‚)Nzabstract methodr9   r   s    r   Ú
as_mutablezImmutableNDimArray.as_mutableX  s   € Ü!Ð"3Ó4Ð4r   N)r*   r+   r,   Ú_op_priorityr  rŠ   r  re   r   r   r   r   O  s   „ Ø€Lò$òó5r   r   )Úsympy.core.basicr   Úsympy.core.containersr   r   Úsympy.core.exprr   Úsympy.core.kindr   r   r	   Úsympy.core.numbersr
   Úsympy.core.singletonr   Úsympy.core.sympifyr   Úsympy.external.gmpyr   Úsympy.printing.defaultsr   rí   Úcollections.abcr   r   r1   r   re   r   r   ú<module>r     sU   ðÝ "ß /Ý  ß ;Ñ ;Ý &Ý "Ý &Ý *Ý -ã Ý $ôD#�ô D#ôNv�	ô vôr
5˜ Eõ 
5r   