NEML2 2.1.0
Loading...
Searching...
No Matches
LabeledAxis Class Reference

A labeled axis is used to associate layout of a tensor with human-interpretable names. More...

Detailed Description

A labeled axis is used to associate layout of a tensor with human-interpretable names.

A one-dimensional tensor requires one LabeledAxis, two-dimensional tensor requires two LabeledAxis, and so on. See Model assembly for a detailed explanation of tensor labeling and assembly.

Variables and axes can only be added during the setup stage. Adding items after the setup stage is forbidden and will result in a runtime error in Debug mode.

#include <LabeledAxis.h>

Public Member Functions

 LabeledAxis ()=default
 Empty constructor.
 LabeledAxis (LabeledAxisAccessor prefix)
 Sub-axis constructor.
void clear ()
 De-initialize the axis.
bool is_setup () const
 Whether the axis has been set up.
LabeledAxisAccessor qualify (const LabeledAxisAccessor &accessor) const
 Return the fully qualified name of an item (i.e. useful when this axis is a sub-axis).
LabeledAxisAccessor disqualify (const LabeledAxisAccessor &accessor) const
 Return the disqualified name of an item (i.e. remove the prefix).
LabeledAxisadd_subaxis (const std::string &name)
 Add a sub-axis.
void add_variable (const LabeledAxisAccessor &name, TensorShapeRef intmd_sizes, TensorShapeRef base_sizes)
 Add a variable with known storage size.
void setup_layout ()
 Setup the layout of all items recursively.
Size size () const
 Get the storage size of the entire axis.
Size size (const LabeledAxisAccessor &name) const
 Get the storage size of a variable or a local sub-axis.
indexing::Slice slice (const LabeledAxisAccessor &name) const
 Get the slicing indices of a variable or a local sub-axis.
bool equals (const LabeledAxis &other) const
 Check to see if two axes are equivalent.
std::size_t nvariable () const
bool has_variable (const LabeledAxisAccessor &name) const
 Check the existence of a variable by its name.
std::size_t variable_id (const LabeledAxisAccessor &name) const
 Get the assembly ID of a variable.
std::vector< LabeledAxisAccessorvariable_names_unsrt () const
 Get variable names in unsorted order.
const std::vector< LabeledAxisAccessor > & variable_names () const
 Get the variable names.
const std::vector< std::pair< Size, Size > > & variable_slices () const
 Get the variable slicing indices (in assembly order).
const std::pair< Size, Size > & variable_slice (const LabeledAxisAccessor &name) const
 Get the slicing indices of a variable by name.
const std::vector< Size > & variable_sizes () const
 Get the variable storage sizes (in assembly order).
Size variable_size (const LabeledAxisAccessor &name) const
 Get the storage size of a variable by name.
const std::vector< TensorShape > & variable_intmd_sizes () const
 Get the variable left-batch shapes (in assembly order).
const std::vector< TensorShape > & variable_base_sizes () const
 Get the variable base shapes (in assembly order).
std::size_t nsubaxis () const
bool has_subaxis (const LabeledAxisAccessor &name) const
 Check the existence of a subaxis by its name.
std::size_t subaxis_id (const std::string &name) const
 Get the assembly ID of a sub-axis.
const std::vector< const LabeledAxis * > & subaxes () const
 Get the sub-axes (in assembly order).
const LabeledAxissubaxis (const LabeledAxisAccessor &name) const
 Get a sub-axis by name.
LabeledAxissubaxis (const LabeledAxisAccessor &name)
 Get a sub-axis by name.
std::vector< std::string > subaxis_names_unsrt () const
 Get subaxis names in unsorted order.
const std::vector< std::string > & subaxis_names () const
 Get the sub-axis names.
const std::vector< std::pair< Size, Size > > & subaxis_slices () const
 Get the sub-axis slicing indices (in assembly order).
std::pair< Size, Sizesubaxis_slice (const LabeledAxisAccessor &name) const
 Get the slicing indices of a sub-axis by name.
const std::vector< Size > & subaxis_sizes () const
 Get the sub-axis storage sizes (in assembly order).
Size subaxis_size (const LabeledAxisAccessor &name) const
 Get the storage size of a sub-axis by name.

Friends

std::ostream & operator<< (std::ostream &os, const LabeledAxis &axis)

Constructor & Destructor Documentation

◆ LabeledAxis() [1/2]

LabeledAxis ( )
default

Empty constructor.

◆ LabeledAxis() [2/2]

LabeledAxis ( LabeledAxisAccessor prefix)

Sub-axis constructor.

Member Function Documentation

◆ add_subaxis()

