
    Ug-X                         d Z dZg dZddlZddlmZ ddl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mZmZmZmZmZmZmZ  G d deee          Zd Z G d dee          Z G d de	e          ZdS )zDictionary Of Keys based matrixzrestructuredtext en)	dok_array
dok_matrixisspmatrix_dok    N)warn   )spmatrix)_spbasesparrayissparse)
IndexMixin)isdensegetdtypeisshape	isintlikeisscalarlikeupcastupcast_scalarcheck_shapec                       e Zd ZdZd@dZd ZdAdZd Zej        j	        e_	        ej        j	        e_	        d Z
d	 ZdAd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdBdZ fdZd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$ fd$Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2dC fd3	Z3dDd4Z4ej4        j	        e4_	        d5 Z5d6 Z6ej6        j	        e6_	        e7dEd8            Z8dFd9Z9ej9        j	        e9_	        dFd:Z:ej:        j	        e:_	        dFd;Z;ej;        j	        e;_	        d< Z<ej<        j	        e<_	        dGd?Z= xZ>S )H	_dok_basedokNFc                 D   t          j        | |           t          | t                    }t          |t                    rKt          ||          r:t          ||          | _        i | _        t          |t                    | _        d S t          |          r|j        | j        k    r|r|                                n|}n|                                }||                    |d          }|j        | _        t          |j        |          | _        |j        | _        d S 	 t%          j        |          }n"# t(          $ r}t+          d          |d }~ww xY w|j        dk    rt+          d          |j        dk    rB||                    |          }d	 t/          |          D             | _        |j        | _        nA|                     ||
                                          }|j        | _        |j        | _        t          |j        |          | _        d S )Nallow_1d)defaultFcopyzInvalid input format.   z(Expected rank <=2 dense array or matrix.r   c                 &    i | ]\  }}|d k    ||S r    ).0ivs      P/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/sparse/_dok.py
<dictcomp>z&_dok_base.__init__.<locals>.<dictcomp>5   s#    IIItq!!q&&a&&&    dtype)r	   __init__
isinstancer
   tupler   r   _shape_dictr   floatr)   r   formatr   todokastypeshapenpasarray	Exception	TypeErrorndim	enumerate_coo_container)selfarg1r3   r)   r   is_arrayeds           r%   r*   z_dok_base.__init__   s   t$$$dG,,dE"" "	Ewth'G'G'G "	E%dX>>>DKDJ!%777DJJJd^^ 	E{dk))&*4tyy{{{zz|| {{5u{55DJ%dj8DDDDKDJJJ@z$'' @ @ @ 788a?@ y1}} JKKKyA~~$;;u--DIIyIII
!Z

''E'::@@BBW
W
%dj8DDDDKKKs   &D; ;
EEEc                      t          d          )Nz2Direct update to DOK sparse format is not allowed.)NotImplementedError)r;   vals     r%   updatez_dok_base.update=   s    !"VWWWr'   c                 L    |t          d          t          | j                  S )Nz7_getnnz over an axis is not implemented for DOK format.)rA   lenr.   )r;   axiss     r%   _getnnzz_dok_base._getnnzA   s-    %I   4:r'   c                 X    t          d |                                 D                       S )Nc              3   "   K   | ]
}|d k    V  dS r   Nr!   )r"   xs     r%   	<genexpr>z*_dok_base.count_nonzero.<locals>.<genexpr>I   s&      11a16111111r'   )sumvaluesr;   s    r%   count_nonzeroz_dok_base.count_nonzeroH   s'    114;;==111111r'   c                 *    t          | j                  S N)rE   r.   rO   s    r%   __len__z_dok_base.__len__N   s    4:r'   c                     || j         v S rR   r.   r;   keys     r%   __contains__z_dok_base.__contains__Q   s    dj  r'   c                8    | j                             ||          S rR   )r.   
setdefault)r;   rW   r   s      r%   rZ   z_dok_base.setdefaultT   s    z$$S'222r'   c                    | j         |= d S rR   rU   rV   s     r%   __delitem__z_dok_base.__delitem__W   s    JsOOOr'   c                 4    | j                                         S rR   )r.   clearrO   s    r%   r^   z_dok_base.clearZ       z!!!r'   c                      | j         j        | S rR   )r.   pop)r;   argss     r%   ra   z_dok_base.pop]   s    tz~t$$r'   c                      t          d          )Nz*reversed is not defined for dok_array type)r7   rO   s    r%   __reversed__z_dok_base.__reversed__`   s    DEEEr'   c                 |    t          |           j         dt          |          j         }t          d|           Nz and z unsupported operand type for |: type__name__r7   r;   other
type_namess      r%   __or__z_dok_base.__or__c   >    T

