U
    ªÊ¹jÉc  ã                   @   s
  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 d dlZd dlm	Z	 ej
G dd„ dƒƒZeƒ Zd$dd„Zeeef dœd	d
„Ze jdd„ ƒZdd„ ZG dd„ dƒZd%dd„Zd&dd„Zd'dd„Zdd„ Zdd„ Zdd„ Zddœdd„Zddœd d!„Zddœd"d#„ZdS )(é    N)ÚAnyÚDictÚOptional)Úinfc                   @   sN   e Zd ZU dZeed< dZeed< dZeed< dZ	eed< d	Z
ee ed
< d	S )Ú__PrinterOptionsé   Ú	precisionéè  Ú	thresholdé   Ú	edgeitemséP   Ú	linewidthNÚsci_mode)Ú__name__Ú
__module__Ú__qualname__r   ÚintÚ__annotations__r
   Úfloatr   r   r   r   Úbool© r   r   úP/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_tensor_str.pyr      s
   
r   c                 C   s®   |dk	rl|dkr*dt _dt _dt _dt _nB|dkrLdt _dt _dt _dt _n |d	krldt _tt _dt _dt _| dk	rz| t _|dk	rˆ|t _|dk	r–|t _|dk	r¤|t _|t _dS )
a  Set options for printing. Items shamelessly taken from NumPy

    Args:
        precision: Number of digits of precision for floating point output
            (default = 4).
        threshold: Total number of array elements which trigger summarization
            rather than full `repr` (default = 1000).
        edgeitems: Number of array items in summary at beginning and end of
            each dimension (default = 3).
        linewidth: The number of characters per line for the purpose of
            inserting line breaks (default = 80). Thresholded matrices will
            ignore this parameter.
        profile: Sane defaults for pretty printing. Can override with any of
            the above options. (any one of `default`, `short`, `full`)
        sci_mode: Enable (True) or disable (False) scientific notation. If
            None (default) is specified, the value is defined by
            `torch._tensor_str._Formatter`. This value is automatically chosen
            by the framework.

    Example::

        >>> # Limit the precision of elements
        >>> torch.set_printoptions(precision=2)
        >>> torch.tensor([1.12345])
        tensor([1.12])
        >>> # Limit the number of elements shown
        >>> torch.set_printoptions(threshold=5)
        >>> torch.arange(10)
        tensor([0, 1, 2, ..., 7, 8, 9])
        >>> # Restore defaults
        >>> torch.set_printoptions(profile='default')
        >>> torch.tensor([1.12345])
        tensor([1.1235])
        >>> torch.arange(10)
        tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

    NÚdefaultr   r	   r   r   Úshorté   Úfull)Ú
PRINT_OPTSr   r
   r   r   r   r   )r   r
   r   r   Zprofiler   r   r   r   Úset_printoptions   s2    -r   )Úreturnc                   C   s
   t  t¡S )zyGets the current options for printing, as a dictionary that
    can be passed as ``**kwargs`` to set_printoptions().
    )ÚdataclassesÚasdictr   r   r   r   r   Úget_printoptionsa   s    r"   c               	   k   s,   t ƒ }tf | Ž z
dV  W 5 tf |Ž X dS )zyContext manager that temporarily changes the print options.  Accepted
    arguments are same as :func:`set_printoptions`.N)r"   r   )ÚkwargsZ
old_kwargsr   r   r   Úprintoptionsh   s
    

r$   c                 C   s   | j rtjntj}| j|d�S )N)Údtype)Zis_mpsÚtorchr   ÚdoubleÚto)Útr%   r   r   r   Útensor_totypet   s    r*   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
_Formatterc           	   	   C   s  |j j| _d| _d| _d| _t ¡ � | d¡}W 5 Q R X | jsf|D ]}|› }t	| jt
|ƒƒ| _qD�n„t |t |¡| d¡@ ¡}| ¡ dkr’d S t| ¡ ƒ}t| ¡ ƒ}t| 	¡ ƒ}|D ]}|t |¡krºd| _ qØqº| j�r\|| dksö|dk�r0d| _|D ],}dtj› d	� |¡}t	| jt
|ƒƒ| _�q n*|D ]$}|d
›}t	| jt
|ƒd ƒ| _�q4nŽ|| dk�s~|dk�s~|dk �r¸d| _|D ],}dtj› d	� |¡}t	| jt
|ƒƒ| _�qˆn2|D ],}dtj› d� |¡}t	| jt
|ƒƒ| _�q¼tjd k	�rþtj| _d S )NTFé   éÿÿÿÿr   g     @�@g    „×—Aú{:.úe}ú.0fg-Cëâ6?úf})r%   Zis_floating_pointÚfloating_dtypeÚint_moder   Ú	max_widthr&   Úno_gradZreshapeÚmaxÚlenZmasked_selectÚisfiniteÚneÚnumelr*   ÚabsÚminÚceilr   r   Úformat)	ÚselfÚtensorZtensor_viewÚvalueZ	value_strZnonzero_finite_valsZnonzero_finite_absZnonzero_finite_minZnonzero_finite_maxr   r   r   Ú__init__z   sd    

 ÿ
