
    biE                        d dl Z d dlZd dlZ	 d dlZd dlZ		 d dl
mZmZmZmZ 	 d dlZd e	j                          fd e	j"                         fd e	j$                         fd e	j&                         fd e	j(                         fd e	j*                         fd	 e	j,                         fd
 e	j.                         fd e	j0                         fd e	j2                         fd e	j4                         fgZeD  cg c]  } | d    dk7  s|  c} Ze j                  j;                  de	j<                  e	j>                  e	j@                  e	jB                  g      d        Z"d Z#d Z$d Z%e j                  j;                  de	j<                  e	j>                  e	j@                  e	jB                  g      d        Z&e j                  j;                  de      d        Z'e j                  j;                  de      d        Z(e j                  j;                  de      d        Z)e j                  j;                  de      d        Z*e j                  j;                  de      d        Z+e j                  j;                  de      d        Z,e j                  j;                  de      d        Z-e j                  j;                  de	j<                  e	j>                  e	j@                  e	jB                  g      e j                  j;                  de      d               Z.e j                  j_                  e d      e j                  j;                  deef      e j                  j;                  de      d                       Z0e j                  j_                  e d      e j                  j;                  deef      e j                  j;                  de      d!                      Z1e j                  j_                  e d"      e j                  j;                  de      d#               Z2y# e$ r e j                  j                  ZY !w xY w# e$ r dZdZdZdZY $w xY w# e$ r dZY -w xY wc c} w )$    N)	csr_array	coo_array
