
    \ciG                     r    d Z ddlZddlmZ ddlmZmZ eej	        fZ
d Z G d d          Zd	 Zd
 Zd ZdS )z0Indexing mixin for sparse array/matrix classes.
    N   )	isintlike)sparrayissparsec                  z    t          j        |  }t          ||           D ]\  }}|j        j        |j        _        |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zipflags	writeable)arraysr	   xas       c/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/scipy/sparse/_index.py_broadcast_arraysr   
   sH     *F3$f-- . .1G-    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d Zd ZdS )
IndexMixinzS
    This class provides common dispatching and validation logic for indexing.
    c                    t          || j        | j                  \  }}}}t          |          dk    rt	          d| j         d          t          |          dk    rL|d         }t          |t          j                  r|j        dk    r|                                }t          |t                    r| 
                    |          }n@t          |t                    r|                     |          }n|                     |          }t          | t                    s|S |j        dk    ri|dk    rct          |          dk    r|                     |g|| j                  S t          |          dk    r|                     |gg|| j                  S |                    |          S |\  }}t          |t                    rt          |t                    r|                     ||          }nt          |t                    r|                     ||          }np|j        dk    r|                     ||          }nM|j        dk    r|                     ||          }n*t	          d          t          |t                    rt          |t                    r|                     ||          }nt          |t                    rG|t          d           k    r||k    r|                                 }n|                     ||          }n}|j        dk    r|                     ||          }nZt	          d          t          |t                    r|                     ||          }nt          |t                    r|                     ||          }n|j        dk    r`|j        d         dk    rO|j        dk    s|j        d         dk    r3|                     |d d df         |                                          }nt=          ||          \  }}|j        |j        k    rt	          d	          |j        dk    r4|                     t          j         |          j        | j        
          }n| !                    ||          }t          | t                    s`|dk    st          |          dk    r|j        dk    r|S t          |          dk    rd|z   }||j        k    r|n|                    |          S |j        |k    r}| j        dk    r]t          |          dk    rJ|j        dk    r| "                    |g|          S |#                                                    |          S |                    |          S |S )N   z/Indexing that leads to >2D is not supported by z% format. Try converting to COO formatr   r    )shapedtypezindex results in >2 dimensions'number of row and column indices differr   )r   lilr   )$_validate_indicesr   formatlen
IndexError
isinstancer   ndarrayitem	INT_TYPES_get_intslice
_get_slice
_get_arrayr   	__class__r   reshape_get_intXint_get_intXslicendim_get_intXarray_get_sliceXintcopy_get_sliceXslice_get_sliceXarray_get_arrayXint_get_arrayXslice_get_columnXarrayravelr   size
atleast_2d_get_arrayXarray_coo_containertocoo)	selfkeyindex	new_shape_idxresrowcols	            r   __getitem__zIndexMixin.__getitem__   sN   !23
DK!P!Py!Qy>>A S $S S S T T T u::??(C#rz** %9??((**C#y)) +mmC((C'' +ooc**ooc** dG,, 
yB9??y>>Q&&>>3%y
>SSSy>>Q&&>>C5'$*>UUU;;y))) S c9%% )	:#y)) 	C''S11C'' C))#s33Q))#s33Q))#s33 !ABBBU## 	:#y)) 
C))#s33C'' C%++%%#**))++CC//S99CCQ++C55 !ABBB#y)) :))#s33C'' :++C55(a--CIaLA$5$5X]]cila&7&7,,SAY		DD -S#66S9	))$%NOOO8q==..s););)A.TTCC//S99C $(( 	MB3y>>Q#6#638q==
9~~"" 9,	#sy0033ckk)6L6LL 9	!!{e##I!(;(;9??..ui.HHHyy{{**9555;;y)))
r   c                 
   t          || j        | j                  \  }}}}t          |          dk    r|d         }t	          |          r|                                }nt          j        || j                  }t          |t                    r=|j        dk    rt          d          |                     ||j        d                    d S t          |t                    rt!          |                    | j        d                    }t          |          }|dk    r4|j        dk    r)|                     |d         |j        d                    d S t          j        |                    | j        d                    }|j        }	n|                                j        }	|                                j        |	k    rt          j        ||j                  }|j        dk    r|                     ||           d S |\  }
}t          |
t                    rt          |t                    r}t	          |          r|                                }nt          j        || j                  }|j        dk    rt          d          |                     |
||j        d                    d S t          |
t                    r7t          j        |
                    | j        d                    d d d f         }
