Skip to content

Commit 85bbcfc

Browse files
quugeri.a.grebenkin
andauthored
refactor(issue-607): extract _state_to_dict and _load_state_dict methods (#609)
- Add _state_to_dict() to serialize optimizer state to dictionary - Add _load_state_dict() to load optimizer state from dictionary - Update save_state() to use _state_to_dict() - Update load_state() to use _load_state_dict() - Enables JSON-based state manipulation without file I/O Co-authored-by: i.a.grebenkin <i.a.grebenkin@tbank.ru>
1 parent 10772c9 commit 85bbcfc

1 file changed

Lines changed: 35 additions & 17 deletions

File tree

bayes_opt/bayesian_optimization.py

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -406,13 +406,13 @@ def set_gp_params(self, **params: Any) -> None:
406406
params["kernel"] = wrap_kernel(kernel=params["kernel"], transform=self._space.kernel_transform)
407407
self._gp.set_params(**params)
408408

409-
def save_state(self, path: str | PathLike[str]) -> None:
410-
"""Save complete state for reconstruction of the optimizer.
409+
def _state_to_dict(self) -> dict[str, Any]:
410+
"""Convert optimizer state to a dictionary.
411411
412-
Parameters
413-
----------
414-
path : str or PathLike
415-
Path to save the optimization state
412+
Returns
413+
-------
414+
dict
415+
Dictionary containing the complete optimizer state.
416416
"""
417417
random_state = None
418418
if self._random_state is not None:
@@ -428,7 +428,7 @@ def save_state(self, path: str | PathLike[str]) -> None:
428428
# Get constraint values if they exist
429429
constraint_values = self._space._constraint_values.tolist() if self.is_constrained else None
430430
acquisition_params = self._acquisition_function.get_acquisition_params()
431-
state = {
431+
return {
432432
"pbounds": {key: self._space._bounds[i].tolist() for i, key in enumerate(self._space.keys)},
433433
# Add current transformed bounds if using bounds transformer
434434
"transformed_bounds": (self._space.bounds.tolist() if self._bounds_transformer else None),
@@ -448,20 +448,14 @@ def save_state(self, path: str | PathLike[str]) -> None:
448448
"acquisition_params": acquisition_params,
449449
}
450450

451-
with Path(path).open("w") as f:
452-
json.dump(state, f, indent=2)
453-
454-
def load_state(self, path: str | PathLike[str]) -> None:
455-
"""Load optimizer state from a JSON file.
451+
def _load_state_dict(self, state: dict[str, Any]) -> None:
452+
"""Load optimizer state from a dictionary.
456453
457454
Parameters
458455
----------
459-
path : str or PathLike
460-
Path to the JSON file containing the optimizer state.
456+
state : dict
457+
Dictionary containing the optimizer state.
461458
"""
462-
with Path(path).open("r") as file:
463-
state = json.load(file)
464-
465459
params_array = np.asarray(state["params"], dtype=np.float64)
466460
target_array = np.asarray(state["target"], dtype=np.float64)
467461
constraint_array = (
@@ -504,3 +498,27 @@ def load_state(self, path: str | PathLike[str]) -> None:
504498
state["random_state"]["cached_gaussian"],
505499
)
506500
self._random_state.set_state(random_state_tuple)
501+
502+
def save_state(self, path: str | PathLike[str]) -> None:
503+
"""Save complete state for reconstruction of the optimizer.
504+
505+
Parameters
506+
----------
507+
path : str or PathLike
508+
Path to save the optimization state
509+
"""
510+
state = self._state_to_dict()
511+
with Path(path).open("w") as f:
512+
json.dump(state, f, indent=2)
513+
514+
def load_state(self, path: str | PathLike[str]) -> None:
515+
"""Load optimizer state from a JSON file.
516+
517+
Parameters
518+
----------
519+
path : str or PathLike
520+
Path to the JSON file containing the optimizer state.
521+
"""
522+
with Path(path).open("r") as file:
523+
state = json.load(file)
524+
self._load_state_dict(state)

0 commit comments

Comments
 (0)