
    ^MhY                         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ZdCdddZd ZdDdZdDd	Ze	j        j
        e_
        e	j        j
        e_
        d
 Zd ZdDdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdEd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/d0 Z0d1 Z1d2 Z2d3 Z3d4 Z4dF fd6	Z5dGd7Z6e	j6        j
        e6_
        d8 Z7d9 Z8e	j8        j
        e8_
        e9dHd;            Z:dId<Z;e	j;        j
        e;_
        dId=Z<e	j<        j
        e<_
        dId>Z=e	j=        j
        e=_
        d? Z>e	j>        j
        e>_
        dJdBZ? xZ@S )K	_dok_basedok)r      NFmaxprintc                   t          j        | ||           t          |t                    rUt	          || j                  r?t          || j                  | _        i | _        t          |t                    | _        d S t          |          r|j        | j        k    r|r|                                n|}n|                                }||                    |d          }|j        | _        t          |j        | j                  | _        t          |j                  | _        d S 	 t%          j        |          }n"# t(          $ r}t+          d          |d }~ww xY w|j        dk    rt/          d|j         d	          |j        d
k    rO||                    |          }d t1          |          D             | _        t          |j                  | _        nO|                     |||                                          }|j        | _        t          |j                  | _        t          |j        | j                  | _        d S )Nr   allow_nd)defaultFcopyzInvalid input format.r   zDOK arrays don't yet support zD input.r   c                 &    i | ]\  }}|d k    ||S r    ).0ivs      Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/sparse/_dok.py
<dictcomp>z&_dok_base.__init__.<locals>.<dictcomp>5   s#    IIItq!!q&&a&&&    shapedtype)r	   __init__
isinstancetupler   	_allow_ndr   _shape_dictr   floatr,   r   formatr    todokastyper+   npasarray	Exception	TypeErrorndim
ValueError	enumerate_coo_container)selfarg1r+   r,   r    r   eds           r'   r-   z_dok_base.__init__   s-   th7777dE"" "	Kwtdn'M'M'M "	K%dT^DDDDKDJ!%777DJJJd^^ 	K{dk))&*4tyy{{{zz|| {{5u{55DJ%dj4>JJJDK!$*--DJJJ@z$'' @ @ @ 788a?@ y1}} !T!T!T!TUUUyA~~$;;u--DIIyIII
%dj11

''E'GGMMOOW
%ag..
%dj4>JJJDKKKs   /E 
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.)rD   lenr2   r?   axiss     r'   _getnnzz_dok_base._getnnzA   s-    %I   4:r)   c                 z    |t          d          t          d |                                 D                       S )Nz=count_nonzero over an axis is not implemented for DOK format.c              3   "   K   | ]
}|d k    V  dS r   Nr#   )r$   xs     r'   	<genexpr>z*_dok_base.count_nonzero.<locals>.<genexpr>M   s&      11a16111111r)   )rD   sumvaluesrI   s     r'   count_nonzeroz_dok_base.count_nonzeroH   sD    %O   114;;==111111r)   c                 *    t          | j                  S N)rH   r2   r?   s    r'   __len__z_dok_base.__len__R   s    4:r)   c                     || j         v S rU   r2   r?   keys     r'   __contains__z_dok_base.__contains__U   s    dj  r)   c                8    | j                             ||          S rU   )r2   
setdefault)r?   r[   r   s      r'   r^   z_dok_base.setdefaultX   s    z$$S'222r)   c                    | j         |= d S rU   rY   rZ   s     r'   __delitem__z_dok_base.__delitem__[   s    JsOOOr)   c                 4    | j                                         S rU   )r2   clearrV   s    r'   rb   z_dok_base.clear^       z!!!r)   c                      | j         j        | S rU   )r2   pop)r?   argss     r'   re   z_dok_base.popa   s    tz~t$$r)   c                      t          d          )Nz*reversed is not defined for dok_array type)r:   rV   s    r'   __reversed__z_dok_base.__reversed__d   s    DEEEr)   c                 |    t          |           j         dt          |          j         }t          d|           Nz and z unsupported operand type for |: type__name__r:   r?   other
type_namess      r'   __or__z_dok_base.__or__g   >    T

