§
    PŠtjÂ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d
S )é    )ÚBasic)ÚDictÚTuple)ÚExpr)ÚKindÚ
NumberKindÚUndefinedKind)ÚInteger)ÚS)Úsympify)Ú
SYMPY_INTS)Ú	PrintableN)ÚIterablec                   óD   ‡ — 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                 óZ   •— t          ¦   «                              | |¦  «        }||_        |S ©N)ÚsuperÚ__new__Úelement_kind)Úclsr   ÚobjÚ	__class__s      €ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/tensor/array/ndim_array.pyr   zArrayKind.__new__D   s'   ø€ Ý‰gŒg�oŠo˜c <Ñ0Ô0ˆØ'ˆÔØˆ
ó    c                 ó   — d| j         z  S )NzArrayKind(%s))r   ©Úselfs    r   Ú__repr__zArrayKind.__repr__I   s   € Ø Ô!2Ñ2Ð2r   Úreturnc                 óv   — d„ |D ¦   «         }t          |¦  «        dk    r|\  }nt          }t          |¦  «        S )Nc                 ó   — h | ]	}|j         ’Œ
S © )Úkind)Ú.0Úes     r   ú	<setcomp>z#ArrayKind._union.<locals>.<setcomp>N   s   € Ð,Ð,Ð, �a”fÐ,Ð,Ð,r   é   )Úlenr	   r   )r   ÚkindsÚ
elem_kindsÚelemkinds       r   Ú_unionzArrayKind._unionL   sB   € à,Ð, eÐ,Ñ,Ô,ˆ
Ýˆz‰?Œ?˜aÒÐØ"‰IˆHˆHå$ˆHÝ˜Ñ"Ô"Ð"r   )r    r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Úclassmethodr-   Ú__classcell__)r   s   @r   r   r      s|   ø€ € € € € ð3ð 3ðh #-ð ð ð ð ð ð ð
3ð 3ð 3ð ð#ð #ð #ñ „[ð#ð #ð #ð #ð #r   r   c                   óB  — 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-dS )-Ú	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.arrayr7   )r   ÚiterableÚshapeÚkwargsr7   s        r   r   zNDimArray.__new__Ž   s/   € Ø>Ð>Ð>Ð>Ð>Ð>Ø&Ð& x°ÐAÐA¸&ÐAÐAÐAr   c                 ó    — t          d¦  «        ‚)Nz4A subclass of NDimArray should implement __getitem__©ÚNotImplementedError©r   Úindexs     r   Ú__getitem__zNDimArray.__getitem__’   s   € Ý!Ð"XÑYÔYÐYr   c                 ó   — t          |t          t          f¦  «        r|| j        k    rt	          d¦  «        ‚|S | j        dk    rt	          d¦  «        ‚t          |¦  «        | j        k    rt	          d¦  «        ‚d}t          | j        ¦  «        D ]}}||         | j        |         k    s||         | j        |          k     r"t	          dt          |¦  «        z   dz   ¦  «        ‚||         dk     r|dz  }|| j        |         z  ||         z   }Œ~|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Úranger:   Ústr)r   r@   Ú
real_indexÚis       r   Ú_parse_indexzNDimArray._parse_index•   s  € Ý�e�j­'Ð2Ñ3Ô3ð 	Ø˜œÒ'Ð'Ý Ð!AÑBÔBÐBØˆLàŒ?˜aÒÐÝÐBÑCÔCÐCåˆu‰:Œ:˜œÒ#Ð#ÝÐ9Ñ:Ô:Ð:àˆ
å�t”zÑ"Ô"ð 	=ð 	=ˆAØ�a”˜DœJ qœMÒ)Ð)¨u°Q¬x¸4¼:Àa¼=¸.Ò/HÐ/HÝ  ­C°©J¬JÑ!6Ð9IÑ!IÑJÔJÐJØ�QŒx˜!Š|ˆ|Ø˜a‘�
Ø# D¤J¨q¤MÑ1°E¸!´HÑ<ˆJˆJàÐr   c                 ó´   — g }t          | j        ¦  «        D ]}|                     ||z  ¦  «         ||z  }Œ |                     ¦   «          t	          |¦  «        S r   )Úreversedr:   ÚappendÚreverseÚtuple)r   Úinteger_indexr@   Úshs       r   Ú_get_tuple_indexzNDimArray._get_tuple_index¬   s\   € ØˆÝ˜4œ:Ñ&Ô&ð 	!ð 	!ˆBØ�LŠL˜¨Ñ+Ñ,Ô,Ð,Ø˜bÑ ˆMˆMØ�Š‰ŒˆÝ�U‰|Œ|Ðr   c                 ó  — t          |t          ¦  «        r|n|f}t          d„ |D ¦   «         ¦  «        rMt          || j        ¦  «        D ](\  }}|dk     dk    s
||k    dk    rt          d¦  «        ‚Œ)ddlm}  || g|¢R Ž S d S )Nc              3   óP   K  — | ]!}t          |t          ¦  «        o|j         V — Œ"d S r   )rC   r   Ú	is_number©r%   rJ   s     r   ú	<genexpr>z2NDimArray._check_symbolic_index.<locals>.<genexpr>·   s5   è è € ÐPÐP¸q•
˜1�dÑ#Ô#Ð9¨Q¬[¨ÐPÐPÐPÐPÐPÐPr   r   Tzindex out of range)ÚIndexed)rC   rP   ÚanyÚzipr:   rE   Úsympy.tensorrY   )r   r@   Útuple_indexrJ   Únth_dimrY   s         r   Ú_check_symbolic_indexzNDimArray._check_symbolic_index´   s¹   € å *¨5µ%Ñ 8Ô 8ÐF�u�u¸u¸hˆÝÐPÐPÀKÐPÑPÔPÑPÔPð 	/Ý! +¨t¬zÑ:Ô:ð ;ð ;‘
��7Ø˜’U˜t’O�O¨!¨wª,¸4Ò)?Ð)?Ý$Ð%9Ñ:Ô:Ð:ð *@à,Ð,Ð,Ð,Ð,Ð,Ø�7˜4Ð. +Ð.Ð.Ð.Ð.Øˆtr   c                 óZ   — ddl m} t          |t          |t          f¦  «        rt
          ‚d S )Nr   ©Ú
