
    (^iXA                       d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dlm	Z	 d dlm
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 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
rd dl!Z!d dl"m#Z$ d dl%m&Z& d dl%m'Z' n  ed      Z& ed      Z' ed      Z! ed      Z$d"dZ( ed       G d de             Z) G d d      Z* G d  d!      Z+y)#    )annotations)	Container)SequenceN)Any)TYPE_CHECKING)experimental_class)_LazyImport)BaseDistribution)distribution_to_json)DuplicatedStudyError)UpdateFinishedTrialError)BaseStorage)DEFAULT_STUDY_NAME_PREFIX)FrozenStudy)StudyDirection)FrozenTrial)
TrialState)servicer)api_pb2)api_pb2_grpcz,optuna.storages._grpc.auto_generated.api_pb2z1optuna.storages._grpc.auto_generated.api_pb2_grpcgrpczoptuna.storages._grpc.servicerc                <    t        j                  |  d| dg      S )N:)zgrpc.max_receive_message_length)options)r   insecure_channelhostports     ]/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/storages/_grpc/client.pycreate_insecure_channelr!   '   s)      &$#J"K     z4.2.0c                  <   e Zd ZdZdddddZd dZd!d"dZd d	Zd#d
Zd$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d+dZd,dZd!d-dZ	 	 	 	 	 	 	 	 	 	 d.dZ	 d!	 	 	 	 	 	 	 d/dZ	 	 	 	 	 	 	 	 d0dZd1dZd1dZd2dZd3dZ	 	 d4	 	 	 	 	 	 	 d5dZy)6GrpcStorageProxyax  gRPC client for :func:`~optuna.storages.run_grpc_proxy_server`.

    Example:

        This is a simple example of using :class:`~optuna.storages.GrpcStorageProxy` with
        :func:`~optuna.storages.run_grpc_proxy_server`.

        .. code::

            import optuna
            from optuna.storages import GrpcStorageProxy

            storage = GrpcStorageProxy(host="localhost", port=13000)
            study = optuna.create_study(storage=storage)

        Please refer to the example in :func:`~optuna.storages.run_grpc_proxy_server` for the
        server side code.

    Args:
        host: The hostname of the gRPC server.
        port: The port of the gRPC server.

    .. warning::

        Currently, gRPC storage proxy in combination with an SQLite3 database may cause unexpected
        behaviors when calling :func:`optuna.delete_study` due to non-invalidated cache.
    	localhosti2  r   c               @    || _         || _        | j                          y N)_host_port_setup)selfr   r   s      r    __init__zGrpcStorageProxy.__init__K   s    

r"   c                    t        | j                  | j                        | _        t	        j
                  | j                        | _        t        | j                        | _        y)z!Set up the gRPC channel and stub.N)	r!   r(   r)   _channelr   StorageServiceStub_stubGrpcClientCache_cacher+   s    r    r*   zGrpcStorageProxy._setupP   s>    /

DJJG!44T]]C
%djj1r"   Nc                   	 t        | j                  | j                        5 }t        j                  |      j                  |       ddd       y# 1 sw Y   yxY w# t        j                  $ r}t        d      |d}~ww xY w)zWait until the gRPC server is ready.

        Args:
            timeout: The maximum time to wait in seconds. If :obj:`None`, wait indefinitely.
        )timeoutNzGRPC connection timeout)r!   r(   r)   r   channel_ready_futureresultFutureTimeoutErrorConnectionError)r+   r5   channeles       r    wait_server_readyz"GrpcStorageProxy.wait_server_readyV   sv    	D(TZZ@ KG))'299'9JK K K&& 	D!";<!C	Ds4    A &AA AA A B0A<<Bc                8    | j                   j                          y)zClose the gRPC channel.N)r.   closer3   s    r    r>   zGrpcStorageProxy.closeb   s    r"   c                L    | j                   j                         }|d= |d= |d= |S )Nr.   r0   r2   )__dict__copyr+   states     r    __getstate__zGrpcStorageProxy.__getstate__f   s/    ""$*'N(Or"   c                Z    | j                   j                  |       | j                          y r'   )r@   updater*   rB   s     r    __setstate__zGrpcStorageProxy.__setstate__m   s    U#r"   c                   t        j                  |D cg c]5  }|t        j                  k(  rt         j                  nt         j                  7 c}|xs$ t
        t        t        j                               z         }	 | j                  j                  |      }|j"                  S c c}w # t        j                  $ r8}|j                         t        j                  j                  k(  rt         | d }~ww xY w)N)
