o
    Ei                     @   s   d dl ZddlmZmZ d dlZd dlZG dd dZG dd deZG dd	 d	eZ	G d
d deZ
G dd dZg Zdd Zdd Zdd Zdd ZdS )    N   )tracertensorc                   @      e Zd ZdS )CacheKeyN__name__
__module____qualname__ r   r   N/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/einx/tracer/input.pyr   
       r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Scalarc                 C   s
   t |tS N)
isinstancer   selfotherr   r   r   __eq__   s   
zScalar.__eq__c                 C   s   dS )Nr   r   r   r   r   r   __hash__   s   zScalar.__hash__c                 C   s   t  }||fS r   )r   r   r   backendvirtual_argxr   r   r   	to_tracer   s   zScalar.to_tracerN)r   r	   r
   r   r   r   r   r   r   r   r      s    r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Tensorc                 C   s   || _ || _d S r   )shapetype)r   r   r   r   r   r   __init__   s   
zTensor.__init__c                 C   s"   t |to|j| jko|j| jkS r   )r   r   r   r   r   r   r   r   r      s   "zTensor.__eq__c                 C   s   dt | j t | j S )N   )hashr   r   r   r   r   r   r   "   s   zTensor.__hash__c                    s@   t  fdd|jD rt j}||fS t j}||fS )Nc                 3   s    | ]	}t  j|V  qd S r   )
issubclassr   ).0r   r   r   r   	<genexpr>&   s    z#Tensor.to_tracer.<locals>.<genexpr>)anytensor_typesr   r   r   TensorRequiringConversionr   r   r   r   r   %   s
   zTensor.to_tracerNr   r	   r
   r    r   r   r   r   r   r   r   r      s
    r   c                   @   r   )
TensorFactoryc                 C   s   t || _d S r   )tupleparams)r   r,   r   r   r   r    .      zTensorFactory.__init__c                 C   s   t |to
|j| jkS r   )r   r*   r,   r   r   r   r   r   1   s   zTensorFactory.__eq__c                 C   s   dt | j S )N   )r"   r,   r   r   r   r   r   4   r-   zTensorFactory.__hash__c                 C   s   t | j}||fS r   )r   r*   r,   r   r   r   r   r   7   s   zTensorFactory.to_tracerNr)   r   r   r   r   r*   -   s
    r*   c                   @   r   )InputNr   r   r   r   r   r/   <   r   r/   c                 C   s   t |  | S r   )tensor_factoriesappend)factoryr   r   r   register_tensor_factoryC   s   
r3   c                 C   s&   t D ]}|| }|d ur|  S qd S r   )r0   )r   r2   x2r   r   r   apply_registered_tensor_factoryH   s   r5   c                 C   s&  t | tttjtjttjfr| t fS t | t	t
fr1tj| }|d u r(td| t|t| fS t | tr:|  S t|  }d urD|S t| rg }z-t| j D ]"\}}|jtjjkrdd| }n|jtjjkrpd| }|| qSW n   Y | t|fS | tt	dd | jD t| fS )Nz)Failed to determine shape of input tensorz***c                 s   s    | ]}t |V  qd S r   )int)r$   ir   r   r   r%   o   s    z,concrete_to_value_and_key.<locals>.<genexpr>) r   floatr7   npfloatingintegerboolbool_r   r+   listeinxr   	get_shape
ValueErrorr   r   r/   to_value_and_keyr5   callableinspect	signature
parametersitemskind	ParameterVAR_KEYWORDVAR_POSITIONALr1   r*   r   )r   r   r4   r,   nameparamr   r   r   concrete_to_value_and_keyP   s2   


"rO   c                    s*   g   fdd}t j|| }  | fS )Nc                    s4   t | tr| \}} |d ur | | S | S r   )r   r   r   r1   )r   argargsr   r   r   r   mapu   s   

zkey_to_tracer.<locals>.map)r@   	tree_utiltree_map)r   r   r   rS   r   rQ   r   key_to_tracerr   s   	rV   )numpyr:    r   r   r@   rE   r   r   r   r*   r/   r0   r3   r5   rO   rV   r   r   r   r   <module>   s    "