
    (ph                     D    S r SS/rSSKJr  SSKJr  SSKJr  S
S jrS r	g	)z*Functions that operate on sparse matrices
count_blocksestimate_blocksize   )issparse)	csr_array)csr_count_blocksc                 Z   [        U 5      (       a  U R                  S;   d  [        U 5      n U R                  S:X  a  gSUs=:  a  S:  d  O  [	        S5      eSU-   S-  n[        U R                  5      nU R                  u  pEUS-  S:X  a  US-  S:X  a  US[        U S	5      -  -  nOS
nUS-  S:X  a  US-  S:X  a  US[        U S5      -  -  nOS
nXb:  a  Xr:  a  US[        U S5      -  -  nX:  a  ggUS-  S:X  a  US-  S:X  a  US[        U S5      -  -  n	OS
n	X:  a  gXq:  a  gXa:  a  g	g)zAttempt to determine the blocksize of a sparse matrix

Returns a blocksize=(r,c) such that
    - A.nnz / A.tobsr( (r,c) ).nnz > efficiency
)csccsr    )r   r   g      ?z.efficiency must satisfy 0.0 < efficiency < 1.0g       @      )r   r   g           	   )r   r   $   )   r      )r   r   )r   formatr   nnz
ValueErrorfloatshaper   )
A
efficiencyhigh_efficiencyr   MNe22e33e66e44s
             H/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/_spfuncs.pyr   r      sJ    QKKAHH6aLuuzzCIJJZ'3.O
,C
''CA1uza!eqjQa../1uza!eqjQa../
!6R,q//0q5A:!a%1*l1U334CC    c                 P   Uu  p#US:  d  US:  a  [        S5      e[        U 5      (       ag  U R                  S:X  a0  U R                  u  pE[	        XEX#U R
                  U R                  5      $ U R                  S:X  a  [        U R                  X245      $ [        [        U 5      U5      $ )zUFor a given blocksize=(r,c) count the number of occupied
blocks in a sparse matrix A
r   zr and c must be positiver
   r	   )
r   r   r   r   r   indptrindicesr   Tr   )r   	blocksizercr   r   s         r!   r   r   >   s     CA1uA344{{88u''CA#AAHHQYY??XXQE**	!Y//r"   N)gffffff?)
__doc____all___baser   _csrr   _sparsetoolsr   r   r    r"   r!   <module>r0      s+    .
/   *0f0r"   