o
    i                  
   @   s  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d dlZd dlZzd dlmZmZmZmZmZ W n eyS   d dlmZmZmZmZmZ Y nw d dlZd dlmZmZmZmZ d dlmZ d dlm Z m!Z! d dl"m#Z# d	d
l$m%Z% dZ&dZ'G dd dej(j)Z*G dd deZ+G dd deZ,G dd deZ-e*j./dd*dede0de1fddZ2e*j./dd+dede0de3de1fddZ4dd dd!Z5dd d d!Z6dddd!Z7ddd d!Z8d"d# Z9d$d% Z:d&d' Z;d(d) Z<dS ),    N)GeneratorType)AnyCallableDictIterableListOptionalUnion)	BaseModelPositiveInt
StrictBoolStrictFloatconstr)ConfigModelNumpyOpsRAdam)ConfigValidationError)	GeneratorRagged)partial   )make_tempdira  
[optimizer]
@optimizers = "Adam.v1"
beta1 = 0.9
beta2 = 0.999
use_averages = true

[optimizer.learn_rate]
@schedules = "warmup_linear.v1"
initial_rate = 0.1
warmup_steps = 10000
total_steps = 100000

[pipeline]

[pipeline.parser]
name = "parser"
factory = "parser"

[pipeline.parser.model]
@layers = "spacy.ParserModel.v1"
hidden_depth = 1
hidden_width = 64
token_vector_width = 128

[pipeline.parser.model.tok2vec]
@layers = "Tok2Vec.v1"
width = ${pipeline.parser.model:token_vector_width}

[pipeline.parser.model.tok2vec.embed]
@layers = "spacy.MultiFeatureHashEmbed.v1"
width = ${pipeline.parser.model.tok2vec:width}

[pipeline.parser.model.tok2vec.embed.hidden]
@layers = "MLP.v1"
depth = 1
pieces = 3
layer_norm = true
outputs = ${pipeline.parser.model.tok2vec.embed:width}

[pipeline.parser.model.tok2vec.encode]
@layers = "spacy.MaxoutWindowEncoder.v1"
depth = 4
pieces = 3
window_size = 1

[pipeline.parser.model.lower]
@layers = "spacy.ParserLower.v1"

[pipeline.parser.model.upper]
@layers = "thinc.Linear.v1"
z
[optimizer]
@optimizers = "Adam.v1"
beta1 = 0.9
beta2 = 0.999
use_averages = true

[optimizer.learn_rate]
@schedules = "warmup_linear.v1"
initial_rate = 0.1
warmup_steps = 10000
total_steps = 100000
c                   @   s   e Zd ZejdddddZdS )my_registrythinctestscatsF)entry_pointsN)__name__
__module____qualname__	cataloguecreater    r#   r#   K/home/ubuntu/.local/lib/python3.10/site-packages/thinc/tests/test_config.pyr   [   s    r   c                   @   s,   e Zd ZU eed< eed< G dd dZdS )HelloIntsSchemahelloworldc                   @      e Zd ZdZdS )zHelloIntsSchema.ConfigforbidNr   r   r    extrar#   r#   r#   r$   r   c       r   N)r   r   r    int__annotations__r   r#   r#   r#   r$   r%   _   s   
 r%   c                   @   s0   e Zd ZU eed< dZeed< G dd dZdS )DefaultsSchemarequireddefault valueoptionalc                   @   r(   )zDefaultsSchema.Configr)   Nr*   r#   r#   r#   r$   r   k   r,   r   N)r   r   r    r-   r.   r2   strr   r#   r#   r#   r$   r/   g   s   
 r/   c                   @   s<   e Zd ZU eed< dZeed< eed< eddZ	eed< dS )	ComplexSchema	outer_reqr1   	outer_opt
level2_reqr   )r0   
level2_optN)
r   r   r    r-   r.   r6   r3   r%   r/   r8   r#   r#   r#   r$   r4   o   s
   
 r4   z	catsie.v1Tevilcutereturnc                 C   s   | rdS dS )Nscratch!meowr#   )r9   r:   r#   r#   r$   	catsie_v1w   s   r>   z	catsie.v2
cute_levelc                 C   s   | rdS |dkr
dS dS )Nr<      zmeow <3r=   r#   )r9   r:   r?   r#   r#   r$   	catsie_v2   s
   rA   F)z@catsr9   r:   c                  C   s   ddddddddddddddd	id
ddddd} t | }|d }tjddd}|j|tjdddd || ||d  d S )Ni   皙?MbP?)n_hiddendropout
learn_ratezchain.v1zRelu.v1)@layersnOrE   rG   z
Softmax.v1)relu1relu2softmax)rG   *zAdam.v1)@optimizersrF   )hyper_paramsmodel	optimizerrO   )i  r   f)dtype)XYrP   )r   resolvenumpyones
initializezerosbegin_updatefinish_update)cfgresolvedrO   rS   r#   r#   r$   &test_make_config_positional_args_dicts   s   




r^   c                  C   s   ddddddddi} t jjdd	tt d
tfdd}t jddtdtdtt fdd}t	| d }|j
dks?J d	|jv sFJ |jdksMJ d S )NrP   zmy_cool_optimizer.v1rB   zmy_cool_repetitive_schedule.v1rC      )z
@schedules	base_raterepeat)rM   beta1rF   rF   rb   c                 S   s   t | |dS )N)rb   )r   )rF   rb   r#   r#   r$   make_my_optimizer   s   z3test_objects_from_config.<locals>.make_my_optimizerr`   ra   r;   c                 S   s
   || g S )Nr#   )r`   ra   r#   r#   r$   decaying   s   
z*test_objects_from_config.<locals>.decaying)r   registry
optimizersregisterr   float	schedulesr-   r   rU   b1rF   )configrc   rd   rP   r#   r#   r$   test_objects_from_config   s"   
rl   c                  C   s`   t ddtttf fdd} dddid}t d|id }t|ts'J |jd	ks.J d
S )zlTest that validation can handle checks against arbitrary generic
    types in function argument annotations.zmy_transform.v1rO   c                 S   s
   d| _ | S )Ntransformed_model)name)rO   r#   r#   r$   my_transform   s   z4test_handle_generic_model_type.<locals>.my_transformrG   z	Linear.v1)rG   rO   testrm   N)r   layersr   r-   rU   
isinstancern   )ro   r\   rO   r#   r#   r$   test_handle_generic_model_type   s   rs   c                  C   s8   d} t  | }t|}|d d }|jdksJ d S )Nz
    [model]

    [model.chain]
    @layers = "chain.v1"

    [model.chain.*.hashembed]
    @layers = "HashEmbed.v1"
    nO = 8
    nV = 8

    [model.chain.*.expand_window]
    @layers = "expand_window.v1"
    window_size = 1
    rO   chainzhashembed>>expand_window)r   from_strr   rU   rn   )str_cfgr\   r]   rO   r#   r#   r$   test_arg_order_is_preserved   s
   
rw   )T)Tr   )=inspectpickletypesr   typingr   r   r   r   r   r   r	   r!   rV   pytestpydantic.v1r
   r   r   r   r   ImportErrorpydanticthinc.configr   	thinc.apir   r   r   r   r   thinc.typesr   r   
thinc.utilr   utilr   EXAMPLE_CONFIGOPTIMIZER_CFGrk   re   r   r%   r/   r4   r   rg   boolr3   r>   r-   rA   good_catsie	ok_catsie
bad_catsieworst_catsier^   rl   rs   rw   r#   r#   r#   r$   <module>   sH    $  5

	