Ë
    þ�Djg5  ã                  ó¢   — d Z ddlmZ ddlmZ ddlZddlmZ erddl	mZ
 eej                  fZd„ Z G d„ d	«      Zdd
„Zd„ Zd„ Zdd„Zd„ Zd„ Zy)z0Indexing mixin for sparse array/matrix classes.
é    )Úannotations)ÚTYPE_CHECKINGNé   )Ú	isintlikec                óÐ   — t        j                  | |«      \  }}| j                  j                  |j                  _        |j                  j                  |j                  _        ||fS )a   
    Same as np.broadcast_arrays(a, b) but old writeability rules.

    NumPy >= 1.17.0 transitions broadcast_arrays to return
    read-only arrays. Set writeability explicitly to avoid warnings.
    Retain the old writeability rules, as our Cython code assumes
    the old behavior.
    )ÚnpÚbroadcast_arraysÚflagsÚ	writeable)ÚaÚbÚxÚys       úWC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\scipy/sparse/_index.pyÚ_broadcast_arraysr      sO   € ô ×Ñ˜q !Ó$�D€A€qØŸ™×)Ñ)€A‡G�GÔØŸ™×)Ñ)€A‡G�GÔØˆaˆ4€Kó    c                  óˆ   — e 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y)Ú
IndexMixinzS
    This class provides common dispatching and validation logic for indexing.
    c                ó>   — ddl m} t        | |«      rt        d«      ‚y)zçWe do not currently support 1D sparse arrays.

        This function is called each time that a 1D array would
        result, raising an error instead.

        Once 1D sparse arrays are implemented, it should be removed.
        r   )ÚsparrayzcWe have not yet implemented 1D sparse slices; please index using explicit indices, e.g. `x[:, [0]]`N)Úscipy.sparser   Ú
isinstanceÚNotImplementedError)Úselfr   s     r   Ú_raise_on_1d_array_slicez#IndexMixin._raise_on_1d_array_slice#   s)   € õ 	)ä�d˜GÔ$Ü%ðHóð ð %r   c                ó"  — | j                  |«      \  }}t        |t        «      r±t        |t        «      r| j                  ||«      S t        |t        «      r"| j                  «        | j                  ||«      S |j                  dk(  r"| j                  «        | j                  ||«      S |j                  dk(  r| j                  ||«      S t        d«      ‚t        |t        «      r£t        |t        «      r"| j                  «        | j                  ||«      S t        |t        «      r5|t	        d «      k(  r||k(  r| j                  «       S | j                  ||«      S |j                  dk(  r| j                  ||«      S t        d«      ‚|j                  dk(  rTt        |t        «      r"| j                  «        | j                  ||«      S t        |t        «      r©| j                  ||«      S t        |t        «      r| j                  ||«      S t        |t        «      rt        d«      ‚|j                   d   dk(  rH|j                  dk(  s|j                   d   dk(  r'| j#                  |d d …df   |j%                  «       «      S t'        ||«      \  }}|j                   |j                   k7  rt        d«      ‚|j(                  dk(  r:| j+                  t-        j.                  |«      j                   | j0                  ¬«      S | j3                  ||«      S )Nr   é   zindex results in >2 dimensionsr   ú'number of row and column indices differ©Údtype)Ú_validate_indicesr   Ú	INT_TYPESÚ_get_intXintÚslicer   Ú_get_intXsliceÚndimÚ_get_intXarrayÚ
IndexErrorÚ_get_sliceXintÚcopyÚ_get_sliceXsliceÚ_get_sliceXarrayÚ_get_arrayXintÚ_get_arrayXsliceÚshapeÚ_get_columnXarrayÚravelr   ÚsizeÚ	__class__r   Ú
atleast_2dr    Ú_get_arrayXarray)r   ÚkeyÚrowÚcols       r   Ú__getitem__zIndexMixin.__getitem__3   s”  € Ø×)Ñ)¨#Ó.‰ˆˆSô �cœ9Ô%Ü˜#œyÔ)Ø×(Ñ(¨¨cÓ2Ð2Ü˜C¤Ô'Ø×-Ñ-Ô/Ø×*Ñ*¨3°Ó4Ð4Ø—‘˜Q’Ø×-Ñ-Ô/Ø×*Ñ*¨3°Ó4Ð4Ø—‘˜Q’Ø×*Ñ*¨3°Ó4Ð4ÜÐ=Ó>Ð>Ü˜œUÔ#Ü˜#œyÔ)Ø×-Ñ-Ô/Ø×*Ñ*¨3°Ó4Ð4Ü˜C¤Ô'Øœ% ›+Ò%¨#°ª*ØŸ9™9›;Ð&Ø×,Ñ,¨S°#Ó6Ð6Ø—‘˜Q’Ø×,Ñ,¨S°#Ó6Ð6ÜÐ=Ó>Ð>Ø�X‰X˜Š]Ü˜#œyÔ)Ø×-Ñ-Ô/Ø×*Ñ*¨3°Ó4Ð4Ü˜C¤Ô'Ø×,Ñ,¨S°#Ó6Ð6ä˜#œyÔ)Ø×*Ñ*¨3°Ó4Ð4Ü˜C¤Ô'Ü Ð!AÓBÐBØ—‘˜1‘ Ò"¨¯©°Aª¸¿¹À1¹ÈÒ9Jà×-Ñ-¨c²!°A°#©h¸¿	¹	»ÓDÐDô % S¨#Ó.‰ˆˆSØ�9‰9˜Ÿ	™	Ò!ÜÐFÓGÐGØ�8‰8�qŠ=Ø—>‘>¤"§-¡-°Ó"4×":Ñ":À$Ç*Á*�>ÓMÐMØ×$Ñ$ S¨#Ó.Ð.r   c                óÆ  — | j                  |«      \  }}t        |t        «      rlt        |t        «      r\t        j                  || j
                  ¬«      }|j                  dk7  rt        d«      ‚| j                  |||j                  d   «       y t        |t        «      r6t        j                  |j                  | j                  d   «      Ž d d …d f   }nt        j                  |«      }t        |t        «      rNt        j                  |j                  | j                  d   «      Ž d d d …f   }|j                  dk(  r|d d …d f   }nt        j                  |«      }t!        ||«      \  }}|j                  |j                  k7  rt#        d«      ‚ddlm}  ||«      �r|j                  dk(  r
