
    ,YHh                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ  e       5 Zd dlZddd        e	d	       G d
 dee             Z eddd       G d de             Zy# 1 sw Y   :xY w)    )annotationsN)Any)deprecated_class)experimental_class)
try_import)BaseJournalBackend)BaseJournalSnapshotz3.1.0c                  R    e Zd ZdZdddZddZddZddZddZddZ	ddZ
dd	Zy
)JournalRedisBackendaR  Redis storage class for Journal log backend.

    Args:
        url:
            URL of the redis storage, password and db are optional.
            (ie: ``redis://localhost:6379``)
        use_cluster:
            Flag whether you use the Redis cluster. If this is :obj:`False`, it is assumed that
            you use the standalone Redis server and ensured that a write operation is atomic. This
            provides the consistency of the preserved logs. If this is :obj:`True`, it is assumed
            that you use the Redis cluster and not ensured that a write operation is atomic. This
            means the preserved logs can be inconsistent due to network errors, and may
            cause errors.
        prefix:
            Prefix of the preserved key of logs. This is useful when multiple users work on one
            Redis server.
    c                    t         j                          || _        t        j                  j                  |      | _        || _        || _        y N)	_importscheck_urlredisRedisfrom_url_redis_use_cluster_prefix)selfurluse_clusterprefixs       W/var/www/html/planif/env/lib/python3.12/site-packages/optuna/storages/journal/_redis.py__init__zJournalRedisBackend.__init__&   s8    	kk**3/'    c                @    | j                   j                         }|d= |S )Nr   )__dict__copyr   states     r   __getstate__z JournalRedisBackend.__getstate__.   s     ""$(Or   c                    | j                   j                  |       t        j                  j	                  | j
                        | _        y r   )r   updater   r   r   r   r   r!   s     r   __setstate__z JournalRedisBackend.__setstate__3   s.    U#kk**4995r   c                   | j                   j                  | j                   d      }|g S t        |      }g }t	        ||dz         D ]|  }d}	 | j                   j                  | j                  |            }|n%t        j                  |       t        |dz  d      }R	 |j                  t        j                  |             ~ |S # t        j                  $ r}||k7  r|Y d }~d }~ww xY w)N:log_number   g?   
   )r   getr   intrange_key_log_idtimesleepminappendjsonloadsJSONDecodeError)	r   log_number_frommax_log_number_bytesmax_log_numberlogs
log_number
sleep_secslogerrs	            r   	read_logszJournalRedisBackend.read_logs7   s    #{{$,,{/KL'I12!1CD 	JJkkood&6&6z&BC?

:& a4
 DJJsO,	  '' /I 0s   "$C

C.C))C.c           	        | j                   j                  | j                   dd       |D ]  }| j                  s<| j                   j	                  dd| j                  t        j                  |             K| j                   j                  | j                   dd      }| j                   j                  | j                  |      t        j                  |              y )Nr(   zlocal i = redis.call('incr', string.format('%s:log_number', ARGV[1])) redis.call('set', string.format('%s:log:%d', ARGV[1], i), ARGV[2])r   r)   )
r   setnxr   r   evalr4   dumpsincrsetr/   )r   r:   r=   r;   s       r   append_logszJournalRedisBackend.append_logsM   s    T\\N+6; 	OC$$  YLLJJsO "[[--k.JAN
 0 0 <djjoN	Or   c                V    | j                   j                  | j                   d|       y Nz	:snapshot)r   rF   r   )r   snapshots     r   save_snapshotz!JournalRedisBackend.save_snapshot\   s    4<<.	2H=r   c                V    | j                   j                  | j                   d      }|S rI   )r   r,   r   )r   snapshot_bytess     r   load_snapshotz!JournalRedisBackend.load_snapshot_   s%    DLL>)CDr   c                $    | j                    d| S )Nz:log:)r   )r   r;   s     r   r/   zJournalRedisBackend._key_log_idc   s    ,,uZL11r   N)F )r   strr   boolr   rQ   returnNone)rS   dict[Any, Any])r"   rU   rS   rT   )r7   r-   rS   list[dict[str, Any]])r:   rV   rS   rT   )rJ   bytesrS   rT   )rS   zbytes | None)r;   r-   rS   rQ   )__name__
__module____qualname____doc__r   r#   r&   r?   rG   rK   rN   r/    r   r   r   r      s0    $
6,O>2r   r   z4.0.0z6.0.0zBUse :class:`~optuna.storages.journal.JournalRedisBackend` instead.)textc                      e Zd Zy)JournalRedisStorageN)rX   rY   rZ   r\   r   r   r_   r_   g   s     	r   r_   )
__future__r   r4   r0   typingr   optuna._deprecatedr   optuna._experimentalr   optuna._importsr   optuna.storages.journal._baser   r	   r   r   r   r_   r\   r   r   <module>rf      s    "    / 3 & < = \ X GQ2,.A Q2 Q2h W_	- 		y s   A88B