
    &`i5                     :   d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZmZ 	 ddl Z dd
l!m"Z" n# e#$ r dxZ"Z Y nw xY w ej$        e%          Z& G d d          Z' G d de          Z(dS )z+BOHB (Bayesian Optimization with HyperBand)    N)DictListOptionalUnion)cloudpickle)DEFAULT_METRIC)UNDEFINED_METRIC_MODEUNDEFINED_SEARCH_SPACEUNRESOLVED_SEARCH_SPACESearcher)CategoricalDomainFloatInteger
LogUniformNormal	QuantizedUniform)parse_spec_vars)flatten_dictunflatten_list_dictBOHBc                   &    e Zd ZdZdededefdZdS )_BOHBJobWrapperz&Mock object for HpBandSter to process.lossbudgetconfigc                 ^    d|i| _         ||                                d| _        d | _        d S )Nr   )r   r   )resultcopykwargs	exception)selfr   r   r   s       t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/search/bohb/bohb_search.py__init__z_BOHBJobWrapper.__init__+   s/    tn!'6;;==AA    N)__name__
__module____qualname____doc__floatr   r&    r'   r%   r   r   (   sC        00U E 4      r'   r   c                       e Zd ZdZ	 	 	 	 	 	 	 d!deeedf                  dee         dee         dee         d	eee                  d
ee	         de	f fdZ
de	defdZd Zdee         dee         dedefdZdedee         fdZdedefdZ	 d"dedee         defdZdededefdZdefdZdefdZededdfd            ZdefdZdefd Z xZS )#TuneBOHBa  BOHB suggestion component.


    Requires HpBandSter and ConfigSpace to be installed. You can install
    HpBandSter and ConfigSpace with: ``pip install hpbandster ConfigSpace``.

    This should be used in conjunction with HyperBandForBOHB.

    Args:
        space: Continuous ConfigSpace search space.
            Parameters will be sampled from this space which will be used
            to run trials.
        bohb_config: configuration for HpBandSter BOHB algorithm
        metric: The training result objective value attribute. If None
            but a mode was passed, the anonymous metric `_metric` will be used
            per default.
        mode: One of {min, max}. Determines whether objective is
            minimizing or maximizing the metric attribute.
        points_to_evaluate: Initial parameter suggestions to be run
            first. This is for when you already have some good parameters
            you want to run first to help the algorithm make better suggestions
            for future parameters. Needs to be a list of dicts containing the
            configurations.
        seed: Optional random seed to initialize the random number
            generator. Setting this should lead to identical initial
            configurations at each run.
        max_concurrent: Number of maximum concurrent trials.
            If this Searcher is used in a ``ConcurrencyLimiter``, the
            ``max_concurrent`` value passed to it will override the
            value passed here. Set to <= 0 for no limit on concurrency.

    Tune automatically converts search spaces to TuneBOHB's format:

    .. code-block:: python

        config = {
            "width": tune.uniform(0, 20),
            "height": tune.uniform(-100, 100),
            "activation": tune.choice(["relu", "tanh"])
        }

        algo = TuneBOHB(metric="mean_loss", mode="min")
        bohb = HyperBandForBOHB(
            time_attr="training_iteration",
            metric="mean_loss",
            mode="min",
            max_t=100)
        run(my_trainable, config=config, scheduler=bohb, search_alg=algo)

    If you would like to pass the search space manually, the code would
    look like this:

    .. code-block:: python

        import ConfigSpace as CS

        config_space = CS.ConfigurationSpace()
        config_space.add_hyperparameter(
            CS.UniformFloatHyperparameter("width", lower=0, upper=20))
        config_space.add_hyperparameter(
            CS.UniformFloatHyperparameter("height", lower=-100, upper=100))
        config_space.add_hyperparameter(
            CS.CategoricalHyperparameter(
                name="activation", choices=["relu", "tanh"]))

        algo = TuneBOHB(
            config_space, metric="mean_loss", mode="min")
        bohb = HyperBandForBOHB(
            time_attr="training_iteration",
            metric="mean_loss",
            mode="min",
            max_t=100)
        run(my_trainable, scheduler=bohb, search_alg=algo)

    Nr   spacezConfigSpace.ConfigurationSpacebohb_configmetricmodepoints_to_evaluateseedmax_concurrentc                    t           
J d            |r|dv s
J d            i | _        || _        || _        t	          |t
                    ri|rgt          |          \  }}	}
|	s|
rPt                              t          j
        dt          |                                |                     |          }|| _        || _        t                      | _        t                      | _        || _        || _        t)          t*          |                               | j        |           | j        r|                                  d S d S )NzHpBandSter must be installed!
            You can install HpBandSter with the command:
            `pip install hpbandster ConfigSpace`.)minmaxz`mode` must be 'min' or 'max'.r0   )parcls)r2   r3   )r   trial_to_params_metric_bohb_config
isinstancedictr   loggerwarningr   formattypeconvert_search_space_space_seedsetrunningpaused_max_concurrent_points_to_evaluatesuperr/   r&   _setup_bohb)r$   r0   r1   r2   r3   r4   r5   r6   resolved_varsdomain_vars	grid_vars	__class__s              r%   r&   zTuneBOHB.__init__~   sk    5   	L>)))+K)))!'eT"" 	9u 	94CE4J4J1M;	 9i 9+2wDJJOOO   11%88
uuee-#5 h&&< 	' 	
 	
 	

 ; 		 	r'   returnc                     || _         dS )NT)rK   )r$   r6   s     r%   set_max_concurrencyzTuneBOHB.set_max_concurrency   s    -tr'   c                 `   ddl m} | j        | j        rt          | _        | j        dk    rd| _        n| j        dk    rd| _        | j        | j                            | j                   t                      | _
        t                      | _        | j        pi } || j        fi || _        d S )Nr   r   r9   g      r8   g      ?),hpbandster.optimizers.config_generators.bohbr   r=   _moder   
