Source code for nbed.embed

"""Main embedding functionality."""

import json
import logging
from pathlib import Path

from pydantic import FilePath

from .config import NbedConfig
from .driver import NbedDriver
from .utils import parse

logger = logging.getLogger(__name__)


[docs] def overwrite_config_kwargs(config: NbedConfig, **config_kwargs) -> NbedConfig: """Overwrites config values with key-words and revalidates. Args: config (NbedConfig): A config model. config_kwargs (dict): Any possible key-word arguments. Returns: NbedConfig: A validated config model. Raises: ValidationError: If key-word arguments provided are not part of model. """ if config_kwargs != {}: logger.info("Overwriting select field with additonal config.") config_dict = config.model_dump() for k, v in config_kwargs.items(): config_dict[k] = v return NbedConfig(**config_dict) else: return config
[docs] def nbed( config: NbedConfig | str | None = None, **config_kwargs, ): """Import interface for the nbed package. This function calls the NbedDriver class to create a second quantized hamiltonian using configuration provided. Args: config (NbedConfig): A validated config model or path to a '.json' config file. **config_kwargs: Allows arbitrary keyword arguments for manual configuration. Returns: NbedDriver: An embedded driver. """ logger.info(f"Running Nbed with:\n\tconfig\t{config}\n\tkeywords\t{config_kwargs}") match config: case NbedConfig(): logger.info("Using validated config.") config = overwrite_config_kwargs(config, **config_kwargs) case str() | Path(): logger.info("Using config file %s", config) logger.info("Validating config from file.") with open(FilePath(config)) as f: data = json.load(f) config = NbedConfig(**data) config = overwrite_config_kwargs(config, **config_kwargs) case None: logger.info("Validating config from passed arguments.") logger.debug(f"{config_kwargs=}") config = NbedConfig(**config_kwargs) case _: logger.warning("Unknown input to config argument will be ignored.") logger.debug(f"{config=}") logger.debug(f"{config_kwargs=}") config = NbedConfig(**config_kwargs) driver = NbedDriver(config) driver.embed() return driver
[docs] def cli() -> None: """CLI Interface.""" config = parse() nbed(config)
if __name__ == "__main__": cli()