U
    qhk                     @  s@   d dl mZ d dlZd dlmZ d dlmZ G dd deZdS )    )annotationsNtensor_dtype_to_np_dtype)OpRunc                   @  s@   e Zd Zdd Zedd Zeddddd	Zed
d ZdS )_CommonRandomc                 C  s>   t | || t| dr:t| jdkr:td| jj dd S )Nshaper   z#shape cannot be empty for operator .)r   __init__hasattrlenr   
ValueError	__class____name__)selfZ	onnx_nodeZ
run_params r   H/tmp/pip-unpacked-wheel-xnis5xre/onnx/reference/ops/_op_common_random.pyr	      s
    z_CommonRandom.__init__c                 C  s   t | S )Nr   )dtyper   r   r   
numpy_type   s    z_CommonRandom.numpy_typeNF)r   dtype_firstc                 G  s   t | }|rR|d k	rR| dkr"|S |r0|d jS tdt jd| dt| dd }|s`|}n&|d k	rn|}nt|d dr|d j}|d krtd| dt|d  d|S )	Nr   z+dtype cannot be None for a random operator z, numpy_type=z, len(data)=r   r   z!dtype cannot be None, numpy_type=z, type(data[0])=)r   r   r   RuntimeErrorr   r   r
   type)r   r   datar   resr   r   r   _dtype   s*    


z_CommonRandom._dtypec                 C  s4   | d kst | rt j }nt jjt| d}|S )N)seed)npisnanrandomZRandomStateint)r   stater   r   r   
_get_state1   s    z_CommonRandom._get_state)r   
__module____qualname__r	   staticmethodr   r   r    r   r   r   r   r      s   
r   )	
__future__r   Znumpyr   Zonnx.helperr   Zonnx.reference.op_runr   r   r   r   r   r   <module>   s   