Page MenuHomec4science

trained_model.py
No OneTemporary

File Metadata

Created
Wed, May 1, 14:18

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.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 collapse:
self.data.projMat = 1.
self.data._collapsed = True
if tol > 0.: 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 = uAp.dtype)
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