L i(8UddlmZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd lm Z ddl Z ddl Z ddl Z ddl Z gd Ze jZd ed <dad ed<ddZddZddZddZd dZd dZd!dZd"dZd#dZd dZd dZd dZd dZy)$) annotationsN)CRITICAL)DEBUG)ERROR)FATAL)INFO)WARN)WARNING)rrrrrr r zthreading.Lock_lockzlogging.Handler | None_default_handlercd}d}trtjd|d|Stj|d|S)z}Create a default formatter of log messages. This function is not supposed to be directly accessed by library users. z[%(levelname)1.1s %(asctime)s]z %(message)sz %(log_color)sz %(reset)s  )_color_supportedcolorlogColoredFormatterlogging Formatter)headermessages T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/optuna/logging.pycreate_default_formatterr sU .FG((F8:gY 7     xq 2 33ctjjddryttj drtj j syy)zDetection of color support.NO_COLORNFisattyT)osenvirongethasattrsysstderrrrrrr.s< zz~~j$' 3::x ( 0A0A0Crc2tjddS)N.r)__name__splitr"rr_get_library_namer':s >># q !!rc<tjtSN)r getLoggerr'r"rr_get_library_root_loggerr+>s   .0 11rcFt5tr dddytjatj t t }|jt|jtjd|_ dddy#1swYyxYw)NF) r r r StreamHandler setFormatterrr+ addHandlersetLevelr propagatelibrary_root_loggers r_configure_library_root_loggerr4Bs  .   . .#002%%&>&@A/G.H&&'78$$W\\2(-% . . .sBA6BB ct5ts dddyt}|jt|j t j dadddy#1swYyxYwr))r r r+ removeHandlerr0rNOTSETr2s r_reset_library_root_loggerr8Ss_     /G.H))*:;$$W^^4   sA!AA!!A*c@ttj|S)zzReturn a logger with the specified name. This function is not supposed to be directly accessed by library users. )r4rr*)names r get_loggerr;`s #$   T ""rcFttjS)aReturn the current level for the Optuna's root logger. Example: Get the default verbosity level. .. testsetup:: def objective(trial): x = trial.suggest_float("x", -100, 100) y = trial.suggest_categorical("y", [-1, 0, 1]) return x**2 + y .. testcode:: import optuna # The default verbosity level of Optuna is `optuna.logging.INFO`. print(optuna.logging.get_verbosity()) # 20 print(optuna.logging.INFO) # 20 # There are logs of the INFO level. study = optuna.create_study() study.optimize(objective, n_trials=5) # [I 2021-10-31 05:35:17,232] A new study created ... # [I 2021-10-31 05:35:17,238] Trial 0 finished with value: ... # [I 2021-10-31 05:35:17,245] Trial 1 finished with value: ... # ... .. testoutput:: :hide: 20 20 Returns: Logging level, e.g., ``optuna.logging.DEBUG`` and ``optuna.logging.INFO``. .. note:: Optuna has following logging levels: - ``optuna.logging.CRITICAL``, ``optuna.logging.FATAL`` - ``optuna.logging.ERROR`` - ``optuna.logging.WARNING``, ``optuna.logging.WARN`` - ``optuna.logging.INFO`` - ``optuna.logging.DEBUG`` )r4r+getEffectiveLevelr"rr get_verbosityr>jsd#$ # % 7 7 99rcJttj|y)aaSet the level for the Optuna's root logger. Example: Set the logging level ``optuna.logging.WARNING``. .. testsetup:: def objective(trial): x = trial.suggest_int("x", -10, 10) return x**2 .. testcode:: import optuna # There are INFO level logs. study = optuna.create_study() study.optimize(objective, n_trials=10) # [I 2021-10-31 02:59:35,088] Trial 0 finished with value: 16.0 ... # [I 2021-10-31 02:59:35,091] Trial 1 finished with value: 1.0 ... # [I 2021-10-31 02:59:35,096] Trial 2 finished with value: 1.0 ... # Setting the logging level WARNING, the INFO logs are suppressed. optuna.logging.set_verbosity(optuna.logging.WARNING) study.optimize(objective, n_trials=10) .. testcleanup:: optuna.logging.set_verbosity(optuna.logging.INFO) Args: verbosity: Logging level, e.g., ``optuna.logging.DEBUG`` and ``optuna.logging.INFO``. .. note:: Optuna has following logging levels: - ``optuna.logging.CRITICAL``, ``optuna.logging.FATAL`` - ``optuna.logging.ERROR`` - ``optuna.logging.WARNING``, ``optuna.logging.WARN`` - ``optuna.logging.INFO`` - ``optuna.logging.DEBUG`` N)r4r+r0) verbositys r set_verbosityrAs^#$'' 2rcbttJtjty)aDisable the default handler of the Optuna's root logger. Example: Stop and then resume logging to :obj:`sys.stderr`. .. testsetup:: def objective(trial): x = trial.suggest_float("x", -100, 100) y = trial.suggest_categorical("y", [-1, 0, 1]) return x**2 + y .. testcode:: import optuna study = optuna.create_study() # There are no logs in sys.stderr. optuna.logging.disable_default_handler() study.optimize(objective, n_trials=10) # There are logs in sys.stderr. optuna.logging.enable_default_handler() study.optimize(objective, n_trials=10) # [I 2020-02-23 17:00:54,314] Trial 10 finished with value: ... # [I 2020-02-23 17:00:54,356] Trial 11 finished with value: ... # ... N)r4r r+r6r"rrdisable_default_handlerrCs)B#$  '' ',,-=>rcbttJtjty)zEnable the default handler of the Optuna's root logger. Please refer to the example shown in :func:`~optuna.logging.disable_default_handler()`. N)r4r r+r/r"rrenable_default_handlerrEs( #$  '' '))*:;rc6tdt_y)aDisable propagation of the library log outputs. Note that log propagation is disabled by default. You only need to use this function to stop log propagation when you use :func:`~optuna.logging.enable_propagation()`. Example: Stop propagating logs to the root logger on the second optimize call. .. testsetup:: def objective(trial): x = trial.suggest_float("x", -100, 100) y = trial.suggest_categorical("y", [-1, 0, 1]) return x**2 + y .. testcode:: import optuna import logging optuna.logging.disable_default_handler() # Disable the default handler. logger = logging.getLogger() logger.setLevel(logging.INFO) # Setup the root logger. logger.addHandler(logging.FileHandler("foo.log", mode="w")) optuna.logging.enable_propagation() # Propagate logs to the root logger. study = optuna.create_study() logger.info("Logs from first optimize call") # The logs are saved in the logs file. study.optimize(objective, n_trials=10) optuna.logging.disable_propagation() # Stop propogating logs to the root logger. logger.info("Logs from second optimize call") # The new logs for second optimize call are not saved. study.optimize(objective, n_trials=10) with open("foo.log") as f: assert f.readline().startswith("A new study created") assert f.readline() == "Logs from first optimize call\n" # Check for logs after second optimize call. assert f.read().split("Logs from second optimize call\n")[-1] == "" FNr4r+r1r"rrdisable_propagationrHsb#$+0(rc6tdt_y)aEnable propagation of the library log outputs. Please disable the Optuna's default handler to prevent double logging if the root logger has been configured. Example: Propagate all log output to the root logger in order to save them to the file. .. testsetup:: def objective(trial): x = trial.suggest_float("x", -100, 100) y = trial.suggest_categorical("y", [-1, 0, 1]) return x**2 + y .. testcode:: import optuna import logging logger = logging.getLogger() logger.setLevel(logging.INFO) # Setup the root logger. logger.addHandler(logging.FileHandler("foo.log", mode="w")) optuna.logging.enable_propagation() # Propagate logs to the root logger. optuna.logging.disable_default_handler() # Stop showing logs in sys.stderr. study = optuna.create_study() logger.info("Start optimization.") study.optimize(objective, n_trials=10) with open("foo.log") as f: assert f.readline().startswith("A new study created") assert f.readline() == "Start optimization.\n" TNrGr"rrenable_propagationrJ;sR#$+/(r)returnzlogging.Formatter)rKbool)rKstr)rKlogging.Logger)rKNone)r:rMrKrN)rKint)r@rPrKrO) __future__rrrrrrrr r rr threadingr__all__Lockr __annotations__r rrr'r+r4r8r;r>rArCrErHrJr"rrrVs"  ' (~(+/(/ 4 "2."  #3:l03f$?N <21j*0r