
    ЏkhV                         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                   B    e Zd ZdZdZd<dddZd Zd=dZd=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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/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d? fd3	Z5d@d4Z6e	jl                  j                  e6_
        d5 Z7e	jn                  j                  e7_
        e8dAd6       Z9dBd7Z:e	jt                  j                  e:_
        dBd8Z;e	jv                  j                  e;_
        dBd9Z<e	jx                  j                  e<_
        d: Z=e	jz                  j                  e=_
        dCd;Z> xZ?S )D	_dok_basedok)r      Nmaxprintc                   t        j                  | ||       t        |t              rQt	        || j
                        r:t        || j
                        | _        i | _        t        |t              | _        y t        |      r|j                  | j                  k(  r|r|j                         n|}n|j                         }||j!                  |d      }|j                  | _        t        |j"                  | j
                        | _        t        |j                        | _        y 	 t%        j&                  |      }|j,                  dkD  rt/        d|j,                   d	      |j,                  d
k(  rX||j!                  |      }t1        |      D ci c]  \  }}|dk7  s|| c}}| _        t        |j                        | _        nM| j3                  |||      j                         }	|	j                  | _        t        |	j                        | _        t        |j"                  | j
                        | _        y # t(        $ r}t+        d      |d }~ww xY wc c}}w )Nr   allow_nd)defaultFcopyzInvalid input format.r   zDOK arrays don't yet support zD input.r   r   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ivds
             M/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/sparse/_dok.pyr#   z_dok_base.__init__   s   th7dE"wtdnn'M%dT^^DDKDJ!%7DJd^{{dkk)&*tyy{zz| {{5u{5DJ%djj4>>JDK!$**-DJ@zz$' yy1} #@8!TUUyyA~$;;u-D/8Itq!!q&adI
