o
    ?e                     @   s~   d Z ddlZddlmZmZmZmZmZ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 G d	d
 d
ejZdS )z-Base Class for TPU Embeddings Mid level APIs.    N)AnyDictIterableOptionalUnionText)dtypes)	variables)tpu_embedding_v2_utils)autotrackable)nestc                   @   s   e Zd ZdZ	ddeejef deej	 fddZ
edd Zd	ejd
edeeejf fddZdd Zdd Zddedee defddZ	ddedee defddZdS )TPUEmbeddingBasezThe TPUEmbedding Base class.

  This class only contains the basic logic to check the feature config and table
  config for the tpu embedding mid level APIs.
  Nfeature_config	optimizerc                 C   s   || _ g | _t|D ]	}| j|j qg | _t|D ]}|j| jvr,| j|j qg }t| jD ]A\}}|j	du r@||_	|j	durVt
|j	tjsVtdt|j	|jdu rad||_|j|v rotd|j d||j q4d| _dS )z$Creates the TPUEmbeddingBase object.Nz{} is an unsupported optimizer class. Please pass an instance of one of the optimizer classes under tf.tpu.experimental.embedding.ztable_{}z:Tables must have a unique name. Multiple tables with name z found.F)Z_feature_configZ_output_shapesr   flattenappendZoutput_shapeZ_table_configtable	enumerater   
isinstancer
   
_Optimizer
ValueErrorformattypename_built)selfr   r   featureZtable_namesir    r   i/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/tpu/tpu_embedding_base.py__init__"   s:   





zTPUEmbeddingBase.__init__c                 C      t )z;Returns a dict of embedding tables, keyed by `TableConfig`.NotImplementedErrorr   r   r   r   embedding_tablesL   s   z!TPUEmbeddingBase.embedding_tablesr   	trainablereturnc                    st   j jffdd d fdd	jj|d}fdd}jd	ur2j||}ni }||d
< |S )zBCreate all variables including table variables and slot variables.c                    s&   ~t j| |d}tj| | ||dS )N)dtype)r   initial_valueshaper(   r&   )	functoolspartialtf_variablesVariable)r   r*   r(   initializerr&   r)   )variable_shaper   r   getterV   s   z2TPUEmbeddingBase._create_variables.<locals>.getterTc                    s   j | |tj |dS )N)r   r/   r*   r(   r1   r&   )Z _add_variable_with_custom_getterr   Zfloat32)r   r/   r&   )r1   r   r0   r   r   variable_creatorc   s   z<TPUEmbeddingBase._create_variables.<locals>.variable_creator)r&   c                    s    j d |  |dS )N/F)r   )r   r/   )r   r2   r   r   slot_creatorr   s   z8TPUEmbeddingBase._create_variables.<locals>.slot_creatorN
parameters)T)Zvocabulary_sizedimr   r/   r   Z_create_slots)r   r   r&   r5   r4   Z	slot_varsr   )r1   r   r   r2   r0   r   _create_variablesQ   s   

z"TPUEmbeddingBase._create_variablesc                 C   r!   )8Create variables and slots variables for TPU embeddings.r"   r$   r   r   r   _create_variables_and_slots|   s   z,TPUEmbeddingBase._create_variables_and_slotsc                 C   s   | j rdS |  | _d| _ dS )r8   NT)r   r9   Z
_variablesr$   r   r   r   build   s   

zTPUEmbeddingBase.buildfeaturesweightsc                 C   s   | j s|   | ||S )z.Call the mid level api to do embedding lookup.)r   r:   embedding_lookupr   r;   r<   r   r   r   __call__   s   zTPUEmbeddingBase.__call__c                 C   r!   )z4Lookup the embedding table using the input features.r"   r>   r   r   r   r=      s   z!TPUEmbeddingBase.embedding_lookup)N)__name__
__module____qualname____doc__r   r
   ZFeatureConfigr   r   r   r    propertyr%   ZTableConfigboolr   r   r-   r.   r7   r9   r:   r   r?   r=   r   r   r   r   r      s4    	
*

+r   )rC   r+   typingr   r   r   r   r   r   Ztensorflow.python.frameworkr   Ztensorflow.python.opsr	   r-   Ztensorflow.python.tpur
   Ztensorflow.python.trackabler   Ztensorflow.python.utilr   ZAutoTrackabler   r   r   r   r   <module>   s    