|d    }|d    }|j                  d   dk(  xr |j                  d   dk7  }|j                  d   dk(  xr |j                  d   dk7  }	|s|j                  d   |j                  d   k(  r!|	s*|j                  d   |j                  d   k(  st        d«      ‚|j                  d   dk(  s|j                  d   dk(  ry |j)                  d¬	«      }|j+                  «        | j-                  |||«       y t        j                  || j
                  ¬«      }|j/                  «       j                  |j/                  «       j                  k7  r t        j0                  ||j                  «      }|j                  dk(  ry |j3                  |j                  «      }| j5                  |||«       y )
Nr   r   z&Trying to assign a sequence to an itemr   r   ©Úissparsezshape mismatch in assignmentT)r*   )r!   r   r"   r   Úasarrayr    r2   Ú
ValueErrorÚ_set_intXintÚflatr$   ÚarangeÚindicesr/   Ú
atleast_1dr&   r   r(   Ú_baser<   ÚtocooÚsum_duplicatesÚ_set_arrayXarray_sparseÚsqueezeÚbroadcast_toÚreshapeÚ_set_arrayXarray)
r   r6   r   r7   r8   ÚiÚjr<   Úbroadcast_rowÚbroadcast_cols
             r   Ú__setitem__zIndexMixin.__setitem__e   sª  € Ø×)Ñ)¨#Ó.‰ˆˆSä�cœ9Ô%¬*°S¼)Ô*DÜ—