+HH$u++2FHH
G:GGHHHr)   c                 |    t          |           j         dt          |          j         }t          d|           rj   rk   rn   s      r'   __ror__z_dok_base.__ror__k   rr   r)   c                 |    t          |           j         dt          |          j         }t          d|           rj   rk   rn   s      r'   __ior__z_dok_base.__ior__o   rr   r)   c                 4    | j                                         S rU   )r2   popitemrV   s    r'   rx   z_dok_base.popitems   s    z!!###r)   c                 4    | j                                         S rU   )r2   itemsrV   s    r'   rz   z_dok_base.itemsv   rc   r)   c                 4    | j                                         S rU   )r2   keysrV   s    r'   r|   z_dok_base.keysy   s    z   r)   c                 4    | j                                         S rU   )r2   rR   rV   s    r'   rR   z_dok_base.values|   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 rN   r#   r$   r%   Ms      r'   rP   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 rN   r#   r   s      r'   rP   z _dok_base.get.<locals>.<genexpr>   s2      @@41aq1uQ@@@@@@r)   zIndex out of bounds.r   )r2   r   r;   rH   
IndexErrorAssertionErrorr:   r<   r/   zipr+   anyget)r?   r[   r   r%   rA   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                 h    | j                             || j                            d                    S Nr   r2   r   r,   rl   )r?   idxs     r'   _get_intz_dok_base._get_int   s&    z~~c4:??1#5#5666r)   c                     t          |                    | j        d                    }|                     t	          |                    S r   )rangeindicesr+   
_get_arraylist)r?   r   i_ranges      r'   
_get_slicez_dok_base._get_slice   s6    TZ]334tG}}---r)   c                     t          j        |          }|j        dk    r[ j                            t          |           j                            d                    }t          j        | j                  S  	                    |j
         j                  } fd|                                D             }|rt          |j
                  dk    r"t          |          D ]\  }}|r
||j        |<   nt          j        t          j        t          |                    |j
                  }t          |          dk    r|d         nt!          | }t!          ||d          D ]\  }}|r
