o
    wÖiE  ã                   @   sþ  d dl Z d dlZd dlZzd dlZW n ey   e jjZY nw d dlZ	zd dl
mZmZmZmZ W n eyC   dZdZdZdZY nw zd dlZW n eyU   dZY nw de	 ¡ fde	 ¡ fde	 ¡ fde	 ¡ fde	 ¡ fde	 ¡ fd	e	 ¡ fd
e	 ¡ fde	 ¡ fde	 ¡ fde	 ¡ fgZdd„ eD ƒZe j de	je	je	j e	j!g¡dd„ ƒZ"dd„ Z#dd„ Z$dd„ Z%e j de	je	je	j e	j!g¡dd„ ƒZ&e j de¡dd„ ƒZ'e j de¡dd„ ƒZ(e j de¡d d!„ ƒZ)e j de¡d"d#„ ƒZ*e j de¡d$d%„ ƒZ+e j de¡d&d'„ ƒZ,e j de¡d(d)„ ƒZ-e j de	je	je	j e	j!g¡e j de¡d*d+„ ƒƒZ.e jj/e d,d-e j d.eef¡e j de¡d/d0„ ƒƒƒZ0e jj/e d,d-e j d.eef¡e j de¡d1d2„ ƒƒƒZ1e jj/e d3d-e j de¡d4d5„ ƒƒZ2dS )6é    N)Ú	csr_arrayÚ	coo_arrayÚ
csr_matrixÚ
coo_matrixÚi1Úi2Úi4Úi8Úu1Úu2Úu4Úu8Úf2Úf4Úf8c                 C   s   g | ]
}|d  dkr|‘qS )r   r   © )Ú.0Úpairr   r   ú]/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/pyarrow/tests/test_sparse_tensor.pyÚ
<listcomp>9   s    r   Úsparse_tensor_typec                 C   sÆ   t  g d¢g d¢g d¢g d¢g¡}d}|  ||¡}|jdks J ‚|jdks'J ‚|j|jks/J ‚|js4J ‚| d¡|d ks?J ‚|j|ksFJ ‚|j	d	ksMJ ‚t
 |¡}|ƒ d usYJ ‚~|ƒ d u saJ ‚d S )
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Úwrr   r   r   Útest_sparse_tensor_attrs>   s&   ü

r4   c                  C   sÂ   t  g d¢g¡j} t  g d¢g d¢g¡j}t  g d¢g d¢g d¢g d¢g¡}tj |¡}t |¡}| ¡ \}}|j	s<J ‚t |¡|d ksGJ ‚d }t  
| |¡sQJ ‚t  
||¡sYJ ‚|jjs_J ‚d S )	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&   r2   ÚnÚresult_dataÚresult_coordsr   r   r   Ú"test_sparse_coo_tensor_base_object\   s,   þýü

rH   c            	      C   sÂ   t  g d¢g¡j} t  g d¢¡}t  g d¢¡}t  g d¢g d¢g d¢g d¢g¡}tj |¡}t |¡}| ¡ \}}}t |¡|d ksEJ ‚d }t  	| |¡sOJ ‚t  	||¡sWJ ‚t  	||¡s_J ‚d S )	Nr5   ©r   r   r   r   r    r8   r   r   r   r   r   )
r%   r&   r9   r:   ÚSparseCSRMatrixr'   r<   r=   r>   r@   ©	r1   ÚindptrÚindicesr&   r2   rE   rF   Úresult_indptrÚresult_indicesr   r   r   Ú"test_sparse_csr_matrix_base_objectt   s"   ü
rP   c            	      C   sú   t  g d¢g¡j} t  g d¢¡g}t  g d¢¡t  g d¢¡g}t  g d¢g d¢g d¢g d¢g¡}tj |¡}t |¡}| ¡ \}}}t |¡|d	 ksMJ ‚d }t  	| |¡sWJ ‚t  	|d
 |d
 ¡scJ ‚t  	|d
 |d
 ¡soJ ‚t  	|d |d ¡s{J ‚d S )Nr5   rI   ©r   r7   r   r   r8   r   r   r   r   r   r   r7   )
r%   r&   r9   r:   ÚSparseCSFTensorr'   r<   r=   r>   r@   rK   r   r   r   Ú"test_sparse_csf_tensor_base_object‰   s(   þü
rS   c                 C   s‚   dd„ }dd„ }t j dd¡d d …d d d…f }|  |¡}|  t  |¡¡}|||ƒ | ¡ }d|d	< |  t  |¡¡}|||ƒ d S )
Nc                 S   s*   |   |¡sJ ‚| |ksJ ‚| |krJ ‚d S ©N©Úequals©ÚaÚbr   r   r   Úeq©   ó   z%test_sparse_tensor_equals.<locals>.eqc                 S   s*   |   |¡rJ ‚| |krJ ‚| |ksJ ‚d S rT   rU   rW   r   r   r   Úne®   r[   z%test_sparse_tensor_equals.<locals>.neé
   r    r   g      ð?)é	   r   )r%   ÚrandomÚrandnr'   ÚascontiguousarrayÚcopy)r   rZ   r\   r1   Úsparse_tensor1Úsparse_tensor2r   r   r   Útest_sparse_tensor_equals¢   s    