%djj1
''E'GMMOWW
%agg.
%djj4>>JDK  @ 78a?@ Js$   +I I &I 	IIIc                     t        d      )Nz2Direct update to DOK sparse format is not allowed.)NotImplementedError)r5   vals     r;   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(   r5   axiss     r;   _getnnzz_dok_base._getnnz@   s(    %I  4::r@   c                 \    |t        d      t        d | j                         D              S )Nz=count_nonzero over an axis is not implemented for DOK format.c              3   &   K   | ]	  }|d k7    ywr   N ).0xs     r;   	<genexpr>z*_dok_base.count_nonzero.<locals>.<genexpr>L   s     1a161s   )r=   sumvaluesrC   s     r;   count_nonzeroz_dok_base.count_nonzeroG   s1    %O  14;;=111r@   c                 ,    t        | j                        S N)rB   r(   r5   s    r;   __len__z_dok_base.__len__Q   s    4::r@   c                     || j                   v S rQ   r(   r5   keys     r;   __contains__z_dok_base.__contains__T   s    djj  r@   c                :    | j                   j                  ||      S rQ   )r(   
setdefault)r5   rW   r   s      r;   rZ   z_dok_base.setdefaultW   s    zz$$S'22r@   c                    | j                   |= y rQ   rU   rV   s     r;   __delitem__z_dok_base.__delitem__Z   s    JJsOr@   c                 6    | j                   j                         S rQ   )r(   clearrR   s    r;   r^   z_dok_base.clear]       zz!!r@   c                4     | j                   j                  | S rQ   )r(   pop)r5   argss     r;   ra   z_dok_base.pop`   s    tzz~~t$$r@   c                     t        d      )Nz*reversed is not defined for dok_array type)r0   rR   s    r;   __reversed__z_dok_base.__reversed__c   s    DEEr@   c                 x    t        |       j                   dt        |      j                   }t        d|       Nz and z unsupported operand type for |: type__name__r0   r5   other
type_namess      r;   __or__z_dok_base.__or__f   ;    T
++,E$u+2F2F1GH
::,GHHr@   c                 x    t        |       j                   dt        |      j                   }t        d|       rf   rg   rj   s      r;   __ror__z_dok_base.__ror__j   rn   r@   c                 x    t        |       j                   dt        |      j                   }t        d|       rf   rg   rj   s      r;   __ior__z_dok_base.__ior__n   rn   r@   c                 6    | j                   j                         S rQ   )r(   popitemrR   s    r;   rt   z_dok_base.popitemr   s    zz!!##r@   c                 6    | j                   j                         S rQ   )r(   itemsrR   s    r;   rv   z_dok_base.itemsu   r_   r@   c                 6    | j                   j                         S rQ   )r(   keysrR   s    r;   rx   z_dok_base.keysx   s    zz  r@   c                 6    | j                   j                         S rQ   )r(   rN   rR   s    r;   rN   z_dok_base.values{   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rH   rI   rJ   r8   Ms      r;   rL   z _dok_base.get.<locals>.<genexpr>   s#     KdaQUAE)K   c              3   :   K   | ]  \  }}|d k  xs ||k\    ywrH   rI   r|   s      r;   rL   z _dok_base.get.<locals>.<genexpr>   s"     @41aq1uQ@r~   zIndex out of bounds.r   )r(   r   r1   rB   
IndexErrorAssertionErrorr0   r2   r%   zipr!   anyget)r5   rW   r   r8   r7   s        r;   r   z_dok_base.get~   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                 l    | j                   j                  || j                  j                  d            S Nr   r(   r   r"   rh   )r5   idxs     r;   _get_intz_dok_base._get_int   s$    zz~~c4::??1#566r@   c                 ~    t        |j                  | j                  d          }| j                  t	        |            S r   )rangeindicesr!   
_get_arraylist)r5   r   i_ranges      r;   
_get_slicez_dok_base._get_slice   s0    TZZ]34tG}--r@   c                 R   t        j                  |      }|j                  dk(  r_| j                  j	                  t        |      | j                  j                  d            }t        j                  || j                        S | j                  |j                  | j                        }|j                         D cg c]  }| j                  j	                  |d        }}|rt        |j                        dk(  r't        |      D ]  \  }}|s	||j                  |<    |S t        j                  t        j                  t        |            |j                        }t        |      dk(  r|d   nt!        | }t!        ||d      D ]  \  }}|s	||j                  |<    |S c c}w )Nr   )styper"   r   T)strict)r-   r.   r1   r(   r   intr"   rh   array_dok_containerr!   ravelrB   r3   unravel_indexaranger   )r5   r   r>   new_dokr8   dok_valsr9   new_idxs           r;   r   z_dok_base._get_array   sT   jjo88q=**..S4::??1+=>C88Ctzz22%%ciitzz%B25))+>QDJJNN1a(>>399~"%h/ -DAq+,a(-  **299S]+CSYYO(+G(9'!*sG}$? -DAq+,a(-  ?s   =#F$c                 p    | j                   j                  ||f| j                  j                  d            S r   r   r5   rowcols      r;   _get_intXintz_dok_base._get_intXint   s(    zz~~sCj$**//!*<==r@   c                 @    | j                  t        ||dz         |      S Nr   _get_sliceXsliceslicer   s      r;   _get_intXslicez_dok_base._get_intXslice   s     $$U3a%8#>>r@   c                 @    | j                  |t        ||dz               S r   r   r   s      r;   _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   )r   r!   r   rB   _get_columnXarrayr   r"   rx   divmodr   r(   )r5   r   r   	row_startrow_stoprow_step	col_startcol_stopcol_step	row_range	col_ranger!   newdokrW   r8   rijrjs                     r;   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                 D    | j                  |g|j                               S rQ   )r   r   r   s      r;   _get_intXarrayz_dok_base._get_intXarray   s    %%seSYY[99r@   c                     | j                  |j                         |g      }|j                  dkD  r|j                  |j                        S |S r   )r   r   r1   reshaper!   )r5   r   r   ress       r;   _get_arrayXintz_dok_base._get_arrayXint   s?    $$SYY[3%888a<;;syy))
r@   c                     t        t        |j                  | j                  d                }| j	                  ||      S r   r   r   r   r!   r   r   s      r;   _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      r;   _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   rB   r"   r3   r(   r   )	r5   r   r   r   r8   rr   cr9   s	            r;   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   )r5   r   r   r8   r   r   rW   r9   s           r;   _get_arrayXarrayz_dok_base._get_arrayXarray   s    2==""5"5c3"?@1$$QWWDJJ$?$$U1771:%6aggaj8IJ 	&C