nt          j        |
          }
t          |t                    rNt          j        |                    | j        d                    d d d f         }|
j        dk    r|
d d d f         }
nt          j        |          }t3          |
|          \  }}|j        |j        k    rt5          d          t	          |          rd|j        v rd S |j        dk    r|d          }|d          }|                    d                              |j        d          }|j        d         dk    o|j        d         dk    }|j        d         dk    o|j        d         dk    }|s|j        d         |j        d         k    r|s+|j        d         |j        d         k    st          d	          |                                 |                     |||           d S t          j        || j                  }|                                j        |                                j        k    rt          j        ||j                  }|j        dk    rd S |                    |j                  }|                      |||           d S )
Nr   r   r   z&Trying to assign a sequence to an itemr   F)r1   Tzshape mismatch in assignment)!r   r   r   r    r   toarrayr   asarrayr   r"   r%   r8   
ValueError_set_intflatr'   rangeindicesarangesqueezebroadcast_to
_set_array_set_intXint
atleast_1dr.   r   r!   r<   r+   _shape_as_2dsum_duplicates_set_arrayXarray_sparse_set_arrayXarray)r=   r>   r   r?   r@   rA   rB   	idx_rangeN	idx_shaperD   rE   ijbroadcast_rowbroadcast_cols                   r   __setitem__zIndexMixin.__setitem__   s   !23
DK!P!Py!Q u::??(C{{ 4IIKKJq
333#y)) 6Q;;$%MNNNc16!9---#u%% 0 "3;;tz!}#=#=>		NN66afkkMM)A,q	:::FiTZ]!;!;<I		KKMM/	yy{{ I--OAsy11v{{Q'''F Sc9%% 	*S)*D*D 	{{ 4IIKKJq
333v{{ !IJJJc3q	222Fc5!! 	%)S[[A778DACC-$$Cc5!! 	%)S[[A778qqqACx1}}!!!T'l-$$C c**17agFGGGA;; 	+AG||v{{dGdGU##++AN+FFAGAJ!O?
aMGAJ!O?
aM" AagajAGAJ&>&>" '?&'gajAGAJ&>&> !?@@@((Aq11111 
1DJ///Ayy{{ AIIKK$555OAqw//v{{		!'""A!!!Q*****r   c                     | j         \  }}t          |          }|| k     s||k    rt          d| d          |dk     r||z  }|                     |t	          d                    S )zGReturn a copy of row i of the matrix, as a (1 x n) row vector.
        index () out of ranger   N)r   intr!   r-   r'   r=   r\   MrZ   s       r   _getrowzIndexMixin._getrow   su     z1FFr66Q!VV8q888999q55FA""1eDkk222r   c                     | j         \  }}t          |          }|| k     s||k    rt          d| d          |dk     r||z  }|                     t	          d          |          S )zMReturn a copy of column i of the matrix, as a (m x 1) column vector.
        rb   rc   r   N)r   rd   r!   r0   r'   re   s       r   _getcolzIndexMixin._getcol   su     z1FFr66Q!VV8q888999q55FA""5;;222r   c                     t                      NNotImplementedErrorr=   rB   s     r   r&   zIndexMixin._get_int       !###r   c                     t                      rk   rl   rn   s     r   r(   zIndexMixin._get_slice   ro   r   c                     t                      rk   rl   rn   s     r   r)   zIndexMixin._get_array   ro   r   c                     t                      rk   rl   r=   rD   rE   s      r   r,   zIndexMixin._get_intXint   ro   r   c                     t                      rk   rl   rs   s      r   r/   zIndexMixin._get_intXarray   ro   r   c                     t                      rk   rl   rs   s      r   r-   zIndexMixin._get_intXslice   ro   r   c                     t                      rk   rl   rs   s      r   r0   zIndexMixin._get_sliceXint  ro   r   c                     t                      rk   rl   rs   s      r   r2   zIndexMixin._get_sliceXslice  ro   r   c                     t                      rk   rl   rs   s      r   r3   zIndexMixin._get_sliceXarray  ro   r   c                     t                      rk   rl   rs   s      r   r4   zIndexMixin._get_arrayXint  ro   r   c                     t                      rk   rl   rs   s      r   r5   zIndexMixin._get_arrayXslice  ro   r   c                     t                      rk   rl   rs   s      r   r6   zIndexMixin._get_columnXarray  ro   r   c                     t                      rk   rl   rs   s      r   r:   zIndexMixin._get_arrayXarray  ro   r   c                     t                      rk   rl   r=   rB   r   s      r   rK   zIndexMixin._set_int  ro   r   c                     t                      rk   rl   r~   s      r   rR   zIndexMixin._set_array  ro   r   c                     t                      rk   rl   r=   rD   rE   r   s       r   rS   zIndexMixin._set_intXint  ro   r   c                     t                      rk   rl   r   s       r   rX   zIndexMixin._set_arrayXarray   ro   r   c                     t          j        |                                | j                  }t	          ||          \  }}|                     |||           d S )Nr   )r   rI   rH   r   r   rX   )r=   rD   rE   r   rA   s        r   rW   z"IndexMixin._set_arrayXarray_sparse#  sQ    Jqyy{{$*555 C((1c3*****r   N)__name__
__module____qualname____doc__rF   r`   rg   ri   r&   r(   r)   r,   r/   r-   r0   r2   r3   r4   r5   r6   r:   rK   rR   rS   rX   rW   r   r   r   r   r      sp        ` ` `DY+ Y+ Y+v	3 	3 	3	3 	3 	3$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $+ + + + +r   r   c           	      Z   t          |          }| t          u rt          d          f|z  |g g fS t          | t                    s| g} d}g }d}t          |           D ]\  }}|t          u r|t          d          |}"||                    |           :t          |t                    st          |          r|                    |           |dz  }yt          ||          x}	 |                    |	           ||	j
        z  }t          |          rt          d          |                    t          j        |                     |dz  }||k    rt          d|  d| d| d	          ||z
  t          d          gz  }
