
    e!hcN                         d Z dZg dZddlZddlmZ ddlmZ dd	l	m
Z
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 ddlmZ  G d de      Zd Zd Z G d dee      Z G d dee      Zy)zSparse DIAgonal formatzrestructuredtext en)	dia_array
dia_matrixisspmatrix_dia    N   )copy_if_needed   )spmatrix)issparse_formats_spbasesparray)_data_matrix)isshapeupcast_chargetdtypeget_sum_dtypevalidateaxischeck_shape)
dia_matvecc                   x   e Zd ZdZddddZd Zd ZddZej                  j                  e_	        ddZ
ej                  j                  e
_	        dd	Zej                  j                  e_	        d
 Zd Zd ZddZddZej                   j                  e_	        ddZej"                  j                  e_	        ddZej$                  j                  e_	        ddZej&                  j                  e_	        ddZej(                  j                  e_	        ddZd Zej,                  j                  e_	        y)	_dia_basediaNmaxprintc                   t        j                  | ||       t        |      r|j                  dk(  rP|r|j	                         }|j
                  | _        |j                  | _        t        |j                        | _	        nl|j                  | j                  k(  r|r|j	                         }n|j                         }|j
                  | _        |j                  | _        t        |j                        | _	        nt        |t              r5t        |      r}t        |      | _	        t        j                  dt!        |t"                    | _        | j%                  t'        | j                              }t        j                  d|      | _        nY	 |\  }}	|t)        d      |st*        }t        j,                  t        j.                  |d   ||	            | _        t        j.                  |d
   | j%                  t'        |            |	      }	t        j0                  |	      | _        t        |      | _	        n	 t        j4                  |      }t        | t6              r(|j8                  dk7  rt)        d|j8                   d      | j;                  |||      j                         }|j
                  | _        |j                  | _        t        |j                        | _	        |+t!        |      }| j
                  j=                  |      | _        | j                  j8                  d
k7  rt)        d      | j
                  j8                  dk7  rt)        d      | j
                  j                  d   t?        | j                        k7  r:t)        d| j
                  j                  d   t?        | j                        fz        t?        t        j@                  | j                              t?        | j                        k7  rt)        d      y # t2        $ r}
d}t)        |      |
d }
~
ww xY w# t2        $ r}
t)        d| j                   d      |
d }
~
ww xY w)Nr   r   )r   r   )defaultmaxvalr   dtypezexpected a shape argument)r    copyr   z+unrecognized form for dia_array constructorzunrecognized form for z_matrix constructorr   zDIA arrays don't support zD input. Use 2D)r    shapezoffsets array must have rank 1zdata array must have rank 2zBnumber of diagonals (%d) does not match the number of offsets (%d)z&offset array contains duplicate values)!r   __init__r
   formatr!   dataoffsetsr   r"   _shapetodia
isinstancetupler   npzerosr   float_get_index_dtypemax
ValueErrorr   
atleast_2darray
atleast_1d	Exceptionasarrayr   ndim_coo_containerastypelenunique)selfarg1r"   r    r!   r   A	idx_dtyper%   r&   emessagenewdtypes                Y/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/sparse/_dia.pyr#   z_dia_base.__init__   sv   dD8<D>{{e#99;D II	#||)$**5;;$++-$		A

AFF	 yy)!''2e$t} *$/HHUHUE,JK	 11TZZ1I	!xx9=5$(MD'
 }()DEE- "bhhtAweRV.W XDI hhtAw-1-B-B#e*-B-U,02G $&==#9DL"-e"4DKMzz$' $(TYY!^ #<TYYK!WXX##DU#CIIKADI99DL%agg.DKH		((2DI <<!=>>99>>Q:;;99??1T\\!22 @yyq)3t||+<=> ? ? ryy&'3t||+<<EFF =Y ! 5KG$W-145$  M !9$(KK=0C"E FKLMMs0   P P6 	P3 P..P36	Q?QQc                     t         | j                     \  }}t        | t              rdnd}| j                  j
                  d   }d| d| d| j                   d| j                   d| d	| j
                   d
S )Nr2   matrixr   <z sparse z of dtype 'z'
	with z stored elements (z diagonals) and shape >)r   r$   r)   r   r%   r"   r    nnz)r;   _fmt
