Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | List of all members
uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext > Class Template Reference

Intermediate per-sector block SVD retaining factors and logical basis maps. More...

#include <block_tensor_svd.hpp>

Classes

struct  Sector
 Provider result and logical fragment maps for one charge sector. More...
 

Public Types

using allocation_context_type = AllocationContext
 
using block_execution_policy = BlockExecutionPolicy
 
using codomain_fragment_type = detail::SvdBoundaryFragment< codomain_shape::key_coordinate_count, codomain_shape::dense_block_order >
 
using codomain_shape = detail::SvdBoundaryShape< codomain_type >
 
using codomain_type = CodomainType
 
using domain_fragment_type = detail::SvdBoundaryFragment< domain_shape::key_coordinate_count, domain_shape::dense_block_order >
 
using domain_shape = detail::SvdBoundaryShape< domain_type >
 
using domain_type = DomainType
 
using matrix_type = MatrixTensor
 
using real_type = uni20::make_real_t< scalar_type >
 
using scalar_type = Scalar
 
using singular_value_tensor_type = SingularValueTensor
 
using source_key_type = BlockKey< domain_shape::key_coordinate_count+codomain_shape::key_coordinate_count >
 

Public Member Functions

decltype(auto) allocation_context () const noexcept
 Return the factor allocation context retained from the source tensor.
 
 BlockSvdDecomposition (Symmetry symmetry, domain_type domain, codomain_type codomain, linalg::SvdOptions options, std::vector< Sector > sectors)
 Construct a completed decomposition from sector provider results.
 
template<class Context = allocation_context_type>
requires (!std::same_as<Context, void>) && std::same_as<Context, allocation_context_type>
 BlockSvdDecomposition (Symmetry symmetry, domain_type domain, codomain_type codomain, linalg::SvdOptions options, std::vector< Sector > sectors, Context &allocation_context)
 Construct a completed decomposition retaining an explicit factor allocation context.
 
auto codomain () const noexcept -> codomain_type const &
 Return the original codomain boundary.
 
auto domain () const noexcept -> domain_type const &
 Return the original domain boundary.
 
auto left_null_space () const -> BlockSvdVectorSelection
 Return unpaired full left vectors in the dimensional-excess null space.
 
auto options () const noexcept -> linalg::SvdOptions
 Return exact-SVD vector extent options used by every sector.
 
auto right_null_space () const -> BlockSvdVectorSelection
 Return unpaired full right vectors in the dimensional-excess null space.
 
auto sectors () const noexcept -> std::span< Sector const >
 Return charge sectors in canonical charge order.
 
auto spectrum () const noexcept -> std::span< BlockSvdState< real_type > const >
 Return paired singular states in deterministic descending order.
 
auto symmetry () const noexcept -> Symmetry
 Return the symmetry shared by the input and every sector.
 

Detailed Description

template<uni20::LapackScalar Scalar, class DomainType, class CodomainType, class BlockExecutionPolicy, class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
class uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >

Intermediate per-sector block SVD retaining factors and logical basis maps.

Template Parameters
ScalarDense provider scalar type.
DomainTypeOriginal tensor domain.
CodomainTypeOriginal tensor codomain.
BlockExecutionPolicyExecution policy inherited from the factorized tensor view.
MatrixTensorOwning storage type retained for left and right provider factors.
SingularValueTensorOwning storage type retained for provider singular values.
AllocationContextOptional allocation context retained for factor materialization.

Member Typedef Documentation

◆ allocation_context_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::allocation_context_type = AllocationContext

◆ block_execution_policy

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::block_execution_policy = BlockExecutionPolicy

◆ codomain_fragment_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::codomain_fragment_type = detail::SvdBoundaryFragment<codomain_shape::key_coordinate_count, codomain_shape::dense_block_order>

◆ codomain_shape

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::codomain_shape = detail::SvdBoundaryShape<codomain_type>

◆ codomain_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::codomain_type = CodomainType

◆ domain_fragment_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::domain_fragment_type = detail::SvdBoundaryFragment<domain_shape::key_coordinate_count, domain_shape::dense_block_order>

◆ domain_shape

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::domain_shape = detail::SvdBoundaryShape<domain_type>

◆ domain_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::domain_type = DomainType

◆ matrix_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::matrix_type = MatrixTensor

◆ real_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::real_type = uni20::make_real_t<scalar_type>

◆ scalar_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::scalar_type = Scalar

◆ singular_value_tensor_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::singular_value_tensor_type = SingularValueTensor

◆ source_key_type

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
using uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::source_key_type = BlockKey<domain_shape::key_coordinate_count + codomain_shape::key_coordinate_count>

Constructor & Destructor Documentation

◆ BlockSvdDecomposition() [1/2]

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::BlockSvdDecomposition ( Symmetry  symmetry,
domain_type  domain,
codomain_type  codomain,
linalg::SvdOptions  options,
std::vector< Sector >  sectors 
)
inline

Construct a completed decomposition from sector provider results.

◆ BlockSvdDecomposition() [2/2]

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
template<class Context = allocation_context_type>
requires (!std::same_as<Context, void>) && std::same_as<Context, allocation_context_type>
uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::BlockSvdDecomposition ( Symmetry  symmetry,
domain_type  domain,
codomain_type  codomain,
linalg::SvdOptions  options,
std::vector< Sector >  sectors,
Context &  allocation_context 
)
inline

Construct a completed decomposition retaining an explicit factor allocation context.

Member Function Documentation

◆ allocation_context()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
decltype(auto) uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::allocation_context ( ) const
inlinenoexcept

Return the factor allocation context retained from the source tensor.

◆ codomain()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::codomain ( ) const -> codomain_type const&
inlinenoexcept

Return the original codomain boundary.

◆ domain()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::domain ( ) const -> domain_type const&
inlinenoexcept

Return the original domain boundary.

◆ left_null_space()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::left_null_space ( ) const -> BlockSvdVectorSelection
inline

Return unpaired full left vectors in the dimensional-excess null space.

◆ options()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::options ( ) const -> linalg::SvdOptions
inlinenoexcept

Return exact-SVD vector extent options used by every sector.

◆ right_null_space()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::right_null_space ( ) const -> BlockSvdVectorSelection
inline

Return unpaired full right vectors in the dimensional-excess null space.

◆ sectors()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::sectors ( ) const -> std::span<Sector const>
inlinenoexcept

Return charge sectors in canonical charge order.

◆ spectrum()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::spectrum ( ) const -> std::span<BlockSvdState<real_type> const>
inlinenoexcept

Return paired singular states in deterministic descending order.

◆ symmetry()

template<uni20::LapackScalar Scalar, class DomainType , class CodomainType , class BlockExecutionPolicy , class MatrixTensor = ColumnMajorTensor<Scalar, 2>, class SingularValueTensor = ColumnMajorTensor<uni20::make_real_t<Scalar>, 1>, class AllocationContext = void>
auto uni20::BlockSvdDecomposition< Scalar, DomainType, CodomainType, BlockExecutionPolicy, MatrixTensor, SingularValueTensor, AllocationContext >::symmetry ( ) const -> Symmetry
inlinenoexcept

Return the symmetry shared by the input and every sector.


The documentation for this class was generated from the following file: