
    tfV                         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y)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d9dZd Zd:dZd Zej                  j                  e_	        ej                  j                  e_	        d Z
d Zd: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;dZ fdZd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$ fd!Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d< fd/	Z3d=d0Z4ejh                  j                  e4_	        d1 Z5d2 Z6ejl                  j                  e6_	        e7d>d3       Z8d?d4Z9ejr                  j                  e9_	        d?d5Z:ejt                  j                  e:_	        d?d6Z;ejv                  j                  e;_	        d7 Z<ejx                  j                  e<_	        d@d8Z= xZ>S )A	_dok_basedokc                 B   t        j                  |        t        | t              }t        |t              r=t        ||      r0t        ||      | _        i | _        t        |t              | _        y t        |      r|j                  | j                  k(  r|r|j                         n|}n|j                         }||j!                  |d      }|j                  | _        t        |j"                  |      | _        |j                  | _        y 	 t%        j&                  |      }|j,                  dkD  rt+        d      |j,                  dk(  rO||j!                  |      }t/        |      D ci c]  \  }}|d	k7  s|| c}}| _        |j                  | _        nC| j1                  ||
      j                         }	|	j                  | _        |	j                  | _        t        |j"                  |      | _        y # t(        $ r}t+        d      |d }~ww xY wc c}}w )Nallow_1d)defaultFcopyzInvalid input format.   z(Expected rank <=2 dense array or matrix.r   r   dtype)r   __init__
isinstancer	   tupler   r   _shape_dictr   floatr   r
   formatr   todokastypeshapenpasarray	Exception	TypeErrorndim	enumerate_coo_container)
selfarg1r)   r   r   is_arrayeivds
             [/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/scipy/sparse/_dok.pyr    z_dok_base.__init__   s   dG,dE"wth'G%dX>DKDJ!%7DJd^{{dkk)&*tyy{zz| {{5u{5DJ%djj8DDKDJ@zz$' yy1} JKKyyA~$;;u-D/8Itq!!q&adI
!ZZ
''E':@@BWW
WW
%djj8DDK  @ 78a?@ Js$   G> 0H>H>	HHHc                     t        d      )Nz2Direct update to DOK sparse format is not allowed.)NotImplementedError)r1   vals     r8   updatez_dok_base.update<   s    !"VWW    c                 F    |t        d      t        | j                        S )Nz7_getnnz over an axis is not implemented for DOK format.)r:   lenr$   )r1   axiss     r8   _getnnzz_dok_base._getnnz@   s(    %I  4::r=   c                 B    t        d | j                         D              S )Nc              3   &   K   | ]	  }|d k7    ywr   N ).0xs     r8   	<genexpr>z*_dok_base.count_nonzero.<locals>.<genexpr>H   s     1a161s   )sumvaluesr1   s    r8   count_nonzeroz_dok_base.count_nonzeroG   s    14;;=111r=   c                 ,    t        | j                        S N)r?   r$   rK   s    r8   __len__z_dok_base.__len__M   s    4::r=   c                     || j                   v S rN   r$   r1   keys     r8   __contains__z_dok_base.__contains__P   s    djj  r=   c                :    | j                   j                  ||      S rN   )r$   
setdefault)r1   rS   r   s      r8   rV   z_dok_base.setdefaultS   s    zz$$S'22r=   c                    | j                   |= y rN   rQ   rR   s     r8   __delitem__z_dok_base.__delitem__V   s    JJsOr=   c                 6    | j                   j                         S rN   )r$   clearrK   s    r8   rZ   z_dok_base.clearY       zz!!r=   c                4     | j                   j                  | S rN   )r$   pop)r1   argss     r8   r]   z_dok_base.pop\   s    tzz~~t$$r=   c                     t        d      )Nz*reversed is not defined for dok_array type)r-   rK   s    r8   __reversed__z_dok_base.__reversed___   s    DEEr=   c                 x    t        |       j                   dt        |      j                   }t        d|       Nz and z unsupported operand type for |: type__name__r-   r1   other
type_namess      r8   __or__z_dok_base.__or__b   ;    T
++,E$u+2F2F1GH
::,GHHr=   c                 x    t        |       j                   dt        |      j                   }t        d|       rb   rc   rf   s      r8   __ror__z_dok_base.__ror__f   rj   r=   c                 x    t        |       j                   dt        |      j                   }t        d|       rb   rc   rf   s      r8   __ior__z_dok_base.__ior__j   rj   r=   c                 6    | j                   j                         S rN   )r$   popitemrK   s    r8   rp   z_dok_base.popitemn   s    zz!!##r=   c                 6    | j                   j                         S rN   )r$   itemsrK   s    r8   rr   z_dok_base.itemsq   r[   r=   c                 6    | j                   j                         S rN   )r$   keysrK   s    r8   rt   z_dok_base.keyst   s    zz  r=   c                 6    | j                   j                         S rN   )r$   rJ   rK   s    r8   rJ   z_dok_base.valuesw   s    zz  ""r=   c                 N   || j                   v r| j                   |   S t        |      r| j                  dk(  r|f}| j                  t        |      k7  rt	        d| d      	 |D ]  }t        |      rJ  	 t        d t        || j                        D              }t        d t        || j                        D              rt	        d      | j                  dk(  r|d	   }| j                   j                  ||      S # t
        t        t        f$ r}t	        d      |d}~ww xY w)
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   :   K   | ]  \  }}|d k  r||z   n|  ywrD   rE   rF   r5   Ms      r8   rH   z _dok_base.get.<locals>.<genexpr>   s#     KdaQUAE)K   c              3   :   K   | ]  \  }}|d k  xs ||k\    ywrD   rE   rx   s      r8   rH   z _dok_base.get.<locals>.<genexpr>   s"     @41aq1uQ@rz   zIndex out of bounds.r   )r$   r   r.   r?   
IndexErrorAssertionErrorr-   
ValueErrorr"   zipr)   anyget)r1   rS   r   r5   r4   s        r8   r   z_dok_base.getz   s   $**::c?"S>dii1n&C99C vcU*KLMM	M $ |#|$ Kc#tzz6JKK@3sDJJ+?@@34499>a&Czz~~c7++ 	:6 	MDE1L	Ms   #C? 4C? ?D$DD$c                 t   | j                   dk(  rt        | 	  |      S t        |t              rt        |      dk(  r|d   }t        t        j                  f}t        ||      rJ|dk  r|| j                  d   z  }|dk  s|| j                  d   k\  rt        d      | j                  |      S t        d      )Nr   r   r   index value out of boundsz4array/slice index for 1d dok_array not yet supported)r.   super__getitem__r!   r"   r?   intr*   integerr)   r|   _get_int)r1   rS   	INT_TYPES	__class__s      r8   r   z_dok_base.__getitem__   s    99>7&s++c5!c#h!ma&C"**%	c9%Qwtzz"~%Qw#B/ !<====%%STTr=   c                 l    | j                   j                  || j                  j                  d            S Nr   r$   r   r   rd   )r1   idxs     r8   r   z_dok_base._get_int   s$    zz~~c4::??1#566r=   c                 p    | j                   j                  ||f| j                  j                  d            S r   r   r1   rowcols      r8   _get_intXintz_dok_base._get_intXint   s(    zz~~sCj$**//!*<==r=   c                 @    | j                  t        ||dz         |      S Nr   _get_sliceXsliceslicer   s      r8   _get_intXslicez_dok_base._get_intXslice   s     $$U3a%8#>>r=   c                 @    | j                  |t        ||dz               S r   r   r   s      r8   _get_sliceXintz_dok_base._get_sliceXint   s     $$S%S1W*=>>r=   c                    |j                  | j                  d         \  }}}|j                  | j                  d         \  }}}t        |||      }	t        |||      }
t        |	      t        |
      f}t        |       d|d   z  |d   z  k\  r| j	                  |	|
      S | j                  || j                        }| j                         D ]  }t        t        |d         |z
  |      \  }}|dk7  s|dk  s||d   k\  r4t        t        |d         |z
  |      \  }}|dk7  s|dk  s||d   k\  re| j                  |   |j                  ||f<    |S )Nr   r   r   r   )indicesr)   ranger?   _get_columnXarray_dok_containerr   rt   divmodr   r$   )r1   r   r   	row_startrow_stoprow_step	col_startcol_stopcol_step	row_range	col_ranger)   newdokrS   r5   rijrjs                     r8   r   z_dok_base._get_sliceXslice   sY   (+DJJqM(B%	8X(+DJJqM(B%	8X)Xx8	)Xx8	YY0 t9E!HuQx//)))Y??$$U$**$=99; 	1C3s1v;2H=EArQw!a%1a=3s1v;2H=EArQw!a%1a=!%CFLLA	1 r=   c                 H    |j                         }| j                  |g|      S rN   squeezer   r   s      r8   _get_intXarrayz_dok_base._get_intXarray   s"    kkm%%seS11r=   c                 H    |j                         }| j                  ||g      S rN   r   r   s      r8   _get_arrayXintz_dok_base._get_arrayXint   s"    kkm%%cC511r=   c                     t        t        |j                  | j                  d                }| j	                  ||      S r   listr   r   r)   r   r   s      r8   _get_sliceXarrayz_dok_base._get_sliceXarray   5    5#++djjm456%%c3//r=   c                     t        t        |j                  | j                  d                }| j	                  ||      S r   r   r   s      r8   _get_arrayXslicez_dok_base._get_arrayXslice   r   r=   c                    | j                  t        |      t        |      f| j                        }t        |      D ]J  \  }}t        |      D ]7  \  }}| j                  j                  ||fd      }|s'||j                  ||f<   9 L |S )Nr   r   )r   r?   r   r/   r$   r   )	r1   r   r   r   r5   rr   cr6   s	            r8   r   z_dok_base._get_columnXarray   s    $$c#hC%9$LcN 	+DAq!# +1JJNNAq61-)*FLLA&+	+
 r=   c                    t        t        j                  t        j                  ||            \  }}| j	                  |j
                  | j                        }t        j                  t        |j
                  d         t        |j
                  d               D ]8  }| j                  j                  ||   ||   fd      }|s*||j                  |<   : |S )Nr   r   r   )mapr*   
atleast_2dbroadcast_arraysr   r)   r   	itertoolsproductr   r$   r   )r1   r   r   r5   r   r   rS   r6   s           r8   _get_arrayXarrayz_dok_base._get_arrayXarray   s    2==""5"5c3"?@1$$QWWDJJ$?$$U1771:%6aggaj8IJ 	&C

##/3A$%S!	& r=   c                 x   | j                   dk(  rt        | 	  ||      S t        |t              rt        |      dk(  r|d   }t        t        j                  f}t        ||      rK|dk  r|| j                  d   z  }|dk  s|| j                  d   k\  rt        d      | j                  ||      S t        d      )Nr   r   r   r   r   z-array index for 1d dok_array not yet provided)r.   r   __setitem__r!   r"   r?   r   r*   r   r)   r|   _set_int)r1   rS   valuer   r   s       r8   r   z_dok_base.__setitem__   s    99>7&sE22c5!c#h!ma&C"**%	c9%Qwtzz"~%Qw#B/ !<====e,,LMMr=   c                 `    |r|| j                   |<   y || j                   v r| j                   |= y y rN   rQ   )r1   r   rG   s      r8   r   z_dok_base._set_int   s.    DJJsODJJ

3 r=   c                 h    ||f}|r|| j                   |<   y || j                   v r| j                   |= y y rN   rQ   )r1   r   r   rG   rS   s        r8   _set_intXintz_dok_base._set_intXint  s7    CjDJJsODJJ

3 r=   c                    t        t        t        |j                                     }t        t        t        |j                                     }|j                         }| j                  j                  t        t        ||      |             t        j                  |dk(        d   D ],  }||   ||   f}| j                  |   dk(  s | j                  |= . y r   )	r   r   r   ravelr$   r<   r   r*   nonzero)r1   r   r   rG   r5   rS   s         r8   _set_arrayXarrayz_dok_base._set_arrayXarray
  s    3sCIIK()3sCIIK()GGI

#c#smQ/0AF#A& 	$Aq63q6"Czz#!#JJsO		$r=   c                 f   t        |      rt        | j                  |      }| j                  | j                  |      t        j                  | j                  D cg c]  }t        |       c} D ])  }| j                  j                  |d      |z   }|s%||<   + S t        |      rN|j                  | j                  k7  rt        d      t        | j                  |j                        }| j                  | j                  |      | j                  j                         _        |j                  dk(  r|j                         }ni|j!                         }| j"                  dk(  r$t%        |j&                  d   |j(                        }n&t%        t%        |j&                   |j(                        }t+        j,                  d      5  j                  j/                  fd|D               d d d        S t1        |      r| j3                         |z   S t4        S c c}w # 1 sw Y   S xY w)	Nr   r   z Matrix dimensions are not equal.r   r   ignore)overc              3   8   K   | ]  \  }}||   |z   f  y wrN   rE   )rF   kr6   news      r8   rH   z$_dok_base.__add__.<locals>.<genexpr>.  s!      ETQ!SVaZ Es   )r   r   r   r   r)   r   r   r   r$   r   r
   r~   r   r   r&   rr   tocoor.   r   coordsdatar*   errstater<   r   todenseNotImplemented)r1   rg   	res_dtyper7   rS   aijo_itemsr   s          @r8   __add__z_dok_base.__add__  s   %djj%8I%%djj	%BC ((TZZ*H58*HI #jjnnS!,u4"CH#0 
) e_{{djj( !CDDtzz5;;7I%%djj	%BC

)CI||u$++-99>!%,,q/5::>G!#u||"4ejjAG(+ F		   EW EEF 
	 U^,,.5(C 
 "!/ +I$F 
s   H!%H&&H0c                     | |z   S rN   rE   r1   rg   s     r8   __radd__z_dok_base.__radd__5  s    e|r=   c                     | j                   j                  dk(  rt        d      | j                  | j                  | j                         }|j
                  j                  d | j                         D               |S )Nbz2Negating a sparse boolean matrix is not supported.r   c              3   ,   K   | ]  \  }}|| f  y wrN   rE   )rF   r   r6   s      r8   rH   z$_dok_base.__neg__.<locals>.<genexpr>>  s     :TQ!aR:s   )r   kindr:   r   r)   r$   r<   rr   r1   r   s     r8   __neg__z_dok_base.__neg__8  sd    ::??c!%D  !!$**DJJ!?		:TZZ\::
r=   c                     t        | j                        }| j                  | j                  |      }|j                  j                  fd| j                         D               |S )Nr   c              3   2   K   | ]  \  }}||z  f  y wrN   rE   rF   r   r6   rg   s      r8   rH   z(_dok_base._mul_scalar.<locals>.<genexpr>E  s     BTQ1a%i.B   )r   r   r   r)   r$   r<   rr   r1   rg   r   r   s    `  r8   _mul_scalarz_dok_base._mul_scalarA  sO    !$**e4	!!$**I!>		BTZZ\BC
r=   c                     t         j                  j                        } j                  dk(  rt              rzj                  dk(  r" j                         j                         z  }n. j                         j                         j                  d   z  } |t         fd|D                    S t              r( |t        fd j                         D                    S t        S t        j                   j                  d   |      } j                         D ]  \  \  }}}||xx   ||   z  z  cc<    |S )Nr   r   r   c              3   \   K   | ]#  }j                   |   j                   |   z   % y wrN   rQ   )rF   r   rg   r1   s     r8   rH   z+_dok_base._matmul_vector.<locals>.<genexpr>R  s&     $RTZZ]U[[^%C$Rs   ),c              3   4   K   | ]  \  }}|   |z    y wrN   rE   r   s      r8   rH   z+_dok_base._matmul_vector.<locals>.<genexpr>T  s     $KdaU1X\$K   r   )r   r   r.   r
   r&   rt   r   r   rI   r   rr   r   r*   zerosr)   )r1   rg   r   rt   resultr5   r   r6   s   ``      r8   _matmul_vectorz_dok_base._matmul_vectorH  s    4::u{{3	 99><<5(99;5D99;)=)=a)@@D $RT$R!RSS $Kdjjl$K!KLL%% $**Q-y9 	&IFQA1IU1X%I	&r=   c                    t        | j                  j                        }| j                  dk(  r,t        fd| j                  j                         D              S | j                  d   }j                  dk(  r|fn|j                  d   f}t        j                  ||      }| j                         D ]  \  \  }}}||xx   ||   z  z  cc<    |S )Nr   c              3   4   K   | ]  \  }}||   z    y wrN   rE   )rF   r   r6   rg   s      r8   rH   z0_dok_base._matmul_multivector.<locals>.<genexpr>c  s     C1q58|Cr   r   r   )	r   r   r.   rI   r$   rr   r)   r*   r   )	r1   rg   result_dtypery   	new_shaper   r5   r   r6   s	    `       r8   _matmul_multivectorz_dok_base._matmul_multivector^  s    djj%++699>C

0@0@0BCCC JJqM!JJ!OQD!U[[^1D	)<8 	&IFQA1IU1X%I	&r=   c                     t              r4| j                  j                  fd| j                         D               | S t        S )Nc              3   2   K   | ]  \  }}||z  f  y wrN   rE   r   s      r8   rH   z%_dok_base.__imul__.<locals>.<genexpr>o       FAq!e)nFr   r   r$   r<   rr   r   r   s    `r8   __imul__z_dok_base.__imul__m  4    JJFFFKr=   c                    t              rgt        | j                        }| j                  | j                  |      }|j
                  j                  fd| j                         D               |S | j                         z  S )Nr   c              3   2   K   | ]  \  }}||z  f  y wrN   rE   r   s      r8   rH   z(_dok_base.__truediv__.<locals>.<genexpr>w  r   r   )	r   r   r   r   r)   r$   r<   rr   tocsrr   s    `  r8   __truediv__z_dok_base.__truediv__s  sh    %djj%8I%%djj	%BCIIFFGJzz|e##r=   c                     t              r4| j                  j                  fd| j                         D               | S t        S )Nc              3   2   K   | ]  \  }}||z  f  y wrN   rE   r   s      r8   rH   z)_dok_base.__itruediv__.<locals>.<genexpr>}  r   r   r   r   s    `r8   __itruediv__z_dok_base.__itruediv__{  r  r=   c                 ,    t         j                  |       S rN   )dict
__reduce__rK   s    r8   r  z_dok_base.__reduce__  s     t$$r=   c                 V    | j                   dk(  rt        | 	  |      S t        d      )Nr   z diagonal requires two dimensions)r.   r   diagonalr~   )r1   r   r   s     r8   r  z_dok_base.diagonal  s*    99>7#A&&;<<r=   c                 &   | j                   dk(  r| j                         S ||dk7  rt        d      | j                  \  }}| j	                  ||f| j
                  |      }|j                  j                  d | j                         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   4   K   | ]  \  \  }}}||f|f  y wrN   rE   )rF   leftrightr;   s       r8   rH   z&_dok_base.transpose.<locals>.<genexpr>  s"     V3E=D%#E4=#.Vs   )	r.   r   r~   r)   r   r   r$   r<   rr   )r1   axesr   ry   Nr   s         r8   	transposez_dok_base.transpose  s    99>99;>  zz1!!1a&

!F		VVW
r=   c           	      v   | j                   dk(  r1| j                         }|j                  j                         |_        |S | j                  \  }}| j                  ||f| j                        }| j                         D ci c]   \  \  }}}||ft        j                  |      " c}}}|_
        |S c c}}}w )zReturn the conjugate transpose.r   r   )r.   r   r   	conjugater)   r   r   rr   r*   conjr$   )r1   r   ry   r  r  r  r;   s          r8   
conjtranspz_dok_base.conjtransp  s    99>**,Cxx))+CHJzz1!!1a&

!;KO::<XX5G]dECeT]BGGCL0X	
 Ys   %B4c                     | j                  | j                  | j                        }|j                  j	                  | j                         |S Nr   )r   r)   r   r$   r<   r   s     r8   r   z_dok_base.copy  s:    !!$**DJJ!?		$
r=   c                    t         j                  ||      }t        t        t	        |            t
              rt        d t        | D              }nt        |      dz   f} | |t        |            }||_	        |S )Nc              3   8   K   | ]  }t        |      d z     yw)r   N)max)rF   r   s     r8   rH   z%_dok_base.fromkeys.<locals>.<genexpr>  s     <3#c(Q,<s   r   r   )
r
  fromkeysr!   nextiterr"   r   r  rd   r$   )clsiterabler   tmpr)   r   s         r8   r  z_dok_base.fromkeys  sc    mmHe,d49ou-<#s)<<EX\OEU$u+.r=   c                    | j                   dk(  r'| j                  | j                  | j                        S | j	                  t        | j                              t        j                  | j                         | j                        }| j                  dkD  rt        | j                          n| j                         f}t        fd|D              }| j                  ||f| j                  | j                        }d|_        |S )	Nr   r   )maxvalr   countr   c              3   N   K   | ]  }t        j                  |         yw)r&  N)r*   fromiter)rF   ix	idx_dtypennzs     r8   rH   z"_dok_base.tocoo.<locals>.<genexpr>  s!     Rrr{{2YcBBRs   "%)r)   r   T)r,  r0   r)   r   _get_index_dtyper  r*   r)  rJ   r.   r   rt   r"   has_canonical_format)r1   r   r   indsr   Ar+  r,  s         @@r8   r   z_dok_base.tocoo  s    hh!8&&tzz&DD))TZZ)A	{{4;;=

#F$(IIMsDIIK 		~RTRRvdjj

S!%r=   c                 *    |r| j                         S | S rN   r   r1   r   s     r8   r'   z_dok_base.todok  s    99;r=   c                 z    | j                   dk(  rt        d      | j                  d      j                  |      S )Nr   z%tocsr() not valid for 1d sparse arrayFr   )r.   r:   r   tocscr2  s     r8   r4  z_dok_base.tocsc  s8    99>%&MNNzzuz%+++66r=   c                    t        | t              }t        ||      }t        |      t        | j                        k7  rt
        | j                  dk(  r:|d   }t        | j                        D ]  }||k\  s	| j                  |=  || _	        y |\  }}| j                  \  }}||k  s||k  r;t        | j                               D ]  \  }}||k\  s||k\  s| j                  ||f= ! || _	        y )Nr   r   r   )r!   r	   r   r?   r)   r:   r.   r   r$   r#   rt   )	r1   r)   r3   newNr5   newMry   r  r   s	            r8   resizez_dok_base.resize  s    dG,EH5u:TZZ(%%99>9D$**% &9

