27template <
class StoragePolicy> [[nodiscard]]
auto make_rabc_backend_selector()
29 using leaf_storage_policy =
typename StoragePolicy::leaf_storage_policy;
30 auto contraction_selector = linalg::select_backend_for_storage<leaf_storage_policy>(contract_op<2, 2, 1>{});
31 using contraction_selector_type = std::remove_cvref_t<
decltype(contraction_selector)>;
32 return backend_list{tensor_network::RightFirstRabcBackend<leaf_storage_policy, contraction_selector_type>{
33 std::move(contraction_selector)}};
44 template <
class StorageSelector>
47 static_cast<void>(storage_selector);
48 return detail::make_rabc_backend_selector<StoragePolicy>();
59template <
class Output,
class B> [[nodiscard]]
constexpr bool is_obvious_rabc_alias(Output& output, B
const& b)
noexcept
61 if constexpr (std::same_as<std::remove_cvref_t<Output>, std::remove_cvref_t<B>>)
63 return static_cast<void const*
>(std::addressof(output)) ==
static_cast<void const*
>(std::addressof(b));
85template <
class IntermediateStorage,
class ContractionSelector, detail::WritableRabcTensor Output, RabcPlan Plan,
86 detail::ReadableRabcTensor A, detail::ReadableRabcTensor B, detail::ReadableRabcTensor C>
87 requires detail::CompatibleRabcOperands<Output, Plan, A, B, C>
90 Output
const& output, Plan plan, A
const& a, B
const& b, C
const&
c)
92 auto backend = std::move(std::get<0>(selector.entries));
94 std::move(backend.contraction_selector), output, std::move(plan), a, b,
c);
106template <detail::WritableRabcTensor Output, RabcPlan Plan, detail::ReadableRabcTensor A, detail::ReadableRabcTensor B,
107 detail::ReadableRabcTensor C>
108 requires detail::CompatibleRabcOperands<Output, Plan, A, B, C>
134void rabc_contract(BackendSelector&& selector, Output& output, Plan
const& plan, A
const& a, B
const& b, C
const&
c)
136 if (detail::is_obvious_rabc_alias(output, b))
137 throw std::invalid_argument(
"R/A/B/C contraction output must not alias its input center");
147template <MutableBlockTensorView Output, RabcPlan Plan, BlockTensorView A, BlockTensorView B, BlockTensorView C>
148void rabc_contract(Output& output, Plan
const& plan, A
const& a, B
const& b, C
const&
c)
Ordered backend selector values shared by tensor storage and linalg dispatch.
Concepts and associated types for BlockTensor-level views.
Prepared right-first executor for one fixed R/A/B/C structure.
Definition right_first_rabc.hpp:234
Tensor-level view of a symmetry-preserving collection of dense blocks.
Definition block_tensor_concepts.hpp:52
BlockTensorView whose stored dense blocks support eventual mutation.
Definition block_tensor_concepts.hpp:73
Single named backend or ordered backend list accepted by dispatch front ends.
Definition backend_selector.hpp:88
Operation-tag backend dispatch over tensor-view operands.
Definition linalg/async.hpp:28
backend_list(Backends...) -> backend_list< std::remove_cvref_t< Backends >... >
constexpr auto select_backend(Operation const &operation, FirstTensor const &, RestTensors const &...)
Select the default backend list for an operation on Tensor operands.
Definition backend_selector.hpp:252
void dispatch_kernel(BackendSelector &&selector, Op op, Args &&... args)
Normalize a selector and dispatch or report that every eligible backend declined.
Definition dispatch.hpp:374
Definition right_first_rabc.hpp:34
auto prepare_rabc_contract(linalg::backend_list< RightFirstRabcBackend< IntermediateStorage, ContractionSelector > > selector, Output const &output, Plan plan, A const &a, B const &b, C const &c)
Prepare the single right-first backend selected for fixed R/A/B/C operands.
Definition rabc_contraction.hpp:89
void rabc_contract(BackendSelector &&selector, Output &output, Plan const &plan, A const &a, B const &b, C const &c)
Execute a fixed-output sparse R/A/B/C contraction with an explicit backend selector.
Definition rabc_contraction.hpp:134
Sparse logical plans for R/A/B/C block contractions.
Operation tag for sparse R/A/B/C contraction dispatch.
Storage-domain right-first backend for sparse R/A/B/C contractions.
Ordered list of backend values tried by the dispatch walk.
Definition backend_selector.hpp:62
static auto select(tensor_network::rabc_contract_op const &, StorageSelector storage_selector)
Definition rabc_contraction.hpp:45
Uni20-owned operation-specific default for a storage policy.
Definition backend_selector.hpp:105
Executor that reuses right-first (B_b,C_c) intermediates.
Definition right_first_rabc.hpp:44
Fixed-output sparse R/A/B/C contraction operation tag.
Definition rabc_operation.hpp:18