ÿþ
ÿþýz_Formatter.__init__c                 C   s   | j S )N)r4   ©r?   r   r   r   Úwidth½   s    z_Formatter.widthc                 C   sˆ   | j rl| jr*d| j› dtj› d� |¡}qr| jrV|d›}t |¡sjt 	|¡sj|d7 }qrdtj› d� |¡}n|› }| jt
|ƒ d | S )Nz{:Ú.r/   r0   r.   r1   ú )r2   r   r4   r   r   r>   r3   ÚmathÚisinfÚisnanr7   )r?   rA   Úretr   r   r   r>   À   s    
z_Formatter.formatN)r   r   r   rB   rD   r>   r   r   r   r   r+   y   s   Cr+   c                 C   sh   |d k	rVt | j|ƒ}t | j|ƒd  ¡ }|d dks@|d dkrH|| S |d | S n| |  ¡ ¡S d S ©NÚjr   ú+ú-)Ú_scalar_strÚrealÚimagÚlstripr>   Úitem)r?   Ú
formatter1Ú
formatter2Úreal_strÚimag_strr   r   r   rO   Ï   s    rO   c                    s&  |  ¡ d }|d k	r$||  ¡ d 7 }tdtt tj| | ¡ƒƒ‰||fdd„‰ |rbtjsbdg‰nx|rÄ|  d¡dtj krÄ‡ fdd„| d tj…  	¡ D ƒd	g ‡ fd
d„| tj d …  	¡ D ƒ ‰n‡ fdd„|  	¡ D ƒ‰‡‡fdd„t
dtˆƒˆƒD ƒ}dd„ |D ƒ}ddd|d    |¡ d S )Nr   r,   c                 S   sd   |d k	rV|  | j¡}|  | j¡d  ¡ }|d dks@|d dkrH|| S |d | S n
|  | ¡S d S rK   )r>   rP   rQ   rR   )ÚvalrT   rU   rV   rW   r   r   r   Ú_val_formatterç   s    z#_vector_str.<locals>._val_formatterú...r   c                    s   g | ]}ˆ |ƒ‘qS r   r   ©Ú.0rX   ©rY   r   r   Ú
<listcomp>ø   s     z_vector_str.<locals>.<listcomp>z ...c                    s   g | ]}ˆ |ƒ‘qS r   r   r[   r]   r   r   r^   ú   s     c                    s   g | ]}ˆ |ƒ‘qS r   r   r[   r]   r   r   r^   ý   s     c                    s   g | ]}ˆ ||ˆ … ‘qS r   r   ©r\   Úi)ÚdataÚelements_per_liner   r   r^   ÿ   s    c                 S   s   g | ]}d   |¡‘qS )ú, )Újoin©r\   Úliner   r   r   r^     s     ú[ú,
rF   ú])rD   r6   r   rG   Úfloorr   r   r   ÚsizeÚtolistÚranger7   rd   )r?   ÚindentÚ	summarizerT   rU   Zelement_lengthZ
data_linesÚlinesr   )rY   ra   rb   r   Ú_vector_strÜ   s.     ÿ
ÿ þÿÿrq   c                    sø   ˆ  ¡ }|dkrtˆˆ ˆƒS |dkr4tˆˆˆˆ ˆƒS ˆr¤ˆ d¡dtj kr¤‡ ‡‡‡‡fdd„tdtjƒD ƒdg ‡ ‡‡‡‡fdd„ttˆƒtj tˆƒƒD ƒ }n&‡ ‡‡‡‡fdd„tdˆ d¡ƒD ƒ}d	d
|d   dˆd    |¡}d| d S )Nr   r,   r   c                    s$   g | ]}t ˆ| ˆd  ˆˆ ˆƒ‘qS ©r,   ©Ú_tensor_str_with_formatterr_   ©rT   rU   rn   r?   ro   r   r   r^     s   ý    ÿz._tensor_str_with_formatter.<locals>.<listcomp>rZ   c                    s$   g | ]}t ˆ| ˆd  ˆˆ ˆƒ‘qS rr   rs   r_   ru   r   r   r^     s   ý    ÿc                    s$   g | ]}t ˆ| ˆd  ˆˆ ˆƒ‘qS rr   rs   r_   ru   r   r   r^   #  s   ý    ÿú,Ú
rF   rg   ri   )	ÚdimrO   rq   rk   r   r   rm   r7   rd   )r?   rn   ro   rT   rU   rx   ZslicesÚ
tensor_strr   ru   r   rt   	  s*    
üúüùÿü"rt   c                 C   sü   |   ¡ dkrdS |  ¡ r"|  d ¡} |   ¡ tjk}|  ¡ r@|  ¡ } |  ¡ rP|  ¡ } | j	t
jt
jt
jt
jfkrr|  ¡ } | j	t
jkr†|  ¡ } | j	jrÖ|  ¡ } t|r¦t| jƒn| jƒ}t|r¾t| jƒn| jƒ}t| ||||ƒS t|rät| ƒn| ƒ}t| |||ƒS d S )Nr   ú[])r:   Ú	has_namesÚrenamer   r
   Z_is_zerotensorÚcloneZis_negZresolve_negr%   r&   Zfloat16Zbfloat16Zfloat8_e5m2Zfloat8_e4m3fnr   Z	complex32ÚcfloatZ