csr_matrix
coo_matrixi1i2i4i8u1u2u4u8f2f4f8sparse_tensor_typec                    t        j                  g dg dg dg dg      }d}| j                  ||      }|j                  dk(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  sJ |j                  d      |d   k(  sJ |j                  |k(  sJ |j                  d	k(  sJ t        j                  |      } |       J ~ |       J y )
N   r      r   r   r   r   r   r   r   r         r   r   r   r   r   r   r   r   r         xyr      r   r   )nparrayfrom_dense_numpyndimsizeshape
is_mutabledim_name	dim_namesnon_zero_lengthweakrefref)r   datar*   sparse_tensorwrs        [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/pyarrow/tests/test_sparse_tensor.pytest_sparse_tensor_attrsr2   >   s     88	 D I&77iHM"""###$**,,,####!!!$	!444""i///((A---	]	#B44<<    c                  L   t        j                  g dg      j                  } t        j                  g dg dg      j                  }t        j                  g dg dg dg dg      }t        j                  j                  |      }t        j                  |      }|j                         \  }}|j                  sJ t        j                  |      |dz   k(  sJ d }t        j                  | |      sJ t        j                  ||      sJ |j                  j                  sJ y )	Nr   r   r   r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r"   r#   TpaSparseCOOTensorr$   sysgetrefcountto_numpyhas_canonical_formatarray_equalflagsc_contiguous)expected_dataexpected_coordsr#   r/   nresult_dataresult_coordss          r1   "test_sparse_coo_tensor_base_objectrH   \   s   HH01244Mhh   	q  HH	 E &&77>M&A!.!7!7!9K----??=)QU222M>>-555>>/=999++++r3   c                  D   t        j                  g dg      j                  } t        j                  g d      }t        j                  g d      }t        j                  g dg dg dg dg      }t        j                  j                  |      }t        j                  |      }|j                         \  }}}t        j                  |      |dz   k(  sJ d }t        j                  | |      sJ t        j                  ||      sJ t        j                  ||      sJ y )	Nr5   r   r   r   r   r   r8   r   r   r   r   r   )
r"   r#   r9   r:   SparseCSRMatrixr$   r<   r=   r>   r@   	r.   indptrindicesr#   r/   rE   rF   result_indptrresult_indicess	            r1   "test_sparse_csr_matrix_base_objectrQ   t   s    88'()++DXXo&Fhh)*GHH	 E &&77>M&A1>1G1G1I.K??=)QU222M>>$,,,>>&-000>>'>222r3   c                     t        j                  g dg      j                  } t        j                  g d      g}t        j                  g d      t        j                  g d      g}t        j                  g dg dg dg dg      }t        j                  j                  |      }t        j                  |      }|j                         \  }}}t        j                  |      |d	z   k(  sJ d }t        j                  | |      sJ t        j                  |d
   |d
         sJ t        j                  |d
   |d
         sJ t        j                  |d   |d         sJ y )Nr5   rJ   r   r7   r   r   r8   r   r   r   r   r   r   r7   )
r"   r#   r9   r:   SparseCSFTensorr$   r<   r=   r>   r@   rL   s	            r1   "test_sparse_csf_tensor_base_objectrU      s2   88'()++Dhh'(F

#$G HH	 E &&77>M&A1>1G1G1I.K??=)QU222M>>$,,,>>&)]1%5666>>'!*nQ&7888>>'!*nQ&7888r3   c                 d   d }d }t         j                  j                  dd      d d d d df   }| j                  |      }| j                  t        j                  |            } |||       |j                         }d|d<   | j                  t        j                  |            } |||       y )Nc                 F    | j                  |      sJ | |k(  sJ | |k7  rJ y Nequalsabs     r1   eqz%test_sparse_tensor_equals.<locals>.eq   s+    xx{{AvvF|Fr3   c                 F    | j                  |      rJ | |k(  rJ | |k7  sJ y rX   rY   r[   s     r1   nez%test_sparse_tensor_equals.<locals>.ne   s)    88A;F|Avvr3   
   r   r   g      ?)	   r   )r"   randomrandnr$   ascontiguousarraycopy)r   r^   r`   r.   sparse_tensor1sparse_tensor2s         r1   test_sparse_tensor_equalsri      s    

 99??2q!"cc'*D'88>N'88
T"$N~~&99;DDJ'88
T"$N~~&r3   zdtype_str,arrow_typec                 p   t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g dg dg      j                  }t        j                  g dg dg dg dg      j	                  |      }t
        j                  j                  |      }t
        j                  j                  |      }t        |       |j                         \  }}	|j                  |k(  sJ t        j                  ||      sJ t        j                  ||	      sJ t
        j                  j                  |      }t        |       |j                         \  }}	|j                  |k(  sJ t        j                  ||      sJ t        j                  ||	      sJ y )Nr5   r6   r8   r   r   r   r   )r"   dtyper#   r9   astyper:   Tensor
from_numpyr;   r$   reprr>   typer@   from_tensor)
	dtype_str
arrow_typerk   rC   rD   r#   tensorr/   rF   rG   s
             r1   !test_sparse_coo_tensor_from_denseru      sy   HHYEHH01244;;EBMhh   	q  HH	 
 ve} 
 YY!!%(F &&77>M!.!7!7!9K+++>>-555>>/=999 &&226:M!.!7!7!9K+++>>-555>>/=999r3   c                    t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g d      }t        j                  g d      }t        j                  g dg dg dg dg      j	                  |      }t
        j                  j                  |      }t
        j                  j                  |      }t        |       |j                         \  }	}
}|j                  |k(  sJ t        j                  ||	      sJ t        j                  ||
      sJ t        j                  ||      sJ t
        j                  j                  |      }t        |       |j                         \  }	}
}|j                  |k(  sJ t        j                  ||	      sJ t        j                  ||
      sJ t        j                  ||      sJ y )Nr5   rJ   r8   r   r   r   r   )r"   rk   r#   r9   rl   r:   rm   rn   rK   r$   ro   r>   rp   r@   rq   rr   rs   rk   r.   rM   rN   r#   rt   r/   rF   rO   rP   s               r1   !test_sparse_csr_matrix_from_denserx      s   HHYE88'()++2259DXXo&Fhh)*GHH	 
 ve} 
 YY!!%(F &&77>M1>1G1G1I.K+++>>$,,,>>&-000>>'>222 &&226:M1>1G1G1I.K+++>>$,,,>>&-000>>'>222r3   c                    t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g d      g}t        j                  g d      t        j                  g d      g}t        j                  g dg dg dg dg      j	                  |      }t
        j                  j                  |      }t        |       |j                         \  }}	}
|j                  |k(  sJ t        j                  ||      sJ t        j                  |d	   |	d	         sJ t        j                  |d	   |
d	         sJ t        j                  |d
   |
d
         sJ y Nr5   rJ   rS   r8   r   r   r   r   r   r7   )r"   rk   r#   r9   rl   r:   rT   r$   ro   r>   rp   r@   )rr   rs   rk   r.   rM   rN   r#   r/   rF   rO   rP   s              r1   'test_sparse_csf_tensor_from_dense_numpyr{     sG   HHYE88'()++2259Dhh'(F

#$G HH	 
 ve} 
 &&77>M1>1G1G1I.K+++>>$,,,>>&)]1%5666>>'!*nQ&7888>>'!*nQ&7888r3   c                 <   t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g d      g}t        j                  g d      t        j                  g d      g}t        j                  g dg dg dg dg      j	                  |      }t
        j                  j                  |      }t
        j                  j                  |      }t        |       |j                         \  }	}
}|j                  |k(  sJ t        j                  ||	      sJ t        j                  |d	   |
d	         sJ t        j                  |d	   |d	         sJ t        j                  |d
   |d
         sJ y rz   )r"   rk   r#   r9   rl   r:   rm   rn   rT   rq   ro   r>   rp   r@   rw   s               r1   (test_sparse_csf_tensor_from_dense_tensorr}     s]   HHYE88'()++2259Dhh'(F

#$G HH	 
 ve} 
 YY!!%(F &&226:M1>1G1G1I.K+++>>$,,,>>&)]1%5666>>'!*nQ&7888>>'!*nQ&7888r3   c                    t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g dg dg      j                  }d}d}t
        j                  j                  ||||      }t        |       |j                         \  }}	|j                  |k(  sJ t        j                  ||      sJ t        j                  ||	      sJ |j                  |k(  sJ y )Nr7   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   r   r   r   r   r   r   )r"   rk   r#   r9   rl   r:   r;   rn   ro   r>   rp   r@   r*   )
rr   rs   rk   r.   coordsr'   r*   r/   rF   rG   s
             r1   &test_sparse_coo_tensor_numpy_roundtripr   8  s    HHYE88'()++2259DXX  	q  EI&&11$2;=M!.!7!7!9K+++>>$,,,>>&-000""i///r3   c                 L   t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g d      }t        j                  g d      }d}d}t
        j                  j                  |||||      }t        |       |j                         \  }	}
}|j                  |k(  sJ t        j                  ||	      sJ t        j                  ||
      sJ t        j                  ||      sJ |j                  |k(  sJ y )Nr5   rJ   r8   r   r   )r"   rk   r#   r9   rl   r:   rK   rn   ro   r>   rp   r@   r*   )rr   rs   rk   r.   rM   rN   r'   r*   r/   rF   rO   rP   s               r1   &test_sparse_csr_matrix_numpy_roundtripr   M  s    HHYE88'()++2259DXXo&Fhh)*GEI&&11$27DM1>1G1G1I.K+++>>$,,,>>&-000>>'>222""i///r3   c                    t        j                  |       }t        j                  g dg      j                  j	                  |      }t        j                  g d      g}t        j                  g d      t        j                  g d      g}d}d}d}t
        j                  j                  ||||||      }	t        |	       |	j                         \  }
}}|	j                  |k(  sJ t        j                  ||
      sJ t        j                  |d   |d         sJ t        j                  |d   |d         sJ t        j                  |d	   |d	         sJ |	j                  |k(  sJ y )
Nr5   rJ   rS   r8   )r   r7   r   r   r   r7   )r"   rk   r#   r9   rl   r:   rT   rn   ro   r>   rp   r@   r*   )rr   rs   rk   r.   rM   rN   
axis_orderr'   r*   r/   rF   rO   rP   s                r1   &test_sparse_csf_tensor_numpy_roundtripr   a  sK   HHYE88'()++2259Dhh'(F

#$G JEI&&11$272;=M 	1>1G1G1I.K+++>>$,,,>>&)]1%5666>>'!*nQ&7888>>'!*nQ&7888""i///r3   c                    t        j                  |       }t        j                  g dg dg dg dg      j                  |      }d}|j	                  ||      }|j                         }|j                         }|j                  |k(  sJ |j                  |k(  sJ |j                  |k(  sJ t        j                  ||      sJ y )N)r   r   rb   r   )r      r   r   )r   r   r   r   )r   r   r   r   r   )
r"   rk   r#   rl   r$   	to_tensorr>   rp   r*   r@   )	rr   rs   r   rk   r#   r*   r/   rt   result_arrays	            r1   test_dense_to_sparse_tensorr   {  s     HHYEHHl"""$ % &,VE] 
 I&77yIM$$&F??$L+++;;*$$$""i///>>%...r3   zrequires scipy)reasonsparse_objectc                    d}d}t        j                  |       }t        j                  g d      j                  |      }t        j                  g d      }t        j                  g d      } ||||ff|      }	t        j
                  j                  |	|      }
