
    \ci[[                         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    rQ||                    |d          }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      a/var/www/html/mdtn/previsions/meteo_cartes/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__   s1   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~~$;;u5;99D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                 n   t          |t                    r|                                }n|}|D ]\  }}t          |          r|fnt	          |          }t          |          | j        k    rt          d| d          t          d t          || j
                  D                       snt          || j
                  D ]X\  }}t          |          st          d|           |dk     rt          d| d          ||k    rt          d| d	          Y| j                            |           d
S )zUpdate values from a dict, sparse dok or iterable of 2-tuples like .items()

        Keys of the input must be sequences of nonnegative integers less than the shape
        for each axis.
        Index ! length needs to match self.shapec              3   Z   K   | ]&\  }}t          |          od |cxk    o|k     nc V  'dS r   N)r   )r#   idxmax_idxs      r&   	<genexpr>z#_dok_base.update.<locals>.<genexpr>K   sa         C #51#5#5#5#5g#5#5#5#5     r(   z&integer keys required for update. Got r   znegative index z not allowed in updatezindex z is too large for self.shapeN)r-   dictitemsr   r.   lenr:   
IndexErrorallzipr*   r1   update)r>   valinputskeyvalueindexrG   rH   s           r&   rP   z_dok_base.update<   sw    c4   	YY[[FFF  	U 	UJC'nn<SFF%**E5zzTY&& !P#!P!P!PQQQ  $'tz$:$:     U
 %(tz$:$: U ULC$S>> Y()WRU)W)WXXXQww()V3)V)V)VWWWg~~()S#)S)S)STTT & 	
&!!!!!r(   c                 L    |t          d          t          | j                  S )Nz7_getnnz over an axis is not implemented for DOK format.)NotImplementedErrorrL   r1   r>   axiss     r&   _getnnzz_dok_base._getnnzZ   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 rF   r"   )r#   xs     r&   rI   z*_dok_base.count_nonzero.<locals>.<genexpr>f   s&      11a16111111r(   )rW   sumvaluesrX   s     r&   count_nonzeroz_dok_base.count_nonzeroa   sD    %O   114;;==111111r(   c                 *    t          | j                  S N)rL   r1   r>   s    r&   __len__z_dok_base.__len__k   s    4:r(   c                     || j         v S rb   r1   r>   rS   s     r&   __contains__z_dok_base.__contains__n   s    dj  r(   c                8    | j                             ||          S rb   )r1   
setdefault)r>   rS   r   s      r&   rj   z_dok_base.setdefaultq   s    z$$S'222r(   c                    | j         |= d S rb   rf   rg   s     r&   __delitem__z_dok_base.__delitem__t   s    JsOOOr(   c                 4    | j                                         S rb   )r1   clearrc   s    r&   rn   z_dok_base.clearw       z!!!r(   c                      | j         j        | S rb   )r1   pop)r>   argss     r&   rq   z_dok_base.popz   s    tz~t$$r(   c                      t          d          )Nz*reversed is not defined for dok_array type)r9   rc   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__r9   r>   other
type_namess      r&   __or__z_dok_base.__or__   >    T