sparse_clsds        rB   __repr__z_dia_base.__repr__c   s|    $++&3 *4 9Wx
IIOOAuHZLDJJ< @hhZ1!4J4::,VWY	
    c                     | j                   \  }}t        j                  | j                  j                   d         }|| j                  dddf   z
  }|dk\  }|||k  z  }|||k  z  }|S )z~Returns a mask of the same shape as self.data, where
        mask[i,j] is True when data[i,j] corresponds to a stored element.r   Nr   )r"   r+   aranger%   r&   )r;   num_rowsnum_colsoffset_indsrowmasks         rB   
_data_maskz_dia_base._data_maskl   so     "ZZ(ii		 23DLL400qx x'(rM   c                     |t        d      | j                         }t        j                  | j                  |         S )Nz<count_nonzero over an axis is not implemented for DIA format)NotImplementedErrorrU   r+   count_nonzeror%   )r;   axisrT   s      rB   rX   z_dia_base.count_nonzerow   s?    %N   		$00rM   c                     |t        d      | j                  \  }}d}| j                  D ],  }|dkD  r|t        |||z
        z  }|t        ||z   |      z  }. t	        |      S )Nz6_getnnz over an axis is not implemented for DIA formatr   )rW   r"   r&   minint)r;   rY   MNrG   ks         rB   _getnnzz_dia_base._getnnz   sy    % '7 8 8jj! 	"A1us1QqSz!s1Q3qz!		"
 3xrM   c           
      R   t        |       |
|dk  r|dz  }t        | j                        }| j                  \  }}d }|dk(  r| j	                         }| j
                  |z  j                  d      }	|	j                  d   |k(  r|	}
n3t        j                  ||	j                        }
|	|
d |	j                  d    | j                  |
|      }nt        j                  |df|      }t        j                  ||      }t        ||t        | j                        | j
                  j                  d   | j                  | j
                  ||       | j                  |      }||j                  ||      S | j                  |j                  |            }|j                  d||      S )	Nr   r   rY   r   r   )r    out )rY   r    rc   )r   r   r    r"   rU   r%   sumr+   r,   _ascontaineronesr   r9   r&   )r;   rY   r    rc   	res_dtyperP   rQ   retrT   xresrow_sumsones                rB   re   z_dia_base.sum   sy   TqAID!$**-	!ZZ(19??$DT!&&A&.AwwqzX%hhxqww7#$KQWWQZ ##Cy#9C xx1Y?H''()4Cx3t||+<yyq)4<<CS ((2H|||%S|99##HLLdL$;<CwwBew55rM   c                 D   t        |t              s|j                  |       S t        j                  | j
                  |j
                        r(| j                  | j                  |j                  z         S t        j                  | j
                  |j
                        }t        j                  || j
                        }t        j                  ||j
                        }| j                  j                  d   }|j                  j                  d   }||k(  rVt        |      t        | j
                        k(  r5| j                  t        |         }||d d fxx   |j                  z  cc<   n||k(  rUt        |      t        |j
                        k(  r4|j                  t        |         }||d d fxx   | j                  z  cc<   nt        | j                  d   |d   z   | j                  d         }t        j                  t        |      |ft        j                  | j                  |j                              }||d |fxx   | j                  d d d |f   z  cc<   ||d |fxx   |j                  d d d |f   z  cc<   | j!                  ||f| j                        S )Nr   r   r   r"   )r)   r   _add_sparser+   array_equalr&   
