
    -jin'                    @   % S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJ	r	  S SK
r
S SKrS SKr/ S
Qr\R                  " 5       rS\S'   SqS\S'   SS jrSS jrSS jrSS jrSS jrSS jrS S jrS!S jrSS jrSS jrSS jrSS jrg)"    )annotationsN)CRITICAL)DEBUG)ERROR)FATAL)INFO)WARN)WARNING)r   r   r   r   r   r	   r
   zthreading.Lock_lockzlogging.Handler | None_default_handlerc                 \    Sn Sn[         R                  " SU  SU 3[        R                  S9$ )zuCreate 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 )stream)colorlogTTYColoredFormattersysstderr)headermessages     H/home/james-whalen/.local/lib/python3.13/site-packages/optuna/logging.pycreate_default_formatterr      s8    
 .FG''
xz'3zz     c                 2    [         R                  S5      S   $ )N.r   )__name__split r   r   _get_library_namer   ,   s    >>#q!!r   c                 >    [         R                  " [        5       5      $ N)logging	getLoggerr   r   r   r   _get_library_root_loggerr"   0   s    .011r   c                 \   [            [        (       a
   S S S 5        g [        R                  " 5       q[        R	                  [        5       5        [        5       n U R                  [        5        U R                  [        R                  5        SU l
        S S S 5        g ! , (       d  f       g = f)NF)r   r   r    StreamHandlersetFormatterr   r"   
addHandlersetLevelr   	propagatelibrary_root_loggers    r   _configure_library_root_loggerr+   4   sz     
 
 #002%%&>&@A /G.H&&'78$$W\\2(-% 
s   BA7B
B+c                     [            [        (       d
   S S S 5        g [        5       n U R                  [        5        U R	                  [
        R                  5        S qS S S 5        g ! , (       d  f       g = fr   )r   r   r"   removeHandlerr'   r    NOTSETr)   s    r   _reset_library_root_loggerr/   E   sT     
 
 /G.H))*:;$$W^^4 
s   A&A A&&
A4c                B    [        5         [        R                  " U 5      $ )zrReturn a logger with the specified name.

This function is not supposed to be directly accessed by library users.
)r+   r    r!   )names    r   
get_loggerr2   R   s     #$T""r   c                 F    [        5         [        5       R                  5       $ )a  Return 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``
)r+   r"   getEffectiveLevelr   r   r   get_verbosityr5   \   s    d #$#%7799r   c                J    [        5         [        5       R                  U 5        g)a  Set 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)r+   r"   r'   )	verbositys    r   set_verbosityr8      s    ^ #$''	2r   c                 d    [        5         [        c   e[        5       R                  [        5        g)a=  Disable 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)r+   r   r"   r-   r   r   r   disable_default_handlerr:      s)    B #$''',,-=>r   c                 d    [        5         [        c   e[        5       R                  [        5        g)zEnable the default handler of the Optuna's root logger.

Please refer to the example shown in :func:`~optuna.logging.disable_default_handler()`.
N)r+   r   r"   r&   r   r   r   enable_default_handlerr<      s(     #$'''))*:;r   c                 6    [        5         S[        5       l        g)ae  Disable 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] == ""

FNr+   r"   r(   r   r   r   disable_propagationr?      s    b #$+0(r   c                 6    [        5         S[        5       l        g)ar  Enable 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"

TNr>   r   r   r   enable_propagationrA   -  s    R #$+/(r   )returnzlogging.Formatter)rB   str)rB   logging.Logger)rB   None)r1   rC   rB   rD   )rB   int)r7   rF   rB   rE   )
__future__r   r    r   r   r   r   r   r	   r
   r   	threadingr   __all__Lockr   __annotations__r   r   r   r"   r+   r/   r2   r5   r8   r:   r<   r?   rA   r   r   r   <module>rL      s    "         
   "(~ (+/ ( /
"2."
 #3:l03f$?N	<21j*0r   