+HH$u++2FHH
G:GGHHHr(   c                 |    t          |           j         dt          |          j         }t          d|           rv   rw   rz   s      r&   __ror__z_dok_base.__ror__   r~   r(   c                 |    t          |           j         dt          |          j         }t          d|           rv   rw   rz   s      r&   __ior__z_dok_base.__ior__   r~   r(   c                 4    | j                                         S rb   )r1   popitemrc   s    r&   r   z_dok_base.popitem   s    z!!###r(   c                 4    | j                                         S rb   )r1   rK   rc   s    r&   rK   z_dok_base.items   ro   r(   c                 4    | j                                         S rb   )r1   keysrc   s    r&   r   z_dok_base.keys   s    z   r(   c                 4    | j                                         S rb   )r1   r_   rc   s    r&   r_   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   rC   rD   z%Index must be or consist of integers.Nc              3   6   K   | ]\  }}|d k     r||z   n|V  dS rF   r"   r#   r$   Ms      r&   rI   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 rF   r"   r   s      r&   rI   z _dok_base.get.<locals>.<genexpr>   s2      @@41aq1uQ@@@@@@r(   zIndex out of bounds.r   )r1   r   r:   rL   rM   AssertionErrorr9   r;   r.   rO   r*   anyget)r>   rS   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+   rx   )r>   rG   s     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>   rG   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+   rx   array_dok_containerr*   ravelrL   r<   unravel_indexarangerO   )r>   rG   rQ   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   rL   _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*   newdokrS   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 rb   )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   rL   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   rS   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 rb   rf   )r>   rG   r]   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   rL   r6   fullr+   r;   rO   r1   )r>   rG   r]   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 rb   rf   )r>   r   r   r]   rS   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   rP   rO   r6   nonzero)r>   r   r   r]   r$   rS   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 rb   r"   )r#   kr%   news      r&   rI   z$_dok_base.__add__.<locals>.<genexpr>Q  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   rK   tocoor:   rO   coordsdatar6   errstaterP   r   todenseNotImplemented)r>   r{   	res_dtyperS   aijo_itemsr   s         @r&   __add__z_dok_base.__add__9  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 rb   r"   r>   r{   s     r&   __radd__z_dok_base.__radd__X  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 rb   r"   )r#   r   r%   s      r&   rI   z$_dok_base.__neg__.<locals>.<genexpr>a  s,      ::TQ!aR::::::r(   )r+   kindrW   r   r*   r1   rP   rK   r>   r   s     r&   __neg__z_dok_base.__neg__[  sv    :?c!!%D   !!$*DJ!??	::TZZ\\::::::
r(   c                     t          | j                  }|                     | j        |          }|j                            fd|                                 D                        |S )Nr   c              3   ,   K   | ]\  }}||z  fV  d S rb   r"   r#   r   r%   r{   s      r&   rI   z(_dok_base._mul_scalar.<locals>.<genexpr>h  s/      BBTQ1a%i.BBBBBBr(   )r   r+   r   r*   r1   rP   rK   r>   r{   r   r   s    `  r&   _mul_scalarz_dok_base._mul_scalard  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 rb   rf   )r#   r   r{   r>   s     r&   rI   z+_dok_base._matmul_vector.<locals>.<genexpr>u  s4      $R$RTZ]U[^%C$R$R$R$R$R$Rr(   c              3   4   K   | ]\  }}|         |z  V  d S rb   r"   r  s      r&   rI   z+_dok_base._matmul_vector.<locals>.<genexpr>w  s/      $K$KdaU1X\$K$K$K$K$K$Kr(   r   )r   r+   r:   r
   r3   r   r   r   r^   r   rK   r   r6   zerosr*   )r>   r{   r   r   resultr$   r   r%   s   ``      r&   _matmul_vectorz_dok_base._matmul_vectork  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 rb   r"   )r#   r   r%   r{   s      r&   rI   z0_dok_base._matmul_multivector.<locals>.<genexpr>  s/      CC1q58|CCCCCCr(   r   r   )	r   r+   r:   r^   r1   rK   r*   r6   r  )	r>   r{   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 rb   r"   r  s      r&   rI   z%_dok_base.__imul__.<locals>.<genexpr>  /      FFAq!e)nFFFFFFr(   r   r1   rP   rK   r   r   s    `r&   __imul__z_dok_base.__imul__  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 rb   r"   r  s      r&   rI   z(_dok_base.__truediv__.<locals>.<genexpr>  r  r(   )	r   r   r+   r   r*   r1   rP   rK   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 rb   r"   r  s      r&   rI   z)_dok_base.__itruediv__.<locals>.<genexpr>  r  r(   r  r   s    `r&   __itruediv__z_dok_base.__itruediv__  r  r(   c                 6    t                               |           S rb   )rJ   
__reduce__rc   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 rb   r"   )r#   leftrightrQ   s       r&   rI   z&_dok_base.transpose.<locals>.<genexpr>  s4      VV3E=D%#E4=#.VVVVVVr(   )	r:   r   r;   r*   r   r+   r1   rP   rK   )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   rP   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#   rG   s     r&   rI   z%_dok_base.fromkeys.<locals>.<genexpr>  s,      <<3#c((Q,<<<<<<r(   r   r   )
rJ   fromkeysr-   nextiterr.   rO   r2  rx   r1   )clsiterablerT   tmpr*   r  s         r&   r3  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)r6   fromiter)r#   ix	idx_dtypennzs     r&   rI   z"_dok_base.tocoo.<locals>.<genexpr>  s4      RRrr{2YcBBBRRRRRRr(   r)   T)rA  r=   r*   r+   _get_index_dtyper2  r6   r>  r_   r:   rO   r   r.   has_canonical_format)r>   r   r   indsr   Ar@  rA  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 rb   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:   rW   r   tocscrG  s     r&   rI  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/   rL   r*   rW   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   r_   rJ   rO   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(   )NNFrb   )r   r!   )NF)r   )F)rO  T)@ry   
__module____qualname___formatr/   r,   rP   rZ   r`   r   __doc__rd   rh   rj   rl   rn   rq   rt   r}   r   r   r   rK   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-  r   classmethodr3  r   r4   rI  rN  r5   __classcell__)r&  s   @r&   r   r      sC       GI%KT %K %K %K %K %KN" " "<   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   )r]   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)ry   rR  rS  rU  r"   r(   r&   r   r   2  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   rc   s    r&   	get_shapezdok_matrix.get_shape  s
    {r(   )fgetfsetc                 4    | j                                         S rb   )r1   rt   rc   s    r&   rt   zdok_matrix.__reversed__  s    z&&(((r(   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rb   r-   r   r1   r   s     r&   r}   zdok_matrix.__or__  0    eY'' 	,:++zE!!r(   c                 ^    t          |t                    r| j        |j        z  S | j        |z  S rb   rf  r   s     r&   r   zdok_matrix.__ror__  rg  r(   c                 |    t          |t                    r| xj        |j        z  c_        n| xj        |z  c_        | S rb   rf  r   s     r&   r   zdok_matrix.__ior__  s=    eY'' 	 JJ%+%JJJJJ%JJr(   N)ry   rR  rS  rU  r_  ra  propertyr*   rt   r}   r   r   r"   r(   r&   r   r   g  s        1 1f, , ,   H))444E) ) )" " "
" " "
    r(   r   )rU  __docformat____all__r   numpyr6   _matrixr   _baser   r	   r
   _indexr   _sputilsr   r   r   r   r   r   r   r   rJ   r   r   r   r   r"   r(   r&   <module>rr     s   % %%
7
7
7               - - - - - - - - - -      ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;C C C C CT C C CL% % %62 2 2 2 2	7 2 2 2jP P P P P9 P P P P Pr(   