o
    Ūńh\D  ć                   @   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 W n ey;   dZdZY nw zd dlZW n eyM   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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”d,d- Z-e jj,e d*d+e j de”d.d/ Z.e jj,e d0d+e j de”d1d2 Z/dS )3é    N)Ś
csr_matrixŚ
coo_matrixŚi1Śi2Śi4Śi8Śu1Śu2Śu4Śu8Śf2Śf4Śf8Ś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Śwr© r-   śT/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/test_sparse_tensor.pyŚtest_sparse_tensor_attrs7   s&   ü

r/   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   r+   ŚnŚresult_dataŚresult_coordsr-   r-   r.   Ś"test_sparse_coo_tensor_base_objectU   s,   žżü

rC   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 )	Nr0   ©r   r   r   r   r   r3   r   r   r   r   r   )
r   r   r4   r5   ŚSparseCSRMatrixr    r7   r8   r9   r;   ©	r*   ŚindptrŚindicesr   r+   r@   rA   Śresult_indptrŚresult_indicesr-   r-   r.   Ś"test_sparse_csr_matrix_base_objectm   s"   ü
rK   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 )Nr0   rD   ©r   r2   r   r   r3   r   r   r   r   r   r   r2   )
r   r   r4   r5   ŚSparseCSFTensorr    r7   r8   r9   r;   rF   r-   r-   r.   Ś"test_sparse_csf_tensor_base_object   s(   žü
rN   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 rO   rP   rR   r-   r-   r.   Śne§   rV   z%test_sparse_tensor_equals.<locals>.neé
   r   r   g      š?)é	   r   )r   ŚrandomŚrandnr    ŚascontiguousarrayŚcopy)r   rU   rW   r*   Śsparse_tensor1Śsparse_tensor2r-   r-   r.   Śtest_sparse_tensor_equals   s    
’
’r`   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 )Nr0   r1   r3   r   r   r   r   )r   Śdtyper   r4   Śastyper5   ŚTensorŚ
from_numpyr6   r    Śreprr9   Śtyper;   Śfrom_tensor)
Ś	dtype_strŚ
arrow_typera   r>   r?   r   Śtensorr+   rA   rB   r-   r-   r.   Ś!test_sparse_coo_tensor_from_denseø   s:   
žżüūrk   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sJ t  ||	”sJ t  ||
”sJ t  ||”sJ d S )Nr0   rD   r3   r   r   r   r   )r   ra   r   r4   rb   r5   rc   rd   rE   r    re   r9   rf   r;   rg   ©rh   ri   ra   r*   rG   rH   r   rj   r+   rA   rI   rJ   r-   r-   r.   Ś!test_sparse_csr_matrix_from_denseŁ   s6   
üūrm   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 ©Nr0   rD   rL   r3   r   r   r   r   r   r2   )r   ra   r   r4   rb   r5   rM   r    re   r9   rf   r;   )rh   ri   ra   r*   rG   rH   r   r+   rA   rI   rJ   r-   r-   r.   Ś'test_sparse_csf_tensor_from_dense_numpyś   s,   
žüūro   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 rn   )r   ra   r   r4   rb   r5   rc   rd   rM   rg   re   r9   rf   r;   rl   r-   r-   r.   Ś(test_sparse_csf_tensor_from_dense_tensor  s.   
žüūrp   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©r2   r   r   r   r   r   ©r   r   r   r   r2   r   ©r   r   r   r   r   r   ©r   r   r   )r   ra   r   r4   rb   r5   r6   rd   re   r9   rf   r;   r&   )
rh   ri   ra   r*   Ścoordsr#   r&   r+   rA   rB   r-   r-   r.   Ś&test_sparse_coo_tensor_numpy_roundtrip1  s&   
žż’rv   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 )Nr0   rD   r3   rt   r   )r   ra   r   r4   rb   r5   rE   rd   re   r9   rf   r;   r&   )rh   ri   ra   r*   rG   rH   r#   r&   r+   rA   rI   rJ   r-   r-   r.   Ś&test_sparse_csr_matrix_numpy_roundtripF  s    
’rw   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 )
Nr0   rD   rL   r3   )r   r2   rt   r   r   r2   )r   ra   r   r4   rb   r5   rM   rd   re   r9   rf   r;   r&   )rh   ri   ra   r*   rG   rH   Ś
axis_orderr#   r&   r+   rA   rI   rJ   r-   r-   r.   Ś&test_sparse_csf_tensor_numpy_roundtripZ  s*   
žžry   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   rY   r   )r   é   r   r   )r   r   r   r   )r   r   r   r   r   )
r   ra   r   rb   r    Ś	to_tensorr9   rf   r&   r;   )	rh   ri   r   ra   r   r&   r+   rj   Śresult_arrayr-   r-   r.   Śtest_dense_to_sparse_tensort  s    

żżr}   zrequires scipy)Śreasonc                 C   sx  t  | ”}t  g d¢” |”}t  g d¢”}t  g d¢”}d}d}t|||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 | dkr| t j” ”  t j”}n| ” }t  ||	 ”  ” ”sJ | ”  tjj||d}	|	 ” }
|j	s°J |	j	sµJ |
j	sŗJ d S )	Nrq   rr   rs   rt   r   ©r#   ©r&   r   )r   ra   r   rb   r   r5   r6   Ś
from_scipyŚto_scipyr:   rf   r&   r;   r*   ŚrowŚcolŚfloat32ŚtoarrayŚfloat16r{   r9   Śsum_duplicates)rh   ri   ra   r*   r   r   r#   r&   Śscipy_matrixr+   Śout_scipy_matrixŚdense_arrayr-   r-   r.   Ś&test_sparse_coo_tensor_scipy_roundtrip  sB   
’


’’

r   c                 C   s  t  | ”}t  g d¢” |”}t  g d¢”}t  g d¢”}d}d}t|||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 | dkr{| t j” ”  t j”}n| ” }t  ||	 ”  ” ”sJ d S )	Nr0   rD   r3   rt   r   r   r   r   )r   ra   r   rb   r   r5   rE   r   r   rf   r&   r;   r*   rG   rH   r   r   r   r{   r9   )rh   ri   ra   r*   rG   rH   r#   r&   Śsparse_arrayr+   Ś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 )Nrq   rr   rs   rt   r   )r*   ru   r#   r   )r   ra   r   rb   ŚsparseŚCOOr5   r6   Śfrom_pydata_sparseŚto_pydata_sparserf   r&   r;   r*   ru   Śtodenser{   r9   )
rh   ri   ra   r*   ru   r#   r&   r   r+   r   r-   r-   r.   Ś.test_pydata_sparse_sparse_coo_tensor_roundtrip×  s*   
ž’

’r   )0Śpytestr7   r(   Śnumpyr   ŚImportErrorŚmarkŚ
pytestmarkŚpyarrowr5   Śscipy.sparser   r   r   Śint8Śint16Śint32Śint64Śuint8Śuint16Śuint32Śuint64r   r   Śfloat64Śtensor_type_pairsŚparametrizerE   ŚSparseCSCMatrixr6   rM   r/   rC   rK   rN   r`   rk   rm   ro   rp   rv   rw   ry   r}   Śskipifr   r   r   r-   r-   r-   r.   Ś<module>   s    ’ž’










õü
ü

 
 




ü*