Source code for pypesto.store.auto

"""Auto-saving."""

import binascii
import datetime
import os
from typing import Callable, Union

from ..result import Result
from .save_to_hdf5 import write_result


[docs]def autosave( filename: Union[str, Callable, None], result: Result, store_type: str, overwrite: bool = False, ): """ Save the result of optimization, profiling or sampling automatically. Parameters ---------- filename: Either the filename to save to or "Auto", in which case it will automatically generate a file named `year_month_day_{type}_result.hdf5`. A method can also be provided. All input to the autosave method will be passed to the filename method. The output should be the filename (`str`). result: The result to be saved. store_type: Either `optimize`, `sample` or `profile`. Depending on the method the function is called in. overwrite: Whether to overwrite the currently existing results. """ if filename is None: return if filename == "Auto": filename = default_filename if not isinstance(filename, str): filename = filename( result=result, store_type=store_type, overwrite=overwrite, ) # set the type to True and pass it on to write_result to_save = {store_type: True} write_result( result=result, overwrite=overwrite, filename=filename, **to_save )
def default_filename(**kwargs) -> str: """Create a filename when results will be autosaved. See :func:`autosave` for additional information. """ time = datetime.datetime.now().strftime("%Y_%d_%m_%H_%M_%S") filename = ( time + f"_{kwargs['store_type']}_result_" f"{binascii.b2a_hex(os.urandom(8)).decode()}.h5" ) return filename