_with_datar%   union1dsearchsortedr"   r9   _invert_indexr[   r,   result_type_dia_container)	r;   othernew_offsetsself_idx	other_idxself_dother_dnew_datarK   s	            rB   rq   z_dia_base._add_sparse   s   %+$$T** >>$,,6??499uzz#9:: jju}}=??;=OOK?	#**""1% W[!1S5F!Fyyx!89HY\"ejj0"w3{#3s5==7I#Izz-	":;HXq[!TYY.! DJJqMKO3TZZ]CA xx[!1%nnTYY

;H Xww&'499QU+;;'Y()UZZ2A2->>)""Hk#:$**"MMrM   c                 >    | j                  | j                  |z        S N)rs   r%   )r;   ry   s     rB   _mul_scalarz_dia_base._mul_scalar   s    tyy5011rM   c                    |}t        j                  | j                  d   t        | j                  j
                  |j                  j
                              }| j                  j                  d   }| j                  \  }}t        ||t        | j                        || j                  | j                  |j                         |j                                |S )Nr   r   r   )r+   r,   r"   r   r    charr%   r   r9   r&   ravel)r;   ry   rj   yLr]   r^   s          rB   _matmul_vectorz_dia_base._matmul_vector   s    HHTZZ]+djjoo78ww||+E F IIOOAjj!1QDLL)1dllDII779aggi	) rM   c                    | j                   \  }}|j                  dk(  rt        j                  }nt	        |      }|dk  rt        ||z   ||      }d}|}nt        |||z
  |      }|}||z   }|j                  dk7  r|d | }| j                  j                   \  }	}
|| j                  v ro||
kD  rIt        j                  |	|f| j                  j                        }| j                  |d d d |
f<   || _        || j                  | j                  |k(  ||f<   y t        j                  | j                  | j                  j                  j                  |            | _        t        ||
      }t        j                  |	dz   |f| j                  j                        }| j                  |d dd |
f<   ||d||f<   || _        y )Nr   r   r   ro   )r"   r6   r+   infr9   r[   r%   r&   r,   r    appendtyper/   )r;   valuesr_   r]   r^   values_nn	min_index	max_index	data_rows	data_colsr%   ms                rB   _setdiagz_dia_base._setdiag   s   zz1;;!vvH6{Hq5AE1h'AIIAq1uh'AIAI;;!BQZF#yy	99$xxI 6diiooN&*iiQ

]# 	@FDIIdlla'9)<<=99T\\4<<3E3E3J3J13MNDLIy)A88Y]A.diiooFD$(IID"jyj!,2DYy(()DIrM   c                 *    |r| j                         S | S r   r!   )r;   r!   s     rB   r(   z_dia_base.todia  s    99;KrM   c                    ||dk7  rt        d      | j                  \  }}t        | j                        }| j                   }t	        j
                  t        |      t        j                        d d d f   }t	        j
                  |t        j                        ||z  d d d f   z
  }t        d|| j                  j                  d   z
        }	t	        j                  | j                  t	        j                  | j                  j                  d   |	f| j                  j                        f      }
|
||f   }
| j                  |
|f||f|      S )N)r   r   zvSparse arrays/matrices do not support an 'axes' parameter because swapping dimensions is the only logical permutation.r   r   r   )r"   r!   )r0   r"   r/   r&   r+   rO   r9   intcr%   hstackr,   r    rx   )r;   axesr!   rP   rQ   max_dimr&   rc
pad_amountr%   s              rB   	transposez_dia_base.transpose  s3    L M M "ZZ(djj/ <<- IIc'l"''21d7;IIhbgg.'G2CQW1MMGDIIOOA$667
yy$))RXXtyyq/A:.N48IIOO&E F GAqDz""D'?h; &* # , 	,rM   c                    | j                   \  }}|| k  s||k\  r+t        j                  d| j                  j                        S t        j
                  | j                  |k(        \  }t        d|      }t        ||z   |      }||z
  }|j                  dk(  r+t        j                  || j                  j                        S | j                  |d   ||f   }|t        |      z
  }	|	dkD  rt        j                  |d|	fd      }|S )Nr   r   constant)mode)r"   r+   emptyr%   r    nonzeror&   r/   r[   sizer,   r9   pad)
r;   r_   rowscolsidx	first_collast_colresult_sizeresultpaddings
             rB   diagonalz_dia_base.diagonal1  s    ZZ
d:d88ATYY__55zz$,,!+,1I	tax&*88q=88Ktyy??3q69X#556F+Q;VVFQLzBFrM   c                 L   | j                   dk(  r'| j                  | j                  | j                        S | j                  \  }}| j                  j                  \  }}t        j                  |      }|| j                  d d d f   z
  }|dk\  }|||k  z  }|||k  z  }|| j                  dk7  z  }| j                  t        | j                              }	t        j                  |dz   |	      }
