
    i                     f   d Z ddlmZ ddlZddlmZ  ej                  d      deded	ee   d
ee   fd       Z	 ej                  d      ded
ee   fd       Z
 ej                  d      dddededed
ee   fd       Z ej                  d      dddedededed
ee   f
d       Zdededed
efdZ ej                  d      ddddd d!ed"ed#ed$ededed
ee   fd%       Z ej                  d&      d'ed(ed)ed
ee   fd*       Z ej                  d+      d,ed-ed.ed
ee   fd/       Zg d0Zy)1zEGenerators that provide different rates, schedules, decays or series.    )IterableN   )registryzconstant_then.v1ratestepsschedulereturnc              #   J   K   t        |      D ]  }|   |D ]  }|  yw)z>Yield a constant rate for N steps, before starting a schedule.N)range)r   r   r   ivalues        `/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/schedules.pyconstant_thenr   
   s4     
 5\ 
 s   !#zconstant.v1c              #      K   	 |  w)zYield a constant rate. )r   s    r   constantr      s      
 s   	zdecaying.v1)t	base_ratedecayr   c             #   8   K   	 | dd||z  z   z  z   |dz  }w)a  Yield an infinite series of linearly decaying values,
    following the schedule: base_rate * 1 / (1 + decay * t)

    EXAMPLE:
        >>> learn_rates = decaying(0.001, 1e-4)
        >>> next(learn_rates)
        0.001
        >>> next(learn_rates)
        0.00999
          ?r   r   )r   r   r   s      r   decayingr      s1      3#	/233	Q s   zcompounding.v1        startstopcompoundc             #   L   K   t        |       }	 t        || |       ||z  }w)ad  Yield an infinite series of compounding values. Each time the
    generator is called, a value is produced by multiplying the previous
    value by the compound rate.

    EXAMPLE:
        >>> sizes = compounding(1.0, 10.0, 1.5)
        >>> assert next(sizes) == 1.
        >>> assert next(sizes) == 1 * 1.5
        >>> assert next(sizes) == 1.5 * 1.5
    )float_clip)r   r   r   r   currs        r   compoundingr!   -   s2      <D
D%&& s   "$r   c                 <    ||kD  rt        | |      S t        | |      S )N)maxmin)r   r   r   s      r   r   r   A   s!     %3udC3ud3CC    zslanted_triangular.v1g?    r   )cut_fracratior   r   max_rate	num_stepsr'   r(   c             #      K   t        ||z        }	 |dz  }||k  r||z  }nd||z
  |d|z  dz
  z  z  z
  }| d||dz
  z  z   z  d|z  z  }| =w)zxYield an infinite series of values according to Howard and Ruder's
    "slanted triangular learning rate" schedule.
    r   )int)	r)   r*   r'   r(   r   r   cutp
learn_rates	            r   slanted_triangularr0   E   s      i("
#C
	Qs7CAa#g#X)9":;<AQ%!)_!45UC
 s   AAzwarmup_linear.v1initial_ratewarmup_stepstotal_stepsc           	   #      K   d}	 ||k  r|t        d|      z  }nt        d||z
  t        d||z
        z        }|| z   |dz  }Aw)zGenerate a series, starting from an initial rate, and then with a warmup
    period, and then a linear decline. Used for learning rates.
    r   r   r   r   )r#   )r1   r2   r3   stepfactors        r   warmup_linearr7   ]   si      D
,C<00FkD(C[<5O,PPF |##	 s   AAzcyclic_triangular.v1min_lrmax_lrperiodc              #      K   d}	 t        j                  d|d|z  z  z         }t        j                  ||z  d|z  z
  dz         }t        dd|z
        }| || z
  |z  z    |dz  }aw)Nr      r   )numpyfloorabsr#   )r8   r9   r:   itcyclexrelatives          r   cyclic_triangularrD   p   s{     	
B
Aa&j 112IIb6kAI-12q!a%=8333
a s   A%A')rD   r7   r   r   r   r7   r0   r!   )__doc__typingr   r=   configr   	schedulesr   r,   r   r   r   r!   r   r0   r7   rD   __all__r   r%   r   <module>rJ      sN   K    &'
'/e_ ( M"5 Xe_  # M"9:  e 3 x  #  $%>A).6;e_ &&D Du DE De D +,
  	
    e_ -. &''*9<e_ ($ *+e U C HUO  ,	r%   