is_complexZresolve_conjr+   Úget_summarized_datarP   rQ   rt   )r?   rn   ro   Zreal_formatterZimag_formatterÚ	formatterr   r   r   Ú_tensor_str.  sF    
üÿÿ    ÿr�   c                 C   s–   | g}t | ƒ|  d¡ d }|D ]`}t |ƒ}|sB|| d tjkrf| dd|  | ¡ || }d}q | d| ¡ ||d 7 }q | d¡ d	 |¡S )
Nrw   r,   r   rh   rF   Frc   ú)Ú )r7   Úrfindr   r   Úappendrd   )ry   Úsuffixesrn   Úforce_newlineZtensor_strsZlast_line_lenÚsuffixZ
suffix_lenr   r   r   Ú_add_suffixes_  s    
r‰   c                    sö   ˆ   ¡ }|dkrˆ S |dkrXˆ  d¡dtj krTt ˆ d tj… ˆ tj d … f¡S ˆ S tjsrˆ  dgˆ   ¡  ¡S ˆ  d¡dtj krÞ‡ fdd„tdtjƒD ƒ}‡ fdd„ttˆ ƒtj tˆ ƒƒD ƒ}t 	dd„ || D ƒ¡S t 	dd„ ˆ D ƒ¡S d S )	Nr   r,   r   c                    s   g | ]}ˆ | ‘qS r   r   r_   rC   r   r   r^   }  s     z'get_summarized_data.<locals>.<listcomp>c                    s   g | ]}ˆ | ‘qS r   r   r_   rC   r   r   r^   ~  s     c                 S   s   g | ]}t |ƒ‘qS r   ©r   ©r\   Úxr   r   r   r^     s     c                 S   s   g | ]}t |ƒ‘qS r   rŠ   r‹   r   r   r   r^   �  s     )
rx   rk   r   r   r&   ÚcatZ	new_emptyrm   r7   Ústack)r?   rx   ÚstartÚendr   rC   r   r   o  s     ÿ&r   ©Útensor_contentsc             	      s&  t jj | ¡rt| |d�S t| ƒt jkp6t| ƒt jjk}| j	rDd}n|rNd}nt| ƒj
› d�}t|ƒ‰ g }|d k	}|rz|}t jj | ¡\}}|jjt j ¡ ksÈ|jjdkr¼t j ¡ |jjksÈ|jjdkrà| dt|jƒ d ¡ |jjd	krö| d
¡}t  ¡ t jk�rt jnt j}	|jt  ¡ |	t jt jfk}
|j�rR| dtt|j ƒƒ ¡ ddl!m"} |j#�s‚t$||ƒ�s‚| dt| %¡ ƒ ¡ |
�sœ| dt|jƒ ¡ |�s4d}| &¡  '¡ }t(|ˆ t|ƒ ƒ}| )¡ dk�rè|dtt|j ƒƒ 7 }d}| *¡  '¡ }t(|ˆ t|ƒ ƒ}| )¡ dk�r.|dtt|j ƒƒ 7 }|| d dˆ   | | d }�nâ|j+t j,t j-t j.t j/hk�r`| dtt|j ƒƒ ¡ | dt| %¡ ƒ ¡ |
�s¶| dt|jƒ ¡ |�s4t j,t jj0t jj1ft j-t jj2t jj3ft j.t jj0t jj1ft j/t jj2t jj3fi|j+ \}}|j+t j,t j.hk�r0d\}}nd\}}d|d d… › d�}||ƒ '¡ }t(|ˆ t|ƒ ƒ}| )¡ dk�rŽ|dtt|j ƒƒ 7 }|d d… › d�}||ƒ '¡ }t(|ˆ t|ƒ ƒ}| )¡ dk�râ|dtt|j ƒƒ 7 }d}| 4¡  '¡ }t(|ˆ t|ƒ ƒ}| )¡ dk�r(|dtt|j ƒƒ 7 }|| d dˆ   | | d dˆ   | | d }�nÔ|j5�rˆ| dtt|j ƒƒ ¡ |
�sš| dt|jƒ ¡ | dt| 6¡ ƒ ¡ | 6¡ t j7k�sÐ| 6¡ t j8k�rþ| dt| 9¡ ƒ ¡ | dt| :¡ ƒ ¡ nr| 6¡ t j;k�s.| 6¡ t j<k�s.| 6¡ t j=k�rp| dt| >¡ ƒ ¡ | dt| ?¡ ƒ ¡ | dt| @¡ ƒ ¡ |�s4t(| A¡ ˆ ƒ}�n¬|j	�rÖ|�s4dd „ ‰d! B‡ ‡fd"d#„t jCjDjE F|d¡D ƒ¡}d$|› d%�}�n^t  G|¡�rød&}tHt  I|¡ƒ}�n<ddl!m"} |j#�st$||ƒ�r`| dtt|j ƒƒ ¡ |jt  ¡ k�rT| dt|jƒ ¡ |�s4d'}nÔ| )¡ dk�rÌ|j�sÌ| J¡ d(k�rœ| dtt|j ƒƒ ¡ |jt  ¡ k�rÀ| dt|jƒ ¡ |�s4d)}nhtKjL�sì| dtt|j ƒƒ ¡ |
�s| dt|jƒ ¡ |�s4|j+t jMk�r*t(| N¡ ˆ ƒ}n
t(|ˆ ƒ}|j+t jMk�rV| d*t|j+ƒ ¡ | jOd k	�r¢t| jOƒj
}|d+k�rŽ| jO P¡  Qd,d(¡d- }| d.|› d/�¡ n| jR�r´| d0¡ | S¡ �rÐ| d1|jT› �¡ |d k	�rê| d2|› �¡ tU|| |ˆ |jd3�}t$|t jjƒ�r"|�s"d4|› d�}|S )5Nr‘   znested_tensor(ztensor(ú(ÚcudaZmpszdevice='ú')ZxlaZlazyZipuZmtiaÚcpuzsize=r   )Ú
FakeTensorznnz=zdtype=zindices=tensor(z, size=zvalues=tensor(z),
rF   r‚   )ÚrowÚcolumn)r™   r˜   Úcr   z_indices=tensor(zquantization_scheme=zscale=zzero_point=zaxis=c                 S   s   d  dd„ |  d¡D ƒ¡S )Nrw   c                 s   s   | ]}d |› �V  qdS )z  Nr   re   r   r   r   Ú	<genexpr>&  s     z4_str_intern.<locals>.indented_str.<locals>.<genexpr>)rd   Úsplit)Úsrn   r   r   r   Úindented_str%  s    z!_str_intern.<locals>.indented_strrh   c                 3   s    | ]}ˆt |ƒˆ d  ƒV  qdS )r,   N)Ústr)r\   r)   ©rn   rž   r   r   r›   (  s   ÿz_str_intern.<locals>.<genexpr>z[
z
]z_to_functional_tensor(rZ   r,   rz   zlayout=ZCppFunctionz::r-   z	grad_fn=<ú>zrequires_grad=Trueznames=ztangent=)r‡   z
Parameter()Vr&   Ú_CÚ
_functorchZis_functorch_wrapped_tensorÚ_functorch_wrapper_str_internÚtypeZTensorÚnnÚ	ParameterZ	is_nestedr   r7   ZautogradZ
forward_adZunpack_dualZdeviceZ_get_default_devicer”   Zcurrent_deviceÚindexr…   rŸ   r(   Zget_default_dtyper'   Zcdoubler~   r%   Zint64r   Z	is_sparseÚtupleÚshapeZtorch._subclasses.fake_tensorr—   Úis_metaÚ
isinstanceZ_nnzZ_indicesÚdetachr�   r:   Z_valuesZlayoutZ
sparse_csrZ
sparse_cscZ
sparse_bsrZ
sparse_bscZcrow_indicesZcol_indicesZccol_indicesZrow_indicesÚvaluesZis_quantizedZqschemeZper_tensor_affineZper_tensor_symmetricZq_scaleZq_zero_pointZper_channel_affineZper_channel_symmetricZ per_channel_affine_float_qparamsZq_per_channel_scalesZq_per_channel_zero_pointsZq_per_channel_axisZ
dequantizerd   ZopsZatenZunbindr   Z_is_functional_tensorÚreprZ_from_functional_tensorrx   r   r   ZstridedZto_denseZgrad_fnÚnameÚrsplitZrequires_gradr{   Únamesr‰   )Zinpr’   Zis_plain_tensorÚprefixr†   Zcustom_contents_providedry   r?   ZtangentZ_default_complex_dtypeZhas_default_dtyper—   Zindices_prefixÚindicesZindices_strZvalues_prefixr®   Z
values_strZcompressed_indices_methodZplain_indices_methodZcdimnameZpdimnameZcompressed_indices_prefixZcompressed_indicesZcompressed_indices_strZplain_indices_prefixZplain_indicesZplain_indices_strÚstrsr°   Zstring_reprr   r    r   Ú_str_intern„  s¦   
ÿ
ýü
ú
ÿüÿþýüûúÿ	ü    üû
 
ÿÿ 
ÿÿþýüûúùø	÷
öÿÿþÿþýþ




   ÿr¶   c                C   sà   t jj | ¡}|dkst‚t jj | ¡r2t  | ¡ t jj | ¡}t|ƒ}t	 