ÿ
ÿre   zdtype_str,arrow_typec           
      C   s  t  | ¡}t  g d¢g¡j |¡}t  g d¢g d¢g¡j}t  g d¢g d¢g d¢g d¢g¡ |¡}tj |¡}tj 	|¡}t
|ƒ | ¡ \}}	|j|ksNJ ‚t  ||¡sVJ ‚t  ||	¡s^J ‚tj |¡}t
|ƒ | ¡ \}}	|j|ksuJ ‚t  ||¡s}J ‚t  ||	¡s…J ‚d S )Nr5   r6   r8   r   r   r   r   )r%   Údtyper&   r9   Úastyper:   ÚTensorÚ
from_numpyr;   r'   Úreprr>   Útyper@   Úfrom_tensor)
Ú	dtype_strÚ
arrow_typerf   rC   rD   r&   Útensorr2   rF   rG   r   r   r   Ú!test_sparse_coo_tensor_from_dense¿   s:   
þýüûrp   c                 C   s6  t  | ¡}t  g d¢g¡j |¡}t  g d¢¡}t  g d¢¡}t  g d¢g d¢g d¢g d¢g¡ |¡}tj |¡}tj 	|¡}t
|ƒ | ¡ \}	}
}|j|ksQJ ‚t  ||	¡sYJ ‚t  ||
¡saJ ‚t  ||¡siJ ‚tj |¡}t
|ƒ | ¡ \}	}
}|j|ksJ ‚t  ||	¡s‰J ‚t  ||
¡s‘J ‚t  ||¡s™J ‚d S )Nr5   rI   r8   r   r   r   r   )r%   rf   r&   r9   rg   r:   rh   ri   rJ   r'   rj   r>   rk   r@   rl   ©rm   rn   rf   r1   rL   rM   r&   ro   r2   rF   rN   rO   r   r   r   Ú!test_sparse_csr_matrix_from_denseà   s6   
üûrr   c                 C   s  t  | ¡}t  g d¢g¡j |¡}t  g d¢¡g}t  g d¢¡t  g d¢¡g}t  g d¢g d¢g d¢g d¢g¡ |¡}tj |¡}t|ƒ | 	¡ \}}	}
|j
|ksSJ ‚t  ||¡s[J ‚t  |d	 |	d	 ¡sgJ ‚t  |d	 |
d	 ¡ssJ ‚t  |d
 |
d
 ¡sJ ‚d S ©Nr5   rI   rQ   r8   r   r   r   r   r   r7   )r%   rf   r&   r9   rg   r:   rR   r'   rj   r>   rk   r@   )rm   rn   rf   r1   rL   rM   r&   r2   rF   rN   rO   r   r   r   Ú'test_sparse_csf_tensor_from_dense_numpy  s,   
þüûrt   c                 C   s  t  | ¡}t  g d¢g¡j |¡}t  g d¢¡g}t  g d¢¡t  g d¢¡g}t  g d¢g d¢g d¢g d¢g¡ |¡}tj |¡}tj 	|¡}t
|ƒ | ¡ \}	}
}|j|ksYJ ‚t  ||	¡saJ ‚t  |d	 |
d	 ¡smJ ‚t  |d	 |d	 ¡syJ ‚t  |d
 |d
 ¡s…J ‚d S rs   )r%   rf   r&   r9   rg   r:   rh   ri   rR   rl   rj   r>   rk   r@   rq   r   r   r   Ú(test_sparse_csf_tensor_from_dense_tensor  s.   
þüûru   c           
      C   s¨   t  | ¡}t  g d¢g¡j |¡}t  g d¢g d¢g¡j}d}d}tj ||||¡}t|ƒ | 	¡ \}}	|j
