L ibddlmZddlZddlmZddlZddlmZddlm Z d dZ GddeZ y) ) annotationsN)Any) BasePruner)_is_first_in_interval_stepc t|}|S#ttf$r1djt |j }t|dwxYw)Nz@The `value` argument is of type '{}' but supposed to be a float.)float TypeError ValueErrorformattype__name__)valuemessages _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/optuna/pruners/_threshold.py _check_valuer sY+e  L z "+T[[ K   d* +s AAc<eZdZdZ d ddZddZy)ThresholdPruneraPruner to detect outlying metrics of the trials. Prune if a metric exceeds upper threshold, falls behind lower threshold or reaches ``nan``. Example: .. testcode:: from optuna import create_study from optuna.pruners import ThresholdPruner from optuna import TrialPruned def objective_for_upper(trial): for step, y in enumerate(ys_for_upper): trial.report(y, step) if trial.should_prune(): raise TrialPruned() return ys_for_upper[-1] def objective_for_lower(trial): for step, y in enumerate(ys_for_lower): trial.report(y, step) if trial.should_prune(): raise TrialPruned() return ys_for_lower[-1] ys_for_upper = [0.0, 0.1, 0.2, 0.5, 1.2] ys_for_lower = [100.0, 90.0, 0.1, 0.0, -1] study = create_study(pruner=ThresholdPruner(upper=1.0)) study.optimize(objective_for_upper, n_trials=10) study = create_study(pruner=ThresholdPruner(lower=0.0)) study.optimize(objective_for_lower, n_trials=10) Args: lower: A minimum value which determines whether pruner prunes or not. If an intermediate value is smaller than lower, it prunes. upper: A maximum value which determines whether pruner prunes or not. If an intermediate value is larger than upper, it prunes. n_warmup_steps: Pruning is disabled if the step is less than the given number of warmup steps. interval_steps: Interval in number of steps between the pruning checks, offset by the warmup steps. If no value has been reported at the time of a pruning check, that particular check will be postponed until a value is reported. Value must be at least 1. Nch| | td| t|}| t|}||n td }||n td}||kDr td|dkrtdj ||dkrtdj |||_||_||_||_y)Nz(Either lower or upper must be specified.infz#lower should be smaller than upper.rz5Number of warmup steps cannot be negative but got {}.z5Pruning interval steps must be at least 1 but got {}.) r rrr r _lower_upper_n_warmup_steps_interval_steps)selfloweruppern_warmup_stepsinterval_stepss r__init__zThresholdPruner.__init__Qs =U]FG G   'E   'E*u *e  5=BC C A GNN~^  A GNN~^   --c2|j}|y|j}||kryt||jj ||j sy|j|}t j|ry||jkry||jkDryy)NFT) last_steprrintermediate_valueskeysrmathisnanrr)rstudytrialstepr latest_values rprunezThresholdPruner.pruners <-- . ) %++002NDDXDX 006 ::l # $++ % $++ %r!)NNrr) r float | Nonerr-rintrr.returnNone)r(z'optuna.study.Study'r)z'optuna.trial.FrozenTrial'r/bool)r __module__ __qualname____doc__r r,r!rrrsQ6t#" ... .  .  .Br!r)rrr/r) __future__rr&typingroptunaoptuna.prunersroptuna.pruners._percentilerrrr5r!rr;s*"  %A rjrr!