MatrixBase)Úsympy.matrices.matrixbaserb   rC   r   r5   r>   )r   Úvaluerb   s      r   Ú_setter_iterable_checkz NDimArray._setter_iterable_check¿   s=   € Ø8Ð8Ð8Ð8Ð8Ð8Ý�e�h¨
µIÐ>Ñ?Ô?ð 	&Ý%Ð%ð	&ð 	&r   c                 ó$   ‡— ˆfd„Š ‰|¦  «        S )Nc                 ób  •— t          | t          ¦  «        s| gdfS t          | ¦  «        dk    rg dfS g }t          ˆfd„| D ¦   «         Ž \  }}t          t	          |¦  «        ¦  «        dk    rt          d¦  «        ‚|D ]}|                     |¦  «         Œ|t          |¦  «        f|d         z   fS )Nr#   r   ©r   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r#   r#   )r%   rJ   Úfs     €r   ú
<listcomp>z=NDimArray._scan_iterable_shape.<locals>.f.<locals>.<listcomp>Î   s!   ø€ Ð!8Ð!8Ð!8¨1 ! ! A¡$¤$Ð!8Ð!8Ð!8r   r(   z'could not determine shape unambiguously)rC   r   r)   r[   ÚsetrE   Úextend)ÚpointerÚresultÚelemsÚshapesrJ   rj   s        €r   rj   z)NDimArray._scan_iterable_shape.<locals>.fÆ   sË   ø€ Ý˜g¥xÑ0Ô0ð %Ø�y "�}Ð$å�7‰|Œ|˜qÒ Ð Ø˜4�x�àˆFÝÐ!8Ð!8Ð!8Ð!8°Ð!8Ñ!8Ô!8Ð9‰MˆE�6Ý•3�v‘;”;ÑÔ 1Ò$Ð$Ý Ð!JÑKÔKÐKØð !ð !�Ø—’˜aÑ Ô Ð Ð Ø�C ™KœK˜>¨&°¬)Ñ3Ð3Ð3r   r#   )r   r9   rj   s     @r   Ú_scan_iterable_shapezNDimArray._scan_iterable_shapeÄ   s,   ø€ ð	4ð 	4ð 	4ð 	4ð 	4ð ˆq�‰{Œ{Ðr   c                 óô  — ddl m} ddlm} |€�|€d}d}n†t	          ||¦  «        r|j        |j        fS t	          |t          ¦  «        r|j        }nKt	          |t          ¦  «        r|  
                    |¦  «        \  }}nt	          ||¦  «        r|j        }nd}|f}t	          |t          t          f¦  «        rj|�h|                     ¦   «         }|D ]Q}t	          |t          t          f¦  «        r3d}t!          |¦  «        D ]\  }	}