_metric_oprG   rF   r5   rH   rI   rJ   r>   bohber)r$   r   r1   s      r%   rN   zTuneBOHB._setup_bohb   s    EEEEEE<DJ)DL:"DOOZ5  !DO:!KTZ(((uuee'-2d4;66+66r'   r   c                     | j         rdS |                     |          }|| _         |r|| _        |r|| _        |                                  dS )NFT)rF   rE   r=   rX   rN   )r$   r2   r3   r   specr0   s         r%   set_search_propertieszTuneBOHB.set_search_properties   sb     ; 	5))&11 	"!DL 	DJtr'   trial_idc                 t   | j         s-t          t          j        | j        j        d                    | j        r| j        s8t          t          j        | j        j        | j        | j                            | j	        dk    r| j	        nt          d          }t          | j                  |k    rd S | j        r| j                            d          }n| j                            d           \  }}t#          j        |          | j        |<   | j                            |           t+          |          S )Nr0   )r;   r0   )r;   r2   r3   r   inf)rF   RuntimeErrorr
   rC   rR   r(   r=   rX   r	   rK   r,   lenrI   rL   poprZ   
get_configr!   deepcopyr<   addr   )r$   r^   r6   r   _s        r%   suggestzTuneBOHB.suggest   sC   { 	&-/w     | 	4: 	%,/4:     %)$81$<$<D  %,, 	 t|..4# 	5-11!44FF ..t44IFA)-v)>)>X&""""6***r'   r    c                     || j         vr| j                            |           d|vrt                              d           d S d|                    di           v r2|                     ||          }| j                            |           d S d S )Nhyperband_infozPBOHB Info not detected in result. Are you using HyperBandForBOHB as a scheduler?r   )	rJ   rI   rf   rA   rB   get
to_wrapperrZ   
new_result)r$   r^   r    hbs_wrappers       r%   on_trial_resultzTuneBOHB.on_trial_result   s    4;&&LX&&&6))NN3     $4b9999//(F;;KK"";///// :9r'   Ferrorc                 ~    | j         |= | j                            |           | j                            |           d S N)r<   rJ   discardrI   )r$   r^   r    rp   s       r%   on_trial_completezTuneBOHB.on_trial_complete   sA      *H%%%X&&&&&r'   c                 x    t          | j        || j                 z  |d         d         | j        |                   S )Nrj   r   )r   rY   r2   r<   )r$   r^   r    s      r%   rl   zTuneBOHB.to_wrapper  s>    OfT[11#$X. *
 
 	
r'   c                 n    | j                             |           | j                            |           d S rr   )rJ   rf   rI   rs   r$   r^   s     r%   on_pausezTuneBOHB.on_pause  s2    !!!X&&&&&r'   c                 n    | j                             |           | j                            |           d S rr   )rJ   rs   rI   rf   rw   s     r%   
on_unpausezTuneBOHB.on_unpause  s4    H%%%"""""r'   r\   c                    t          |           \  }}}|rt          d          t          | d          } t          |           \  }}}dt          dt          dt
          j        j        fd}t          j                    }|D ]E\  }}d	                    d	 |D                       } |||          }	|
                    |	           F|S )
NzTGrid search parameters cannot be automatically converted to a TuneBOHB search space.T)prevent_delimiterr:   domainrS   c                 r   d }|                                 }t          |t                    r|j        }|j        }t          |t
                    r=t          |t                    rg|j        }|j        }|r>t          j
        |j        |z            |z  }t          j        |j        |z            |z  }t          j        | |||d          S t          |t                    rg|j        }|j        }|r>t          j
        |j        |z            |z  }t          j        |j        |z            |z  }t          j        | |||d          S t          |t                    r.t          j                            | |j        |j        |d          S n`t          |t(                    rt          |t                    rm|j        }|j        }|r?t          j
        |j        |z            |z  }t          j        |j        |z            |z  }n|dz  }t          j        | |||d          S t          |t                    rm|j        }|j        }|r?t          j
        |j        |z            |z  }t          j        |j        |z            |z  }n|dz  }t          j        | |||d          S nEt          |t,                    r0t          |t                    rt          j        | |j                  S t3          d                    t7          |          j        t7          |j                  j                            )NT)lowerupperqlogF)musigmar   r      )choiceszLTuneBOHB does not support parameters of type `{}` with samplers of type `{}`)get_samplerr?   r   r   samplerr   r   r   r   mathceilfloorConfigSpaceUniformFloatHyperparameterr   r   hyperparametersNormalFloatHyperparametermeansdr   UniformIntegerHyperparameterr   CategoricalHyperparameter
categories
ValueErrorrC   rD   r(   )r:   r}   quantizer   r   r   s         r%   resolve_valuez4TuneBOHB.convert_search_space.<locals>.resolve_value&  sf    H((**G'9-- *"9!/&%(( 6gz22 "LE"LE O $	&,*A B BX M $
6<(+B C Ch N&A5t     11 "LE"LE O $	&,*A B BX M $
6<(+B C Ch N&A5u     00 &6PPGJ(PU Q   
 FG,, gz22 "LE"LE # $	&,*A B BX M $
6<(+B C Ch N 
&C5t     11 "LE"LE # $	&,*A B BX M $
6<(+B C Ch N 
&C5u    FK00 gw// &@V%6    228&LL)4+?+?+H3 3  r'   /c              3   4   K   | ]}t          |          V  d S rr   )str).0ps     r%   	<genexpr>z0TuneBOHB.convert_search_space.<locals>.<genexpr>q  s(      00a3q66000000r'   )r   r   r   r   r   r   r   HyperparameterConfigurationSpacejoinadd_hyperparameter)
r\   rO   rP   rQ   r   cspathr}   r:   values
             r%   rE   zTuneBOHB.convert_search_space  s   0?0E0E-{I 	.   DD9990?0E0E-{IG	G	$G	(7G	 G	 G	 G	R +--' 	) 	)LD&((00400000C!M#v..E!!%((((	r'   checkpoint_pathc                     | j         }t          |d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nwb)__dict__openr   dump)r$   r   save_object
outputFiles       r%   savezTuneBOHB.savew  s    m/4(( 	6J[*555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   ;??c                     t          |d          5 }t          j        |          }d d d            n# 1 swxY w Y   | j                            |           d S )Nrb)r   r   loadr   update)r$   r   	inputFiler   s       r%   restorezTuneBOHB.restore|  s    /4(( 	6I%*955K	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6[)))))s   266)NNNNNNr   )NF)r(   r)   r*   r+   r   r   r   r   r   intr&   boolrU   rN   r]   rh   ro   rt   r   rl   rx   rz   staticmethodrE   r   r   __classcell__)rR   s   @r%   r/   r/   1   s       J J\ JN&* $"37"- -d$DDEF- d^- 	-
 sm- %T$Z0- sm- - - - - - -^# $    7 7 7*sm+3C=BF	    + + + + + +<
0 
0T 
0 
0 
0 
0 KP' ''%-d^'CG' ' ' '
3 
 
 
 
 
 
' ' ' ' '#3 # # # # \4 \,L \ \ \ \\|6C 6 6 6 6
*s * * * * * * * *r'   r/   ))r+   r!   loggingr   typingr   r   r   r   rayr   ray.tune.resultr   ray.tune.searchr	   r
   r   r   ray.tune.search.sampler   r   r   r   r   r   r   r   !ray.tune.search.variant_generatorr   ray.tune.utils.utilr   r   r   rW   r   ImportError	getLoggerr(   rA   r   r/   r-   r'   r%   <module>r      s   1 1    . . . . . . . . . . . .       * * * * * *           	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 > = = = = = A A A A A A A AAAAAAAA   D;;; 
	8	$	$       N* N* N* N* N*x N* N* N* N* N*s   
A! !	A-,A-