ó
    ‹*£hÂJ  ã                   óÔ   • S SK Jr  S SKJrJr  S SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KrS SKJr   " S S\5      r " S S\5      r " S S\\5      rg
)é    )ÚBasic)ÚDictÚTuple)ÚExpr)ÚKindÚ
NumberKindÚUndefinedKind)ÚInteger)ÚS)Úsympify)Ú
SYMPY_INTS)Ú	PrintableN)ÚIterablec                   óL   ^ • \ rS rSrSr\4U 4S jjrS r\SS j5       r	Sr
U =r$ )Ú	ArrayKindé   a1  
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                 ó2   >• [         TU ]  X5      nXl        U$ ©N)ÚsuperÚ__new__Úelement_kind)Úclsr   ÚobjÚ	__class__s      €ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/tensor/array/ndim_array.pyr   ÚArrayKind.__new__D   s   ø€ Ü‰g‰o˜cÓ0ˆØ'ÔØˆ
ó    c                 ó    • SU R                   -  $ )NzArrayKind(%s))r   ©Úselfs    r   Ú__repr__ÚArrayKind.__repr__I   s   € Ø ×!2Ñ!2Ñ2Ð2r   c                 óŒ   • U Vs1 s H  o"R                   iM     nn[        U5      S:X  a  Uu  nO[        n[        U5      $ s  snf )Né   )ÚkindÚlenr	   r   )r   ÚkindsÚeÚ
elem_kindsÚelemkinds        r   Ú_unionÚArrayKind._unionL   s@   € á&+Ó,¢e —f”f¡eˆ
Ð,Üˆz‹?˜aÓØ"‰I‰Hä$ˆHÜ˜Ó"Ð"ùò -s   …A© )Úreturnr   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r!   Úclassmethodr+   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s,   ø† ñ3ðh #-÷ ò
3ð ó#ó ö#r   r   c                   ó4  • \ rS rSrSrSrSrS-S jrS rS r	S	 r
S
 rS r\S 5       r\S.S j5       rS r\S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)S' r*S( r+S) r,\S* 5       r-S+ r.S,r/g)/Ú	NDimArrayéV   a)  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                 ó    • SSK Jn  U" X40 UD6$ )Nr   )ÚImmutableDenseNDimArray)Úsympy.tensor.arrayr;   )r   ÚiterableÚshapeÚkwargsr;   s        r   r   ÚNDimArray.__new__Ž   s   € Ý>Ù& xÑA¸&ÑAÐAr   c                 ó   • [        S5      e)Nz4A subclass of NDimArray should implement __getitem__©ÚNotImplementedError©r    Úindexs     r   Ú__getitem__ÚNDimArray.__getitem__’   s   € Ü!Ð"XÓYÐYr   c                 óþ  • [        U[        [        45      (       a  XR                  :¼  a  [	        S5      eU$ U R                  S:X  a  [	        S5      e[        U5      U R                  :w  a  [	        S5      eSn[        U R                  5       Hk  nX   U R                  U   :¼  d  X   U R                  U   * :  a  [	        S[        U5      -   S-   5      eX   S:  a  US-  nX R                  U   -  X   -   nMm     U$ )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    rE   Ú