|
r0||                    |
           n|d|         |
z   ||d         z   }g }d}g g }g }g }t          |          D ]U\  }}|8|                    t          |                     |                    d           @t          |t                    ra                    |           ||         }t          t          |                    |                     }|                    |           |dz  }t          |          rv||         }| |cxk    r|k     sn t          d
| d          t#          |dk     r||z   n|          }                    |           |                    |           |dz  };|j        j        dk    r||j
        z   }|||         }|j        |k    rt          d| d| d|j                                       |                                           |                    t          ||                     |                    t          ||                     |}||         }t-          |||          }                    |           |                    |           |                    |           |dz  }Wt          |          dk    rt/          fd|D              t1          fddd         D                       r3d                    d D                       }d| }t          |          t5          |          D ]
\  }}||<   d         j        }t          |          |d         |d         z
  dz   k    rt7          |          |z   }n|d         }|d|         t7          |          z   ||d         z   }nSt          |          dk    r@|d                  j        }|d         }|d|         t7          |          z   ||d         z   }t	                    t	          |          ||fS )a  Returns four sequences: (index, requested shape, arrays, nones)

    index : tuple of validated idx objects. bool arrays->nonzero(),
            arrays broadcast, ints and slices as they are, Nones removed
    requested shape : the shape of the indexed space, including Nones
    arr_pos : position within index of all arrays or ints (for array fancy indexing)
    none_pos : insert positions to put newaxis coords in indexed space.
    Nr   z(an index can only have a single ellipsisr   zoIndexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.z<Too many indices for array or tuple index out of range. Key z needs zD. Array is Drb   rc   bzbool index z has shape z instead of c              3   (   K   | ]}|         V  d S rk   r   ).0r\   r?   s     r   	<genexpr>z$_validate_indices.<locals>.<genexpr>  s'      (I(Iaq(I(I(I(I(I(Ir   c              3   D   K   | ]}d          j         |j         k    V  dS )r   Nr   )r   ix