|||	         z  |
z   }Œ||         ||<   ||= ŒRt	          |t"          t$          f¦  «        r|f}t'          d„ |D ¦   «         ¦  «        st)          d¦  «        ‚t          |¦  «        |fS )Nr   ra   ©ÚSparseNDimArrayr#   c              3   óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r   )rC   r   r
   )r%   Údims     r   rX   z<NDimArray._handle_ndarray_creation_inputs.<locals>.<genexpr>  s1   è è € ÐKÐK¸c•:˜c¥JµÐ#8Ñ9Ô9ÐKÐKÐKÐKÐKÐKr   z#Shape should contain integers only.)rc   rb   r8   ru   rC   Ú_shapeÚ_sparse_arrayr5   r:   r   rr   r   ÚdictÚcopyrP   r   Ú	enumerater   r
   ÚallÚ	TypeError)r   r9   r:   r;   rb   ru   Únew_dictÚkÚnew_keyrJ   Úidxs              r   Ú_handle_ndarray_creation_inputsz)NDimArray._handle_ndarray_creation_inputs×   sÈ  € à8Ð8Ð8Ð8Ð8Ð8Ø6Ð6Ð6Ð6Ð6Ð6àˆ=ØÐØ�Ø��å˜H oÑ6Ô6ð 'Ø”¨Ô(>Ð>Ð>õ ˜H¥iÑ0Ô0ð 'Ø œ��õ ˜H¥hÑ/Ô/ð 	'Ø"%×":Ò":¸8Ñ"DÔ"D‘�˜%˜%õ ˜H jÑ1Ô1ð 'Ø œ��ð �Ø$˜;�å�h¥¥t Ñ-Ô-ð 	$°%Ð2CØ—}’}‘”ˆHØð $ð $�Ý˜a¥%­ Ñ0Ô0ð $Ø�GÝ"+¨A¡,¤,ð ;ð ;™˜˜3Ø")¨E°!¬HÑ"4°sÑ":˜˜Ø(0°¬�H˜WÑ%Ø  ˜øå�e�j­'Ð2Ñ3Ô3ð 	Ø�HˆEåÐKÐKÀUÐKÑKÔKÑKÔKð 	CÝÐAÑBÔ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

        )rD   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)

        )rx   r   s    r   r:   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

        )rF   r   s    r   ÚrankzNDimArray.rank&  s   € ð ŒzÐr   c                 óv   — ddl m} |                     dd¦  «          ||                      ¦   «         g|¢R 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   Úargsr;   rŠ   s       r   ÚdiffzNDimArray.diff5  sY   € ð 	IÐHÐHÐHÐHÐHØ×Ò˜* dÑ+Ô+Ð+Øˆ˜t×0Ò0Ñ2Ô2ÐD°TÐDÐDÐD¸VÐDÐDÐDr   c                 ó4   ‡— |                       ˆfd„¦  «        S )Nc                 ó.   •— ‰                      | ¦  «        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Ð4Ð4Ð4Ñ5Ô5Ð5r   c                 ó.   — 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Ô9Ð9r   c                 óZ  ‡— ddl m} ddlm} t	          | |¦  «        rZ ‰t
          j        ¦  «        dk    rA t          | ¦  «        ˆfd„| j         	                    ¦   «         D ¦   «         | j
        ¦  «        S  t          | ¦  «        t          ‰ || ¦  «        ¦  «        | j
        ¦  «        S )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   rt   ©ÚFlattenc                 óL   •— i | ] \  }} ‰|¦  «        d k    ¯| ‰|¦  «        “Œ!S rh   r#   )r%   r€   Úvrj   s      €r   ú
<dictcomp>z'NDimArray.applyfunc.<locals>.<dictcomp>_  s?   ø€ Ð[Ð[Ð[©4¨1¨aÐQRÐQRÐSTÑQUÔQUÐYZÒQZÐQZ˜q ! ! A¡$¤$ÐQZÐQZÐQZr   )r8   ru   Úsympy.tensor.array.arrayoprž   rC   r   ÚZeroÚtypery   Úitemsr:   Úmap)r   rj   ru   rž   s    `  r   r–   zNDimArray.applyfuncN  sº   ø€ ð 	7Ð6Ð6Ð6Ð6Ð6Ø6Ð6Ð6Ð6Ð6Ð6å�d˜OÑ,Ô,ð 	i°°µ1´6±´¸a²°Ø•4˜‘:”:Ð[Ð[Ð[Ð[°4Ô3E×3KÒ3KÑ3MÔ3MÐ[Ñ[Ô[Ð]aÔ]gÑhÔhÐhà�t�D‰zŒz�#˜a  ¨¡¤Ñ/Ô/°´Ñ<Ô<Ð<r   c                 óö   ‡ ‡‡— ˆˆˆ fd„Š‰                       ¦   «         dk    r‰                     ‰ d         ¦  «        S d‰ j        v r‰ j        j        › d‰ j        › d�S  ‰‰ j        ‰ j        d‰ j        ¦  «        S )Nc                 ó,  •‡ ‡‡— t          ‰¦  «        dk    r6dd                     ˆˆfd„t          ‰|¦  «        D ¦   «         ¦  «        z   dz   S ‰ ‰d         z  Š dd                     ˆˆˆ ˆfd„t          ‰d         ¦  «        D ¦   «         ¦  «        z   dz   S )Nr(   ú[z, c                 ól   •— g | ]0}‰                      ‰‰                     |¦  «                 ¦  «        ‘Œ1S r#   )Ú_printrS   )r%   r&   Úprinterr   s     €€r   rk   z2NDimArray._sympystr.<locals>.f.<locals>.<listcomp>f  s:   ø€ Ð%jÐ%jÐ%jÐYZ g§n¢n°T¸$×:OÒ:OÐPQÑ:RÔ:RÔ5SÑ&TÔ&TÐ%jÐ%jÐ%jr   ú]r   c           
      óZ   •— g | ]'} ‰‰‰d d…         ‰|‰z  z   ‰|d z   ‰z  z   ¦  «        ‘Œ(S )r(   Nr#   )r%   r&   rj   rJ   rR   Ú