‘
˜1 D§J¡JÔ/ˆAØ�v‰v˜Š{Ü Ð!IÓJÐJØ×Ñ˜c 3¨¯©¨q©	Ô2Øä�cœ5Ô!Ü—)‘)˜SŸ[™[¨¯©°A©Ó7Ð8º¸D¸ÑA‰Cä—-‘- Ó$ˆCä�cœ5Ô!Ü—)‘)˜SŸ[™[¨¯©°A©Ó7Ð8¸ºq¸ÑAˆCØ�x‰x˜1Š}Øš!˜T˜'‘l‘ä—-‘- Ó$ˆCä   cÓ*‰ˆˆ1Ø�7‰7�a—g‘gÒÜÐFÓGÐGå#Ù�A�;Ø�v‰v˜Š{à�d‘G�Ø�d‘G�ØŸG™G A™J¨!™OÒ?°·±¸±
¸a±ˆMØŸG™G A™J¨!™OÒ?°·±¸±
¸a±ˆMÙ" a§g¡g¨a¡j°A·G±G¸A±JÒ&>Ù" a§g¡g¨a¡j°A·G±G¸A±JÒ&>Ü Ð!?Ó@Ð@Ø�w‰w�q‰z˜QŠ !§'¡'¨!¡*°¢/ØØ—‘˜T�Ó"ˆAØ×ÑÔØ×(Ñ(¨¨A¨qÕ1ô —
‘
˜1 D§J¡JÔ/ˆAØ�y‰y‹{× Ñ  A§I¡I£K×$5Ñ$5Ò5Ü—O‘O A q§w¡wÓ/�Ø�v‰v˜Š{ØØ—	‘	˜!Ÿ'™'Ó"ˆAØ×!Ñ! ! Q¨Õ*r   c                ó<  — ddl m} t        ||t        j                  f«      r`|j
                  dk(  rQ|j                  j                  dk(  r8|j                  | j                  k7  rt        d«      ‚|j                  «       \  }}nt        |«      \  }}| j                  \  }}	 	 	 	 	 	 	 	 dd„}t        |«      r/t        |«      }|| k  s||k\  rt        d|z  «      ‚|dk  r@||z  }n:t        |«      x}� |||d	«      }n"t        |t        «      s| j!                  ||«      }t        |«      r2t        |«      }|| k  s||k\  rt        d
|z  «      ‚|dk  r||z  }||fS t        |«      x}	� ||	|d«      }||fS t        |t        «      s| j!                  ||«      }||fS )Nr   )Ú_spbaser   r   z.boolean index shape does not match array shapec                ón   — t        | «      |k7  rt        d|› dt        | «      › d|› �«      ‚t        | «      S )Nzboolean z index has incorrect length: z instead of )Úlenr(   Ú_boolean_index_to_array)ÚidxÚ	axis_sizeÚ	axis_names      r   Ú_validate_bool_idxz8IndexMixin._validate_indices.<locals>._validate_bool_idx¥   sL   € ô
 �3‹x˜9Ò$Ü Ø˜y˜kÐ)FÄsÈ3ÃxÀjð Q"Ø"+ ð.óð ô +¨3Ó/Ð/r   zrow index (%d) out of ranger   r7   zcolumn index (%d) out of rangeÚcolumn)rV   znpt.NDArray[np.bool_]rW   ÚintrX   ÚstrÚreturnznpt.NDArray[np.int_])rD   rR   r   r   Úndarrayr&   r    Úkindr/   r(   ÚnonzeroÚ_unpack_indexr   r[   Ú_compatible_boolean_indexr$   Ú
_asindices)
r   r6   rR   r7   r8   ÚMÚNrY   Úbool_rowÚbool_cols
             r   r!   zIndexMixin._validate_indices™   s¶  € å"Ü�s˜W¤b§j¡jÐ1Ô2Ø—‘˜A’ #§)¡)§.¡.°CÒ"7Ø�y‰y˜DŸJ™JÒ&Ü Ð!QÓRÐRØ—{‘{“}‰HˆC‘ä$ SÓ)‰HˆC�Ø�z‰z‰ˆˆ1ð
	0Ø&ð
	0àð
	0ð ð
	0ð "ó	
	0ô �SŒ>Ü�c“(ˆCØ�a�RŠx˜3 !š8Ü Ð!>ÀÑ!DÓEÐEØ�QŠwØ�q‘‘Ü3°CÓ8Ð8ˆhÐEÙ$ X¨q°%Ó8‰CÜ˜C¤Ô'Ø—/‘/ # qÓ)ˆCä�SŒ>Ü�c“(ˆCØ�a�RŠx˜3 !š8Ü Ð!AÀCÑ!GÓHÐHØ�QŠwØ�q‘�ð �Cˆxˆô 4°CÓ8Ð8ˆhÐEÙ$ X¨q°(Ó;ˆCð �Cˆxˆô ˜C¤Ô'Ø—/‘/ # qÓ)ˆCà�Cˆxˆr   c                óâ  — 	 t        j                  |«      }|j                  dvrt        d«      ‚|j                  dk(  r|S |j                  «       }||k\  rt        d|z  «      ‚|j                  «       }|dk  rN|| k  rt        d|z  «      ‚||u s|j                  j                  s|j                  «       }||dk  xx   |z  cc<   |S # t        t        t        f$ r}t        d«      |‚d}~ww xY w)z“Convert `idx` to a valid index for an axis with a given length.

        Subclasses that need special validation can override this method.
        zinvalid indexN)r   r   zIndex dimension must be 1 or 2r   úindex (%d) out of range)r   r=   r>   Ú	TypeErrorÚMemoryErrorr(   r&   r2   ÚmaxÚminr
   Úowndatar*   )r   rV   Úlengthr   ÚeÚmax_indxÚmin_indxs          r   rc   zIndexMixin._asindicesÉ   sê   € ð
	5Ü—
