o
    ņ©ZhD  ć                   @   s  d dl Z d dlZd dlZd dlZ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
y=   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Śu2Zu4Śu8Śf2Zf4Z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ŚshapeZ
is_mutableZdim_nameŚ	dim_namesZnon_zero_lengthŚweakrefŚref)r   Śdatar!   Śsparse_tensorŚwr© r'   śW/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/test_sparse_tensor.pyŚtest_sparse_tensor_attrs4   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_objectR   s,   žżü

r=   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 )	Nr*   ©r   r   r   r   r   r-   r   r   r   r   r   )
r   r   r.   r/   ŚSparseCSRMatrixr   r1   r2   r3   r5   ©	r$   ŚindptrŚindicesr   r%   r:   r;   Śresult_indptrŚresult_indicesr'   r'   r(   Ś"test_sparse_csr_matrix_base_objectj   s"   ü
rE   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 )Nr*   r>   ©r   r,   r   r   r-   r   r   r   r   r   r   r,   )
r   r   r.   r/   ŚSparseCSFTensorr   r1   r2   r3   r5   r@   r'   r'   r(   Ś"test_sparse_csf_tensor_base_object   s(   žü
rH   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 rI   rJ   rL   r'   r'   r(   Śne¤   rP   z%test_sparse_tensor_equals.<locals>.neé
   r   r   g      š?)é	   r   )r   ŚrandomZrandnr   ZascontiguousarrayŚcopy)r   rO   rQ   r$   Zsparse_tensor1Zsparse_tensor2r'   r'   r(   Śtest_sparse_tensor_equals   s    
’
’rV   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 )Nr*   r+   r-   r   r   r   r   )r   Śdtyper   r.   Śastyper/   ŚTensorŚ
from_numpyr0   r   Śreprr3   Śtyper5   Śfrom_tensor)
Ś	dtype_strŚ
arrow_typerW   r8   r9   r   Śtensorr%   r;   r<   r'   r'   r(   Ś!test_sparse_coo_tensor_from_denseµ   s:   
žżüūra   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 )Nr*   r>   r-   r   r   r   r   )r   rW   r   r.   rX   r/   rY   rZ   r?   r   r[   r3   r\   r5   r]   ©r^   r_   rW   r$   rA   rB   r   r`   r%   r;   rC   rD   r'   r'   r(   Ś!test_sparse_csr_matrix_from_denseÖ   s6   
üūrc   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 ©Nr*   r>   rF   r-   r   r   r   r   r   r,   )r   rW   r   r.   rX   r/   rG   r   r[   r3   r\   r5   )r^   r_   rW   r$   rA   rB   r   r%   r;   rC   rD   r'   r'   r(   Ś'test_sparse_csf_tensor_from_dense_numpy÷   s,   
žüūre   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 rd   )r   rW   r   r.   rX   r/   rY   rZ   rG   r]   r[   r3   r\   r5   rb   r'   r'   r(   Ś(test_sparse_csf_tensor_from_dense_tensor  s.   
žüūrf   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©r,   r   r   r   r   r   ©r   r   r   r   r,   r   ©r   r   r   r   r   r   ©r   r   r   )r   rW   r   r.   rX   r/   r0   rZ   r[   r3   r\   r5   r!   )
r^   r_   rW   r$   Ścoordsr    r!   r%   r;   r<   r'   r'   r(   Ś&test_sparse_coo_tensor_numpy_roundtrip.  s&   
žż’rl   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 )Nr*   r>   r-   rj   r   )r   rW   r   r.   rX   r/   r?   rZ   r[   r3   r\   r5   r!   )r^   r_   rW   r$   rA   rB   r    r!   r%   r;   rC   rD   r'   r'   r(   Ś&test_sparse_csr_matrix_numpy_roundtripC  s    
’rm   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 )
Nr*   r>   rF   r-   )r   r,   rj   r   r   r,   )r   rW   r   r.   rX   r/   rG   rZ   r[   r3   r\   r5   r!   )r^   r_   rW   r$   rA   rB   Z
axis_orderr    r!   r%   r;   rC   rD   r'   r'   r(   Ś&test_sparse_csf_tensor_numpy_roundtripW  s*   
žžrn   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   rS   r   )r   é   r   r   )r   r   r   r   )r   r   r   r   r   )
r   rW   r   rX   r   Ś	to_tensorr3   r\   r!   r5   )	r^   r_   r   rW   r   r!   r%   r`   Zresult_arrayr'   r'   r(   Śtest_dense_to_sparse_tensorq  s    

żżrq   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 )	Nrg   rh   ri   rj   r   ©r    ©r!   r   )r   rW   r   rX   r   r/   r0   Ś
from_scipyŚto_scipyr4   r\   r!   r5   r$   ŚrowŚcolŚfloat32ŚtoarrayŚfloat16rp   r3   Zsum_duplicates)r^   r_   rW   r$   rw   rx   r    r!   Zscipy_matrixr%   Z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 )	Nr*   r>   r-   rj   r   rs   rt   r   )r   rW   r   rX   r   r/   r?   ru   rv   r\   r!   r5   r$   rA   rB   ry   rz   r{   rp   r3   )r^   r_   rW   r$   rA   rB   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 )Nrg   rh   ri   rj   r   )r$   rk   r    rt   )r   rW   r   rX   ŚsparseZCOOr/   r0   Zfrom_pydata_sparseZto_pydata_sparser\   r!   r5   r$   rk   Ztodenserp   r3   )
r^   r_   rW   r$   rk   r    r!   r~   r%   r   r'   r'   r(   Ś.test_pydata_sparse_sparse_coo_tensor_roundtripŌ  s*   
ž’

’r   )/Zpytestr1   r"   Śnumpyr   Zpyarrowr/   Zscipy.sparser   r   ŚImportErrorr   Zint8Zint16Zint32Zint64Zuint8Zuint16Zuint32Zuint64r{   ry   Zfloat64Ztensor_type_pairsŚmarkZparametrizer?   ZSparseCSCMatrixr0   rG   r)   r=   rE   rH   rV   ra   rc   re   rf   rl   rm   rn   rq   Zskipifr}   r   r   r'   r'   r'   r(   Ś<module>   s   ž’










õü
ü

 
 




ü*