|ks;J ‚t  ||¡sCJ ‚t  ||	¡sKJ ‚|j|ksRJ ‚d S )N©r7   r   r   r   r   r    ©r   r   r   r   r7   r   ©r   r   r   r   r   r   ©r   r    r!   )r%   rf   r&   r9   rg   r:   r;   ri   rj   r>   rk   r@   r-   )
rm   rn   rf   r1   Úcoordsr*   r-   r2   rF   rG   r   r   r   Ú&test_sparse_coo_tensor_numpy_roundtrip8  s&   
þýÿr{   c                 C   sÀ   t  | ¡}t  g d¢g¡j |¡}t  g d¢¡}t  g d¢¡}d}d}tj |||||¡}t|ƒ | 	¡ \}	}
}|j
|ks?J ‚t  ||	¡sGJ ‚t  ||
¡sOJ ‚t  ||¡sWJ ‚|j|ks^J ‚d S )Nr5   rI   r8   ry   r!   )r%   rf   r&   r9   rg   r:   rJ   ri   rj   r>   rk   r@   r-   )rm   rn   rf   r1   rL   rM   r*   r-   r2   rF   rN   rO   r   r   r   Ú&test_sparse_csr_matrix_numpy_roundtripM  s    
ÿr|   c                 C   sþ   t  | ¡}t  g d¢g¡j |¡}t  g d¢¡g}t  g d¢¡t  g d¢¡g}d}d}d}tj ||||||¡}	t|	ƒ |	 	¡ \}
}}|	j
|ksJJ ‚t  ||
¡sRJ ‚t  |d |d ¡s^J ‚t  |d |d ¡sjJ ‚t  |d	 |d	 ¡svJ ‚|	j|ks}J ‚d S )
Nr5   rI   rQ   r8   )r   r7   ry   r!   r   r7   )r%   rf   r&   r9   rg   r:   rR   ri   rj   r>   rk   r@   r-   )rm   rn   rf   r1   rL   rM   Ú
axis_orderr*   r-   r2   rF   rN   rO   r   r   r   Ú&test_sparse_csf_tensor_numpy_roundtripa  s*   
þþr~   c           	      C   s   t  | ¡}t  g d¢g d¢g d¢g d¢g¡ |¡}d}| ||¡}| ¡ }| ¡ }|j|ks0J ‚|j|ks7J ‚|j|ks>J ‚t  	||¡sFJ ‚d S )N)r   r   r^   r   )r   é   r   r   )r   r   r   r   )r   r   r   r   r!   )
r%   rf   r&   rg   r'   Ú	to_tensorr>   rk   r-   r@   )	rm   rn   r   rf   r&   r-   r2   ro   Úresult_arrayr   r   r   Útest_dense_to_sparse_tensor{  s    

ýýr‚   zrequires scipy)ÚreasonÚsparse_objectc                 C   sV  d}d}t  | ¡}t  g d¢¡ |¡}t  g d¢¡}t  g d¢¡}||||ff|d}	tjj|	|d}
|
 ¡ }|	jr<J ‚|
jrAJ ‚|jrFJ ‚|
j	|ksMJ ‚|
j
|ksTJ ‚|	j|jks\J ‚t  |	j|j¡sfJ ‚t  |	j|j¡spJ ‚t  |	j|j¡szJ ‚|	 ¡ }t  ||
 ¡  ¡ ¡sŠJ ‚|	 ¡  tjj|	|d}
|
 ¡ }|	jsŸJ ‚|
js¤J ‚|js©J ‚d S )Nry   r!   rv   rw   rx   ©r*   ©r-   )r%   rf   r&   rg   r:   r;   Ú
from_scipyÚto_scipyr?   rk   r-   r@   r1   ÚrowÚcolÚtoarrayr€   r>   Úsum_duplicates)rm   rn   r„   r*   r-   rf   r1   r‰   rŠ   Úscipy_matrixr2   Úout_scipy_matrixÚdense_arrayr   r   r   Ú&test_sparse_coo_tensor_scipy_roundtrip”  s<   
ÿ


ÿ

r   c                 C   sø   d}d}t  | ¡}t  g d¢¡ |¡}t  g d¢¡}t  g d¢¡}||||f|d}	tjj|	|d}
|
 ¡ }|
j|ks=J ‚|
j	|ksDJ ‚|	j|jksLJ ‚t  
|	j|j¡sVJ ‚t  
|	j|j¡s`J ‚t  
|	j|j¡sjJ ‚|	 ¡ }t  
||
 ¡  ¡ ¡szJ ‚d S )Nry   r!   r5   rI   r8   r…   r†   )r%   rf   r&   rg   r:   rJ   r‡   rˆ   rk   r-   r@   r1   rL   rM   r‹   r€   r>   )rm   rn   r„   r*   r-   rf   r1   rL   rM   Úsparse_arrayr2   Úout_sparse_arrayr   r   r   r   Ú&test_sparse_csr_matrix_scipy_roundtrip¾  s&   
ÿr“   zrequires pydata/sparsec           
      C   sØ   t  | ¡}t  g d¢¡ |¡}t  g d¢g d¢g¡}d}d}tj|||d}tjj||d}| 	¡ }	|j
|ks9J ‚|j|ks@J ‚|j|	jksHJ ‚t  |j|	j¡sRJ ‚t  |j|	j¡s\J ‚t  | ¡ | ¡  ¡ ¡sjJ ‚d S )Nrv   rw   rx   ry   r!   )r1   rz   r*   r†   )r%   rf   r&   rg   ÚsparseÚCOOr:   r;   Úfrom_pydata_sparseÚto_pydata_sparserk   r-   r@   r1   rz   Útodenser€   r>   )
rm   rn   rf   r1   rz   r*   r-   r‘   r2   r’   r   r   r   Ú.test_pydata_sparse_sparse_coo_tensor_roundtripÚ  s*   
þÿ

ÿr™   )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ÚparametrizerJ   ÚSparseCSCMatrixr;   rR   r4   rH   rP   rS   re   rp   rr   rt   ru   r{   r|   r~   r‚   Úskipifr   r“   r™   r   r   r   r   Ú<module>   s®   ÿüÿ










õÿü
ü

 
 




ü'