‘
˜3“ˆAð �6‰6˜ÑÜÐ=Ó>Ð>à�6‰6�QŠ;ØˆHð —5‘5“7ˆØ�vÒÜÐ6¸ÑAÓBÐBà—5‘5“7ˆØ�aŠ<Ø˜6˜'Ò!Ü Ð!:¸XÑ!EÓFÐFØ�C‰x˜qŸw™wŸšØ—F‘F“H�Øˆa�!‰e‹H˜Ñ‹HØˆøô+ œI¤{Ð3ò 	5Ü˜_Ó-°1Ð4ûð	5ús   ‚C	 Ã	C.ÃC)Ã)C.c                ó²   — | j                   \  }}t        |«      }|| k  s||k\  rt        d|z  «      ‚|dk  r||z  }| j                  |t	        d«      «      S )zGReturn a copy of row i of the matrix, as a (1 x n) row vector.
        ri   r   N)r/   r[   r(   r%   r$   ©r   rL   rd   re   s       r   Ú_getrowzIndexMixin._getrowç   sa   € ð �z‰z‰ˆˆ1Ü�‹FˆØ�ˆrŠ6�Q˜!’VÜÐ6¸Ñ:Ó;Ð;ØˆqŠ5Ø�‰FˆAØ×"Ñ" 1¤e¨D£kÓ2Ð2r   c                ó²   — | j                   \  }}t        |«      }|| k  s||k\  rt        d|z  «      ‚|dk  r||z  }| j                  t	        d«      |«      S )zMReturn a copy of column i of the matrix, as a (m x 1) column vector.
        ri   r   N)r/   r[   r(   r)   r$   rt   s       r   Ú_getcolzIndexMixin._getcolò   sa   € ð �z‰z‰ˆˆ1Ü�‹FˆØ�ˆrŠ6�Q˜!’VÜÐ6¸Ñ:Ó;Ð;ØˆqŠ5Ø�‰FˆAØ×"Ñ"¤5¨£;°Ó2Ð2r   c                ó   — t        «       ‚©N©r   ©r   r7   r8   s      r   r#   zIndexMixin._get_intXintý   ó   € Ü!Ó#Ð#r   c                ó   — t        «       ‚ry   rz   r{   s      r   r'   zIndexMixin._get_intXarray   r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r%   zIndexMixin._get_intXslice  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r)   zIndexMixin._get_sliceXint  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r+   zIndexMixin._get_sliceXslice	  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r,   zIndexMixin._get_sliceXarray  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r-   zIndexMixin._get_arrayXint  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r.   zIndexMixin._get_arrayXslice  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r0   zIndexMixin._get_columnXarray  r|   r   c                ó   — t        «       ‚ry   rz   r{   s      r   r5   zIndexMixin._get_arrayXarray  r|   r   c                ó   — t        «       ‚ry   rz   ©r   r7   r8   r   s       r   r?   zIndexMixin._set_intXint  r|   r   c                ó   — t        «       ‚ry   rz   r‡   s       r   rK   zIndexMixin._set_arrayXarray  r|   r   c                ó¦   — t        j                  |j                  «       | j                  ¬«      }t	        ||«      \  }}| j                  |||«       y )Nr   )r   r=   Útoarrayr    r   rK   )r   r7   r8   r   Ú_s        r   rG   z"IndexMixin._set_arrayXarray_sparse!  s>   € ä�J‰J�q—y‘y“{¨$¯*©*Ô5ˆÜ   CÓ(‰ˆˆ1Ø×Ñ˜c 3¨Õ*r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r9   rP   r!   rc   ru   rw   r#   r'   r%   r)   r+   r,   r-   r.   r0   r5   r?   rK   rG   © r   r   r   r      sn   „ ñòò 0/òd2+òh.ò`ò<	3ò	3ò$ò$ò$ò$ò$ò$ò$ò$ò$ò$ò$ò$ó+r   r   c                óª  — t        | «      } t        | t        «      r>t        | «      dk(  r| \  }}n€t        | «      dk(  r| d   t	        d«      }}nat        d«      ‚t        | «      }|€| t	        d«      }}n;|j                  dk  r|t	        d«      fS |j                  dk(  r|j                  «       S ddl	m
}  |«      s |«      rt        d«      ‚||fS )z“ Parse index. Always return a tuple of the form (row, col).
    Valid type for row/col is integer, slice, array of bool, or array of integers.
    r   r   r   Nzinvalid number of indicesr;   zoIndexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.)Ú_check_ellipsisr   ÚtuplerT   r$   r(   rb   r&   r`   rD   r<   )Úindexr7   r8   rV   r<   s        r   ra   ra   (  sÒ   € ô ˜EÓ"€Eô �%œÔÜˆu‹:˜Š?Ø‰HˆC‘Ü�‹Z˜1Š_Ø˜Q‘x¤ t£�‰CäÐ8Ó9Ð9ä'¨Ó.ˆØˆ;Øœe D›k�‰CØ�X‰X˜Š\Øœ˜d›Ð#Ð#Ø�X‰X˜Š]Ø—;‘;“=Ð åÙ�„}™ œô ð ó!ð 	!ð �ˆ8€Or   c                óh  — | t         u rt        d«      t        d«      fS t        | t        «      s| S t	        | «      D ��cg c]  \  }}|t         u sŒ|‘Œ }}}|s| S t        |«      dkD  rt        d«      ‚|\  }t        ddt        | «      z
  «      }| d| t        d«      f|z  z   | |dz   d z   S c c}}w )z6Process indices with Ellipsis. Returns modified index.Nr   z0an index can only have a single ellipsis ('...')r   é   )ÚEllipsisr$   r   r“   Ú	enumeraterT   r(   rl   )r”   rL   ÚvÚellipsis_indicesÚ
num_slicess        r   r’   r’   N  sÁ   € à”ÑÜ�d“œU 4›[Ð)Ð)ä�eœUÔ#Øˆô '0°Ó&6×H™d˜a ¸!¼xº-šÐHÐÑHÙØˆÜ
ÐÓ˜qÒ ÜÐKÓLÐLð 
�B€AÜ�Q˜œC ›J™Ó'€JØ��!ˆ9œ˜d›�~¨
Ñ2Ñ2°U¸1¸q¹5¸6°]ÑBÐBùó Is   ¿B.ÁB.c                ód   — t        j                  | «      } | j                  j                  dk(  r| S y)z8Returns a compatible array if elements are boolean.
    r   N)r   Ú
asanyarrayr    r_   ©rV   s    r   Ú_maybe_bool_ndarrayrŸ   c  s*   € ô �-‰-˜Ó
€CØ
‡y�y‡~�~˜ÒØˆ
Ør   c                ó˜   — |dk  ry	 t        t        | «      d«      }t        |t        «      ryt        ||dz
  «      S # t        $ r Y yw xY w)zQReturns True if first element of the incompatible
    array type is boolean.
    r   NT)ÚnextÚiterrj   r   ÚboolÚ_first_element_bool)rV   Úmax_dimÚfirsts      r   r¤   r¤   l  sW   € ð �‚{ØðÜ”T˜#“Y Ó%ˆô �%œÔØÜ˜u g¨a¡iÓ0Ð0øô	 ò Ùðús   ˆ= ½	A	ÁA	c                óH   — t        | d«      st        | «      rt        | «      S y)ztReturns a boolean index array that can be converted to
    integer array. Returns None if no such array exists.
    r&   N)Úhasattrr¤   rŸ   rž   s    r   rb   rb   {  s$   € ô
 ˆs�FÔÔ2°3Ô7Ü" 3Ó'Ð'Ør   c                óf   — | j                   dkD  rt        d«      ‚t        j                  | «      d   S )Nr   zinvalid index shaper   )r&   r(   r   Úwhererž   s    r   rU   rU   …  s,   € Ø
‡x�x�!‚|ÜÐ.Ó/Ð/Ü�8‰8�C‹=˜ÑÐr   )r]   zctuple[int | slice | npt.NDArray[np.bool_ | np.int_], int | slice | npt.NDArray[np.bool_ | np.int_]])r   )r�   Ú
__future__r   Útypingr   Únumpyr   Ú_sputilsr   Únumpy.typingÚnptr[   Úintegerr"   r   r   ra   r’   rŸ   r¤   rb   rU   r�   r   r   ú<module>r²      s\   ðñå "å  ã Ý áÝà�"—*‘*Ð€	ò÷F+ñ F+óR#òLCò*ó1òór   