
    \hJ                         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      U/var/www/auris/envauris/lib/python3.13/site-packages/sympy/tensor/array/ndim_array.pyr   ArrayKind.__new__D   s    goc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ffe
,z?a"IH$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)/	NDimArrayV   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    ej'233' !ABBL??aBCCu:#9::
tzz"ADJJqM)ux4::a=./H CJ!69I!IJJx!|a
#JJqM1EH<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LL+, 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%     PKq
1d#9Q[[9Ks   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 8uuhPKPPP!+zz:
UtO!,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eh
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    gx00y"}$7|q 4xF!81!A$!89ME3v;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  pXU	   -  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     KUc:cJ#899Us   #%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(>(>>> Hi00  Hh//"%":":8"D% H11  $;ht--%2C}}Ha%00G"+A,")!H"4s": #/(0H%   ej'233HEKUKKKABBU|X%%r   c                     U R                   $ )zOverload 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     zz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DTDV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    --dq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,,166a:43E3E3K3K3M[3M41QRSTQUYZQZwq!A$w3M[]a]g]ghhDz#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    :!#499^cde^i%j^iYZgnnT$:O:OPQ:R5S&T^i%jkkloooa= BW\]ghi]jWk#lWkRSAbQR.!bD&!qS"H*$MWk#lmmps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 99;!>>$r(++

?nn--.eDJJ<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    :!#@EaL1T22156LLFa= B:a=)aqrNAdFAsBhJ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&Hsqqs&HIDz+zz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      " XR                  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eh	:>??\]]d,,}}Dz"djj11:8J8J8P8P8RS8Rfqq'z8RSUYU_U_``(/61w6Dz+zz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      " XR                  5      $ s  snnf s  snf r   r   r   s	            r   __rmul__NDimArray.__rmul__  s    866eh	:>??\]]d,,}}Dz"djj11:8J8J8P8P8RS8Rfqq'z8RSUYU_U_``(/61Qw6Dz+zz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      " XR                   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eh	:>??.//d,,!&&:8J8J8P8P8RS8RfqqE'z8RSUYU_U_``(/61w6Dz+zz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,,:43E3E3K3K3MN3M!q"u3MNPTPZPZ[[#*4=1=ar=1Dz+zz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 / 2h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%++zzU[[(d,,E1S1S**+tE4G4G/HHHDzT%[((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,    99;!/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yy?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IIcNT(-tzD.@(AB(A1(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    ADUJJAWXAWXad((0AW
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    %++Ju%E#DDU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;3y>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     T5Sd5Ss   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    ej'59::HEu:		#%LTU3u:tyy{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   