|d¡}t jj | ¡r”t jj | ¡}|dks|t‚d|› d|› d|› d�S t jj | ¡r´d|› d|› d�S t jj | ¡rÔd|› d	|› d
�S tdƒ‚d S )Nr-   z    zBatchedTensor(lvl=z, bdim=z	, value=
z
)zGradTrackingTensor(lvl=zFunctionalTensor(lvl=z
, value=\
r‚   z8We don't know how to print this, please file us an issue)r&   r¢   r£   Zmaybe_get_levelÚAssertionErrorZis_functionaltensorZ_syncZget_unwrappedr¯   Útextwraprn   Zis_batchedtensorZmaybe_get_bdimZis_gradtrackingtensorÚ
ValueError)r@   r’   ÚlevelrA   Ú
value_reprZindented_value_reprZbdimr   r   r   r¤   v  s$    
ÿÿr¤   c                C   sZ   t  ¡ �H t jj ¡ �0 t j ¡ }t| |d�W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X d S )Nr‘   )r&   r5   ÚutilsZ_python_dispatchZ_disable_current_modesr¢   Z_DisableFuncTorchr¶   )r?   r’   Úguardr   r   r   Ú_str•  s    
r¾   )NNNNNN)N)N)N)Ú
contextlibr    rG   r¸   Útypingr   r   r   r&   r   Ú	dataclassr   r   r   rŸ   r"   Úcontextmanagerr$   r*   r+   rO   rq   rt   r�   r‰   r   r¶   r¤   r¾   r   r   r   r   Ú<module>   s>         ú
I
V

-
%1 s