o
    }oi                     @  s   d dl mZ 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 sJw   Y  ed
G dd deeZe	ddddG dd deZdS )    )annotations)	GeneratorN)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 )0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   R/home/ubuntu/.local/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__4   s   z JournalRedisBackend.__setstate__log_number_fromint%Generator[dict[str, Any], None, None]c                 c  s    | j | j d}|d u rd S t|}t||d D ]A}d}	 | j | |}|d ur/nt| t|d d}q!zt	
|V  W q t	jy] } z||krS|W Y d }~qd }~ww d S )N:log_number   g?T   
   )r   getr   r*   range_key_log_idtimesleepminjsonloadsJSONDecodeError)r   r)   max_log_number_bytesmax_log_number
log_number
sleep_secslogerrr   r   r   	read_logs8   s.   
zJournalRedisBackend.read_logslogslist[dict[str, Any]]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setr2   )r   r@   r=   r;   r   r   r   append_logsL   s   zJournalRedisBackend.append_logssnapshotbytesc                 C  s   | j | j d| d S Nz	:snapshot)r   rG   r   )r   rI   r   r   r   save_snapshot[   s   z!JournalRedisBackend.save_snapshotbytes | Nonec                 C  s   | j | j d}|S rK   )r   r0   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   r2   b   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@   rA   r   r   )rI   rJ   r   r   )r   rM   )r;   r*   r   r   )__name__
__module____qualname____doc__r    r&   r(   r?   rH   rL   rO   r2   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)rP   rQ   rR   r   r   r   r   rU   f   s    rU   )
__future__r   collections.abcr   r6   r3   typingr   optuna._deprecatedr   optuna._experimentalr   optuna._importsr   optuna.storages.journal._baser   r	   r   r   r
   rU   r   r   r   r   <module>   s&    
R