idx_arrayss     r   r   z$_validate_indices.<locals>.<genexpr>  s1      HH2z!}"bh.HHHHHHr    c              3   >   K   | ]}t          |j                  V  d S rk   )strr   )r   r   s     r   r   z$_validate_indices.<locals>.<genexpr>  s*      AAc"(mmAAAAAAr   zLshape mismatch: indexing arrays could not be broadcast together with shapes )r    Ellipsisr'   r"   tuple	enumerater!   appendr   _compatible_boolean_indexr.   r   r   rI   extendrM   rN   rd   r   kindr   nonzero
_asindicesr   anyjoinr
   list)r>   
self_shapeself_format	self_ndim	ellps_pos	index_1stprelim_ndimr\   rB   r   ellip_slicesr[   
index_ndimarray_indicesnone_positionsarr_int_posMs	len_slicerZ   tmp_ndim	mid_shapeshapesmsgarr	arr_shapearr_posr   r?   s                             @@r   r   r   *  s}    JI
hd~	):r2==c5!! e IIKC..  3(??$ !KLLLII[S!!!!U## 	y~~ 	S!!!1KK-c9===bJR   27"KKc]] 	$% % %
 RZ__---1KKYEE E*E E8AE E E
 
 	
 +d}<L U\****!*9*-<y?TTI IJEMNKI&& $ $3;!!#i..111QU##  	LLJ'BE3;;r??344IY'''!OJJs^^ 	:&AB#MMMMMMMM !>3!>!>!>???qcAggc22CLLz***!OJJY^s""!CH,H":h#67IyI%% R!RR	RRsyRR   LL'''  z8!<!<===uZ::;;;!JJ:&AS![11CLLz***  ,,,!OJJ
=A&(I(I(I(I=(I(I(IJ
HHHHABBHHHHH 	"XXAAjAAAAAF4+14 4CS//!-44 	 	FAsE!HHqM'	 {B+a. @1 DEEY)3II!!nG!(7(+d9oo=	'((@SSII	]		q	 	 -*+1	a.hwh'$y//9Ighh<OO	<<y));FFr   c                 8   	 t          j        |           }n/# t          t          t          f$ r}t          d          |d}~ww xY w|dk    r |j        dvrt          d|j                   |dk    r|S |j        dk    r|S |                                }||k    rt          d| d	          |	                                }|dk     rR|| k     rt          d| d	          || u s|j
        j        s|                                }||dk     xx         |z  cc<   |S )
zConvert `idx` to a valid index for an axis with a given length.

    Subclasses that need special validation can override this method.
    zinvalid indexNcoo)r   r   z$Index dimension must be 1 or 2. Got r   r   rb   rc   )r   rI   rJ   	TypeErrorMemoryErrorr!   r.   r8   maxminr   owndatar1   )rB   lengthr   r   emax_indxmin_indxs          r   r   r     sK   
1Z__	;/ 1 1 1))q01 27&00IIIJJJ 		w!||	 vvxxH6;8;;;<<<vvxxH!||vg?x???@@@99BH,9B
26


f


Is    A>Ac                 b   t          | d          s	 t          t          |           d          }t          |          D ]6}t	          |t
                    r n t          t          |          d          }7dS n# t          $ r Y dS w xY wt          j        |           } | j	        j
        dk    r| S dS )zICheck for boolean array or array-like. peek before asarray for array-liker.   Nr   )hasattrnextiterrM   r"   boolr   r   
asanyarrayr   r   )rB   desired_ndimr   rA   s       r   r   r     s     3 !		d3ii&&B<((  b$'' E$r((D))t   	 	 	44	 mC  
y~
4s   A#A8 8
BB)r   numpyr   _sputilsr   _baser   r   rd   integerr%   r   r   r   r   r   r   r   r   <module>r      s               $ $ $ $ $ $ $ $"*	  N+ N+ N+ N+ N+ N+ N+ N+bHG HG HGV     F    r   