||j        |<   |S )Nr   )styper,   c                 F    g | ]}j                             |d           S r"   )r2   r   )r$   r%   r?   s     r'   
<listcomp>z(_dok_base._get_array.<locals>.<listcomp>   s)    >>>QDJNN1a((>>>r)   r   T)strict)r7   r8   r;   r2   r   intr,   rl   array_dok_containerr+   ravelrH   r=   unravel_indexaranger   )r?   r   rE   new_dokdok_valsr%   r&   new_idxs   `       r'   r   z_dok_base._get_array   sk   joo8q==*..S4:??1+=+=>>C8Ctz2222%%citz%BB>>>>#))++>>> 
	-39~~""%h// - -DAq -+,a(- *29S]]+C+CSYOO(+G(9(9'!**sG}$??? - -DAq -+,a(r)   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   )r   r+   r   rH   _get_columnXarrayr   r,   r|   divmodr   r2   )r?   r   r   	row_startrow_stoprow_step	col_startcol_stopcol_step	row_range	col_ranger+   newdokr[   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                 T    |                      |g|                                          S rU   )r   r   r   s      r'   _get_intXarrayz_dok_base._get_intXarray   s"    %%seSYY[[999r)   c                     |                      |                                |g          }|j        dk    r|                    |j                  S |S r   )r   r   r;   reshaper+   )r?   r   r   ress       r'   _get_arrayXintz_dok_base._get_arrayXint   sE    $$SYY[[3%888a<<;;sy)))
r)   c                     t          t          |                    | j        d                              }|                     ||          S r   r   r   r   r+   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   rH   r,   r=   r2   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   )mapr7   
atleast_2dbroadcast_arraysr   r+   r,   	itertoolsproductr   r2   r   )r?   r   r   r%   r   r   r[   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                 H    |r|| j         |<   d S || j         v r
| j         |= d S d S rU   rY   )r?   r   rO   s      r'   _set_intz_dok_base._set_int   s;     	 DJsOOODJ
3 r)   c                    |                                 }|                                 }t          |          t          |          k    rRt          |          dk    r0t          j        t          |          |d         | j                  }nt          d          t          ||          D ]#\  }}|r|| j        |<   || j        v r| j        |= $d S )Nr   r   r   z*Need len(index)==len(data) or len(data)==1)r   rH   r7   fullr,   r<   r   r2   )r?   r   rO   idx_setx_setr%   r&   s          r'   
_set_arrayz_dok_base._set_array   s    ))++		w<<3u::%%5zzQGeAhdjIIIKLLL'' 	" 	"DAq " !
1djJqM		" 	"r)   c                 P    ||f}|r|| j         |<   d S || j         v r
| j         |= d S d S rU   rY   )r?   r   r   rO   r[   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   r   r2   rF   r   r7   nonzero)r?   r   r   rO   r%   r[   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$   rB   s     r'   r   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 rU   r#   )r$   kr&   news      r'   rP   z$_dok_base.__add__.<locals>.<genexpr>8  s3       E ETQ!SVaZ E E E E E Er)   )r   r   r,   r   r+   r   r   r2   r   r   r<   r   r    r4   rz   tocoor;   r   coordsdatar7   errstaterF   r   todenseNotImplemented)r?   ro   	res_dtyper[   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 rU   r#   r?   ro   s     r'   __radd__z_dok_base.__radd__?  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 rU   r#   )r$   r   r&   s      r'   rP   z$_dok_base.__neg__.<locals>.<genexpr>H  s,      ::TQ!aR::::::r)   )r,   kindrD   r   r+   r2   rF   rz   r?   r   s     r'   __neg__z_dok_base.__neg__B  sv    :?c!!%D   !!$*DJ!??	::TZZ\\::::::
r)   c                     t          | j                  }|                     | j        |          }|j                            fd|                                 D                        |S )Nr   c              3   ,   K   | ]\  }}||z  fV  d S rU   r#   r$   r   r&   ro   s      r'   rP   z(_dok_base._mul_scalar.<locals>.<genexpr>O  s/      BBTQ1a%i.BBBBBBr)   )r   r,   r   r+   r2   rF   rz   r?   ro   r   r   s    `  r'   _mul_scalarz_dok_base._mul_scalarK  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 rU   rY   )r$   r   ro   r?   s     r'   rP   z+_dok_base._matmul_vector.<locals>.<genexpr>\  s4      $R$RTZ]U[^%C$R$R$R$R$R$Rr)   c              3   4   K   | ]\  }}|         |z  V  d S rU   r#   r   s      r'   rP   z+_dok_base._matmul_vector.<locals>.<genexpr>^  s/      $K$KdaU1X\$K$K$K$K$K$Kr)   r   )r   r,   r;   r   r4   r|   r   r   rQ   r   rz   r   r7   zerosr+   )r?   ro   r   r|   resultr%   r   r&   s   ``      r'   _matmul_vectorz_dok_base._matmul_vectorR  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 rU   r#   )r$   r   r&   ro   s      r'   rP   z0_dok_base._matmul_multivector.<locals>.<genexpr>m  s/      CC1q58|CCCCCCr)   r   r   )	r   r,   r;   rQ   r2   rz   r+   r7   r  )	r?   ro   result_dtyper   	new_shaper  r%   r   r&   s	    `       r'   _matmul_multivectorz_dok_base._matmul_multivectorh  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 rU   r#   r   s      r'   rP   z%_dok_base.__imul__.<locals>.<genexpr>y  /      FFAq!e)nFFFFFFr)   r   r2   rF   rz   r   r   s    `r'   __imul__z_dok_base.__imul__w  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 rU   r#   r   s      r'   rP   z(_dok_base.__truediv__.<locals>.<genexpr>  r  r)   )	r   r   r,   r   r+   r2   rF   rz   tocsrr   s    `  r'   __truediv__z_dok_base.__truediv__}  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 rU   r#   r   s      r'   rP   z)_dok_base.__itruediv__.<locals>.<genexpr>  r  r)   r  r   s    `r'   __itruediv__z_dok_base.__itruediv__  r  r)   c                 6    t                               |           S rU   )dict
__reduce__rV   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)r;   superdiagonalr<   )r?   r   	__class__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 rU   r#   r$   leftrightrE   s       r'   rP   z&_dok_base.transpose.<locals>.<genexpr>  s4      VV3E=D%#E4=#.VVVVVVr)   )	r;   r    r<   r+   r   r,   r2   rF   rz   )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#   )r7   conjr"  s       r'   r(   z(_dok_base.conjtransp.<locals>.<dictcomp>  s/    XXX5G]dECeT]BGCLLXXXr)   )r   DeprecationWarningr;   r   r   	conjugater+   r   r,   rz   r2   )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   r+   r,   r2   rF   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'   rP   z%_dok_base.fromkeys.<locals>.<genexpr>  s,      <<3#c((Q,<<<<<<r)   r   r   )
r  fromkeysr.   nextiterr/   r   r4  rl   r2   )clsiterablevaluetmpr+   r  s         r'   r5  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)r7   fromiter)r$   ix	idx_dtypennzs     r'   rP   z"_dok_base.tocoo.<locals>.<genexpr>  s4      RRrr{2YcBBBRRRRRRr)   r*   T)rD  r>   r+   r,   _get_index_dtyper4  r7   rA  rR   r;   r   r|   r/   has_canonical_format)r?   r    r   indsr   ArC  rD  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 rU   r   r?   r    s     r'   r5   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   )r;   rD   r   tocscrJ  s     r'   rL  z_dok_base.tocsc  sA    9>>%&MNNNzzuz%%+++666r)   c                    t          || j                  }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   r0   rH   r+   rD   r;   r   r2   r1   r|   )r?   r+   newNr%   newMr   r&  r   s           r'   resizez_dok_base.resize  s    EDN;;;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 r1  )r7   r,   r   r+   r   r   r2   rR   r  r   r    )r?   r,   castingr    r  r   s         r'   r6   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)   )NNFrU   )r~   r"   )NF)r   )F)rR  T)Arm   
__module____qualname___formatr0   r-   rF   rK   rS   r	   __doc__rW   r\   r^   r`   rb   re   rh   rq   rt   rv   rx   rz   r|   rR   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/  r    classmethodr5  r   r5   rL  rQ  r6   __classcell__)r  s   @r'   r   r      sU       GI%KT %K %K %K %K %KNX X X   2 2 2 2 o-GO#19M  ! ! !3 3 3 3  " " "% % %F F FI I II I II I I$ $ $" " "! ! !# # #, , , ,*7 7 7. . .  *> > >? ? ?? ? ?  .: : :  0 0 00 0 0	 	 		 	 	     " " "     
$ 
$ 
$  >        ,    $ $ $  % % %= = = = = =
      )1I  ,  
 <'DL   [    M)EM   
 M)EM7 7 7 7
 M)EM  . ^+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   )rO   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)rm   rU  rV  rX  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   )r   asformatr4   __dict__)r?   r+   
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.)r1   rV   s    r'   	get_shapezdok_matrix.get_shape  s
    {r)   )fgetfsetc                 4    | j                                         S rU   )r2   rh   rV   s    r'   rh   zdok_matrix.__reversed__  s    z&&(((r)   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rU   r.   r   r2   r   s     r'   rq   zdok_matrix.__or__  0    eY'' 	,:++zE!!r)   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rU   ri  r   s     r'   rt   zdok_matrix.__ror__  rj  r)   c                 |    t          |t                    r| xj        |j        z  c_        n| xj        |z  c_        | S rU   ri  r   s     r'   rv   zdok_matrix.__ior__  s=    eY'' 	 JJ%+%JJJJJ%JJr)   N)rm   rU  rV  rX  rb  rd  propertyr+   rh   rq   rt   rv   r#   r)   r'   r   r   d  s        1 1f, , ,   H))444E) ) )" " "
" " "
    r)   r   )rX  __docformat____all__r   warningsr   numpyr7   _matrixr   _baser	   r
   r   _indexr   _sputilsr   r   r   r   r   r   r   r   r  r   r   r   r   r#   r)   r'   <module>rv     s   % %%
7
7
7                     - - - - - - - - - -      ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;    T   D% % %62 2 2 2 2	7 2 2 2jP P P P P9 P P P P Pr)   