1&  DK
dzz1!8taxTYY[) )19T	

1a4() r=   c                 h   t        j                  |      }| j                  |k7  r{| j                  | j                  |      }t        j                  t        | j                  j                               |      }t        t        | j                  |            |_        |S |r| j                         S | S r  )r*   r   r   r)   arrayr   r$   rJ   r
  r   r   )r1   r   castingr   r   r   s         r8   r(   z_dok_base.astype  s    ::((5(AF88D!2!2!45UCDDJJ 56FLM99;r=   )NNFrN   )g        )r   )NF)r   )F)unsafeT)?re   
__module____qualname___formatr    r<   rA   rL   r   __doc__rO   rT   rV   rX   rZ   r]   r`   ri   rl   rn   rp   rr   rt   rJ   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   r'   r4  r8  r(   __classcell__)r   s   @r8   r   r      s   G&EPX2 oo--GO#1199M!3"%FIII$"!#,*U"7>??.2200		N"  
$>,$%=
   ))11I	
 <<''DL  MM))EM
 MM))EM7
 MM))EM0 ^^++FN	r=   r   c                 "    t        | t              S )a  Is `x` of dok_array type?

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

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

    Examples
    --------
    >>> from scipy.sparse import dok_array, dok_matrix, coo_matrix, isspmatrix_dok
    >>> isspmatrix_dok(dok_matrix([[5]]))
    True
    >>> isspmatrix_dok(dok_array([[5]]))
    False
    >>> isspmatrix_dok(coo_matrix([[5]]))
    False
    )r!   r   )rG   s    r8   r   r      s    . a$$r=   c                       e Zd ZdZy)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)re   r=  r>  r@  rE   r=   r8   r   r     s    1r=   r   c                   H    e Zd ZdZd Zd Z eee      Zd Zd Z	d Z
d Zy	)
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                 ~    | j                  |d      j                  | j                        }|j                  | _        y )NFr   )reshapeasformatr&   __dict__)r1   r)   
new_matrixs      r8   	set_shapezdok_matrix.set_shape  s0    \\%e\4==dkkJ
"++r=   c                     | j                   S )zGet shape of a sparse matrix.)r#   rK   s    r8   	get_shapezdok_matrix.get_shape  s    {{r=   )fgetfsetc                 6    | j                   j                         S rN   )r$   r`   rK   s    r8   r`   zdok_matrix.__reversed__  s    zz&&((r=   c                 r    t        |t              r| j                  |j                  z  S | j                  |z  S rN   r!   r   r$   r   s     r8   ri   zdok_matrix.__or__  .    eY'::++zzE!!r=   c                 r    t        |t              r| j                  |j                  z  S | j                  |z  S rN   rR  r   s     r8   rl   zdok_matrix.__ror__  rS  r=   c                     t        |t              r!| xj                  |j                  z  c_        | S | xj                  |z  c_        | S rN   rR  r   s     r8   rn   zdok_matrix.__ior__  s:    eY'JJ%++%J  JJ%Jr=   N)re   r=  r>  r@  rK  rM  propertyr)   r`   ri   rl   rn   rE   r=   r8   r   r   P  s4    1f, ))4E)"
"
r=   r   )r@  __docformat____all__r   numpyr*   _matrixr   _baser   r	   r
   _indexr   _sputilsr   r   r   r   r   r   r   r   r
  r   r   r   r   rE   r=   r8   <module>r^     sj    %%
7    - - ; ; ;lT l^%62	7 2jP9 Pr=   