Page MenuHomec4science

trained_model.py
No OneTemporary

File Metadata

Created
Mon, Nov 11, 15:36

trained_model.py

# Copyright (C) 2018-2020 by the RROMPy authors
#
# This file is part of RROMPy.
#
# RROMPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RROMPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RROMPy. If not, see <http://www.gnu.org/licenses/>.
#
from abc import abstractmethod
import numpy as np
from rrompy.utilities.base.types import Np1D, List, paramList, sampList
from rrompy.utilities.expression import expressionEvaluator
from rrompy.utilities.numerical import dot
from rrompy.utilities.exception_manager import RROMPyException
from rrompy.parameter import checkParameterList, emptyParameterList
from rrompy.sampling import sampleList
__all__ = ['TrainedModel']
class TrainedModel:
"""
ABSTRACT
ROM approximant evaluation.
Attributes:
Data: dictionary with all that can be pickled.
"""
def name(self) -> str:
return self.__class__.__name__
def __str__(self) -> str:
return self.name()
def __repr__(self) -> str:
return self.__str__() + " at " + hex(id(self))
def reset(self):
self.lastSolvedApproxReduced = None
self.lastSolvedApprox = None
def compress(self, collapse : bool = False, tol : float = 0.):
if hasattr(self.data, "_collapsed") and self.data._collapsed:
raise RROMPyException(("Compressing already collapsed model is "
"ineffective. Aborting."))
if collapse:
self.data.projMat = 1.
self.data._collapsed = True
if tol > 0.:
if hasattr(self.data, "_compressTol"):
raise RROMPyException(("Recompressing already compressed "
"model is ineffective. Aborting."))
else:
self.data._compressTol = tol
@property
def npar(self):
"""Number of parameters."""
return self.data.mu0.shape[1]
def checkParameterList(self, mu:paramList,
check_if_single : bool = False) -> paramList:
return checkParameterList(mu, self.data.npar, check_if_single)
def mapParameterList(self, mu:paramList, direct : str = "F",
idx : List[int] = None) -> paramList:
if idx is None: idx = np.arange(self.npar)
muMapped = checkParameterList(mu, len(idx))
for j, d in enumerate(idx):
muMapped.data[:, j] = expressionEvaluator(
self.data.parameterMap[direct][d],
muMapped(j)).flatten()
return muMapped
@abstractmethod
def getApproxReduced(self, mu : paramList = []) -> sampList:
"""
Evaluate reduced representation of approximant at arbitrary parameter.
(ABSTRACT)
Args:
mu: Target parameter.
"""
pass
def getApprox(self, mu : paramList = []) -> sampList:
"""
Evaluate approximant at arbitrary parameter.
Args:
mu: Target parameter.
"""
mu = self.checkParameterList(mu)
if (not hasattr(self, "lastSolvedApprox")
or self.lastSolvedApprox != mu):
uApproxR = self.getApproxReduced(mu)
if self.data._collapsed:
self.uApprox = uApproxR
else:
for i, uApR in enumerate(uApproxR):
uApREff = uApR
uAp = dot(self.data.projMat, uApREff)
if i == 0:
uApprox = np.empty((len(uAp), len(uApproxR)),
dtype = np.complex)
uApprox[:, i] = uAp
self.uApprox = sampleList(uApprox)
self.lastSolvedApprox = mu
return self.uApprox
def getPoles(self, *args, **kwargs) -> Np1D:
"""Obtain approximant poles."""
return emptyParameterList()

Event Timeline