|
j                         }|	j                  rJ |
j                  rJ |j                  rJ |
j                  |k(  sJ |
j                  |k(  sJ |	j                  |j                  k(  sJ t        j                  |	j                  |j                        sJ t        j                  |	j                  |j                        sJ t        j                  |	j                  |j                        sJ |	j                         }t        j                  ||
j!                         j#                               sJ |	j%                          t        j
                  j                  |	|      }
|
j                         }|	j                  sJ |
j                  sJ |j                  sJ y )Nr   r   r   r   r   r'   r*   )r"   rk   r#   rl   r:   r;   
from_scipyto_scipyr?   rp   r*   r@   r.   rowcoltoarrayr   r>   sum_duplicates)rr   rs   r   r'   r*   rk   r.   r   r   scipy_matrixr/   out_scipy_matrixdense_arrays                r1   &test_sparse_coo_tensor_scipy_roundtripr     s   
 EIHHYE88&'..u5D
((%
&C
((%
&C !$c
!35AL&&11,<E 2 GM$--/000011114444+++""i///!1!7!7777>>,++-=-B-BCCC>>,**,<,@,@AAA>>,**,<,@,@AAA&&(K>>+}'>'>'@'I'I'KLLL !&&11,<E 2 GM$--/,,,,----0000r3   c                 d   d}d}t        j                  |       }t        j                  g d      j                  |      }t        j                  g d      }t        j                  g d      } ||||f|      }	t        j
                  j                  |	|      }
|
j                         }|
j                  |k(  sJ |
j                  |k(  sJ |	j                  |j                  k(  sJ t        j                  |	j                  |j                        sJ t        j                  |	j                  |j                        sJ t        j                  |	j                  |j                        sJ |	j                         }t        j                  ||
j                         j!                               sJ y )Nr   r   r5   rJ   r8   r   r   )r"   rk   r#   rl   r:   rK   r   r   rp   r*   r@   r.   rM   rN   r   r   r>   )rr   rs   r   r'   r*   rk   r.   rM   rN   sparse_arrayr/   out_sparse_arrayr   s                r1   &test_sparse_csr_matrix_scipy_roundtripr     sp   
 EIHHYE88&'..u5DXXo&Fhh)*G $!8FL&&11,<E 2 GM$--/+++""i///!1!7!7777>>,++-=-B-BCCC>>,--/?/F/FGGG>>,..0@0H0HIII&&(K>>+}'>'>'@'I'I'KLLLr3   zrequires pydata/sparsec                    t        j                  |       }t        j                  g d      j                  |      }t        j                  g dg dg      }d}d}t	        j
                  |||      }t        j                  j                  ||      }|j                         }	|j                  |k(  sJ |j                  |k(  sJ |j                  |	j                  k(  sJ t        j                  |j                  |	j                        sJ t        j                  |j                  |	j                        sJ t        j                  |j                         |j!                         j#                               sJ y )Nr   r   r   r   r   )r.   r   r'   r   )r"   rk   r#   rl   sparseCOOr:   r;   from_pydata_sparseto_pydata_sparserp   r*   r@   r.   r   todenser   r>   )
rr   rs   rk   r.   r   r'   r*   r   r/   r   s
             r1   .test_pydata_sparse_sparse_coo_tensor_roundtripr     sQ    HHYE88&'..u5DXX F EI::4eDL&&99,DM : OM$557+++""i///!1!7!7777>>,++-=-B-BCCC>>,--/?/F/FGGG>>,..0'113<<>@ @ @r3   )3pytestr<   r,   numpyr"   ImportErrormark
pytestmarkpyarrowr:   scipy.sparser   r   r   r   r   int8int16int32int64uint8uint16uint32uint64float16float32float64tensor_type_pairsscipy_type_pairsparametrizerK   SparseCSCMatrixr;   rT   r2   rH   rQ   rU   ri   ru   rx   r{   r}   r   r   r   r   skipifr   r   r   )pairs   0r1   <module>r      s  $  
 # II 
72779	8288:	8288:	8288:	8288:	9299;	9299;	9299;	:2::<	:2::<	:2::<   '$q'T/D 
 -	0 0,03*92 -	0 ''. /1BC: D:@ /1BC3 D3@ /1BC9 D94 /1BC9 D96 /1BC0 D0( /1BC0 D0& /1BC0 D02 -	0  /1BC/ D/$ 
N+;<9j*AB/1AB$1 C C =$1N 
N+;<9j*AB/1ABM C C =M2 J'?@/1BC@ D A@I  #""J#  JJII	  F&s?   P P7 Q 4QQP43P47QQQQ