o
    0h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   \/var/www/vscode/kcb/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_point_quantized_type
adjustment_long_type_infolong_min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   float16r   r   r   float64popstfloats)argskwargsno_nan_and_infmin_and_max_not_specifiedr   r   r   _floats_wrapper3   s0   
r;   c                  O   s   d|vrd|d< t | i |S )Nr&   r,   )r;   )r7   r8   r   r   r   r6   N   s   r6   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   r=   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tupler5   sampled_fromr   r   r   r   _ENFORCED_ZERO_POINTintegersr   r   r   r6   )drawdtypes	scale_min	scale_maxzero_point_minzero_point_maxquantized_type
_type_infoqminqmax_zp_enforcedr   _zp_min_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      )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   r5   listsrD   filtermaprA   )rE   min_dimsmax_dimsmin_sidemax_siderZ   	candidater   rY   r   array_shapes   s   rc   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&   rR   )r?   r	   r5   rB   r6   stnparraysr   r   isnananyisinfr%   r
   rC   get)rE   shapesri   r   rh   _shapeXr#   r$   r   zpenforced_zpr   r   r   r<      s*   

"r<   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 )Nrd   re   Fr,   rf   rg   rk   rR   r   r   )r?   r	   r5   rB   r6   rl   rm   r   r   r   rn   ro   rp   r%   r   rC   rq   rV   randomrandintndimarange	transpose)rE   rr   ri   r   rs   rt   r#   r$   r   ru   rv   axispermute_axesr   r   r   per_channel_tensor   s4   

"r~   rR   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   r5   rD   .0_)rE   feature_map_ranger   r   
<listcomp>?      ztensor_conv.<locals>.<listcomp>c                    r   r   r   r   )rE   kernel_ranger   r   r   A  r   Fr'   zNeed 3 qparams for X, w, br   )rr   ri   r   rR   )r5   rD   r?   r   rB   rangerA   booleansr@   r1   r<   )rE   spatial_dimbatch_size_rangeinput_channels_per_group_rangeoutput_channels_per_group_ranger   r   
max_groupscan_be_transposedri   r   
batch_sizeinput_channels_per_groupoutput_channels_per_groupgroupsinput_channelsoutput_channelsfeature_map_shapekernelstrweight_shape
bias_shapert   Wbr   )rE   r   r   r   tensor_conv)  sL   




r   deadline)r'   r+   r   )rS   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   r   )r   warning_messager   r   r   assert_deadline_disablede  s   r   )NNNNN)r   Nr   NN)NNN)
rR   r   r   r   r   r   r   FNN).collectionsr   collections.abcr   r   r   r   r.   	functoolsr   r   r   r   r5   hypothesis.extrarl   hypothesis.strategiesr	   (torch.testing._internal.common_quantizedr
   r   quint8qint8qint32r>   rC   r%   r;   r6   r=   	compositer   rc   r   r<   r~   r   r/   r0   r   	_profiles_current_profile__dict__current_settings	unlimitedr   r   r   r   r   <module>   sj   	/6