LabeledAxis & add_subaxis ( const std::string & name)

Add a sub-axis.

◆ add_variable()

void add_variable ( const LabeledAxisAccessor & name,
TensorShapeRef intmd_sizes,
TensorShapeRef base_sizes )

Add a variable with known storage size.

◆ clear()

void clear ( )

De-initialize the axis.

◆ disqualify()

LabeledAxisAccessor disqualify ( const LabeledAxisAccessor & accessor) const

Return the disqualified name of an item (i.e. remove the prefix).

◆ equals()

bool equals ( const LabeledAxis & other) const

Check to see if two axes are equivalent.

◆ has_subaxis()

bool has_subaxis ( const LabeledAxisAccessor & name) const

Check the existence of a subaxis by its name.

◆ has_variable()

bool has_variable ( const LabeledAxisAccessor & name) const

Check the existence of a variable by its name.

◆ is_setup()

bool is_setup ( ) const
inline

Whether the axis has been set up.

◆ nsubaxis()

std::size_t nsubaxis ( ) const

Get sub-axis information Number of subaxes

◆ nvariable()

std::size_t nvariable ( ) const

Get variable information Number of variables

◆ qualify()

LabeledAxisAccessor qualify ( const LabeledAxisAccessor & accessor) const

Return the fully qualified name of an item (i.e. useful when this axis is a sub-axis).

◆ setup_layout()

void setup_layout ( )

Setup the layout of all items recursively.

◆ size() [1/2]

Size size ( ) const

Get the storage size of the entire axis.

◆ size() [2/2]

Size size ( const LabeledAxisAccessor & name) const

Get the storage size of a variable or a local sub-axis.

◆ slice()

indexing::Slice slice ( const LabeledAxisAccessor & name) const

Get the slicing indices of a variable or a local sub-axis.

◆ subaxes()

const std::vector< const LabeledAxis * > & subaxes ( ) const

Get the sub-axes (in assembly order).

◆ subaxis() [1/2]

LabeledAxis & subaxis ( const LabeledAxisAccessor & name)

Get a sub-axis by name.

◆ subaxis() [2/2]

const LabeledAxis & subaxis ( const LabeledAxisAccessor & name) const

Get a sub-axis by name.

◆ subaxis_id()

std::size_t subaxis_id ( const std::string & name) const

Get the assembly ID of a sub-axis.

◆ subaxis_names()

const std::vector< std::string > & subaxis_names ( ) const

Get the sub-axis names.

◆ subaxis_names_unsrt()

std::vector< std::string > subaxis_names_unsrt ( ) const

Get subaxis names in unsorted order.

◆ subaxis_size()

Size subaxis_size ( const LabeledAxisAccessor & name) const

Get the storage size of a sub-axis by name.

◆ subaxis_sizes()

const std::vector< Size > & subaxis_sizes ( ) const

Get the sub-axis storage sizes (in assembly order).

◆ subaxis_slice()

std::pair< Size, Size > subaxis_slice ( const LabeledAxisAccessor & name) const

Get the slicing indices of a sub-axis by name.

◆ subaxis_slices()

const std::vector< std::pair< Size, Size > > & subaxis_slices ( ) const

Get the sub-axis slicing indices (in assembly order).

◆ variable_base_sizes()

const std::vector< TensorShape > & variable_base_sizes ( ) const

Get the variable base shapes (in assembly order).

◆ variable_id()

std::size_t variable_id ( const LabeledAxisAccessor & name) const

Get the assembly ID of a variable.

◆ variable_intmd_sizes()

const std::vector< TensorShape > & variable_intmd_sizes ( ) const

Get the variable left-batch shapes (in assembly order).

◆ variable_names()

const std::vector< LabeledAxisAccessor > & variable_names ( ) const

Get the variable names.

◆ variable_names_unsrt()

std::vector< LabeledAxisAccessor > variable_names_unsrt ( ) const

Get variable names in unsorted order.

◆ variable_size()

Size variable_size ( const LabeledAxisAccessor & name) const

Get the storage size of a variable by name.

◆ variable_sizes()

const std::vector< Size > & variable_sizes ( ) const

Get the variable storage sizes (in assembly order).

◆ variable_slice()

const std::pair< Size, Size > & variable_slice ( const LabeledAxisAccessor & name) const

Get the slicing indices of a variable by name.

◆ variable_slices()

const std::vector< std::pair< Size, Size > > & variable_slices ( ) const

Get the variable slicing indices (in assembly order).

◆ operator<<

std::ostream & operator<< ( std::ostream & os,
const LabeledAxis & axis )
friend