##/3A$%S!	& r@   c                 `    |r|| j                   |<   y || j                   v r| j                   |= y y rQ   rU   )r5   r   rK   s      r;   _set_intz_dok_base._set_int   s.    DJJsODJJ

3 r@   c                    |j                         }|j                         }t        |      t        |      k7  rHt        |      dk(  r/t        j                  t        |      |d   | j                        }nt        d      t        ||      D ]3  \  }}|r|| j                  |<   || j                  v s'| j                  |= 5 y )Nr   r   r   z*Need len(index)==len(data) or len(data)==1)r   rB   r-   fullr"   r2   r   r(   )r5   r   rK   idx_setx_setr8   r9   s          r;   
_set_arrayz_dok_base._set_array   s    ))+	w<3u:%5zQGeAhdjjIKLL' 	"DAq !

1djjJJqM		"r@   c                 h    ||f}|r|| j                   |<   y || j                   v r| j                   |= y y rQ   rU   )r5   r   r   rK   rW   s        r;   _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   r   r(   r?   r   r-   nonzero)r5   r   r   rK   r8   rW   s         r;   _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rQ   rI   )rJ   kr9   news      r;   rL   z$_dok_base.__add__.<locals>.<genexpr>7  s!      ETQ!SVaZ Es   )r   r   r"   r   r!   r   r   r   r(   r   r
   r2   r   r   r*   rv   tocoor1   r   coordsdatar-   errstater?   r   todenseNotImplemented)r5   rk   	res_dtyper:   rW   aijo_itemsr   s          @r;   __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 rQ   rI   r5   rk   s     r;   __radd__z_dok_base.__radd__>  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rQ   rI   )rJ   r   r9   s      r;   rL   z$_dok_base.__neg__.<locals>.<genexpr>G  s     :TQ!aR:s   )r"   kindr=   r   r!   r(   r?   rv   r5   r   s     r;   __neg__z_dok_base.__neg__A  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rQ   rI   rJ   r   r9   rk   s      r;   rL   z(_dok_base._mul_scalar.<locals>.<genexpr>N  s     BTQ1a%i.B   )r   r"   r   r!   r(   r?   rv   r5   rk   r   r   s    `  r;   _mul_scalarz_dok_base._mul_scalarJ  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rQ   rU   )rJ   r   rk   r5   s     r;   rL   z+_dok_base._matmul_vector.<locals>.<genexpr>[  s&     $RTZZ]U[[^%C$Rs   ),c              3   4   K   | ]  \  }}|   |z    y wrQ   rI   r   s      r;   rL   z+_dok_base._matmul_vector.<locals>.<genexpr>]  s     $KdaU1X\$K   r   )r   r"   r1   r
   r*   rx   r   r   rM   r   rv   r   r-   zerosr!   )r5   rk   r   rx   resultr8   r   r9   s   ``      r;   _matmul_vectorz_dok_base._matmul_vectorQ  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rQ   rI   )rJ   r   r9   rk   s      r;   rL   z0_dok_base._matmul_multivector.<locals>.<genexpr>l  s     C1q58|Cr   r   r   )	r   r"   r1   rM   r(   rv   r!   r-   r   )	r5   rk   result_dtyper}   	new_shaper   r8   r   r9   s	    `       r;   _matmul_multivectorz_dok_base._matmul_multivectorg  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rQ   rI   r   s      r;   rL   z%_dok_base.__imul__.<locals>.<genexpr>x       FAq!e)nFr   r   r(   r?   rv   r   r   s    `r;   __imul__z_dok_base.__imul__v  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rQ   rI   r   s      r;   rL   z(_dok_base.__truediv__.<locals>.<genexpr>  r	  r   )	r   r   r"   r   r!   r(   r?   rv   tocsrr   s    `  r;   __truediv__z_dok_base.__truediv__|  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rQ   rI   r   s      r;   rL   z)_dok_base.__itruediv__.<locals>.<genexpr>  r	  r   r
  r   s    `r;   __itruediv__z_dok_base.__itruediv__  r  r@   c                 ,    t         j                  |       S rQ   )dict
__reduce__rR   s    r;   r  z_dok_base.__reduce__  s     t$$r@   c                 V    | j                   dk(  rt        | 	  |      S t        d      )Nr   z diagonal requires two dimensions)r1   superdiagonalr2   )r5   r   	__class__s     r;   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rQ   rI   )rJ   leftrightr>   s       r;   rL   z&_dok_base.transpose.<locals>.<genexpr>  s"     V3E=D%#E4=#.Vs   )	r1   r   r2   r!   r   r"   r(   r?   rv   )r5   axesr   r}   Nr   s         r;   	transposez_dok_base.transpose  s    99>99;>  zz1!!1a&

!F		VVW
r@   c                     | j                  | j                  | j                        }|j                  j	                  | j                         |S Nr   )r   r!   r"   r(   r?   r   s     r;   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)rJ   r   s     r;   rL   z%_dok_base.fromkeys.<locals>.<genexpr>  s     <3#c(Q,<s   r   r   )
r  fromkeysr$   nextiterr%   r   r&  rh   r(   )clsiterablevaluetmpr!   r   s         r;   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)r0  N)r-   fromiter)rJ   ix	idx_dtypennzs     r;   rL   z"_dok_base.tocoo.<locals>.<genexpr>  s!     Rrr{{2YcBBRs   "%r    T)r6  r4   r!   r"   _get_index_dtyper&  r-   r3  rN   r1   r   rx   r%   has_canonical_format)r5   r   r   indsr   Ar5  r6  s         @@r;   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 rQ   r   r5   r   s     r;   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   )r1   r=   r   tocscr<  s     r;   r>  z_dok_base.tocsc  s8    99>%&MNNzzuz%+++66r@   c                    t        || j                        }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&   rB   r!   r=   r1   r   r(   r'   rx   )r5   r!   newNr8   newMr}   r   r   s           r;   resizez_dok_base.resize  s    EDNN;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!   r   r   r(   rN   r  r   r   )r5   r"   castingr   r   r   s         r;   r,   z_dok_base.astype  s    ::((5(AF88D!2!2!45UCDDJJ 56FLM99;r@   )NNFrQ   )g        )r   )NF)r   )F)unsafeT)@ri   
__module____qualname___formatr&   r#   r?   rE   rO   r   __doc__rS   rX   rZ   r\   r^   ra   rd   rm   rp   rr   rt   rv   rx   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r!  r   classmethodr'  r   r+   r>  rC  r,   __classcell__)r  s   @r;   r   r      s   GI%KT %KNX2 oo--GO#1199M!3"%FIII$"!#,*7.*>??.:00		 " 
$>,$%=
   ))11I
 <<''DL  MM))EM
 MM))EM7
 MM))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   )rK   s    r;   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)ri   rG  rH  rJ  rI   r@   r;   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   )r   asformatr*   __dict__)r5   r!   
new_matrixs      r;   	set_shapezdok_matrix.set_shape  s0    \\%e\4==dkkJ
"++r@   c                     | j                   S )zGet shape of a sparse matrix.)r'   rR   s    r;   	get_shapezdok_matrix.get_shape  s    {{r@   )fgetfsetc                 6    | j                   j                         S rQ   )r(   rd   rR   s    r;   rd   zdok_matrix.__reversed__  s    zz&&((r@   c                 r    t        |t              r| j                  |j                  z  S | j                  |z  S rQ   r$   r   r(   r   s     r;   rm   zdok_matrix.__or__  .    eY'::++zzE!!r@   c                 r    t        |t              r| j                  |j                  z  S | j                  |z  S rQ   r[  r   s     r;   rp   zdok_matrix.__ror__  r\  r@   c                     t        |t              r!| xj                  |j                  z  c_        | S | xj                  |z  c_        | S rQ   r[  r   s     r;   rr   zdok_matrix.__ior__  s:    eY'JJ%++%J  JJ%Jr@   N)ri   rG  rH  rJ  rT  rV  propertyr!   rd   rm   rp   rr   rI   r@   r;   r   r   M  s4    1f, ))4E)"
"
r@   r   )rJ  __docformat____all__r   numpyr-   _matrixr   _baser   r	   r
   _indexr   _sputilsr   r   r   r   r   r   r   r   r  r   r   r   r   rI   r@   r;   <module>rg     sj    %%
7    - - ; ; ;iT iX%62	7 2jP9 Pr@   