directions
study_name)r   CreateNewStudyRequestr   MINIMIZEMAXIMIZEr   struuiduuid4r0   CreateNewStudyr   RpcErrorcode
StatusCodeALREADY_EXISTSr   study_id)r+   rI   rJ   drequestresponser;   s          r    create_new_studyz!GrpcStorageProxy.create_new_studyq   s     // $ %&)@)@$@  gFVFVV "R%>TZZ\AR%R
	zz009H
     }} 	vvx4??999*1	s   :B%>B* *C5=3C00C5c                :   t        j                  |      }	 | j                  j                  |       | j                  j                  |       y # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wN)rV   )r   DeleteStudyRequestr0   DeleteStudyr   rR   rS   rT   	NOT_FOUNDKeyErrorr2   delete_study_cache)r+   rV   rX   r;   s       r    delete_studyzGrpcStorageProxy.delete_study   sv    ,,h?	JJ""7+ 	&&x0 }} 	vvx4??444A%	s   A B"3BBc                .   t        j                  ||t        j                  |            }	 | j                  j                  |       y # t        j                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wN)rV   keyvalue)r   SetStudyUserAttributeRequestjsondumpsr0   SetStudyUserAttributer   rR   rS   rT   r_   r`   r+   rV   re   rf   rX   r;   s         r    set_study_user_attrz$GrpcStorageProxy.set_study_user_attr   sp    663djj.?
	JJ,,W5}} 	vvx4??444A%	   A	 	B3BBc                .   t        j                  ||t        j                  |            }	 | j                  j                  |       y # t        j                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wrd   )r   SetStudySystemAttributeRequestrh   ri   r0   SetStudySystemAttributer   rR   rS   rT   r_   r`   rk   s         r    set_study_system_attrz&GrpcStorageProxy.set_study_system_attr   sp    883djj.?
	JJ..w7}} 	vvx4??444A%	rm   c                   t        j                  |      }	 | j                  j                  |      }|j                  S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY w)N)rJ   )r   GetStudyIdFromNameRequestr0   GetStudyIdFromNamer   rR   rS   rT   r_   r`   rV   )r+   rJ   rX   rY   r;   s        r    get_study_id_from_namez'GrpcStorageProxy.get_study_id_from_name   sr    33zJ	zz44W=H
    	 }} 	vvx4??444A%	   ? B
3BB
c                   t        j                  |      }	 | j                  j                  |      }|j                  S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wr\   )r   GetStudyNameFromIdRequestr0   GetStudyNameFromIdr   rR   rS   rT   r_   r`   rJ   )r+   rV   rX   rY   r;   s        r    get_study_name_from_idz'GrpcStorageProxy.get_study_name_from_id   sr    33XF	zz44W=H
 """	 }} 	vvx4??444A%	rv   c                   t        j                  |      }	 | j                  j                  |      }|j                  D cg c]5  }|t         j                  k(  rt        j                  nt        j                  7 c}S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wc c}w r\   )r   GetStudyDirectionsRequestr0   GetStudyDirectionsr   rR   rS   rT   r_   r`   rI   rL   r   rM   )r+   rV   rX   rY   r;   rW   s         r    get_study_directionsz%GrpcStorageProxy.get_study_directions   s    33XF	zz44W=H ((
 ()G,<,<'<N##.BYBYY
 	
	 }} 	vvx4??444A%	
s   A> :C>C	3CC	c                   t        j                  |      }	 | j                  j                  |      }|j                  j                         D ci c]  \  }}|t        j                  |       c}}S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wc c}}w r\   )r   GetStudyUserAttributesRequestr0   GetStudyUserAttributesr   rR   rS   rT   r_   r`   user_attributesitemsrh   loadsr+   rV   rX   rY   r;   re   rf   s          r    get_study_user_attrsz%GrpcStorageProxy.get_study_user_attrs   s    77J	zz88AH
 :B9Q9Q9W9W9YZ:3TZZ&&ZZ	 }} 	vvx4??444A%	 [   A4  C4B?3B::B?c                   t        j                  |      }	 | j                  j                  |      }|j                  j                         D ci c]  \  }}|t        j                  |       c}}S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY wc c}}w r\   )r   GetStudySystemAttributesRequestr0   GetStudySystemAttributesr   rR   rS   rT   r_   r`   system_attributesr   rh   r   r   s          r    get_study_system_attrsz'GrpcStorageProxy.get_study_system_attrs   s    998L	zz::7CH
 :B9S9S9Y9Y9[\:3TZZ&&\\	 }} 	vvx4??444A%	 ]r   c                   t        j                         }| j                  j                  |      }|j                  D cg c]  }t        |j                  |j                  d |j                  D cg c]5  }|t         j                  k(  rt        j                  nt        j                  7 c}|j                  j                         D ci c]  \  }}|t        j                  |       c}}|j                   j                         D ci c]  \  }}|t        j                  |       c}}       c}}}}S c c}w c c}}w c c}}w c c}}}}w )N)rV   rJ   	directionrI   
user_attrssystem_attrs)r   GetAllStudiesRequestr0   GetAllStudiesstudiesr   rV   rJ   rI   rL   r   rM   r   r   rh   r   r   )r+   rX   rY   studyrW   re   rf   s          r    get_all_studiesz GrpcStorageProxy.get_all_studies   s$   ..0::++G4" "))!
 
    ++ #-- 01G4D4D/DN++.JaJaa
 >C=R=R=X=X=Z/9sECE** >C=T=T=Z=Z=\/9sECE**
 	


s0   /E
0:D:*E
	 D?) E
	 E )E
:E
c                x   |t        j                  |d      }n+t        j                  |t        j                  |      d      }	 | j                  j                  |      }|j                  S # t        j                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY w)NT)rV   template_trial_is_noneF)rV   template_trialr   )r   CreateNewTrialRequestgrpc_servicer_to_proto_trialr0   CreateNewTrialr   rR   rS   rT   r_   r`   trial_id)r+   rV   r   rX   rY   r;   s         r    create_new_trialz!GrpcStorageProxy.create_new_trial   s    !33X^bcG33!,<<^L',G
	zz009H
    	 }} 	vvx4??444A%	s   A. .B93B44B9c                   t        j                  |||t        |            }	 | j                  j	                  |       y # t
        j                  $ r}|j                         t
        j                  j                  k(  rt        ||j                         t
        j                  j                  k(  rt        ||j                         t
        j                  j                  k(  rt        | d }~ww xY w)N)r   
param_nameparam_value_internaldistribution)r   SetTrialParameterRequestr   r0   SetTrialParameterr   rR   rS   rT   r_   r`   FAILED_PRECONDITIONr   INVALID_ARGUMENT
ValueError)r+   r   r   r   r   rX   r;   s          r    set_trial_paramz GrpcStorageProxy.set_trial_param  s     22!!5-l;	

	JJ((1}} 	vvx4??444A%T__@@@.A5T__=== a'	s   A   C/BC**C/c                   t        j                  |t        j                  |      |      }	 | j                  j                  |      }|j                  S # t        j                  $ rj}|j                         t        j                  j                  k(  rt        ||j                         t        j                  j                  k(  rt        | d }~ww xY w)N)r   rC   values)r   SetTrialStateValuesRequestr   _to_proto_trial_stater0   SetTrialStateValuesr   rR   rS   rT   r_   r`   r   r   trial_updated)r+   r   rC   r   rX   rY   r;   s          r    set_trial_state_valuesz'GrpcStorageProxy.set_trial_state_values  s     4455e<

	zz55g>H %%% }} 	vvx4??444A%T__@@@.A5	s   A C'A%CCc                l   t        j                  |||      }	 | j                  j                  |       y # t        j
                  $ rj}|j                         t        j                  j                  k(  rt        ||j                         t        j                  j                  k(  rt        | d }~ww xY w)N)r   stepintermediate_value)r    SetTrialIntermediateValueRequestr0   SetTrialIntermediateValuer   rR   rS   rT   r_   r`   r   r   )r+   r   r   r   rX   r;   s         r    set_trial_intermediate_valuez-GrpcStorageProxy.set_trial_intermediate_value.  s     ::D=O
	JJ009}} 	vvx4??444A%T__@@@.A5	s   6 B3	A%B..B3c                   t        j                  ||t        j                  |            }	 | j                  j                  |       y # t        j                  $ rj}|j                         t        j                  j                  k(  rt        ||j                         t        j                  j                  k(  rt        | d }~ww xY wN)r   re   rf   )r   SetTrialUserAttributeRequestrh   ri   r0   SetTrialUserAttributer   rR   rS   rT   r_   r`   r   r   r+   r   re   rf   rX   r;   s         r    set_trial_user_attrz$GrpcStorageProxy.set_trial_user_attr>  s    663djj.?
	JJ,,W5}} 	vvx4??444A%T__@@@.A5	   A	 	CA%CCc                   t        j                  ||t        j                  |            }	 | j                  j                  |       y # t        j                  $ rj}|j                         t        j                  j                  k(  rt        ||j                         t        j                  j                  k(  rt        | d }~ww xY wr   )r   SetTrialSystemAttributeRequestrh   ri   r0   SetTrialSystemAttributer   rR   rS   rT   r_   r`   r   r   r   s         r    set_trial_system_attrz&GrpcStorageProxy.set_trial_system_attrL  s    883djj.?
	JJ..w7}} 	vvx4??444A%T__@@@.A5	r   c                   t        j                  ||      }	 | j                  j                  |      }|j                  S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY w)N)rV   trial_number)r   'GetTrialIdFromStudyIdTrialNumberRequestr0    GetTrialIdFromStudyIdTrialNumberr   rR   rS   rT   r_   r`   r   )r+   rV   r   rX   rY   r;   s         r    'get_trial_id_from_study_id_trial_numberz8GrpcStorageProxy.get_trial_id_from_study_id_trial_numberZ  sw    AAL
	zzBB7KH
    	 }} 	vvx4??444A%	s   A   B3BBc                @   t        j                  |      }	 | j                  j                  |      }t        j                  |j                        S # t        j
                  $ r8}|j                         t        j                  j                  k(  rt        | d }~ww xY w)N)r   )r   GetTrialRequestr0   GetTrialr   rR   rS   rT   r_   r`   r   _from_proto_trialtrial)r+   r   rX   rY   r;   s        r    	get_trialzGrpcStorageProxy.get_trialf  s{    ))8<	zz**73H
 ..x~~>>	 }} 	vvx4??444A%	s   A B%3BBc                l    | j                   j                  ||      }|rt        j                  |      S |S r'   )r2   get_all_trialsrA   deepcopy)r+   rV   r   statestrialss        r    r   zGrpcStorageProxy.get_all_trialsp  s0     ++Hf=(0t}}V$<f<r"   )r   rN   r   intreturnNoner   r   r'   )r5   zfloat | Noner   r   )r   dict[Any, Any])rC   r   r   r   )rI   zSequence[StudyDirection]rJ   z
str | Noner   r   rV   r   r   r   )rV   r   re   rN   rf   r   r   r   )rJ   rN   r   r   )rV   r   r   rN   )rV   r   r   zlist[StudyDirection])rV   r   r   zdict[str, Any])r   zlist[FrozenStudy])rV   r   r   zFrozenTrial | Noner   r   )
r   r   r   rN   r   floatr   r
   r   r   )r   r   rC   r   r   zSequence[float] | Noner   bool)r   r   r   r   r   r   r   r   )r   r   re   rN   rf   r   r   r   )rV   r   r   r   r   r   )r   r   r   r   )TN)rV   r   r   r   r   Container[TrialState] | Noner   list[FrozenTrial])__name__
__module____qualname____doc__r,   r*   r<   r>   rD   rG   rZ   rb   rl   rq   ru   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r    r"   r    r$   r$   -   sR   8 '2u 
2
D
 NR!2!@J!	!$
1		!#
[]
,!"  $	
 ' 
4 RV&&$.&8N&	&(#&<A	 
!? /3	== = -	=
 
=r"   r$   c                  @    e Zd ZddZddZ	 	 	 	 	 	 d	dZddZd
dZy)r1   c                R    i | _         || _        t        j                         | _        y r'   )r   grpc_client	threadingLocklock)r+   r   s     r    r,   zGrpcClientCache.__init__{  s    8:&NN$	r"   c                ~    | j                   5  | j                  j                  |d        d d d        y # 1 sw Y   y xY wr'   )r   r   pop)r+   rV   s     r    ra   z"GrpcClientCache.delete_study_cache  s2    YY 	-LLXt,	- 	- 	-s   3<c                v   | j                   5  | j                  |       | j                  |   }|=|j                  j	                         D ci c]  \  }}|j
                  |v s|| }}}n|j                  }t        t        |j                         d             }|cd d d        S c c}}w # 1 sw Y   y xY w)Nc                    | j                   S r'   )number)ts    r    <lambda>z0GrpcClientCache.get_all_trials.<locals>.<lambda>  s
     r"   )re   )	r    _read_trials_from_remote_storager   r   r   rC   listsortedr   )r+   rV   r   r   r   r   r   s          r    r   zGrpcClientCache.get_all_trials  s     YY 		11(;LL*E!5:\\5G5G5I_	QWWX^M^&!)__&6HIJF		 		
 `		 		s$   A B/B)$B))6B/)B//B8c                Z   || j                   vrt               | j                   |<   | j                   |   }t        j                  ||j                  |j
                        }	 | j                  j                  |      }|j                  sy |j                  D ])  }t!        j"                  |      }| j%                  ||       + y # t        j                  $ rT}|j                         t        j                  j                  k(  r#| j                   j                  |d        t        | d }~ww xY w)N)rV   included_trial_idstrial_id_greater_than)r   GrpcClientCacheEntryr   GetTrialsRequestunfinished_trial_idslast_finished_trial_idr   	GetTrialsr   rR   rS   rT   r_   r   r`   r   r   r   _add_trial_to_cache)r+   rV   r   reqresr;   trial_protor   s           r    r   z0GrpcClientCache._read_trials_from_remote_storage  s    4<<'%9%;DLL"X&&&$99"'">">

	"",,S1C zz:: 	6K!33K@E$$Xu5	6 }} 	vvx4??444  40A%		s   "C D*AD%%D*c                h   | j                   |   }||j                  |j                  <   |j                  j	                         s&|j
                  j                  |j                         y t        |j                  |j                        |_	        |j
                  j                  |j                         y r'   )r   r   r   rC   is_finishedr   add	_trial_idmaxr   discard)r+   rV   r   r   s       r    r   z#GrpcClientCache._add_trial_to_cache  s~    X&%*U\\"{{&&(&&**5??;'*5+G+G'Y$""**5??;r"   N)r   zapi_pb2_grpc.StorageServiceStubr   r   r   )rV   r   r   r   r   r   )rV   r   r   r   r   r   )r   r   r   r,   ra   r   r   r   r   r"   r    r1   r1   z  s3    %
-%A	60	<r"   r1   c                      e Zd ZddZy)r   c                >    i | _         t               | _        d| _        y )Nr   )r   setr   r   r3   s    r    r,   zGrpcClientCacheEntry.__init__  s    .0.1e!+-#r"   Nr   )r   r   r   r,   r   r"   r    r   r     s    .r"   r   )r   rN   r   r   r   zgrpc.Channel),
__future__r   collections.abcr   r   rA   rh   r   typingr   r   rO   optuna._experimentalr   optuna._importsr	   optuna.distributionsr
   r   optuna.exceptionsr   r   optuna.storages._baser   r   optuna.study._frozenr   optuna.study._study_directionr   optuna.trial._frozenr   optuna.trial._stater   r   optuna.storages._grpcr   r   $optuna.storages._grpc.auto_generatedr   r   r!   r$   r1   r   r   r"   r    <module>r     s    " % $        3 ' 1 5 2 6 - ; , 8 , * ?<AHIGRSLvD @AM GI={ I= I=X
9< 9<x. .r"   