Source code for odatse.solver._solver

# SPDX-License-Identifier: MPL-2.0
#
# ODAT-SE -- an open framework for data analysis
# Copyright (C) 2020- The University of Tokyo
#
# This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
# If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

from abc import ABCMeta, abstractmethod

import subprocess
import numpy as np

import odatse
import odatse.mpi

# type hints
from pathlib import Path
from typing import Dict, List, Tuple


[docs] class SolverBase(object, metaclass=ABCMeta): """ Abstract base class for solvers in the 2DMAT software. """ root_dir: Path output_dir: Path proc_dir: Path work_dir: Path _name: str dimension: int timer: Dict[str, Dict]
[docs] @abstractmethod def __init__(self, info: odatse.Info) -> None: """ Initialize the solver with the given information. Parameters ---------- info : Info Information object containing configuration details. """ self.root_dir = info.base["root_dir"] self.output_dir = info.base["output_dir"] self.proc_dir = self.output_dir / str(odatse.mpi.rank()) self.work_dir = self.proc_dir self._name = "" self.timer = {"prepare": {}, "run": {}, "post": {}} if "dimension" in info.solver: self.dimension = info.solver["dimension"] else: self.dimension = info.base["dimension"]
@property def name(self) -> str: """ Get the name of the solver. Returns ------- str The name of the solver. """ return self._name
[docs] @abstractmethod def evaluate(self, x: np.ndarray, arg: Tuple = (), nprocs: int = 1, nthreads: int = 1) -> None: """ Evaluate the solver with the given parameters. Parameters ---------- x : np.ndarray Input data array. arg : Tuple, optional Additional arguments for evaluation. Defaults to (). nprocs : nt, optional Number of processes to use. Defaults to 1. nthreads : int, optional Number of threads to use. Defaults to 1. Raises ------ NotImplementedError This method should be implemented by subclasses. """ raise NotImplementedError()