+HH$u++2FHH
G:GGHHHr'   c                 |    t          |           j         dt          |          j         }t          d|           rf   rg   rj   s      r%   __ror__z_dok_base.__ror__g   rn   r'   c                 |    t          |           j         dt          |          j         }t          d|           rf   rg   rj   s      r%   __ior__z_dok_base.__ior__k   rn   r'   c                 4    | j                                         S rR   )r.   popitemrO   s    r%   rt   z_dok_base.popitemo   s    z!!###r'   c                 4    | j                                         S rR   )r.   itemsrO   s    r%   rv   z_dok_base.itemsr   r_   r'   c                 4    | j                                         S rR   )r.   keysrO   s    r%   rx   z_dok_base.keysu   s    z   r'   c                 4    | j                                         S rR   )r.   rN   rO   s    r%   rN   z_dok_base.valuesx   s    z  """r'           c                 v   || j         v r| j         |         S t          |          r| j        dk    r|f}| j        t          |          k    rt	          d| d          	 |D ]}t          |          sJ n/# t
          t          t          f$ r}t	          d          |d}~ww xY wt          d t          || j
                  D                       }t          d t          || j
                  D                       rt	          d          | j        dk    r|d	         }| j                             ||          S )
z>This provides dict.get method functionality with type checkingr   zIndex z! length needs to match self.shapez%Index must be or consist of integers.Nc              3   6   K   | ]\  }}|d k     r||z   n|V  dS rJ   r!   r"   r#   Ms      r%   rL   z _dok_base.get.<locals>.<genexpr>   s6      KKdaQUUAEEKKKKKKr'   c              3   4   K   | ]\  }}|d k     p||k    V  dS rJ   r!   r}   s      r%   rL   z _dok_base.get.<locals>.<genexpr>   s2      @@41aq1uQ@@@@@@r'   zIndex out of bounds.r   )r.   r   r8   rE   
IndexErrorAssertionErrorr7   
ValueErrorr,   zipr3   anyget)r;   rW   r   r#   r>   s        r%   r   z_dok_base.get{   s]   $*:c?"S>> 	di1nn&C9C  LcLLLMMM	M $ $ ||####$	:6 	M 	M 	MDEE1L	MKKc#tz6J6JKKKKK@@3sDJ+?+?@@@@@ 	534449>>a&Cz~~c7+++s    A7 7B#BB#c                    | j         dk    r!t                                          |          S t          |t                    rt          |          dk    r|d         }t          t          j        f}t          ||          rQ|dk     r|| j	        d         z  }|dk     s|| j	        d         k    rt          d          |                     |          S t          d          )Nr   r   r   index value out of boundsz4array/slice index for 1d dok_array not yet supported)r8   super__getitem__r+   r,   rE   intr4   integerr3   r   _get_int)r;   rW   	INT_TYPES	__class__s      r%   r   z_dok_base.__getitem__   s    9>>77&&s+++c5!! 	c#hh!mma&C"*%	c9%% 	UQwwtz"~%Qww#B// !<=====%%%STTTr'   c                 h    | j                             || j                            d                    S Nr   r.   r   r)   rh   )r;   idxs     r%   r   z_dok_base._get_int   s&    z~~c4:??1#5#5666r'   c                 l    | j                             ||f| j                            d                    S r   r   r;   rowcols      r%   _get_intXintz_dok_base._get_intXint   s*    z~~sCj$*//!*<*<===r'   c                 P    |                      t          ||dz             |          S Nr   _get_sliceXsliceslicer   s      r%   _get_intXslicez_dok_base._get_intXslice   s&    $$U3a%8%8#>>>r'   c                 P    |                      |t          ||dz                       S r   r   r   s      r%   _get_sliceXintz_dok_base._get_sliceXint   s&    $$S%S1W*=*=>>>r'   c                 (   |                     | j        d                   \  }}}|                     | j        d                   \  }}}t          |||          }	t          |||          }
t          |	          t          |
          f}t          |           d|d         z  |d         z  k    r|                     |	|
          S |                     || j                  }|                                 D ]}t          t          |d                   |z
  |          \  }}|dk    s|dk     s||d         k    rDt          t          |d                   |z
  |          \  }}|dk    s|dk     s||d         k    r| j
        |         |j
        ||f<   |S )Nr   r   r   r(   )indicesr3   rangerE   _get_columnXarray_dok_containerr)   rx   divmodr   r.   )r;   r   r   	row_startrow_stoprow_step	col_startcol_stopcol_step	row_range	col_ranger3   newdokrW   r#   rijrjs                     r%   r   z_dok_base._get_sliceXslice   s   (+DJqM(B(B%	8X(+DJqM(B(B%	8X)Xx88	)Xx88	YY0 t99E!HuQx///)))Y???$$U$*$==99;; 	1 	1C3s1v;;2H==EArQww!a%%1a==3s1v;;2H==EArQww!a%%1a==!%CFLAr'   c                 X    |                                 }|                     |g|          S rR   squeezer   r   s      r%   _get_intXarrayz_dok_base._get_intXarray   s'    kkmm%%seS111r'   c                 X    |                                 }|                     ||g          S rR   r   r   s      r%   _get_arrayXintz_dok_base._get_arrayXint   s'    kkmm%%cC5111r'   c                     t          t          |                    | j        d                              }|                     ||          S r   listr   r   r3   r   r   s      r%   _get_sliceXarrayz_dok_base._get_sliceXarray   <    5#++djm44566%%c3///r'   c                     t          t          |                    | j        d                              }|                     ||          S r   r   r   s      r%   _get_arrayXslicez_dok_base._get_arrayXslice   r   r'   c                     |                      t          |          t          |          f| j                  }t          |          D ]E\  }}t          |          D ]0\  }}| j                            ||fd          }|r||j        ||f<   1F|S )Nr(   r   )r   rE   r)   r9   r.   r   )	r;   r   r   r   r#   rr   cr$   s	            r%   r   z_dok_base._get_columnXarray   s    $$c#hhC%9$LLcNN 	+ 	+DAq!# + +1JNNAq61-- +)*FLA&+ r'   c                    t          t          j        t          j        ||                    \  }}|                     |j        | j                  }t          j        t          |j        d                   t          |j        d                             D ]7}| j
                            ||         ||         fd          }|r
||j
        |<   8|S )Nr(   r   r   )mapr4   
atleast_2dbroadcast_arraysr   r3   r)   	itertoolsproductr   r.   r   )r;   r   r   r#   r   r   rW   r$   s           r%   _get_arrayXarrayz_dok_base._get_arrayXarray   s    2=""5c3"?"?@@1$$QWDJ$??$U171:%6%6agaj8I8IJJ 	& 	&C
##/33A &$%S!r'   c                    | j         dk    r"t                                          ||          S t          |t                    rt          |          dk    r|d         }t          t          j        f}t          ||          rR|dk     r|| j	        d         z  }|dk     s|| j	        d         k    rt          d          |                     ||          S t          d          )Nr   r   r   r   r   z-array index for 1d dok_array not yet provided)r8   r   __setitem__r+   r,   rE   r   r4   r   r3   r   _set_int)r;   rW   valuer   r   s       r%   r   z_dok_base.__setitem__   s    9>>77&&sE222c5!! 	c#hh!mma&C"*%	c9%% 	NQwwtz"~%Qww#B// !<=====e,,,LMMMr'   c                 H    |r|| j         |<   d S || j         v r
| j         |= d S d S rR   rU   )r;   r   rK   s      r%   r   z_dok_base._set_int   s;     	 DJsOOODJ
3 r'   c                 P    ||f}|r|| j         |<   d S || j         v r
| j         |= d S d S rR   rU   )r;   r   r   rK   rW   s        r%   _set_intXintz_dok_base._set_intXint  sD    Cj 	 DJsOOODJ
3 r'   c                    t          t          t          |                                                    }t          t          t          |                                                    }|                                }| j                            t          t          ||          |                     t          j        |dk              d         D ]+}||         ||         f}| j        |         dk    r| j        |= ,d S r   )	r   r   r   ravelr.   rC   r   r4   nonzero)r;   r   r   rK   r#   rW   s         r%   _set_arrayXarrayz_dok_base._set_arrayXarray  s    3sCIIKK(())3sCIIKK(())GGII
#c#smmQ//000AF##A& 	$ 	$Aq63q6"Cz#!##JsO		$ 	$r'   c                 "   t          |          rxt          | j        |          }|                     | j        |          t          j        d | j        D              D ]'}| j                            |d          |z   }|r||<   (nt          |          rH|j        | j        k    rt          d          t          | j        |j                  }|                     | j        |          | j                                        _        |j        dk    r|                                }na|                                }| j        dk    r!t#          |j        d         |j                  }n!t#          t#          |j         |j                  }t)          j        d          5  j                            fd	|D                        d d d            n# 1 swxY w Y   n.t/          |          r|                                 |z   nt2          S S )
Nr(   c                 ,    g | ]}t          |          S r!   )r   )r"   r?   s     r%   
<listcomp>z%_dok_base.__add__.<locals>.<listcomp>  s    *H*H*H588*H*H*Hr'   r   z Matrix dimensions are not equal.r   r   ignore)overc              3   8   K   | ]\  }}||         |z   fV  d S rR   r!   )r"   kr$   news      r%   rL   z$_dok_base.__add__.<locals>.<genexpr>/  s3       E ETQ!SVaZ E E E E E Er'   )r   r   r)   r   r3   r   r   r.   r   r   r   r   r   r0   rv   tocoor8   r   coordsdatar4   errstaterC   r   todenseNotImplemented)r;   rk   	res_dtyperW   aijo_itemsr   s         @r%   __add__z_dok_base.__add__  s<    	"%dj%88I%%dj	%BBC (*H*HTZ*H*H*HI # #jnnS!,,u4 #"CH# e__ 	"{dj(( !CDDDtz5;77I%%dj	%BBC
))CI|u$$++--9>>!%,q/5:>>GG!#u|"4ejAAG(+++ F F	   E E E EW E E EEEEF F F F F F F F F F F F F F FU^^ 	",,..5(CC!!
s   "'GGGc                     | |z   S rR   r!   r;   rk   s     r%   __radd__z_dok_base.__radd__6  s    e|r'   c                     | j         j        dk    rt          d          |                     | j        | j                   }|j                            d |                                 D                        |S )Nbz2Negating a sparse boolean matrix is not supported.r(   c              3   &   K   | ]\  }}|| fV  d S rR   r!   )r"   r   r$   s      r%   rL   z$_dok_base.__neg__.<locals>.<genexpr>?  s,      ::TQ!aR::::::r'   )r)   kindrA   r   r3   r.   rC   rv   r;   r   s     r%   __neg__z_dok_base.__neg__9  sv    :?c!!%D   !!$*DJ!??	::TZZ\\::::::
r'   c                     t          | j                  }|                     | j        |          }|j                            fd|                                 D                        |S )Nr(   c              3   ,   K   | ]\  }}||z  fV  d S rR   r!   r"   r   r$   rk   s      r%   rL   z(_dok_base._mul_scalar.<locals>.<genexpr>F  s/      BBTQ1a%i.BBBBBBr'   )r   r)   r   r3   r.   rC   rv   r;   rk   r   r   s    `  r%   _mul_scalarz_dok_base._mul_scalarB  sf    !$*e44	!!$*I!>>	BBBBTZZ\\BBBCCC
r'   c                     t           j        j                  } j        dk    rt                    rj        dk    r*                                                                 z  }n4                                                                 j        d         z  } |t           fd|D                                 S t                    r6 |t          fd 
                                D                                 S t          S t          j         j        d         |          } 
                                D ]!\  \  }}}||xx         ||         z  z  cc<   "|S )Nr   r   r   c              3   N   K   | ]}j         |         j         |         z  V   d S rR   rU   )r"   r   rk   r;   s     r%   rL   z+_dok_base._matmul_vector.<locals>.<genexpr>S  s4      $R$RTZ]U[^%C$R$R$R$R$R$Rr'   c              3   4   K   | ]\  }}|         |z  V  d S rR   r!   r   s      r%   rL   z+_dok_base._matmul_vector.<locals>.<genexpr>U  s/      $K$KdaU1X\$K$K$K$K$K$Kr'   r(   )r   r)   r8   r   r0   rx   r   r   rM   r   rv   r   r4   zerosr3   )r;   rk   r   rx   resultr#   r   r$   s   ``      r%   _matmul_vectorz_dok_base._matmul_vectorI  sV   4:u{33	 9>> 	&<5((99;;5DD99;;)=a)@@D y$R$R$R$R$RT$R$R$R!R!RSSS & y$K$K$K$Kdjjll$K$K$K!K!KLLL%% $*Q-y999 	& 	&IFQA1IIIU1X%IIIIr'   c                    t          | j        j                  }| j        dk    r2t          fd| j                                        D                       S | j        d         }j        dk    r|fn|j        d         f}t          j        ||          }|                                 D ]!\  \  }}}||xx         ||         z  z  cc<   "|S )Nr   c              3   4   K   | ]\  }}||         z  V  d S rR   r!   )r"   r   r$   rk   s      r%   rL   z0_dok_base._matmul_multivector.<locals>.<genexpr>d  s/      CC1q58|CCCCCCr'   r   r(   )	r   r)   r8   rM   r.   rv   r3   r4   r   )	r;   rk   result_dtyper~   	new_shaper   r#   r   r$   s	    `       r%   _matmul_multivectorz_dok_base._matmul_multivector_  s    dj%+669>>CCCC
0@0@0B0BCCCCCC JqM!J!OOQDD!U[^1D	)<888 	& 	&IFQA1IIIU1X%IIIIr'   c                     t                    r:| j                            fd|                                 D                        | S t          S )Nc              3   ,   K   | ]\  }}||z  fV  d S rR   r!   r   s      r%   rL   z%_dok_base.__imul__.<locals>.<genexpr>p  /      FFAq!e)nFFFFFFr'   r   r.   rC   rv   r   r   s    `r%   __imul__z_dok_base.__imul__n  Q     	JFFFFFFFFFFKr'   c                 &   t                    rkt          | j                  }|                     | j        |          }|j                            fd|                                 D                        |S |                                 z  S )Nr(   c              3   ,   K   | ]\  }}||z  fV  d S rR   r!   r   s      r%   rL   z(_dok_base.__truediv__.<locals>.<genexpr>x  r  r'   )	r   r   r)   r   r3   r.   rC   rv   tocsrr   s    `  r%   __truediv__z_dok_base.__truediv__t  s     	%dj%88I%%dj	%BBCIFFFFFFFGGGJzz||e##r'   c                     t                    r:| j                            fd|                                 D                        | S t          S )Nc              3   ,   K   | ]\  }}||z  fV  d S rR   r!   r   s      r%   rL   z)_dok_base.__itruediv__.<locals>.<genexpr>~  r  r'   r  r   s    `r%   __itruediv__z_dok_base.__itruediv__|  r  r'   c                 6    t                               |           S rR   )dict
__reduce__rO   s    r%   r  z_dok_base.__reduce__  s     t$$$r'   r   c                 z    | j         dk    r!t                                          |          S t          d          )Nr   z diagonal requires two dimensions)r8   r   diagonalr   )r;   r   r   s     r%   r  z_dok_base.diagonal  s5    9>>77##A&&&;<<<r'   c                 0   | j         dk    r|                                 S ||dk    rt          d          | j        \  }}|                     ||f| j        |          }|j                            d |                                 D                        |S )Nr   )r   r   zvSparse arrays/matrices do not support an 'axes' parameter because swapping dimensions is the only logical permutation.)r)   r   c              3   .   K   | ]\  \  }}}||f|fV  d S rR   r!   r"   leftrightrB   s       r%   rL   z&_dok_base.transpose.<locals>.<genexpr>  s4      VV3E=D%#E4=#.VVVVVVr'   )	r8   r   r   r3   r   r)   r.   rC   rv   )r;   axesr   r~   Nr   s         r%   	transposez_dok_base.transpose  s    9>>99;;>   z1!!1a&
!FF	VVVVVWWW
r'   c                 L   d}t          |t          d           | j        dk    r4|                                 }|j                                        |_        |S | j        \  }}|                     ||f| j                  }d | 	                                D             |_
        |S )zDEPRECATED: Return the conjugate transpose.

        .. deprecated:: 1.14.0

            `conjtransp` is deprecated and will be removed in v1.16.0.
            Use `.T.conj()` instead.
        zS`conjtransp` is deprecated and will be removed in v1.16.0. Use `.T.conj()` instead.r   )
stacklevelr   r(   c                 H    i | ]\  \  }}}||ft          j        |           S r!   )r4   conjr  s       r%   r&   z(_dok_base.conjtransp.<locals>.<dictcomp>  s/    XXX5G]dECeT]BGCLLXXXr'   )r   DeprecationWarningr8   r   r   	conjugater3   r   r)   rv   r.   )r;   msgr   r~   r  s        r%   
conjtranspz_dok_base.conjtransp  s    .S$33339>>**,,Cx))++CHJz1!!1a&
!;;XX4::<<XXX	
r'   c                     |                      | j        | j                  }|j                            | j                   |S Nr(   )r   r3   r)   r.   rC   r   s     r%   r   z_dok_base.copy  s;    !!$*DJ!??	$$$
r'   r   c                D   t                               ||          }t          t          t	          |                    t
                    r!t          d t          | D                       }nt          |          dz   f} | |t          |                    }||_	        |S )Nc              3   :   K   | ]}t          |          d z   V  dS )r   N)max)r"   r   s     r%   rL   z%_dok_base.fromkeys.<locals>.<genexpr>  s,      <<3#c((Q,<<<<<<r'   r   r(   )
r  fromkeysr+   nextiterr,   r   r&  rh   r.   )clsiterabler   tmpr3   r   s         r%   r'  z_dok_base.fromkeys  s    mmHe,,d499oou-- 	$<<#s)<<<<<EEXX\OEU$u++...r'   c                    | j         dk    r!|                     | j        | j                  S |                     t          | j                            t          j        |                                 | j                  }| j	        dk    rt          |                                  n|                                 f}t          fd|D                       }|                     ||f| j        | j                  }d|_        |S )	Nr   r(   )maxvalr)   countr   c              3   F   K   | ]}t          j        |           V  dS )r/  N)r4   fromiter)r"   ix	idx_dtypennzs     r%   rL   z"_dok_base.tocoo.<locals>.<genexpr>  s4      RRrr{2YcBBBRRRRRRr'   )r3   r)   T)r5  r:   r3   r)   _get_index_dtyper&  r4   r2  rN   r8   r   rx   r,   has_canonical_format)r;   r   r   indsr   Ar4  r5  s         @@r%   r   z_dok_base.tocoo  s    h!88&&tz&DDD))TZ)AA	{4;;==
#FFF$(IMMsDIIKK  		~RRRRRTRRRRRvdj
SS!%r'   c                 2    |r|                                  S | S rR   r   r;   r   s     r%   r1   z_dok_base.todok  s     	99;;r'   c                     | j         dk    rt          d          |                     d                              |          S )Nr   z%tocsr() not valid for 1d sparse arrayFr   )r8   rA   r   tocscr;  s     r%   r=  z_dok_base.tocsc  sA    9>>%&MNNNzzuz%%+++666r'   c                    t          | t                    }t          ||          }t          |          t          | j                  k    rt
          | j        dk    r6|d         }t          | j                  D ]}||k    r| j        |= || _	        d S |\  }}| j        \  }}||k     s||k     r=t          | 
                                          D ]\  }}||k    s||k    r
| j        ||f= || _	        d S )Nr   r   r   )r+   r
   r   rE   r3   rA   r8   r   r.   r-   rx   )	r;   r3   r=   newNr#   newMr~   r  r   s	            r%   resizez_dok_base.resize  s   dG,,EH555u::TZ((%%9>>9D$*%% & &99
1DKF
dz1!88taxxTYY[[)) ) )199T		
1a4(r'   unsafeTc                 n   t          j        |          }| j        |k    r|                     | j        |          }t          j        t          | j                                                  |          }t          t          | j        |                    |_        |S |r| 
                                S | S r#  )r4   r)   r   r3   arrayr   r.   rN   r  r   r   )r;   r)   castingr   r   r   s         r%   r2   z_dok_base.astype   s    :((5(AAF8D!2!2!4!455UCCCDDJ 5 566FLM 	99;;r'   )NNFrR   )rz   r    )NF)r   )F)rB  T)?ri   
__module____qualname___formatr*   rC   rG   rP   r	   __doc__rS   rX   rZ   r\   r^   ra   rd   rm   rp   rr   rt   rv   rx   rN   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   classmethodr'  r   r1   r=  rA  r2   __classcell__)r   s   @r%   r   r      sL       G&E &E &E &EPX X X   2 2 2 o-GO#19M  ! ! !3 3 3 3  " " "% % %F F FI I II I II I I$ $ $" " "! ! !# # #, , , ,*U U U U U"7 7 7> > >? ? ?? ? ?  .2 2 22 2 20 0 00 0 0	 	 		 	 	N N N N N"          
$ 
$ 
$  >        ,    $ $ $  % % %= = = = = =
      )1I  ,  
 <'DL   [    M)EM   
 M)EM7 7 7 7
 M)EM  0 ^+FN	 	 	 	 	 	 	 	r'   r   c                 ,    t          | t                    S )a  Is `x` of dok_array type?

    Parameters
    ----------
    x
        object to check for being a dok matrix

    Returns
    -------
    bool
        True if `x` is a dok matrix, False otherwise

    Examples
    --------
    >>> from scipy.sparse import dok_array, dok_matrix, coo_matrix, isspmatrix_dok
    >>> isspmatrix_dok(dok_matrix([[5]]))
    True
    >>> isspmatrix_dok(dok_array([[5]]))
    False
    >>> isspmatrix_dok(coo_matrix([[5]]))
    False
    )r+   r   )rK   s    r%   r   r     s    . a$$$r'   c                       e Zd ZdZdS )r   a!  
    Dictionary Of Keys based sparse array.

    This is an efficient structure for constructing sparse
    arrays incrementally.

    This can be instantiated in several ways:
        dok_array(D)
            where D is a 2-D ndarray

        dok_array(S)
            with another sparse array or matrix S (equivalent to S.todok())

        dok_array((M,N), [dtype])
            create the array with initial shape (M,N)
            dtype is optional, defaulting to dtype='d'

    Attributes
    ----------
    dtype : dtype
        Data type of the array
    shape : 2-tuple
        Shape of the array
    ndim : int
        Number of dimensions (this is always 2)
    nnz
        Number of nonzero elements
    size
    T

    Notes
    -----

    Sparse arrays can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.

    - Allows for efficient O(1) access of individual elements.
    - Duplicates are not allowed.
    - Can be efficiently converted to a coo_array once constructed.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.sparse import dok_array
    >>> S = dok_array((5, 5), dtype=np.float32)
    >>> for i in range(5):
    ...     for j in range(5):
    ...         S[i, j] = i + j    # Update element

    N)ri   rF  rG  rI  r!   r'   r%   r   r   '  s        1 1 1 1r'   r   c                   P    e Zd ZdZd Zd Z eee          Zd Zd Z	d Z
d Zd	S )
r   a/  
    Dictionary Of Keys based sparse matrix.

    This is an efficient structure for constructing sparse
    matrices incrementally.

    This can be instantiated in several ways:
        dok_matrix(D)
            where D is a 2-D ndarray

        dok_matrix(S)
            with another sparse array or matrix S (equivalent to S.todok())

        dok_matrix((M,N), [dtype])
            create the matrix with initial shape (M,N)
            dtype is optional, defaulting to dtype='d'

    Attributes
    ----------
    dtype : dtype
        Data type of the matrix
    shape : 2-tuple
        Shape of the matrix
    ndim : int
        Number of dimensions (this is always 2)
    nnz
        Number of nonzero elements
    size
    T

    Notes
    -----

    Sparse matrices can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.

    - Allows for efficient O(1) access of individual elements.
    - Duplicates are not allowed.
    - Can be efficiently converted to a coo_matrix once constructed.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.sparse import dok_matrix
    >>> S = dok_matrix((5, 5), dtype=np.float32)
    >>> for i in range(5):
    ...     for j in range(5):
    ...         S[i, j] = i + j    # Update element

    c                 |    |                      |d                              | j                  }|j        | _        d S )NFr   )reshapeasformatr0   __dict__)r;   r3   
new_matrixs      r%   	set_shapezdok_matrix.set_shape  s5    \\%e\44==dkJJ
"+r'   c                     | j         S )zGet shape of a sparse matrix.)r-   rO   s    r%   	get_shapezdok_matrix.get_shape  s
    {r'   )fgetfsetc                 4    | j                                         S rR   )r.   rd   rO   s    r%   rd   zdok_matrix.__reversed__  s    z&&(((r'   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rR   r+   r   r.   r   s     r%   rm   zdok_matrix.__or__  0    eY'' 	,:++zE!!r'   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rR   r[  r   s     r%   rp   zdok_matrix.__ror__  r\  r'   c                 |    t          |t                    r| xj        |j        z  c_        n| xj        |z  c_        | S rR   r[  r   s     r%   rr   zdok_matrix.__ior__  s=    eY'' 	 JJ%+%JJJJJ%JJr'   N)ri   rF  rG  rI  rT  rV  propertyr3   rd   rm   rp   rr   r!   r'   r%   r   r   \  s        1 1f, , ,   H))444E) ) )" " "
" " "
    r'   r   )rI  __docformat____all__r   warningsr   numpyr4   _matrixr   _baser	   r
   r   _indexr   _sputilsr   r   r   r   r   r   r   r   r  r   r   r   r   r!   r'   r%   <module>rh     s   % %%
7
7
7                     - - - - - - - - - -      ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;w w w w wT w w wt% % %62 2 2 2 2	7 2 2 2jP P P P P9 P P P P Pr'   