
    (^i                       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       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)    )annotations)	GeneratorN)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       _/var/www/html/hubwallet-dev/venv/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__4   s.    U#kk**4995r   c              #    K   | j                   j                  | j                   d      }|y t        |      }t	        ||dz         D ]o  }d}	 | j                   j                  | j                  |            }|n%t        j                  |       t        |dz  d      }R	 t        j                  |       q y # t        j                  $ r}||k7  r|Y d }~d }~ww xY ww)N:log_number   g?   
   )r   getr   intrange_key_log_idtimesleepminjsonloadsJSONDecodeError)r   log_number_frommax_log_number_bytesmax_log_number
log_number
sleep_secslogerrs           r   	read_logszJournalRedisBackend.read_logs8   s     #{{$,,{/KL'12!1CD 	JJkkood&6&6z&BC?

:& a4
 jjo%	 '' /I 0s0   BC"!B;8C";C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setr0   )r   logsr<   r:   s       r   append_logszJournalRedisBackend.append_logsL   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   rE   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   r0   zJournalRedisBackend._key_log_idb   s    ,,uZL11r   N)F )r   strr   boolr   rQ   returnNone)rS   dict[Any, Any])r#   rU   rS   rT   )r7   r.   rS   z%Generator[dict[str, Any], None, None])rF   zlist[dict[str, Any]]rS   rT   )rJ   bytesrS   rT   )rS   zbytes | None)r:   r.   rS   rQ   )__name__
__module____qualname____doc__r   r$   r'   r>   rG   rK   rN   r0    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)rW   rX   rY   r[   r   r   r^   r^   f   s     	r   r^   )
__future__r   collections.abcr   r4   r1   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O2,.A O2 O2d W_	- 		u s    A>>B