shape_lefts     €€€€r   rk   z2NDimArray._sympystr.<locals>.f.<locals>.<listcomp>i  sF   ø€ Ð#lÐ#lÐ#lÐRS A A b¨*°Q°R°R¬.¸!¸A¸b¹D¹&À!ÀQÀqÁSÈ"ÁHÁ*Ñ$MÔ$MÐ#lÐ#lÐ#lr   )r)   ÚjoinrG   )rR   r¯   rJ   Újrj   r¬   r   s   ``` €€€r   rj   zNDimArray._sympystr.<locals>.fd  s²   øøøø€ Ý�:‰Œ !Ò#Ð#Ø˜4Ÿ9š9Ð%jÐ%jÐ%jÐ%jÐ%jÕ^cÐdeÐghÑ^iÔ^iÐ%jÑ%jÔ%jÑkÔkÑkÐloÑoÐoà�:˜a”=Ñ ˆBØ˜ŸšÐ#lÐ#lÐ#lÐ#lÐ#lÐ#lÐ#lÕW\Ð]gÐhiÔ]jÑWkÔWkÐ#lÑ#lÔ#lÑmÔmÑmÐpsÑsÐsr   r   r#   z([], ú))rˆ   r«   r:   r   r.   rD   )r   r¬   rj   s   ``@r   Ú	_sympystrzNDimArray._sympystrc  sŸ   øøø€ ð	tð 	tð 	tð 	tð 	tð 	tð 	tð �9Š9‰;Œ;˜!ÒÐØ—>’> $ r¤(Ñ+Ô+Ð+Ø�”
ˆ?ˆ?Ø”nÔ-ÐAÐA°D´JÐAÐAÐAÐAØˆq�” $¤*¨a°´ÑAÔAÐAr   c                 óL   ‡ ‡— ˆˆ 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ˆfd„t          ||¦  «        D ¦   «         S g }| |d         z  } t          |d         ¦  «        D ]:}|                      ‰| |dd …         ||| z  z   ||dz   | z  z   ¦  «        ¦  «         Œ;|S )Nr(   c                 óF   •— g | ]}‰‰                      |¦  «                 ‘ŒS r#   )rS   )r%   r&   r   s     €r   rk   z/NDimArray.tolist.<locals>.f.<locals>.<listcomp>ƒ  s,   ø€ ÐLÐLÐL¸1˜˜T×2Ò2°1Ñ5Ô5Ô6ÐLÐLÐLr   r   )r)   rG   rN   )rR   r¯   rJ   r±   ro   r&   rj   r   s         €€r   rj   zNDimArray.tolist.<locals>.f�  s¬   ø€ Ý�:‰Œ !Ò#Ð#ØLÐLÐLÐLÅÀaÈÁÄÐLÑLÔLÐLØˆFØ�:˜a”=Ñ ˆBÝ˜: aœ=Ñ)Ô)ð Ið I�Ø—’˜a˜a  J¨q¨r¨r¤N°A°a¸±d±F¸A¸qÀ¹sÀB¹h¹JÑGÔGÑHÔHÐHÐHØˆMr   r   )rD   r:   )r   rj   s   `@r   ÚtolistzNDimArray.tolistq  s@   øø€ ð 	ð 	ð 	ð 	ð 	ð 	ð ˆq�” $¤*¨a°´ÑAÔAÐAr   c                 ó  — ddl m} t          |t          ¦  «        st          S | j        |j        k    rt          d¦  «        ‚d„ t           || ¦  «         ||¦  «        ¦  «        D ¦   «         } t          | ¦  «        || j        ¦  «        S )Nr   r�   úarray shape mismatchc                 ó   — g | ]
\  }}||z   ‘ŒS r#   r#   ©r%   rJ   r±   s      r   rk   z%NDimArray.__add__.<locals>.<listcomp>”  ó    € ÐIÐIÐI™s˜q �q˜‘sÐIÐIÐIr   ©	r¢   rž   rC   r5   ÚNotImplementedr:   rE   r[   r¤   ©r   Úotherrž   Úresult_lists       r   Ú__add__zNDimArray.__add__Œ  ó‘   € Ø6Ð6Ð6Ð6Ð6Ð6å˜%¥Ñ+Ô+ð 	"Ý!Ð!àŒ:˜œÒ$Ð$ÝÐ3Ñ4Ô4Ð4ØIÐI¥c¨'¨'°$©-¬-¸¸À¹¼Ñ&HÔ&HÐIÑIÔIˆà�t�D‰zŒz˜+ t¤zÑ2Ô2Ð2r   c                 ó  — ddl m} t          |t          ¦  «        st          S | j        |j        k    rt          d¦  «        ‚d„ t           || ¦  «         ||¦  «        ¦  «        D ¦   «         } t          | ¦  «        || j        ¦  «        S )Nr   r�   r¹   c                 ó   — g | ]
\  }}||z
  ‘ŒS r#   r#   r»   s      r   rk   z%NDimArray.__sub__.<locals>.<listcomp>   r¼   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          | |¦  «        rf‰j        r t          | ¦  «        i | j        ¦  «        S  t          | ¦  «        ˆfd„| j                             ¦   «         D ¦   «         | j        ¦  «        S ˆfd„ || ¦  «        D ¦   «         } t          | ¦  «        || j        ¦  «        S )Nr   ra   rt   r�   ú=scalar expected, use tensorproduct(...) for tensorial productc                 ó"   •— i | ]\  }}|‰|z  “ŒS r#   r#   ©r%   r€   r    rÀ   s      €r   r¡   z%NDimArray.__mul__.<locals>.<dictcomp>°  ó#   ø€ ÐSÐSÐS©f¨q°!˜q %¨¡'ÐSÐSÐSr   c                 ó   •— g | ]}|‰z  ‘ŒS r#   r#   ©r%   rJ   rÀ   s     €r   rk   z%NDimArray.__mul__.<locals>.<listcomp>²  ó   ø€ Ð6Ð6Ð6 1�q˜‘wÐ6Ð6Ð6r   ©rc   rb   r8   ru   r¢   rž   rC   r   r5   rE   r   Úis_zeror¤   r:   ry   r¥   ©r   rÀ   rb   ru   rž   rÁ   s    `    r   Ú__mul__zNDimArray.__mul__¤  ó  ø€ Ø8Ð8Ð8Ð8Ð8Ð8Ø6Ð6Ð6Ð6Ð6Ð6Ø6Ð6Ð6Ð6Ð6Ð6å�e�h­	°:Ð>Ñ?Ô?ð 	^ÝÐ\Ñ]Ô]Ð]å˜‘”ˆÝ�d˜OÑ,Ô,ð 	aØŒ}ð 2Ø!•t˜D‘z”z " d¤jÑ1Ô1Ð1Ø•4˜‘:”:ÐSÐSÐSÐS¸Ô8J×8PÒ8PÑ8RÔ8RÐSÑSÔSÐUYÔU_Ñ`Ô`Ð`à6Ð6Ð6Ð6¨¨°©¬Ð6Ñ6Ô6ˆØ�t�D‰zŒz˜+ t¤zÑ2Ô2Ð2r   c                 óô  ‡— ddl m} ddlm} ddlm} t          ‰t          t          |f¦  «        rt          d¦  «        ‚t          ‰¦  «        Št          | |¦  «        rf‰j        r t          | ¦  «        i | j        ¦  «        S  t          | ¦  «        ˆfd„| j                             ¦   «         D ¦   «         | j        ¦  «        S ˆfd„ || ¦  «        D ¦   «         } t          | ¦  «        || j        ¦  «        S )Nr   ra   rt   r�   rÈ   c                 ó"   •— i | ]\  }}|‰|z  “ŒS r#   r#   rÊ   s      €r   r¡   z&NDimArray.__rmul__.<locals>.<dictcomp>Á  rË   r   c                 ó   •— g | ]}‰|z  ‘ŒS r#   r#   rÍ   s     €r   rk   z&NDimArray.__rmul__.<locals>.<listcomp>Ã  s   ø€ Ð6Ð6Ð6 1�u˜Q‘wÐ6Ð6Ð6r   rÏ   rÑ   s    `    r   Ú__rmul__zNDimArray.__rmul__µ  rÓ   r   c                 óÊ  ‡— ddl m} ddlm} ddlm} t          ‰t          t          |f¦  «        rt          d¦  «        ‚t          ‰¦  «        Št          | |¦  «        rQ‰t          j        k    rA t          | ¦  «        ˆfd„| j                             ¦   «         D ¦   «         | j        ¦  «        S ˆfd„ || ¦  «        D ¦   «         } t          | ¦  «        || j        ¦  «        S )Nr   ra   rt   r�   zscalar expectedc                 ó"   •— i | ]\  }}||‰z  “ŒS r#   r#   rÊ   s      €r   r¡   z)NDimArray.__truediv__.<locals>.<dictcomp>Ð  s#   ø€ ÐSÐSÐS©f¨q°!˜q ! E¡'ÐSÐSÐSr   c                 ó   •— g | ]}|‰z  ‘ŒS r#   r#   rÍ   s     €r   rk   z)NDimArray.__truediv__.<locals>.<listcomp>Ò  rÎ   r   )rc   rb   r8   ru   r¢   rž   rC   r   r5   rE   r   r   r£   r¤   ry   r¥   r:   rÑ   s    `    r   Ú__truediv__zNDimArray.__truediv__Æ  s  ø€ Ø8Ð8Ð8Ð8Ð8Ð8Ø6Ð6Ð6Ð6Ð6Ð6Ø6Ð6Ð6Ð6Ð6Ð6å�e�h­	°:Ð>Ñ?Ô?ð 	0ÝÐ.Ñ/Ô/Ð/å˜‘”ˆÝ�d˜OÑ,Ô,ð 	a°½!¼&²°Ø•4˜‘:”:ÐSÐSÐSÐS¸Ô8J×8PÒ8PÑ8RÔ8RÐSÑSÔSÐUYÔU_Ñ`Ô`Ð`à6Ð6Ð6Ð6¨¨°©¬Ð6Ñ6Ô6ˆØ�t�D‰zŒz˜+ t¤zÑ2Ô2Ð2r   c                 ó    — t          d¦  «        ‚)Nz"unsupported operation on NDimArrayr=   ©r   rÀ   s     r   Ú__rtruediv__zNDimArray.__rtruediv__Õ  s   € Ý!Ð"FÑGÔGÐGr   c                 ó  — ddl m} ddlm} t	          | |¦  «        r? t          | ¦  «        d„ | j                             ¦   «         D ¦   «         | j        ¦  «        S d„  || ¦  «        D ¦   «         } t          | ¦  «        || j        ¦  «        S )Nr   rt   r�   c                 ó   — i | ]	\  }}|| “Œ
