Source code for diffpy.srfit.fitbase.calculator

#!/usr/bin/env python
##############################################################################
#
# diffpy.srfit      by DANSE Diffraction group
#                   Simon J. L. Billinge
#                   (c) 2008 The Trustees of Columbia University
#                   in the City of New York.  All rights reserved.
#
# File coded by:    Chris Farrow
#
# See AUTHORS.txt for a list of people who contributed.
# See LICENSE_DANSE.txt for license information.
#
##############################################################################
"""The Calculator for Parameter-aware functions.

Calculator is a functor class for producing a signal from embedded
Parameters. Calculators can store Parameters and ParameterSets,
Constraints and Restraints. Also, the __call__ function can be
overloaded to accept external arguments. Calculators are used to wrap
registered functions so that the function's Parameters are contained in
an object specific to the function.  A custom Calculator can be added to
another RecipeOrganizer with the 'registerCalculator' method.
"""

__all__ = ["Calculator"]

from diffpy.srfit.equation.literals.operators import Operator
from diffpy.srfit.fitbase.parameterset import ParameterSet


[docs] class Calculator(Operator, ParameterSet): """Base class for calculators. A Calculator organizes Parameters and has a __call__ method that can calculate a generic signal. Attributes ---------- name A name for this organizer. meta A dictionary of metadata needed by the calculator. _calculators A managed dictionary of Calculators, indexed by name. _constraints A set of constrained Parameters. Constraints can be added using the 'constrain' methods. _parameters A managed OrderedDict of contained Parameters. _parsets A managed dictionary of ParameterSets. _restraints A set of Restraints. Restraints can be added using the 'restrain' or 'confine' methods. _eqfactory A diffpy.srfit.equation.builder.EquationFactory instance that is used create Equations from string. Operator Attributes ------------------- args List of Literal arguments nin Number of inputs (<1 means this is variable) nout Number of outputs (1) operation Function that performs the operation, self.__call__ symbol Same as name _value The value of the Operator. value Property for 'getValue'. Properties ---------- names Variable names (read only). See getNames. values Variable values (read only). See getValues. """ # define abstract attributes from the Operator base. nin = -1 nout = 1 def __init__(self, name): ParameterSet.__init__(self, name) self.meta = {} # Initialize Operator attributes Operator.__init__(self, name) return @property def symbol(self): return self.name # Overload me! def __call__(self, *args): """Calculate something. This method must be overloaded. When overloading, you should specify the arguments explicitly, otherwise the parameters must be specified when adding the Calculator to a RecipeOrganizer. """ return 0
[docs] def operation(self, *args): self._value = self.__call__(*args) return self._value
def _validate(self): """Validate my state. This performs ParameterSet validations. This does not validate the operation, since this could be costly. The operation should be validated with a containing equation. Raises AttributeError if validation fails. """ ParameterSet._validate(self) return
# End class Calculator