NEML2 1.4.0
|
Linearly interpolate the parameter along a single axis. More...
Linearly interpolate the parameter along a single axis.
Currently, this object is hard-coded to always interpolate along the last batch dimension. A few examples of tensor shapes are listed below to demonstrate how broadcasting is handled:
Example 1: unbatched abscissa, unbatched ordinate (of type R2), unbatched input argument, interpolant size 100
Example 2: unbatched abscissa, unbatched ordinate (of type R2), batched input argument (with batch shape (2, 3)
), interpolant size 100
Example 3: unbatched abscissa, batched ordinate (of type R2 and with batch shape (5, 1)
), batched input argument (with batch shape (2, 5, 2)
), interpolant size 100
Example 4: batched abscissa (with batch shape (7, 8, 1)
), unbatched ordinate (of type R2), batched input argument (with batch shape (7, 8, 5)
), interpolant size 100
#include <LinearInterpolation.h>
Public Member Functions | |
LinearInterpolation (const OptionSet &options) | |
Public Member Functions inherited from Interpolation< T > | |
Interpolation (const OptionSet &options) | |
Public Member Functions inherited from NonlinearParameter< T > | |
NonlinearParameter (const OptionSet &options) | |
const Variable< T > & | param () const |
Get the nonlinear parameter. | |
Public Member Functions inherited from Model | |
Model (const OptionSet &options) | |
Construct a new Model object. | |
virtual void | diagnose (std::vector< Diagnosis > &) const override |
Check for common problems. | |
void | diagnose_nl_sys (std::vector< Diagnosis > &diagnoses) const |
Additional diagnostics for a nonlinear system. | |
virtual bool | is_nonlinear_system () const |
Whether this model defines one or more nonlinear equations to be solved. | |
std::tuple< const Tensor &, const Tensor &, const Tensor &, const Tensor &, const Tensor & > | get_system_matrices () const |
Get assembled system. | |
virtual void | reinit (const Tensor &tensor, int deriv_order) |
Allocate storage and setup views for all the variables of this model and recursively all of the sub-models. See the other overload for detailed description. | |
virtual void | reinit (TensorShapeRef batch_shape={}, int deriv_order=0, const torch::Device &device=default_device(), const torch::Dtype &dtype=default_dtype()) |
Allocate storage and setup views for all the variables of this model and recursively all of the sub-models. | |
const std::vector< Model * > & | registered_models () const |
The models that may be used during the evaluation of this model. | |
Model * | registered_model (const std::string &name) const |
Get a registered model by its name. | |
virtual std::set< VariableName > | consumed_items () const override |
The variables that this model depends on. | |
virtual std::set< VariableName > | provided_items () const override |
The variables that this model defines as part of its output. | |
virtual bool | is_AD_enabled () const override |
Whether AD is enabled. | |
bool | using_AD_1st_derivative () const |
Whether this model is using AD to get 1st derivatives. | |
bool | using_AD_2nd_derivative () const |
Whether this model is using AD to get 2nd derivatives. | |
void | use_AD_derivatives (bool first=true, bool second=true) |
Tell this model to use AD to get derivatives. | |
void | prepare () |
Prepare for evaluation. | |
virtual void | value () |
Evalute the model. | |
virtual void | value_and_dvalue () |
Evalute the model and compute its derivative. | |
virtual void | dvalue () |
Evalute the derivative. | |
virtual void | value_and_dvalue_and_d2value () |
Evalute the model and compute its first and second derivatives. | |
virtual void | d2value () |
Evalute the second derivatives. | |
virtual void | dvalue_and_d2value () |
Evalute the first and second derivatives. | |
virtual LabeledVector | value (const LabeledVector &in) |
Convenient shortcut to construct and return the model value. | |
virtual std::tuple< LabeledVector, LabeledMatrix > | value_and_dvalue (const LabeledVector &in) |
Convenient shortcut to construct and return the model value and its derivative. | |
virtual LabeledMatrix | dvalue (const LabeledVector &in) |
Convenient shortcut to construct and return the derivative. | |
virtual std::tuple< LabeledVector, LabeledMatrix, LabeledTensor3D > | value_and_dvalue_and_d2value (const LabeledVector &in) |
Convenient shortcut to construct and return the model's value, first and second derivative. | |
virtual LabeledTensor3D | d2value (const LabeledVector &in) |
Convenient shortcut to construct and return the model's second derivative. | |
virtual std::tuple< LabeledMatrix, LabeledTensor3D > | dvalue_and_d2value (const LabeledVector &in) |
Convenient shortcut to construct and return the model's first and second derivative. | |
Size | batch_dim () const |
TensorShapeRef | batch_sizes () const |
Storage batch shape. | |
const torch::TensorOptions & | options () const |
Storage tensor options. | |
torch::Dtype | scalar_type () const |
Storage scalar type. | |
torch::Device | device () const |
Storage device. | |
Public Member Functions inherited from Data | |
Data (const OptionSet &options) | |
Construct a new Data object. | |
const std::vector< Data * > & | registered_data () const |
All the registered data objects. | |
Public Member Functions inherited from NEML2Object | |
NEML2Object (const OptionSet &options) | |
Construct a new NEML2Object object. | |
virtual | ~NEML2Object ()=default |
const OptionSet & | input_options () const |
const std::string & | name () const |
A readonly reference to the object's name. | |
const std::string & | type () const |
A readonly reference to the object's type. | |
const std::string & | path () const |
A readonly reference to the object's path. | |
const std::string & | doc () const |
A readonly reference to the object's docstring. | |
template<typename T = NEML2Object> | |
const T * | host () const |
Get a readonly pointer to the host. | |
template<typename T = NEML2Object> | |
T * | host () |
Get a writable pointer to the host. | |
Public Member Functions inherited from BufferStore | |
BufferStore (const OptionSet &options, NEML2Object *object) | |
const Storage< std::string, TensorValueBase > & | named_buffers () const |
Storage< std::string, TensorValueBase > & | named_buffers () |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
TensorValue< T > & | get_buffer (const std::string &name) |
}@ | |
Public Member Functions inherited from ParameterStore | |
ParameterStore (const OptionSet &options, NEML2Object *object) | |
const Storage< std::string, TensorValueBase > & | named_parameters () const |
Storage< std::string, TensorValueBase > & | named_parameters () |
void | set_parameter (const std::string &, const Tensor &) |
}@ | |
void | set_parameters (const std::map< std::string, Tensor > &) |
Set values for parameters. | |
TensorValueBase & | get_parameter (const std::string &name) |
Get a writable reference of a parameter. | |
const TensorValueBase & | get_parameter (const std::string &name) const |
Get a read-only reference of a parameter. | |
bool | has_nl_param () const |
Whether this parameter store has any nonlinear parameter. | |
const VariableBase * | nl_param (const std::string &) const |
Query the existence of a nonlinear parameter. | |
virtual std::map< std::string, const VariableBase * > | named_nonlinear_parameters (bool recursive=false) const |
Get all nonlinear parameters. | |
virtual std::map< std::string, Model * > | named_nonlinear_parameter_models (bool recursive=false) const |
Get all nonlinear parameters' models. | |
Public Member Functions inherited from VariableStore | |
VariableStore (const OptionSet &options, Model *object) | |
LabeledAxis & | declare_axis (const std::string &name) |
virtual void | setup_layout () |
Setup the layouts of all the registered axes. | |
VariableBase * | input_variable (const VariableName &) |
Get the view of an input variable. | |
VariableBase * | output_variable (const VariableName &) |
Get the view of an output variable. | |
TensorType | input_type (const VariableName &) const |
Get the variable type of an input variable. | |
TensorType | output_type (const VariableName &) const |
Get the variable type of an output variable. | |
template<typename T = Tensor> | |
Variable< T > & | get_input_variable (const VariableName &name) |
template<typename T = Tensor> | |
const Variable< T > & | get_input_variable (const VariableName &name) const |
template<typename T = Tensor> | |
const Variable< T > & | get_output_variable (const VariableName &name) |
template<typename T = Tensor> | |
const Variable< T > & | get_output_variable (const VariableName &name) const |
LabeledAxis & | input_axis () |
const LabeledAxis & | input_axis () const |
LabeledAxis & | output_axis () |
const LabeledAxis & | output_axis () const |
Storage< VariableName, VariableBase > & | input_variables () |
const Storage< VariableName, VariableBase > & | input_variables () const |
Storage< VariableName, VariableBase > & | output_variables () |
const Storage< VariableName, VariableBase > & | output_variables () const |
LabeledVector & | input_storage () |
const LabeledVector & | input_storage () const |
LabeledVector & | output_storage () |
const LabeledVector & | output_storage () const |
LabeledMatrix & | derivative_storage () |
const LabeledMatrix & | derivative_storage () const |
LabeledTensor3D & | second_derivative_storage () |
const LabeledTensor3D & | second_derivative_storage () const |
Public Member Functions inherited from NonlinearSystem | |
NonlinearSystem (const OptionSet &options) | |
virtual void | init_scaling (const bool verbose=false) |
Compute algebraic Jacobian-based automatic scaling following https://cs.stanford.edu/people/paulliu/files/cs517-project.pdf. | |
Tensor | scale_residual (const Tensor &r) const |
Apply scaling to the residual. | |
Tensor | scale_Jacobian (const Tensor &J) const |
Apply scaling to the Jacobian. | |
Tensor | scale_direction (const Tensor &p) const |
Remove scaling from the search direction, i.e. \( J^{-1} r \). | |
virtual Tensor | solution () const |
Get the solution vector. | |
Tensor | residual (const Tensor &x) |
Convenient shortcut to set the current solution, assemble and return the system residual. | |
void | residual () |
Convenient shortcut to assemble and return the system residual. | |
Tensor | Jacobian (const Tensor &x) |
Convenient shortcut to set the current solution, assemble and return the system Jacobian. | |
void | Jacobian () |
Convenient shortcut to assemble and return the system Jacobian. | |
std::tuple< Tensor, Tensor > | residual_and_Jacobian (const Tensor &x) |
Convenient shortcut to set the current solution, assemble and return the system residual and Jacobian. | |
void | residual_and_Jacobian () |
Convenient shortcut to assemble and return the system residual and Jacobian. | |
const Tensor & | get_residual () const |
const Tensor & | get_Jacobian () const |
Tensor | residual_norm () const |
The residual norm. | |
virtual bool | is_AD_disabled () const final |
Whether AD is disabled. | |
Public Member Functions inherited from DiagnosticsInterface | |
DiagnosticsInterface (NEML2Object *object) | |
template<typename... Args> | |
void | diagnostic_assert (std::vector< Diagnosis > &diagnoses, bool assertion, Args &&... args) const |
void | diagnostic_assert_state (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_old_state (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_force (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_old_force (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_assert_residual (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_check_input_variable (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
void | diagnostic_check_output_variable (std::vector< Diagnosis > &diagnoses, const VariableBase &v) const |
Static Public Member Functions | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from Interpolation< T > | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from NonlinearParameter< T > | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from Model | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from Data | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from NEML2Object | |
static OptionSet | expected_options () |
Static Public Member Functions inherited from NonlinearSystem | |
static OptionSet | expected_options () |
static void | disable_automatic_scaling (OptionSet &options) |
static void | enable_automatic_scaling (OptionSet &options) |
Protected Member Functions | |
void | set_value (bool out, bool dout_din, bool d2out_din2) override |
The map between input -> output, and optionally its derivatives. | |
Protected Member Functions inherited from Model | |
virtual void | setup () override |
Setup this model. | |
virtual void | check_AD_limitation () const |
void | check_inplace_dbg () |
Check for potential in-place operation. | |
virtual void | check_input (const LabeledVector &in) const |
Check if the input has valid shape. | |
virtual LabeledVector | get_output () |
virtual LabeledMatrix | get_doutput_dinput () |
virtual LabeledTensor3D | get_d2output_dinput2 () |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<Model, T>>> | |
T & | register_model (const std::string &name, int extra_deriv_order=0, bool nonlinear=false, bool merge_input=true) |
Register a model that the current model may use during its evaluation. | |
virtual void | reinit (bool in, bool out) |
Allocate storage and setup views for all the variables of this model and recursively all of the sub-models. See the other overload for detailed description. | |
virtual void | cache (TensorShapeRef batch_shape, int deriv_order, const torch::Device &device, const torch::Dtype &dtype) |
bool | requires_grad () const |
Whether derivative has been requested for this model. | |
bool | requires_2nd_grad () const |
Whether 2nd derivative has been requested for this model. | |
virtual void | allocate_variables (bool in, bool out) |
Call VariableStore::allocate_variables recursively on all submodels. | |
virtual void | setup_input_views (VariableStore *host=nullptr) override |
Call VariableStore::setup_input_views recursively on all submodels. | |
virtual void | setup_submodel_input_views (VariableStore *host) |
virtual void | setup_output_views () |
virtual void | setup_submodel_output_views () |
virtual void | setup_nonlinear_system () |
virtual void | cache (TensorShapeRef batch_shape) |
Cache the variable's batch shape. | |
virtual void | allocate_variables (TensorShapeRef batch_shape, const torch::TensorOptions &options, bool in, bool out, bool dout_din, bool d2out_din2) |
Allocate variable storages given the batch shape and tensor options. | |
virtual void | setup_output_views (bool out, bool dout_din, bool d2out_din2) |
Call VariableStore::setup_output_views recursively on all submodels. | |
virtual void | zero () |
virtual void | set_input (const LabeledVector &in) |
Set in to be the input of this model. | |
virtual void | set_solution (const Tensor &x) override |
Set x as the current solution of the nonlinear system. | |
virtual void | assemble (bool residual, bool Jacobian) override |
Compute the residual and Jacobian. | |
virtual void | zero (bool dout_din, bool d2out_din2) |
Zero out derivative and second derivative storage. | |
Protected Member Functions inherited from Data | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<Data, T>>> | |
T & | register_data (const std::string &name) |
Protected Member Functions inherited from BufferStore | |
virtual void | send_buffers_to (const torch::TensorOptions &options) |
Send all buffers to options . | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_buffer (const std::string &name, const T &rawval) |
Declare a buffer. | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_buffer (const std::string &name, const std::string &input_option_name) |
Declare a buffer. | |
Protected Member Functions inherited from ParameterStore | |
virtual void | send_parameters_to (const torch::TensorOptions &options) |
Send parameters to options. | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_parameter (const std::string &name, const T &rawval) |
Declare a parameter. | |
template<typename T , typename = typename std::enable_if_t<std::is_base_of_v<TensorBase<T>, T>>> | |
const T & | declare_parameter (const std::string &name, const std::string &input_option_name, bool allow_nonlinear=false) |
Declare a parameter. | |
Protected Member Functions inherited from VariableStore | |
template<typename T , typename... S> | |
const Variable< T > & | declare_input_variable (S &&... name) |
Declare an input variable. | |
template<typename... S> | |
const Variable< Tensor > & | declare_input_variable (Size sz, TensorType t, S &&... name) |
Declare an input variable (with unknown base shape at compile time) | |
template<typename T , typename... S> | |
const Variable< Tensor > & | declare_input_variable_list (Size list_size, S &&... name) |
Declare an input variable that is a list of tensors of fixed size. | |
template<typename T , typename... S> | |
Variable< T > & | declare_output_variable (S &&... name) |
Declare an output variable. | |
template<typename... S> | |
Variable< Tensor > & | declare_output_variable (Size sz, TensorType t, S &&... name) |
Declare an input variable (with unknown base shape at compile time) | |
template<typename T , typename... S> | |
Variable< Tensor > & | declare_output_variable_list (Size list_size, S &&... name) |
Declare an output variable that is a list of tensors of fixed size. | |
template<typename T > | |
VariableName | declare_variable (LabeledAxis &axis, const VariableName &var) const |
Declare an item recursively on an axis. | |
VariableName | declare_variable (LabeledAxis &axis, const VariableName &var, Size sz) const |
Declare an item (with known storage size) recursively on an axis. | |
VariableName | declare_subaxis (LabeledAxis &axis, const VariableName &subaxis) const |
Declare a subaxis recursively on an axis. | |
Additional Inherited Members | |
Protected Attributes inherited from Interpolation< T > | |
const Scalar & | _X |
The abscissa values of the interpolant. | |
const T & | _Y |
The ordinate values of the interpolant. | |
const Variable< Scalar > & | _x |
Argument of interpolation. | |
Protected Attributes inherited from NonlinearParameter< T > | |
Variable< T > & | _p |
The nonlinear parameter. | |
Protected Attributes inherited from Model | |
std::vector< Model * > | _registered_models |
Models this model may use during its evaluation. | |
Protected Attributes inherited from Data | |
std::vector< Data * > | _registered_data |
Registered Data objects. | |
Protected Attributes inherited from ParameterStore | |
std::map< std::string, const VariableBase * > | _nl_params |
Map from nonlinear parameter names to their corresponding variable views. | |
std::map< std::string, Model * > | _nl_param_models |
Map from nonlinear parameter names to models which evaluate them. | |
Protected Attributes inherited from NonlinearSystem | |
Size | _ndof |
Number of degrees of freedom. | |
Tensor | _solution |
View for the solution of this nonlinear system. | |
Tensor | _residual |
View for the residual of this nonlinear system. | |
Tensor | _Jacobian |
View for the Jacobian of this nonlinear system. | |
Tensor | _scaled_residual |
Tensor | _scaled_Jacobian |
const bool | _autoscale |
If true, do automatic scaling. | |
const Real | _autoscale_tol |
Tolerance for convergence check of the iterative automatic scaling algorithm. | |
const unsigned int | _autoscale_miter |
Maximum number of iterations allowed for the iterative automatic scaling algorithm. | |
bool | _scaling_matrices_initialized |
Flag to indicate whether scaling matrices have been computed. | |
Tensor | _row_scaling |
Row scaling "matrix" – since it's a batched diagonal matrix, we are only storing its diagonals. | |
Tensor | _col_scaling |
Column scaling "matrix" – since it's a batched diagonal matrix, we are only storing its diagonals. | |
LinearInterpolation | ( | const OptionSet & | options | ) |