S r#   r#   )r%   r€   r    s      r   r¡   z%NDimArray.__neg__.<locals>.<dictcomp>Ý  s    € ÐNÐNÐN©¨!¨Q˜q 1 "ÐNÐNÐNr   c                 ó   — g | ]}| ‘ŒS r#   r#   rW   s     r   rk   z%NDimArray.__neg__.<locals>.<listcomp>ß  s   € Ð1Ð1Ð1˜a˜�rÐ1Ð1Ð1r   )	r8   ru   r¢   rž   rC   r¤   ry   r¥   r:   )r   ru   rž   rÁ   s       r   Ú__neg__zNDimArray.__neg__Ø  s¨   € Ø6Ð6Ð6Ð6Ð6Ð6Ø6Ð6Ð6Ð6Ð6Ð6å�d˜OÑ,Ô,ð 	\Ø•4˜‘:”:ÐNÐN°4Ô3E×3KÒ3KÑ3MÔ3MÐNÑNÔNÐPTÔPZÑ[Ô[Ð[à1Ð1 7 7¨4¡=¤=Ð1Ñ1Ô1ˆØ�t�D‰zŒz˜+ t¤zÑ2Ô2Ð2r   c                 ó"   ‡ — ˆ fd„} |¦   «         S )Nc               3   ó€   •K  — ‰j         r)t          ‰j         d         ¦  «        D ]} ‰|          V — Œd S ‰d         V — d S )Nr   r#   )rx   rG   )rJ   r   s    €r   Úiteratorz$NDimArray.__iter__.<locals>.iteratorã  sZ   øè è € ØŒ{ð Ý˜tœ{¨1œ~Ñ.Ô.ð "ð "�AØ˜qœ'�M�M�M�Mð"ð "ð ˜2”h�����r   r#   )r   rå   s   ` r   Ú__iter__zNDimArray.__iter__â  s*   ø€ ð	ð 	ð 	ð 	ð 	ð ˆx‰zŒzÐr   c                 ó4  — ddl m} t          |t          ¦  «        sdS | j        |j        k    sdS t          | |¦  «        r:t          ||¦  «        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   rt   F)r8   ru   rC   r5   r:   rz   ry   Úlist)r   rÀ   ru   s      r   Ú__eq__zNDimArray.__eq__ì  sž   € ð* 	7Ð6Ð6Ð6Ð6Ð6Ý˜%¥Ñ+Ô+ð 	Ø�5àŒz˜Uœ[Ò(Ð(Ø�5å�d˜OÑ,Ô,ð 	Iµ¸EÀ?Ñ1SÔ1Sð 	IÝ˜Ô*Ñ+Ô+­t°EÔ4GÑ/HÔ/HÒHÐHå�D‰zŒz�T %™[œ[Ò(Ð(r   c                 ó   — | |k     S r   r#   rÝ   s     r   Ú__ne__zNDimArray.__ne__  s   € Ø˜5’=Ð Ð r   c                 ót   — |                       ¦   «         dk    rt          d¦  «        ‚ddlm}  || d¦  «        S )Né   zarray rank not 2r(   )Úpermutedims)r(   r   )rˆ   rE   Úarrayoprî   )r   rî   s     r   Ú_eval_transposezNDimArray._eval_transpose  sH   € Ø�9Š9‰;Œ;˜!ÒÐÝÐ/Ñ0Ô0Ð0Ø(Ð(Ð(Ð(Ð(Ð(Øˆ{˜4 Ñ(Ô(Ð(r   c                 ó*   — |                       ¦   «         S r   )rð   r   s    r   Ú	transposezNDimArray.transpose  ó   € Ø×#Ò#Ñ%Ô%Ð%r   c                 ój   — ddl m} |                      d„  || ¦  «        D ¦   «         | j        ¦  «        S )Nr   r�   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r#   )Ú	conjugaterW   s     r   rk   z-NDimArray._eval_conjugate.<locals>.<listcomp>  s    € Ð?Ð?Ð?¨A˜!Ÿ+š+™-œ-Ð?Ð?Ð?r   )r¢   rž   Úfuncr:   )r   rž   s     r   Ú_eval_conjugatezNDimArray._eval_conjugate  sA   € Ø6Ð6Ð6Ð6Ð6Ð6à�yŠyÐ?Ð?°°¸±´Ð?Ñ?Ô?ÀÄÑLÔLÐLr   c                 ó*   — |                       ¦   «         S r   )rø   r   s    r   rö   zNDimArray.conjugate  ró   r   c                 óN   — |                       ¦   «                              ¦   «         S r   )rò   rö   r   s    r   Ú_eval_adjointzNDimArray._eval_adjoint!  s   € Ø�~Š~ÑÔ×)Ò)Ñ+Ô+Ð+r   c                 ó*   — |                       ¦   «         S r   )rû   r   s    r   ÚadjointzNDimArray.adjoint$  s   € Ø×!Ò!Ñ#Ô#Ð#r   c                 ó¬   ‡‡— t          |t          ¦  «        s|fS |                     |¦  «        \  Š}Šˆˆfd„t          |‰z
  ‰z  ¦  «        D ¦   «         S )Nc                 ó    •— g | ]
}‰|‰z  z   ‘ŒS r#   r#   )r%   rJ   ÚstartÚsteps     €€r   rk   z+NDimArray._slice_expand.<locals>.<listcomp>+  s!   ø€ ÐBÐBÐB 1�˜˜$™‘ÐBÐBÐBr   )rC   ÚsliceÚindicesrG   )r   rš   rw   Ústopr   r  s       @@r   Ú_slice_expandzNDimArray._slice_expand'  sa   øø€ Ý˜!�UÑ#Ô#ð 	Ø�t�ØŸIšI c™NœNÑˆˆt�TØBÐBÐBÐBÐB­¨t°E©z¸DÑ.@Ñ(AÔ(AÐBÑBÔBÐBr   c                 ój   ‡ — ˆ fd„t          |‰ j        ¦  «        D ¦   «         }t          j        |Ž }||fS )Nc                 óB   •— g | ]\  }}‰                      ||¦  «        ‘ŒS r#   )r  )r%   rJ   rw   r   s      €r   rk   z>NDimArray._get_slice_data_for_array_access.<locals>.<listcomp>.  s-   ø€ ÐXÐXÐX±X°a¸�d×(Ò(¨¨CÑ0Ô0ÐXÐXÐXr   )r[   r:   Ú	itertoolsÚproduct)r   r@   Ú
sl_factorsÚeindicess   `   r   Ú _get_slice_data_for_array_accessz*NDimArray._get_slice_data_for_array_access-  s@   ø€ ØXÐXÐXÐXÅÀUÈDÌJÑAWÔAWÐXÑXÔXˆ
ÝÔ$ jÐ1ˆØ˜8Ð#Ð#r   c                 ó®   — t          |t          ¦  «        s t          | ¦  «        |¦  «        }|                      |¦  «        \  }}d„ |D ¦   «         }|||fS )Nc                 óZ   — g | ](}t          |t          ¦  «        rt          |¦  «        nd ‘Œ)S r   )rC   rè   ÚminrW   s     r   rk   zBNDimArray._get_slice_data_for_array_assignment.<locals>.<listcomp>6  s1   € ÐUÐUÐUÀQ¥:¨aµÑ#6Ô#6Ð@�˜Q™œ˜¸DÐUÐUÐUr   )rC   r5   r¤   r  )r   r@   rd   r
  r  Úslice_offsetss         r   Ú$_get_slice_data_for_array_assignmentz.NDimArray._get_slice_data_for_array_assignment2  sa   € Ý˜%¥Ñ+Ô+ð 	&Ø•D˜‘J”J˜uÑ%Ô%ˆEØ#×DÒDÀUÑKÔKÑˆ
�HØUÐUÈ*ÐUÑUÔUˆà�h Ð-Ð-r   c                 óª   — |dk    r"t          |¦  «        dk    rt          d¦  «        ‚|dk    r"t          |¦  «        dk    rt          d¦  «        ‚d S d S )Nr#   r(   z*arrays without shape need one scalar valuerh   r   z/if array shape is (0,) there cannot be elements)r)   rE   )r   Ú	flat_listr:   s      r   Ú_check_special_boundszNDimArray._check_special_bounds:  s_   € à�BŠ;ˆ;�3˜y™>œ>¨QÒ.Ð.ÝÐIÑJÔJÐJØ�DŠ=ˆ=�S ™^œ^¨aÒ/Ð/ÝÐNÑOÔOÐOð ˆ=Ð/Ð/r   c           	      ó®  — t          |t          t          t          f¦  «        r|f}t	          |¦  «        |                      ¦   «         k     rVt          |¦  «        t          d„ t          t	          |¦  «        |                      ¦   «         ¦  «        D ¦   «         ¦  «        z   }t	          |¦  «        |                      ¦   «         k    rt          d¦  «        ‚|S )Nc              3   ó4   K  — | ]}t          d ¦  «        V — Œd S r   )r  rW   s     r   rX   z5NDimArray._check_index_for_getitem.<locals>.<genexpr>G  s(   è è € ÐTÐT°¥ d¡¤ÐTÐTÐTÐTÐTÐTr   z-Dimension of index greater than rank of array)	rC   r   r
   r  r)   rˆ   rP   rG   rE   r?   s     r   Ú_check_index_for_getitemz"NDimArray._check_index_for_getitemA  s­   € Ý�e�j­'µ5Ð9Ñ:Ô:ð 	Ø�HˆEåˆu‰:Œ:˜Ÿ	š	™œÒ#Ð#Ý˜%‘L”LÝÐTÐTµU½3¸u¹:¼:ÀtÇyÂyÁ{Ä{Ñ5SÔ5SÐTÑTÔTÑTÔTñUˆEõ ˆu‰:Œ:˜Ÿ	š	™œÒ#Ð#ÝÐLÑMÔMÐMàˆr   r   )NN).r.   r/   r0   r1   Ú	_diff_wrtÚ	is_scalarr   rA   rK   rS   r_   re   r2   rr   rƒ   r…   Úpropertyr:   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  r#   r   r   r5   r5   V   s½  € € € € € ð2ð 2ðh €IØ€IðBð Bð Bð BðZð Zð Zðð ð ð.ð ð ð	ð 	ð 	ð&ð &ð &ð
 ðð ñ „[ðð$ ð,&ð ,&ð ,&ñ „[ð,&ð\ð ð ð  ðð ñ „Xððð ð ðEð Eð Eð$6ð 6ð 6ð:ð :ð :ð=ð =ð =ð*Bð Bð BðBð Bð Bð6
3ð 
3ð 
3ð
3ð 
3ð 
3ð3ð 3ð 3ð"3ð 3ð 3ð"3ð 3ð 3ðHð Hð Hð3ð 3ð 3ðð ð ð)ð )ð )ðB!ð !ð !ð)ð )ð )ð&ð &ð &ðMð Mð Mð
&ð &ð &ð,ð ,ð ,ð$ð $ð $ðCð Cð Cð$ð $ð $ð
.ð .ð .ð ðPð Pñ „[ðPðð ð ð ð r   r5   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚImmutableNDimArrayg      &@c                 ó*   — t          j        | ¦  «        S r   )r   Ú__hash__r   s    r   r  zImmutableNDimArray.__hash__R  s   € ÝŒ~˜dÑ#Ô#Ð#r   c                 ó   — | S r   r#   r   s    r   rŽ   zImmutableNDimArray.as_immutableU  s   € Øˆr   c                 ó    — t          d¦  «        ‚)Nzabstract methodr=   r   s    r   Ú
as_mutablezImmutableNDimArray.as_mutableX  s   € Ý!Ð"3Ñ4Ô4Ð4r   N)r.   r/   r0   Ú_op_priorityr  rŽ   r!  r#   r   r   r  r  O  sF   € € € € € Ø€Lð$ð $ð $ðð ð ð5ð 5ð 5ð 5ð 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   r5   r  r#   r   r   ú<module>r-     ss  ðØ "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø  Ð  Ð  Ð  Ð  Ð  Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø *Ð *Ð *Ð *Ð *Ð *Ø -Ð -Ð -Ð -Ð -Ð -à Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ðD#ð D#ð D#ð D#ð D#�ñ D#ô D#ð D#ðNvð vð vð vð v�	ñ vô vð vðr
5ð 
5ð 
5ð 
5ð 
5˜ Eñ 
5ô 
5ð 
5ð 
5ð 
5r   