
    YhV                         d Z dZg dZddl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   )spmatrix)_spbasesparrayissparse)
IndexMixin)isdensegetdtypeisshape	isintlikeisscalarlikeupcastupcast_scalarcheck_shapec                       e Zd ZdZdZdBdddZd ZdCdZdCd	Ze	j        j
        e_
        e	j        j
        e_
        d
 Zd ZdCdZd Zd Zd Zd Zd Zd Zd Zd Zd Z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$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 Z4dE fd6	Z5dFd7Z6e	j6        j
        e6_
        d8 Z7e	j7        j
        e7_
        e8dGd:            Z9dHd;Z:e	j:        j
        e:_
        dHd<Z;e	j;        j
        e;_
        dHd=Z<e	j<        j
        e<_
        d> Z=e	j=        j
        e=_
        dIdAZ> xZ?S )J	_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      c/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/sparse/_dok.py
<dictcomp>z&_dok_base.__init__.<locals>.<dictcomp>4   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.)rC   lenr1   r>   axiss     r&   _getnnzz_dok_base._getnnz@   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>L   s&      11a16111111r(   )rC   sumvaluesrH   s     r&   count_nonzeroz_dok_base.count_nonzeroG   sD    %O   114;;==111111r(   c                 *    t          | j                  S N)rG   r1   r>   s    r&   __len__z_dok_base.__len__Q   s    4:r(   c                     || j         v S rT   r1   r>   keys     r&   __contains__z_dok_base.__contains__T   s    dj  r(   c                8    | j                             ||          S rT   )r1   
setdefault)r>   rZ   r   s      r&   r]   z_dok_base.setdefaultW   s    z$$S'222r(   c                    | j         |= d S rT   rX   rY   s     r&   __delitem__z_dok_base.__delitem__Z   s    JsOOOr(   c                 4    | j                                         S rT   )r1   clearrU   s    r&   ra   z_dok_base.clear]       z!!!r(   c                      | j         j        | S rT   )r1   pop)r>   argss     r&   rd   z_dok_base.pop`   s    tz~t$$r(   c                      t          d          )Nz*reversed is not defined for dok_array type)r9   rU   s    r&   __reversed__z_dok_base.__reversed__c   s    DEEEr(   c                 |    t          |           j         dt          |          j         }t          d|           Nz and z unsupported operand type for |: type__name__r9   r>   other
type_namess      r&   __or__z_dok_base.__or__f   >    T

+HH$u++2FHH
G:GGHHHr(   c                 |    t          |           j         dt          |          j         }t          d|           ri   rj   rm   s      r&   __ror__z_dok_base.__ror__j   rq   r(   c                 |    t          |           j         dt          |          j         }t          d|           ri   rj   rm   s      r&   __ior__z_dok_base.__ior__n   rq   r(   c                 4    | j                                         S rT   )r1   popitemrU   s    r&   rw   z_dok_base.popitemr   s    z!!###r(   c                 4    | j                                         S rT   )r1   itemsrU   s    r&   ry   z_dok_base.itemsu   rb   r(   c                 4    | j                                         S rT   )r1   keysrU   s    r&   r{   z_dok_base.keysx   s    z   r(   c                 4    | j                                         S rT   )r1   rQ   rU   s    r&   rQ   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 rM   r"   r#   r$   Ms      r&   rO   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 rM   r"   r   s      r&   rO   z _dok_base.get.<locals>.<genexpr>   s2      @@41aq1uQ@@@@@@r(   zIndex out of bounds.r   )r1   r   r:   rG   
IndexErrorAssertionErrorr9   r;   r.   zipr*   anyget)r>   rZ   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                 h    | j                             || j                            d                    S Nr   r1   r   r+   rk   )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!   )r1   r   )r#   r$   r>   s     r&   
<listcomp>z(_dok_base._get_array.<locals>.<listcomp>   s)    >>>QDJNN1a((>>>r(   r   T)strict)r6   r7   r:   r1   r   intr+   rk   array_dok_containerr*   ravelrG   r<   unravel_indexaranger   )r>   r   rD   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   rG   _get_columnXarrayr   r+   r{   divmodr   r1   )r>   r   r   	row_startrow_stoprow_step	col_startcol_stopcol_step	row_range	col_ranger*   newdokrZ   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 rT   )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   rG   r+   r<   r1   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   )mapr6   
atleast_2dbroadcast_arraysr   r*   r+   	itertoolsproductr   r1   r   )r>   r   r   r$   r   r   rZ   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 rT   rX   )r>   r   rN   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   rG   r6   fullr+   r;   r   r1   )r>   r   rN   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 rT   rX   )r>   r   r   rN   rZ   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   r1   rE   r   r6   nonzero)r>   r   r   rN   r$   rZ   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#   rA   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 rT   r"   )r#   kr%   news      r&   rO   z$_dok_base.__add__.<locals>.<genexpr>7  s3       E ETQ!SVaZ E E E E E Er(   )r   r   r+   r   r*   r   r   r1   r   r
   r;   r   r   r3   ry   tocoor:   r   coordsdatar6   errstaterE   r   todenseNotImplemented)r>   rn   	res_dtyperZ   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 rT   r"   r>   rn   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 rT   r"   )r#   r   r%   s      r&   rO   z$_dok_base.__neg__.<locals>.<genexpr>G  s,      ::TQ!aR::::::r(   )r+   kindrC   r   r*   r1   rE   ry   r>   r   s     r&   __neg__z_dok_base.__neg__A  sv    :?c!!%D   !!$*DJ!??	::TZZ\\::::::
