o
    /wi                     @  s   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 Zd dlZW d   n1 sDw   Y  e	d	G d
d deeZeddddG dd deZdS )    )annotationsN)Any)deprecated_class)experimental_class)
try_import)BaseJournalBackend)BaseJournalSnapshotz3.1.0c                   @  sb   e Zd ZdZd&d'ddZd(ddZd)ddZd*ddZd+ddZd,ddZ	d-d d!Z
d.d#d$Zd%S )/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.
    F urlstruse_clusterboolprefixreturnNonec                 C  s,   t   || _tj|| _|| _|| _d S N)	_importscheck_urlredisRedisfrom_url_redis_use_cluster_prefix)selfr   r   r    r   [/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/optuna/storages/journal/_redis.py__init__&   s
   
zJournalRedisBackend.__init__dict[Any, Any]c                 C  s   | j  }|d= |S )Nr   )__dict__copyr   stater   r   r   __getstate__.   s   
z JournalRedisBackend.__getstate__r$   c                 C  s    | j | tj| j| _d S r   )r!   updater   r   r   r   r   r#   r   r   r   __setstate__3   s   z JournalRedisBackend.__setstate__log_number_fromintlist[dict[str, Any]]c           	      C  s   | j | j d}|d u rg S t|}g }t||d D ]C}d}	 | j | |}|d ur0nt| t|d d}q"z
|	t
| W q t
jy` } z||krV|W Y d }~qd }~ww |S )N:log_number   g?T   
   )r   getr   r)   range_key_log_idtimesleepminappendjsonloadsJSONDecodeError)	r   r(   max_log_number_bytesmax_log_numberlogs
log_number
sleep_secslogerrr   r   r   	read_logs7   s.   
zJournalRedisBackend.read_logsr;   c              	   C  sv   | j | j dd |D ]+}| js | j dd| jt| q| j | j dd}| j | 	|t| qd S )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   evalr6   dumpsincrsetr1   )r   r;   r>   r<   r   r   r   append_logsM   s   zJournalRedisBackend.append_logssnapshotbytesc                 C  s   | j | j d| d S Nz	:snapshot)r   rF   r   )r   rH   r   r   r   save_snapshot\   s   z!JournalRedisBackend.save_snapshotbytes | Nonec                 C  s   | j | j d}|S rJ   )r   r/   r   )r   snapshot_bytesr   r   r   load_snapshot_   s   z!JournalRedisBackend.load_snapshotr<   c                 C  s   | j  d| S )Nz:log:)r   )r   r<   r   r   r   r1   c   s   zJournalRedisBackend._key_log_idN)Fr
   )r   r   r   r   r   r   r   r   )r   r    )r$   r    r   r   )r(   r)   r   r*   )r;   r*   r   r   )rH   rI   r   r   )r   rL   )r<   r)   r   r   )__name__
__module____qualname____doc__r   r%   r'   r@   rG   rK   rN   r1   r   r   r   r   r	      s    





r	   z4.0.0z6.0.0zBUse :class:`~optuna.storages.journal.JournalRedisBackend` instead.)textc                   @  s   e Zd ZdS )JournalRedisStorageN)rO   rP   rQ   r   r   r   r   rT   g   s    rT   )
__future__r   r6   r2   typingr   optuna._deprecatedr   optuna._experimentalr   optuna._importsr   optuna.storages.journal._baser   r   r   r   r	   rT   r   r   r   r   <module>   s$    
T