o
    if                     @   sl  d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZ ddlZzddlmZ W n eyE   ddlmZ Y nw ddlZeeee ef ZedZedZejG dd	 d	e	eef Zd
ZG dd dejZejdd?dede de!fddZ"ejdd@dede de#de!fddZ$eddedefddZ%e&d	dAddddd ed!ed"ed#e fd$d%Z'e(d&d'ed(e#d)e#de
e fd*d+Z)ed,d-ee#e#f dee#e#f fd.d/Z*ed0	dBd1ee# d2ee# deee# ee# f fd3d4Z+ej&d5d ee d!efd6d7Z,e(d8d9ed:e#dee fd;d<Z-ej.d=d> Z/dS )Cz-
Registered functions used for config tests.
    N)Path)	GeneratorGenericIterableListOptionalTypeVarUnion)
StrictBoolInTOutTc                   @   s&   e Zd ZU eed< eed< eed< dS )Catnamevalue_in	value_outN)__name__
__module____qualname__str__annotations__r   r    r   r   I/home/ubuntu/.local/lib/python3.10/site-packages/confection/tests/util.pyr      s   
 r   config_testsc                   @   s`   e Zd ZdZejedddZejedddZejedddZejedddZ	ejedddZ
d	S )
my_registryr   catsF)entry_points
optimizers	schedulesinitializerslayersN)r   r   r   	namespace	cataloguecreater   r   r   r   r   r   r   r   r   r   #   s    r   z	catsie.v1Tevilcutereturnc                 C   s   | rdS dS )Nscratch!meowr   )r#   r$   r   r   r   	catsie_v1,   s   r(   z	catsie.v2   
cute_levelc                 C   s   | rdS |dkr
dS dS )Nr&      zmeow <3r'   r   )r#   r$   r*   r   r   r   	catsie_v24   s
   r,   z	catsie.v3argc                 C   s   | S Nr   )r-   r   r   r   catsie>   s   r/   zAdam.v1MbP?)beta1beta2use_averages
learn_rater1   r2   r3   c                C   s$   t jG dd d}|| |||dS )z
    Mocks optimizer generation. Note that the returned object is not actually an optimizer. This function is merely used
    to illustrate how to use the function registry, e.g. with thinc.
    c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )zAdam.<locals>.Optimizerr4   r1   r2   r3   N)r   r   r   
FloatOrSeqr   boolr   r   r   r   	OptimizerP   s
   
 r7   )r4   r1   r2   r3   )dataclasses	dataclass)r4   r1   r2   r3   r7   r   r   r   AdamC   s
   r:   zwarmup_linear.v1initial_ratewarmup_stepstotal_stepsc                 c   sP    d}	 ||k r|t d| }nt d|| t d||  }||  V  |d7 }q)zGenerate a series, starting from an initial rate, and then with a warmup
    period, and then a linear decline. Used for learning rates.
    r   Tr)   g        g      ?)max)r;   r<   r=   stepfactorr   r   r   warmup_linear\   s   
rA   zgeneric_cat.v1catc                 C   s
   d| _ | S )Ngeneric_cat)r   )rB   r   r   r   rC   o   s   rC   z
int_cat.v1r   r   c                 C   s   t d| |dS )z%Instantiates cat with integer values.int_cat)r   r   r   )r   )r   r   r   r   r   rD   u   s   rD   zmy_cool_optimizer.v1c                 C   s   t | |dS )N)r1   )r:   )r4   r1   r   r   r   make_my_optimizer}   s   rE   zmy_cool_repetitive_schedule.v1	base_raterepeatc                 C   s
   || g S r.   r   )rF   rG   r   r   r   decaying   s   
rH   c                  c   s&    t t } | V  tt|  d S r.   )r   tempfilemkdtempshutilrmtreer   )dr   r   r   make_tempdir   s   rN   )T)Tr)   )r0   )NN)0__doc__
contextlibr8   rK   rI   pathlibr   typingr   r   r   r   r   r   r	   r!   pydantic.v1.typesr
   ImportErrorpydantic.types
confectionfloatr5   r   r   r9   r   my_registry_namespaceregistryr   r   registerr6   r   r(   intr,   r/   r   r:   r   rA   rC   rD   rE   rH   contextmanagerrN   r   r   r   r   <module>   s    $
	
	$