t        j                  |j                  d      d |       |
d|dz    ||k  r|
|   |
|dz   d  |j                  |j                     j                  |	d      }| j                  j                  |j                     }| j                  |||
f| j                  | j                        S )	Nr   r   r   r   rb   Fr   )r"   r    )rG   _csc_containerr"   r    r%   r+   rO   r&   r.   r/   r,   cumsumre   Tr8   )r;   r!   rP   rQ   num_offsets
offset_lenrR   rS   rT   r>   indptrindicesr%   s                rB   tocscz_dia_base.tocscC  s   88q=&&tzz&DD!ZZ("&))//Zii
+DLL400qx x'(a ))TZZ)A	(Q,i8!#4888+;IX+F!GqA $*:$6F:a<=!%%-&&yu&=yy{{466"""D'6#:$**)- # 5 	5rM   c                 t   | j                   \  }}| j                  j                   \  }}t        j                  |      }|| j                  d d d f   z
  }|dk\  }|||k  z  }|||k  z  }|| j                  dk7  z  }||   }t        j
                  ||      |j                            }	| j                  | j                  ft        | j                               }
|j                  |
d      }|	j                  |
d      }	| j                  |   }| j                  |||	ff| j                   | j                  d      S )Nr   )arraysr   Fr   )r"   r    r!   )r"   r%   r+   rO   r&   tiler   r.   r/   r8   r7   r    )r;   r!   rP   rQ   r   r   rR   rS   rT   colr>   r%   s               rB   tocooz_dia_base.tocoo]  s2   !ZZ("&))//Zii
+DLL400qx x'(a $iggk;/

=))LL?3tzz? * 
	 jjj/jjj/yy ""C:djj

 # 
 	
rM   c                     |r7| j                  || j                  j                         f| j                        S | j                  || j                  f| j                        S )zReturns a matrix with the same sparsity structure as self,
        but with different data.  By default the structure arrays are copied.
        rp   )rx   r&   r!   r"   )r;   r%   r!   s      rB   rs   z_dia_base._with_datax  sf     &&t||((*+4:: '   &&t||$DJJ '  rM   c                    t        |      }|\  }}| j                  d d d |f   | _        || j                  d   kD  rt        j                  | j
                  | j                  d   z   | j                  j                  d   k        r_| j
                  d d d f   | j                  d   z   t        j                  | j                  j                  d         k  }d| j                  |<   || _        y )Nr   r   )r   r%   r"   r+   anyr&   rO   r'   )r;   r"   r]   r^   rT   s        rB   resizez_dia_base.resize  s    E"1IIa!e$	

1t||djjm3diiooa6HHILLD)DJJqM9IIdiiooa012DDIIdOrM   )NNFr   )NNN)r   )F)NF)T)__name__
__module____qualname___formatr#   rL   rU   rX   r   __doc__r`   re   rq   r   r   r   r(   r   r   r   r   rs   r   rd   rM   rB   r   r      s    GKGT KGZ
	1 $1199M oo--GO!6F ++%%CK#NJ2#J MM))EM,,  ))11I  ''//H50 MM))EM
