Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
space.hpp
Go to the documentation of this file.
1
7#pragma once
8
10
11#include <concepts>
12#include <string>
13#include <type_traits>
14#include <utility>
15
16namespace uni20
17{
18
21template <class T>
22concept Space = std::copy_constructible<std::remove_cvref_t<T>> && std::equality_comparable<std::remove_cvref_t<T>> &&
23 requires(std::remove_cvref_t<T>& space, std::remove_cvref_t<T> const& const_space, std::string label) {
24 { const_space.label() } -> std::same_as<std::string const&>;
25 { space.set_label(std::move(label)) } -> std::same_as<void>;
26 };
27
30template <class T>
31concept SymmetrySpace = Space<T> && requires(std::remove_cvref_t<T> const& space) {
32 { space.symmetry() } -> std::same_as<Symmetry>;
33};
34
35} // namespace uni20
Tensor-space value with a mutable semantic leg label.
Definition space.hpp:22
Space whose structure is interpreted in one explicit symmetry context.
Definition space.hpp:31
Definition async/async.hpp:26
Defines the lightweight public handle for canonicalized direct-product symmetries.