o
    wZh9                     @   s  d dl mZ d dlmZ d dlZd dlZd dlZd dlm	Z	 d dlm
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ ejejejfZedd ejdejdejd iZdd Zdd Zdd Z	 dd Z	 ej		d+ddZ	 ejd,ddZ 	 ejdddej!fddZ"ejd-ddZ#	 ej		 	!	"	d.d#d$Z$ej%j&Z'ej(ej) j*Z+de+d%< e'd&kre'd'k rej,e+d(< d)d* Z-dS )/    )defaultdict)IterableN)reduce)assume)settings)
strategies)numpy)SearchStrategy)_calculate_dynamic_qparams&_calculate_dynamic_per_channel_qparamsc                   C   s   d S )N r   r   r   W/var/www/auris/lib/python3.10/site-packages/torch/testing/_internal/hypothesis_utils.py<lambda>    s    r   c           
      C   s   | \}}}dt t jj }t t j}|j| |j| }}t|| | || | }t|| | || | }	t	|t	|	fS N   )
torchfinfofloatepsiinfolongminmaxnpfloat32)
qparamsscale
zero_pointZ_quantized_typeZ
adjustmentZ_long_type_infoZlong_minZlong_max	min_value	max_valuer   r   r   _get_valid_min_max&   s   
r    c                  O   s  d|v rt jjdk rd|v r|d  sd|vo#d|v r |d  p#d|v}t| dko1d|vo1d|v}|r|r|d dkrOttjj|d< ttjj|d< n1|d d	krhttj	j|d< ttj	j|d< n|d d
krttj
j|d< ttj
j|d< |d tj| i |S )Nwidth)   C   r   	allow_nanallow_infinityr   r   r          @   )
hypothesisversion__version_info__lenr   r   Zfloat16r   r   r   Zfloat64popstfloats)argskwargsZno_nan_and_infZmin_and_max_not_specifiedr   r   r   _floats_wrapper3   s0   
r2   c                  O   s   d|vrd|d< t | i |S )Nr!   r'   )r2   )r0   r1   r   r   r   r/   N   s   r/   c                 C   s0   t |\}}t|  |k t|  |k dS )NT)r    r   r   r   )tensorr   r   r   r   r   r   assume_not_overflowingb   s   r4   c                 C   s   |d u rt }t|ttfs|f}| t|}t|}|j|j	}}	t
| }
|
d ur.|
}n|d u r4|n|}|d u r<|	n|}| tj||d}|d u rRttjj}|d u r]ttjj	}| t||dd}|||fS )N)r   r   r'   )r   r   r!   )_ALL_QINT_TYPES
isinstancelisttupler.   sampled_fromr   r   r   r   _ENFORCED_ZERO_POINTintegersr   r   r   r/   )drawZdtypesZ	scale_minZ	scale_maxZzero_point_minZzero_point_maxZquantized_typeZ
_type_infoZqminZqmaxZ_zp_enforcedr   Z_zp_minZ_zp_maxr   r   r   r   r   w   s&   

r   r   c                    s~   |dk sJ |du rt |d d}|dk sJ |du r|d }tjt||||d} dur8| fdd}| |tS )z8Return a strategy for array shapes (tuples of int >= 1).r'   N      )Zmin_sizemax_sizec                    s   t tj| d kS r   )r   int__mul__)x	max_numelr   r   r      s    zarray_shapes.<locals>.<lambda>)r   r.   listsr;   filtermapr8   )r<   Zmin_dimsZmax_dimsZmin_sideZmax_siderD   	candidater   rC   r   array_shapes   s   rI   c                 C   s  t |tr
| |}n| t|}|d u r@|d u r!tddddd}| tj|||d}tt	|
 p9t|
   |d fS | |}|d u rWt|\}}t||dddd}| tj|||d}t||d \}	}
t|d d }|d urx|}
||	|
|d ffS )	N    .    .AFr'   r$   r!   dtypeelementsshaper%   r$   r!   r=   )r6   r	   r.   r9   r/   stnparraysr   r   isnananyisinfr    r
   r:   get)r<   shapesrO   r   rN   _shapeXr   r   r   zpenforced_zpr   r   r   r3      s*   

"r3   c                 C   sF  t |tr
| |}n| t|}|d u rA|d u r!tddddd}| tjtj||d}t	t
| p:t|   |d fS | |}|d u rXt|\}}t||dddd}| tjtj||d}t||d \}}	t|d d }
|
d urz|
}	ttjd	|jd
}t|j}||d	< d	||< t||}|||	||d ffS )NrJ   rK   Fr'   rL   rM   rQ   r=   r   r   )r6   r	   r.   r9   r/   rR   rS   r   r   r   rT   rU   rV   r    r   r:   rW   r@   randomrandintndimZarangeZ	transpose)r<   rX   rO   r   rY   rZ   r   r   r   r[   r\   ZaxisZpermute_axesr   r   r   per_channel_tensor   s4   

"r`   r=   r      r"            Fc                    sj   t j| } t j| } t j| } t d|}|| }|| }t|tr1 t |} fddt|D } fddt|D }d}||ft| }|}|ri t  }|ri||ft| }|}|
d urt|
ttfrt	|
dks~J dn|
gd }
 t
||ft| f|	|
d d	} t
|f|	|
d d	} t
|f|	|
d
 d	}|||||fS )Nr   c                       g | ]	} t j qS r   r.   r;   .0_)r<   feature_map_ranger   r   
<listcomp>?      ztensor_conv.<locals>.<listcomp>c                    rh   r   ri   rj   )r<   kernel_ranger   r   rn   A  ro   Fr"   zNeed 3 qparams for X, w, br   )rX   rO   r   r=   )r.   r;   r6   r   r9   ranger8   Zbooleansr7   r,   r3   )r<   Zspatial_dimZbatch_size_rangeZinput_channels_per_group_rangeZoutput_channels_per_group_rangerm   rp   Z
max_groupsZcan_be_transposedrO   r   Z
batch_sizeZinput_channels_per_groupZoutput_channels_per_groupgroupsZinput_channelsZoutput_channelsZfeature_map_shapeZkernelstrZweight_shapeZ
bias_shaperZ   Wbr   )r<   rm   rp   r   tensor_conv)  sL   




rv   deadline)r"   r&   r   )r>   r   r   timeoutc                  C   s>   t dk rdd l} dtj }| | d S t jd u sJ d S )N)r"      r   r   zwYour version of hypothesis is outdated. To avoid `DeadlineExceeded` errors, please update. Current hypothesis version: )hypothesis_versionwarningsr)   __version__warnr   rw   )r{   Zwarning_messager   r   r   assert_deadline_disablede  s   r~   )NNNNN)r   Nr   NN)NNN)
r=   ra   rc   rc   re   rc   r   FNN).collectionsr   collections.abcr   r   r   r   r)   	functoolsr   r   r   r   r.   Zhypothesis.extrarR   Zhypothesis.strategiesr	   Z(torch.testing._internal.common_quantizedr
   r   Zquint8Zqint8Zqint32r5   r:   r    r2   r/   r4   Z	compositer   rI   r   r3   r`   rv   r*   r+   rz   Z	_profilesZ_current_profile__dict__Zcurrent_settingsZ	unlimitedr~   r   r   r   r   <module>   sj   	/6