real_indexÚis       r   Ú_parse_indexÚNDimArray._parse_index•   së   € Ü�eœj¬'Ð2×3Ñ3ØŸ™Ó'Ü Ð!AÓBÐBØˆLà�?‰?˜aÓÜÐBÓCÐCäˆu‹:˜Ÿ™Ó#ÜÐ9Ó:Ð:àˆ
ä�t—z‘zÖ"ˆAØ‘˜DŸJ™J q™MÓ)¨u©x¸4¿:¹:Àa¹=¸.Ó/HÜ  ¬C°«JÑ!6Ð9IÑ!IÓJÐJØ‰x˜!‹|Ø˜a‘�
Ø#§J¡J¨q¡MÑ1°E±HÑ<ŠJñ #ð Ðr   c                 ó¢   • / n[        U R                  5       H  nUR                  X-  5        X-  nM     UR                  5         [	        U5      $ r   )Úreversedr>   ÚappendÚreverseÚtuple)r    Úinteger_indexrE   Úshs       r   Ú_get_tuple_indexÚNDimArray._get_tuple_index¬   sF   € ØˆÜ˜4Ÿ:™:Ö&ˆBØ�L‰L˜Ñ+Ô,ØÑ ŠMñ 'ð 	�‰ŒÜ�U‹|Ðr   c                 óø   • [        U[        5      (       a  UOU4n[        S U 5       5      (       aI  [        X R                  5       H!  u  p4US:  S:X  d
  X4:¬  S:X  d  M  [        S5      e   SSKJn  U" U /UQ76 $ g )Nc              3   ór   #   • U  H-  n[        U[        5      =(       a    UR                  (       + v •  M/     g 7fr   )rI   r   Ú	is_number©Ú.0rP   s     r   Ú	<genexpr>Ú2NDimArray._check_symbolic_index.<locals>.<genexpr>·   s%   é € ÐPÂK¸q”
˜1œdÓ#×9¨Q¯[©[¬Ô9ÂKùs   ‚57r   Tzindex out of range)ÚIndexed)rI   rW   ÚanyÚzipr>   rK   Úsympy.tensorrc   )r    rE   Útuple_indexrP   Únth_dimrc   s         r   Ú_check_symbolic_indexÚNDimArray._check_symbolic_index´   su   € ä *¨5´%× 8Ñ 8‘u¸u¸hˆÜÑPÁKÓP×PÑPÜ! +¯z©zÖ:‘
�Ø˜‘U˜t“O¨!©,¸4Õ)?Ü$Ð%9Ó:Ð:ñ ;õ -Ù˜4Ð. +Ò.Ð.Ør   c                 óT   • SSK Jn  [        U[        U[        45      (       a  [
        eg )Nr   ©Ú
MatrixBase)Úsympy.matrices.matrixbaserm   rI   r   r8   rC   )r    Úvaluerm   s      r   Ú_setter_iterable_checkÚ NDimArray._setter_iterable_check¿   s%   € Ý8Ü�eœh¨
´IÐ>×?Ñ?Ü%Ð%ð @r   c                 ó    ^• U4S jmT" U5      $ )Nc                 óP  >• [        U [        5      (       d  U /S4$ [        U 5      S:X  a  / S4$ / n[        U  Vs/ s H  nT" U5      PM     sn6 u  p4[        [	        U5      5      S:w  a  [        S5      eU H  nUR                  U5        M     U[        U5      4US   -   4$ s  snf )Nr-   r   ©r   r$   z'could not determine shape unambiguously)rI   r   r&   re   ÚsetrK   Úextend)ÚpointerÚresultrP   ÚelemsÚshapesÚfs        €r   r{   Ú)NDimArray._scan_iterable_shape.<locals>.fÆ   s§   ø€ Ü˜g¤x×0Ñ0Ø�y "�}Ð$ä�7‹|˜qÓ Ø˜4�x�àˆFÜ±Ó!8²¨1¡! A¦$±Ñ!8Ð9‰MˆEÜ”3�v“;Ó 1Ó$Ü Ð!JÓKÐKÛ�Ø—‘˜aÖ ñ àœC ›K˜>¨&°©)Ñ3Ð3Ð3ùò "9s   ºB#r-   )r   r=   r{   s     @r   Ú_scan_iterable_shapeÚNDimArray._scan_iterable_shapeÄ   s   ø€ õ	4ñ �‹{Ðr   c                 óì  • SSK Jn  SSKJn  Uc�  Uc  SnSnO•[	        X5      (       a  UR
                  UR                  4$ [	        U[        5      (       a  UR                  nOK[	        U[        5      (       a  U R                  U5      u  pO"[	        X5      (       a  UR                  nOSnU4n[	        U[        [        45      (       aa  Ub^  UR                  5       nU HH  n[	        U[        [        45      (       d  M   Sn[!        U5       H  u  pšX‚U	   -  U
-   nM     X   X'   X	 MJ     [	        U["        [$        45      (       a  U4n['        S U 5       5      (       d  [)        S5      e[        U5      U4$ )Nr   rl   ©ÚSparseNDimArrayr-   c              3   óN   #   • U  H  n[        U[        [        45      v •  M     g 7fr   )rI   r   r
   )r`   Údims     r   ra   Ú<NDimArray._handle_ndarray_creation_inputs.<locals>.<genexpr>  s   é € ÐKÂU¸c”:˜c¤J´Ð#8×9Ð9ÂUùs   ‚#%z#Shape should contain integers only.)rn   rm   r<   r�   rI   Ú_shapeÚ_sparse_arrayr8   r>   r   r}   r   ÚdictÚcopyrW   r   Ú	enumerater   r
   ÚallÚ	TypeError)r   r=   r>   r?   rm   r�   Únew_dictÚkÚnew_keyrP   Úidxs              r   Ú_handle_ndarray_creation_inputsÚ)NDimArray._handle_ndarray_creation_inputs×   sT  € å8Ý6à‰=ØÑØ�Ø‘ä˜H×6Ñ6Ø—‘¨×(>Ñ(>Ð>Ð>ô ˜H¤i×0Ñ0Ø Ÿ™‘ô ˜H¤h×/Ñ/Ø"%×":Ñ":¸8Ó"D‘�˜%ô ˜H×1Ñ1Ø Ÿ™‘ð �Ø$˜;�ä�h¤¤t ×-Ñ-°%Ñ2CØ—}‘}“ˆHÛ�Ü˜a¤%¬ ×0Ó0Ø�GÜ"+¨A¦,™˜Ø")°!©HÑ"4°sÑ":šñ #/à(0©�HÑ%Ø šñ ô �eœj¬'Ð2×3Ñ3Ø�HˆEäÑKÁUÓK×KÑKÜÐAÓBÐBä�U‹|˜XÐ%Ð%r   c                 ó   • U R                   $ )zå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

)rJ   r   s    r   Ú__len__ÚNDimArray.__len__  s   € ð �‰Ðr   c                 ó   • U R                   $ )z 
Returns array shape (dimension).

Examples
========

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

)r…   r   s    r   r>   ÚNDimArray.shape  s   € ð �{‰{Ðr   c                 ó   • U R                   $ )z—
Returns rank of array.

Examples
========

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

)rL   r   s    r   ÚrankÚNDimArray.rank&  s   € ð �z‰zÐr   c                 óf   • SSK Jn  UR                  SS5        U" U R                  5       /UQ70 UD6$ )zí
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   ÚdiffÚNDimArray.diff5  s6   € õ 	IØ×Ñ˜* dÔ+Ù˜t×0Ñ0Ó2ÐD°TÒD¸VÑDÐDr   c                 ó.   ^• U R                  U4S j5      $ )Nc                 ó&   >• TR                  U 5      $ r   )r¡   )ÚxÚbases    €r   Ú<lambda>Ú,NDimArray._eval_derivative.<locals>.<lambda>I  s   ø€ ¨¯	©	°!¬r   )Ú	applyfunc)r    r¦   s    `r   Ú_eval_derivativeÚNDimArray._eval_derivativeG  s   ø€ à�~‰~Ô4Ó5Ð5r   c                 ó0   • [         R                  " XU5      $ r   )r   Ú_eval_derivative_n_times)r    ÚsÚns      r   r­   Ú"NDimArray._eval_derivative_n_timesK  s   € Ü×-Ò-¨d°qÓ9Ð9r   c           
      óŠ  • SSK Jn  SSKJn  [	        X5      (       aw  U" [
        R                  5      S:X  a]  [        U 5      " U R                  R                  5        VVs0 s H  u  pEU" U5      S:w  d  M  XA" U5      _M     snnU R                  5      $ [        U 5      " [        X" U 5      5      U R                  5      $ s  snnf )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   r€   ©ÚFlatten)r<   r�   Úsympy.tensor.array.arrayopr³   rI   r   ÚZeroÚtyper†   Úitemsr>   Úmap)r    r{   r�   r³   r�   Úvs         r   r©   ÚNDimArray.applyfuncN  sœ   € õ 	7Ý6ä�d×,Ñ,±´1·6±6³¸a³Ü˜”:°4×3EÑ3E×3KÑ3KÔ3MÔ[Ò3M©4¨1ÑQRÐSTÓQUÐYZÑQZ›w˜q ! A£$šwÑ3MÒ[Ð]a×]gÑ]gÓhÐhä�DŒzœ#˜a ¨£Ó/°·±Ó<Ð<ùó \s   ÁB?
Á5B?
c                 ó&  ^ ^^• UUU 4S jmT R                  5       S:X  a  TR                  T S   5      $ ST R                  ;   a&  T R                  R                   ST R                   S3$ T" T R
                  T R                  ST R
                  5      $ )Nc                 ó€  >• [        U5      S:X  aR  SSR                  [        X#5       Vs/ s H&  nTR                  TTR	                  U5         5      PM(     sn5      -   S-   $ XS   -  n SSR                  [        US   5       Vs/ s H  nT" XSS  X$U -  -   X$S-   U -  -   5      PM     sn5      -   S-   $ s  snf s  snf )Nr$   Ú[z, Ú]r   )r&   ÚjoinrM   Ú_printrZ   )rY   Ú
shape_leftrP   Újr(   r{   Úprinterr    s        €€€r   r{   ÚNDimArray._sympystr.<locals>.fd  sÌ   ø€ Ü�:‹ !Ó#Ø˜4Ÿ9™9Ô^cÐdeÔ^iÓ%jÒ^iÐYZ g§n¡n°T¸$×:OÑ:OÐPQÓ:RÑ5SÖ&TÑ^iÑ%jÓkÑkÐloÑoÐoà˜a‘=Ñ ˆBØ˜Ÿ™ÔW\Ð]gÐhiÑ]jÔWkÓ#lÒWkÐRS¡A b°Q°R¨.¸!¸b¹D¹&À!ÀqÁSÈ"ÁHÁ*Ö$MÑWkÑ#lÓmÑmÐpsÑsÐsùò &kùò $ms   ª-B6
Â$B;
r   r-   z([], Ú))r˜   rÀ   r>   r   r/   rJ   )r    rÃ   r{   s   ``@r   Ú	_sympystrÚNDimArray._sympystrc  sv   ú€ ÷	tð �9‰9‹;˜!ÓØ—>‘> $ r¡(Ó+Ð+Ø�—
‘
‹?Ø—n‘n×-Ñ-Ð.¨e°D·J±J°<¸qÐAÐAÙ�—‘ $§*¡*¨a°·±ÓAÐAr   c                 óf   ^ ^• UU 4S jmT" T R                   T R                  ST R                   5      $ )zç
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                 ó  >• [        U5      S:X  a.  [        X#5       Vs/ s H  nTTR                  U5         PM     sn$ / nXS   -  n [        US   5       H,  nUR                  T" XSS  X$U -  -   X$S-   U -  -   5      5        M.     U$ s  snf )Nr$   r   )r&   rM   rZ   rU   )rY   rÁ   rP   rÂ   r(   rx   r{   r    s         €€r   r{   ÚNDimArray.tolist.<locals>.f�  s’   ø€ Ü�:‹ !Ó#Ü@EÀaÄÓLÂ¸1˜˜T×2Ñ2°1Ó5Ô6ÁÑLÐLØˆFØ˜a‘=Ñ ˆBÜ˜: a™=Ö)�Ø—‘™a ¨q¨r N°A¸±d±F¸AÀ¹sÀB¹h¹JÓGÖHñ *àˆMùò Ms   žBr   )rJ   r>   )r    r{   s   `@r   ÚtolistÚNDimArray.tolistq  s'   ù€ ö 	ñ �—‘ $§*¡*¨a°·±ÓAÐAr   c                 ó,  • SSK Jn  [        U[        5      (       d  [        $ U R
                  UR
                  :w  a  [        S5      e[        U" U 5      U" U5      5       VVs/ s H	  u  p4X4-   PM     nnn[        U 5      " XPR
                  5      $ s  snnf ©Nr   r²   zarray shape mismatch©	r´   r³   rI   r8   ÚNotImplementedr>   rK   re   r¶   ©r    Úotherr³   rP   rÂ   Úresult_lists         r   Ú__add__ÚNDimArray.__add__Œ  óv   € Ý6ä˜%¤×+Ñ+Ü!Ð!à�:‰:˜Ÿ™Ó$ÜÐ3Ó4Ð4Ü&)©'°$«-¹À»Ô&HÔIÒ&H™s˜q�q”sÑ&HˆÑIä�DŒz˜+§z¡zÓ2Ð2ùó Jó   Á"Bc                 ó,  • SSK Jn  [        U[        5      (       d  [        $ U R
                  UR
                  :w  a  [        S5      e[        U" U 5      U" U5      5       VVs/ s H	  u  p4X4-
  PM     nnn[        U 5      " XPR
                  5      $ s  snnf rÎ   rÏ   rÑ   s         r   Ú__sub__ÚNDimArray.__sub__˜  rÖ   r×   c           	      ó  • SSK Jn  SSKJn  SSKJn  [        U[        [        U45      (       a  [        S5      e[        U5      n[        X5      (       ay  UR                  (       a  [        U 5      " 0 U R                  5      $ [        U 5      " U R                  R                  5        VVs0 s H
  u  pVXQU-  _M     snnU R                  5      $ U" U 5       Vs/ s H  owU-  PM	     nn[        U 5      " X€R                  5      $ s  snnf s  snf ©Nr   rl   r€   r²   z=scalar expected, use tensorproduct(...) for tensorial product©rn   rm   r<   r�   r´   r³   rI   r   r8   rK   r   Úis_zeror¶   r>   r†   r·   ©	r    rÒ   rm   r�   r³   r�   r¹   rP   rÓ   s	            r   Ú__mul__ÚNDimArray.__mul__¤  sÑ   € Ý8Ý6Ý6ä�eœh¬	°:Ð>×?Ñ?ÜÐ\Ó]Ð]ä˜“ˆÜ�d×,Ñ,Ø�}�}Ü˜D”z " d§j¡jÓ1Ð1Ü˜”:¸×8JÑ8J×8PÑ8PÔ8RÔSÒ8R©f¨q˜q¨¡'šzÑ8RÒSÐUY×U_ÑU_Ó`Ð`á(/°¬Ó6ª 1˜”w©ˆÐ6Ü�DŒz˜+§z¡zÓ2Ð2ùó Tùâ6ó   Â*D
ÃD	c           	      ó  • SSK Jn  SSKJn  SSKJn  [        U[        [        U45      (       a  [        S5      e[        U5      n[        X5      (       ay  UR                  (       a  [        U 5      " 0 U R                  5      $ [        U 5      " U R                  R                  5        VVs0 s H
  u  pVXQU-  _M     snnU R                  5      $ U" U 5       Vs/ s H  oqU-  PM	     nn[        U 5      " X€R                  5      $ s  snnf s  snf rÜ   rÝ   rß   s	            r   Ú__rmul__ÚNDimArray.__rmul__µ  sÑ   € Ý8Ý6Ý6ä�eœh¬	°:Ð>×?Ñ?ÜÐ\Ó]Ð]ä˜“ˆÜ�d×,Ñ,Ø�}�}Ü˜D”z " d§j¡jÓ1Ð1Ü˜”:¸×8JÑ8J×8PÑ8PÔ8RÔSÒ8R©f¨q˜q¨¡'šzÑ8RÒSÐUY×U_ÑU_Ó`Ð`á(/°¬Ó6ª 1˜Q”w©ˆÐ6Ü�DŒz˜+§z¡zÓ2Ð2ùó Tùâ6râ   c           	      óê  • SSK Jn  SSKJn  SSKJn  [        U[        [        U45      (       a  [        S5      e[        U5      n[        X5      (       a`  U[        R                  :w  aL  [        U 5      " U R                  R                  5        VVs0 s H
  u  pVXVU-  _M     snnU R                   5      $ U" U 5       Vs/ s H  owU-  PM	     nn[        U 5      " X€R                   5      $ s  snnf s  snf )Nr   rl   r€   r²   zscalar expected)rn   rm   r<   r�   r´   r³   rI   r   r8   rK   r   r   rµ   r¶   r†   r·   r>   rß   s	            r   Ú__truediv__ÚNDimArray.__truediv__Æ  s¿   € Ý8Ý6Ý6ä�eœh¬	°:Ð>×?Ñ?ÜÐ.Ó/Ð/ä˜“ˆÜ�d×,Ñ,°¼!¿&¹&³Ü˜”:¸×8JÑ8J×8PÑ8PÔ8RÔSÒ8R©f¨q˜q E¡'šzÑ8RÒSÐUY×U_ÑU_Ó`Ð`á(/°¬Ó6ª 1˜”w©ˆÐ6Ü�DŒz˜+§z¡zÓ2Ð2ùó Tùâ6s   ÂC*
Â?C0c                 ó   • [        S5      e)Nz"unsupported operation on NDimArrayrB   ©r    rÒ   s     r   Ú__rtruediv__ÚNDimArray.__rtruediv__Õ  s   € Ü!Ð"FÓGÐGr   c                 óJ  • SSK Jn  SSKJn  [	        X5      (       aJ  [        U 5      " U R                  R                  5        VVs0 s H  u  p4X4* _M
     snnU R                  5      $ U" U 5       Vs/ s H  oU* PM     nn[        U 5      " X`R                  5      $ s  snnf s  snf )Nr   r€   r²   )	r<   r�   r´   r³   rI   r¶   r†   r·   r>   )r    r�   r³   r�   r¹   rP   rÓ   s          r   Ú__neg__ÚNDimArray.__neg__Ø  s…   € Ý6Ý6ä�d×,Ñ,Ü˜”:°4×3EÑ3E×3KÑ3KÔ3MÔNÒ3M©¨!˜q "šuÑ3MÒNÐPT×PZÑPZÓ[Ð[á#*¨4¤=Ó1¢=˜a“r¡=ˆÐ1Ü�DŒz˜+§z¡zÓ2Ð2ùó Oùâ1s   ÁB
Á1B c                 ó   ^ • U 4S jnU" 5       $ )Nc               3   óŒ   >#   • TR                   (       a'  [        TR                   S   5       H
  n TU    v •  M     g TS   v •  g 7f)Nr   r-   )r…   rM   )rP   r    s    €r   ÚiteratorÚ$NDimArray.__iter__.<locals>.iteratorã  s8   øé € Ø�{�{Ü˜tŸ{™{¨1™~Ö.�AØ˜q™'”Mò /ð ˜2‘h“ùs   ƒAAr-   )r    rò   s   ` r   Ú__iter__ÚNDimArray.__iter__â  s   ø€ õ	ñ ‹zÐr   c                 ó4  • SSK Jn  [        U[        5      (       d  gU R                  UR                  :X  d  g[        X5      (       a;  [        X5      (       a+  [        U R                  5      [        UR                  5      :H  $ [        U 5      [        U5      :H  $ )ab  
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   r€   F)r<   r�   rI   r8   r>   r‡   r†   Úlist)r    rÒ   r�   s      r   Ú__eq__ÚNDimArray.__eq__ì  ss   € õ* 	7Ü˜%¤×+Ñ+Øà�z‰z˜UŸ[™[Ó(Øä�d×,Ñ,´¸E×1SÑ1SÜ˜×*Ñ*Ó+¬t°E×4GÑ4GÓ/HÑHÐHä�D‹zœT %›[Ñ(Ð(r   c                 ó   • X:X  + $ r   r-   rê   s     r   Ú__ne__ÚNDimArray.__ne__  s   € ØÒ Ð r   c                 ó^   • U R                  5       S:w  a  [        S5      eSSKJn  U" U S5      $ )Né   zarray rank not 2r$   )Úpermutedims)r$   r   )r˜   rK   Úarrayoprÿ   )r    rÿ   s     r   Ú_eval_transposeÚNDimArray._eval_transpose  s,   € Ø�9‰9‹;˜!ÓÜÐ/Ó0Ð0Ý(Ù˜4 Ó(Ð(r   c                 ó"   • U R                  5       $ r   )r  r   s    r   Ú	transposeÚNDimArray.transpose  ó   € Ø×#Ñ#Ó%Ð%r   c                 ó˜   • SSK Jn  U R                  U" U 5       Vs/ s H  o"R                  5       PM     snU R                  5      $ s  snf )Nr   r²   )r´   r³   ÚfuncÚ	conjugater>   )r    r³   rP   s      r   Ú_eval_conjugateÚNDimArray._eval_conjugate  s4   € Ý6à�y‰y±¸´Ó?²¨AŸ+™+ž-±Ñ?ÀÇÁÓLÐLùÒ?s   œAc                 ó"   • U R                  5       $ r   )r
  r   s    r   r	  ÚNDimArray.conjugate  r  r   c                 ó>   • U R                  5       R                  5       $ r   )r  r	  r   s    r   Ú_eval_adjointÚNDimArray._eval_adjoint!  s   € Ø�~‰~Ó×)Ñ)Ó+Ð+r   c                 ó"   • U R                  5       $ r   )r  r   s    r   ÚadjointÚNDimArray.adjoint$  s   € Ø×!Ñ!Ó#Ð#r   c                 ó®   • [        U[        5      (       d  U4$ UR                  U5      u  p4n[        XC-
  U-  5       Vs/ s H	  ocXe-  -   PM     sn$ s  snf r   )rI   ÚsliceÚindicesrM   )r    r®   rƒ   ÚstartÚstopÚsteprP   s          r   Ú_slice_expandÚNDimArray._slice_expand'  sR   € Ü˜!œU×#Ñ#Ø�t�ØŸI™I c›NÑˆ�TÜ(-¨t©z¸DÑ.@Ô(AÓBÒ(A 1˜™”Ñ(AÑBÐBùÒBs   ¿Ac                 óª   • [        XR                  5       VVs/ s H  u  p#U R                  X#5      PM     nnn[        R                  " U6 nXE4$ s  snnf r   )re   r>   r  Ú	itertoolsÚproduct)r    rE   rP   rƒ   Ú
sl_factorsÚeindicess         r   Ú _get_slice_data_for_array_accessÚ*NDimArray._get_slice_data_for_array_access-  sM   € ÜADÀUÏJÉJÔAWÔXÒAW±X°a�d×(Ñ(¨Ö0ÑAWˆ
ÑXÜ×$Ò$ jÐ1ˆØÐ#Ð#ùó Ys   ™Ac                 óê   • [        U[        5      (       d  [        U 5      " U5      nU R                  U5      u  p4U Vs/ s H%  n[        U[        5      (       a  [        U5      OS PM'     nnX$U4$ s  snf r   )rI   r8   r¶   r!  r÷   Úmin)r    rE   ro   r  r   rP   Úslice_offsetss          r   Ú$_get_slice_data_for_array_assignmentÚ.NDimArray._get_slice_data_for_array_assignment2  sj   € Ü˜%¤×+Ñ+Ü˜”J˜uÓ%ˆEØ#×DÑDÀUÓKÑˆ
ÙJTÓUÊ*ÀQ¤:¨a´×#6Ñ#6œ˜Qœ¸DÒ@É*ˆÐUà Ð-Ð-ùò Vs   ¾,A0c                 ó†   • US:X  a  [        U5      S:w  a  [        S5      eUS:X  a  [        U5      S:”  a  [        S5      eg g )Nr-   r$   z*arrays without shape need one scalar valuert   r   z/if array shape is (0,) there cannot be elements)r&   rK   )r   Ú	flat_listr>   s      r   Ú_check_special_boundsÚNDimArray._check_special_bounds:  sE   € à�B‹;œ3˜y›>¨QÓ.ÜÐIÓJÐJØ�D‹=œS ›^¨aÓ/ÜÐNÓOÐOð 0ˆ=r   c           	      óT  • [        U[        [        [        45      (       a  U4n[	        U5      U R                  5       :  a?  [        U5      [        S [        [	        U5      U R                  5       5       5       5      -   n[	        U5      U R                  5       :”  a  [        S5      eU$ )Nc              3   ó8   #   • U  H  n[        S 5      v •  M     g 7fr   )r  r_   s     r   ra   Ú5NDimArray._check_index_for_getitem.<locals>.<genexpr>G  s   é € ÐTÒ5S°¤ d§ Ò5Sùs   ‚z-Dimension of index greater than rank of array)	rI   r   r
   r  r&   r˜   rW   rM   rK   rD   s     r   Ú_check_index_for_getitemÚ"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-   r   )NN)0r/   r0   r1   r2   r3   Ú	_diff_wrtÚ	is_scalarr   rF   rQ   rZ   ri   rp   r4   r}   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/  r5   r-   r   r   r8   r8   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   r8   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚImmutableNDimArrayiO  g      &@c                 ó.   • [         R                  " U 5      $ r   )r   Ú__hash__r   s    r   r7  ÚImmutableNDimArray.__hash__R  s   € Ü�~Š~˜dÓ#Ð#r   c                 ó   • U $ r   r-   r   s    r   rŸ   ÚImmutableNDimArray.as_immutableU  s   € Øˆr   c                 ó   • [        S5      e)Nzabstract methodrB   r   s    r   Ú
as_mutableÚImmutableNDimArray.as_mutableX  s   € Ü!Ð"3Ó4Ð4r   r-   N)	r/   r0   r1   r2   Ú_op_priorityr7  rŸ   r<  r5   r-   r   r   r5  r5  O  s   † Ø€Lò$òõ5r   r5  )Ú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   r8   r5  r-   r   r   Ú<module>rI     sU   ðÝ "ß /Ý  ß ;Ñ ;Ý &Ý "Ý &Ý *Ý -ã Ý $ôD#�ô D#ôNv�	ô vôr
5˜ Eõ 
5r   