Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
block_tensor_concepts.hpp
Go to the documentation of this file.
1
7#pragma once
8
11
12#include <concepts>
13#include <cstddef>
14#include <span>
15#include <type_traits>
16#include <utility>
17
18namespace uni20
19{
20
22template <class Tensor> using block_tensor_type_t = std::remove_cvref_t<Tensor>;
23
25template <class Tensor> using block_tensor_value_t = typename block_tensor_type_t<Tensor>::value_type;
26
28template <class Tensor> using block_tensor_key_t = typename block_tensor_type_t<Tensor>::key_type;
29
31template <class Tensor> using block_tensor_domain_t = typename block_tensor_type_t<Tensor>::domain_type;
32
35
37template <class Tensor>
39 decltype(std::declval<block_tensor_type_t<Tensor> const&>().block_by_ordinal(std::size_t{}));
40
42template <class Tensor>
44 decltype(std::declval<std::remove_reference_t<Tensor>&>().block_by_ordinal(std::size_t{}));
45
51template <class Tensor>
52concept BlockTensorView = requires(block_tensor_type_t<Tensor> const& tensor, std::size_t ordinal) {
53 typename block_tensor_type_t<Tensor>::element_type;
54 typename block_tensor_type_t<Tensor>::value_type;
55 typename block_tensor_type_t<Tensor>::key_type;
56 typename block_tensor_type_t<Tensor>::domain_type;
57 typename block_tensor_type_t<Tensor>::codomain_type;
58 typename block_tensor_type_t<Tensor>::storage_policy;
59 typename block_tensor_type_t<Tensor>::backend_selector_type;
60 { tensor.symmetry() } -> std::same_as<Symmetry>;
61 { tensor.domain() } -> std::same_as<block_tensor_domain_t<Tensor> const&>;
62 { tensor.codomain() } -> std::same_as<block_tensor_codomain_t<Tensor> const&>;
63 { block_tensor_type_t<Tensor>::order() } -> std::same_as<std::size_t>;
64 { block_tensor_type_t<Tensor>::key_coordinate_count() } -> std::same_as<std::size_t>;
65 { block_tensor_type_t<Tensor>::dense_block_order() } -> std::same_as<std::size_t>;
66 { tensor.stored_block_count() } -> std::same_as<std::size_t>;
67 { tensor.stored_keys() } -> std::same_as<std::span<block_tensor_key_t<Tensor> const>>;
68 { tensor.block_by_ordinal(ordinal) } -> TensorView;
69};
70
72template <class Tensor>
74 BlockTensorView<Tensor> && requires(std::remove_reference_t<Tensor>& tensor, std::size_t ordinal) {
75 { tensor.block_by_ordinal(ordinal) } -> MutableTensorView;
76 };
77
79template <class Tensor>
81
83template <class Tensor>
86
90template <class Tensor>
93
100template <class Tensor>
102 typename block_tensor_type_t<Tensor>::borrowed_block_tensor_view_tag;
103};
104
106template <class Tensor>
108 BlockTensorView<Tensor> && requires(block_tensor_type_t<Tensor> const& tensor, std::size_t ordinal) {
109 tensor.async_block_by_ordinal(ordinal).read();
110 };
111
113template <class Tensor>
116 requires(std::remove_reference_t<Tensor>& tensor, std::size_t ordinal) {
117 tensor.async_block_by_ordinal(ordinal).write();
118 };
119
120} // namespace uni20
BlockTensorView exposing an independently scheduled read timeline per block.
Definition block_tensor_concepts.hpp:107
Tensor-level view of a symmetry-preserving collection of dense blocks.
Definition block_tensor_concepts.hpp:52
BlockTensorView whose destruction does not destroy its referenced numerical payload.
Definition block_tensor_concepts.hpp:101
BlockTensorView whose stored numerical blocks are generalized diagonals.
Definition block_tensor_concepts.hpp:91
Full logical mdspec with a rank-one view of its generalized diagonal components.
Definition mdspan/concepts.hpp:465
BlockTensorView whose read-only dense blocks are immediately accessible.
Definition block_tensor_concepts.hpp:80
TensorView whose mdspec is already an mdspan.
Definition tensor/concepts.hpp:100
MutableBlockTensorView exposing an independently scheduled write timeline per block.
Definition block_tensor_concepts.hpp:114
BlockTensorView whose stored dense blocks support eventual mutation.
Definition block_tensor_concepts.hpp:73
MutableBlockTensorView whose writable dense blocks are immediately accessible.
Definition block_tensor_concepts.hpp:84
MutableTensorView whose writable mdspec is already an mdspan.
Definition tensor/concepts.hpp:138
TensorView whose writable mdspec supports eventual element assignment.
Definition tensor/concepts.hpp:133
Tensor-level object exposing readable multidimensional metadata and a backend selector.
Definition tensor/concepts.hpp:82
Definition async/async.hpp:26
std::remove_cvref_t< Tensor > block_tensor_type_t
Cvref-stripped BlockTensor-level object type.
Definition block_tensor_concepts.hpp:22
typename block_tensor_type_t< Tensor >::domain_type block_tensor_domain_t
Ordered domain type exposed by a BlockTensor-level object.
Definition block_tensor_concepts.hpp:31
typename block_tensor_type_t< Tensor >::value_type block_tensor_value_t
Scalar value type exposed by a BlockTensor-level object.
Definition block_tensor_concepts.hpp:25
decltype(std::declval< std::remove_reference_t< Tensor > & >().block_by_ordinal(std::size_t{})) block_tensor_mutable_block_t
Writable dense-block TensorView exposed by stable block ordinal.
Definition block_tensor_concepts.hpp:44
typename block_tensor_type_t< Tensor >::key_type block_tensor_key_t
Logical block-key type exposed by a BlockTensor-level object.
Definition block_tensor_concepts.hpp:28
typename block_tensor_type_t< Tensor >::codomain_type block_tensor_codomain_t
Ordered codomain type exposed by a BlockTensor-level object.
Definition block_tensor_concepts.hpp:34
decltype(std::declval< block_tensor_type_t< Tensor > const & >().block_by_ordinal(std::size_t{})) block_tensor_const_block_t
Read-only dense-block TensorView exposed by stable block ordinal.
Definition block_tensor_concepts.hpp:39
Defines the lightweight public handle for canonicalized direct-product symmetries.
Concepts for tensor-level objects that resolve mdspan kernel operands.