0 MM))EM ^^++FNrM   r   c                 r    t        j                  |       }t        j                  t        |             || <   |S )z)Helper function to invert an index array.)r+   
zeros_likerO   r9   )r   invs     rB   rv   rv     s+    
--
CyyS"CHJrM   c                 "    t        | t              S )a  Is `x` of dia_matrix type?

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

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

    Examples
    --------
    >>> from scipy.sparse import dia_array, dia_matrix, coo_matrix, isspmatrix_dia
    >>> isspmatrix_dia(dia_matrix([[5]]))
    True
    >>> isspmatrix_dia(dia_array([[5]]))
    False
    >>> isspmatrix_dia(coo_matrix([[5]]))
    False
    )r)   r   )rj   s    rB   r   r     s    . a$$rM   c                       e Zd ZdZy)r   a<  
    Sparse array with DIAgonal storage.

    This can be instantiated in several ways:
        dia_array(D)
            where D is a 2-D ndarray

        dia_array(S)
            with another sparse array or matrix S (equivalent to S.todia())

        dia_array((M, N), [dtype])
            to construct an empty array with shape (M, N),
            dtype is optional, defaulting to dtype='d'.

        dia_array((data, offsets), shape=(M, N))
            where the ``data[k,:]`` stores the diagonal entries for
            diagonal ``offsets[k]`` (See example below)

    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
    size
    data
        DIA format data array of the array
    offsets
        DIA format offset array of the array
    T

    Notes
    -----

    Sparse arrays can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.
    Sparse arrays with DIAgonal storage do not support slicing.

    Examples
    --------

    >>> import numpy as np
    >>> from scipy.sparse import dia_array
    >>> dia_array((3, 4), dtype=np.int8).toarray()
    array([[0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0]], dtype=int8)

    >>> data = np.array([[1, 2, 3, 4]]).repeat(3, axis=0)
    >>> offsets = np.array([0, -1, 2])
    >>> dia_array((data, offsets), shape=(4, 4)).toarray()
    array([[1, 0, 3, 0],
           [1, 2, 0, 4],
           [0, 2, 3, 0],
           [0, 0, 3, 4]])

    >>> from scipy.sparse import dia_array
    >>> n = 10
    >>> ex = np.ones(n)
    >>> data = np.array([ex, 2 * ex, ex])
    >>> offsets = np.array([-1, 0, 1])
    >>> dia_array((data, offsets), shape=(n, n)).toarray()
    array([[2., 1., 0., ..., 0., 0., 0.],
           [1., 2., 1., ..., 0., 0., 0.],
           [0., 1., 2., ..., 0., 0., 0.],
           ...,
           [0., 0., 0., ..., 2., 1., 0.],
           [0., 0., 0., ..., 1., 2., 1.],
           [0., 0., 0., ..., 0., 1., 2.]])
    Nr   r   r   r   rd   rM   rB   r   r         HrM   r   c                       e Zd ZdZy)r   aO  
    Sparse matrix with DIAgonal storage.

    This can be instantiated in several ways:
        dia_matrix(D)
            where D is a 2-D ndarray

        dia_matrix(S)
            with another sparse array or matrix S (equivalent to S.todia())

        dia_matrix((M, N), [dtype])
            to construct an empty matrix with shape (M, N),
            dtype is optional, defaulting to dtype='d'.

        dia_matrix((data, offsets), shape=(M, N))
            where the ``data[k,:]`` stores the diagonal entries for
            diagonal ``offsets[k]`` (See example below)

    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
    size
    data
        DIA format data array of the matrix
    offsets
        DIA format offset array of the matrix
    T

    Notes
    -----

    Sparse matrices can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.
    Sparse matrices with DIAgonal storage do not support slicing.

    Examples
    --------

    >>> import numpy as np
    >>> from scipy.sparse import dia_matrix
    >>> dia_matrix((3, 4), dtype=np.int8).toarray()
    array([[0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0]], dtype=int8)

    >>> data = np.array([[1, 2, 3, 4]]).repeat(3, axis=0)
    >>> offsets = np.array([0, -1, 2])
    >>> dia_matrix((data, offsets), shape=(4, 4)).toarray()
    array([[1, 0, 3, 0],
           [1, 2, 0, 4],
           [0, 2, 3, 0],
           [0, 0, 3, 4]])

    >>> from scipy.sparse import dia_matrix
    >>> n = 10
    >>> ex = np.ones(n)
    >>> data = np.array([ex, 2 * ex, ex])
    >>> offsets = np.array([-1, 0, 1])
    >>> dia_matrix((data, offsets), shape=(n, n)).toarray()
    array([[2., 1., 0., ..., 0., 0., 0.],
           [1., 2., 1., ..., 0., 0., 0.],
           [0., 1., 2., ..., 0., 0., 0.],
           ...,
           [0., 0., 0., ..., 2., 1., 0.],
           [0., 0., 0., ..., 1., 2., 1.],
           [0., 0., 0., ..., 0., 1., 2.]])
    Nr   rd   rM   rB   r   r     r   rM   r   )r   __docformat____all__numpyr+   
_lib._utilr   _matrixr	   _baser
   r   r   r   _datar   _sputilsr   r   r   r   r   r   _sparsetoolsr   r   rv   r   r   r   rd   rM   rB   <module>r      sm    %
7  '  7 7   %A, A,H%6I	7 IXI9 IrM   