r(   c                     t          | j                  }|                     | j        |          }|j                            fd|                                 D                        |S )Nr   c              3   ,   K   | ]\  }}||z  fV  d S rT   r"   r#   r   r%   rn   s      r&   rO   z(_dok_base._mul_scalar.<locals>.<genexpr>N  s/      BBTQ1a%i.BBBBBBr(   )r   r+   r   r*   r1   rE   ry   r>   rn   r   r   s    `  r&   _mul_scalarz_dok_base._mul_scalarJ  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 rT   rX   )r#   r   rn   r>   s     r&   rO   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 rT   r"   r   s      r&   rO   z+_dok_base._matmul_vector.<locals>.<genexpr>]  s/      $K$KdaU1X\$K$K$K$K$K$Kr(   r   )r   r+   r:   r
   r3   r{   r   r   rP   r   ry   r   r6   zerosr*   )r>   rn   r   r{   resultr$   r   r%   s   ``      r&   _matmul_vectorz_dok_base._matmul_vectorQ  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 rT   r"   )r#   r   r%   rn   s      r&   rO   z0_dok_base._matmul_multivector.<locals>.<genexpr>l  s/      CC1q58|CCCCCCr(   r   r   )	r   r+   r:   rP   r1   ry   r*   r6   r  )	r>   rn   result_dtyper   	new_shaper  r$   r   r%   s	    `       r&   _matmul_multivectorz_dok_base._matmul_multivectorg  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 rT   r"   r   s      r&   rO   z%_dok_base.__imul__.<locals>.<genexpr>x  /      FFAq!e)nFFFFFFr(   r   r1   rE   ry   r   r   s    `r&   __imul__z_dok_base.__imul__v  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 rT   r"   r   s      r&   rO   z(_dok_base.__truediv__.<locals>.<genexpr>  r  r(   )	r   r   r+   r   r*   r1   rE   ry   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 rT   r"   r   s      r&   rO   z)_dok_base.__itruediv__.<locals>.<genexpr>  r  r(   r  r   s    `r&   __itruediv__z_dok_base.__itruediv__  r  r(   c                 6    t                               |           S rT   )dict
__reduce__rU   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 rT   r"   )r#   leftrightrD   s       r&   rO   z&_dok_base.transpose.<locals>.<genexpr>  s4      VV3E=D%#E4=#.VVVVVVr(   )	r:   r   r;   r*   r   r+   r1   rE   ry   )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                     |                      | j        | j                  }|j                            | j                   |S Nr   )r   r*   r+   r1   rE   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&   rO   z%_dok_base.fromkeys.<locals>.<genexpr>  s,      <<3#c((Q,<<<<<<r(   r   r   )
r  fromkeysr-   nextiterr.   r   r*  rk   r1   )clsiterablevaluetmpr*   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 )r4  N)r6   fromiter)r#   ix	idx_dtypennzs     r&   rO   z"_dok_base.tocoo.<locals>.<genexpr>  s4      RRrr{2YcBBBRRRRRRr(   r)   T)r:  r=   r*   r+   _get_index_dtyper*  r6   r7  rQ   r:   r   r{   r.   has_canonical_format)r>   r   r   indsr   Ar9  r:  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 rT   r   r>   r   s     r&   r4   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:   rC   r   tocscr@  s     r&   rB  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   r/   rG   r*   rC   r:   r   r1   r0   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 r'  )r6   r+   r   r*   r   r   r1   rQ   r  r   r   )r>   r+   castingr   r  r   s         r&   r5   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(   )NNFrT   )r}   r!   )NF)r   )F)rH  T)@rl   
__module____qualname___formatr/   r,   rE   rJ   rR   r   __doc__rV   r[   r]   r_   ra   rd   rg   rp   rs   ru   rw   ry   r{   rQ   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   r4   rB  rG  r5   __classcell__)r  s   @r&   r   r      sF       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   )rN   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)rl   rK  rL  rN  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   asformatr3   __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.)r0   rU   s    r&   	get_shapezdok_matrix.get_shape  s
    {r(   )fgetfsetc                 4    | j                                         S rT   )r1   rg   rU   s    r&   rg   zdok_matrix.__reversed__  s    z&&(((r(   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rT   r-   r   r1   r   s     r&   rp   zdok_matrix.__or__  0    eY'' 	,:++zE!!r(   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rT   r_  r   s     r&   rs   zdok_matrix.__ror__  r`  r(   c                 |    t          |t                    r| xj        |j        z  c_        n| xj        |z  c_        | S rT   r_  r   s     r&   ru   zdok_matrix.__ior__  s=    eY'' 	 JJ%+%JJJJJ%JJr(   N)rl   rK  rL  rN  rX  rZ  propertyr*   rg   rp   rs   ru   r"   r(   r&   r   r   M  s        1 1f, , ,   H))444E) ) )" " "
" " "
    r(   r   )rN  __docformat____all__r   numpyr6   _matrixr   _baser   r	   r
   _indexr   _sputilsr   r   r   r   r   r   r   r   r  r   r   r   r   r"   r(   r&   <module>rk     s   % %%
7
7
7               - - - - - - - - - -      ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;i i i i iT i i iX% % %62 2 2 2 2	7 2 2 2jP P P P P9 P P P P Pr(   