@@ -22,13 +22,11 @@ namespace sequant {
2222// / orthonormal to their dual (bra) counterparts
2323// / (`IndexSpaceMetric::Unit`) or not (`IndexSpaceMetric::General`);
2424// / this affects the value of Wick contractions.
25- // / - `braket_symmetry`: whether the primal (ket) and dual (bra) vector space
26- // / _bases_
27- // / are "equivalent" (homogenous to each other; `BraKetSymmetry::Symm`),
28- // / "conjugate to each other" (<a
29- // / href="https://en.wikipedia.org/wiki/Antilinear_map">conjugate-homogenous</a>
30- // / to each other; `BraKetSymmetry::Conjugate`) or are "nonequivalent" (not
31- // / homogeneous; `BraKetSymmetry::Nonsymm`)
25+ // / - `symmetry`, `hermiticity`, `column_symmetry`: the symmetries given to a
26+ // / *deserialized* tensor that does not specify them; the programmatic
27+ // / Tensor ctors are unaffected (see Tensor::Defaults). There is no
28+ // / `braket_symmetry` knob: a tensor's BraKetSymmetry is derived from its
29+ // / `hermiticity` and base field.
3230// / - `spbasis`: whether the bra/ket bases are spinor (`SPBasis::Spinor`) or
3331// / spin-free (`SPBasis::Spinfree`).
3432// / - `first_dummy_index_ordinal`: during its operation SeQuant will generate
@@ -58,6 +56,9 @@ class Context {
5856 constexpr static auto braket_typesetting = BraKetTypesetting::ContraSub;
5957 constexpr static auto braket_slot_typesetting =
6058 BraKetSlotTypesetting::TensorPackage;
59+ constexpr static auto symmetry = Symmetry::Nonsymm;
60+ constexpr static auto hermiticity = Hermiticity::NonHermitian;
61+ constexpr static auto column_symmetry = ColumnSymmetry::Nonsymm;
6162 };
6263
6364 // / helper for the named-parameter constructor of Context
@@ -86,6 +87,14 @@ class Context {
8687 // / the BraKetSlotTypesetting object
8788 BraKetSlotTypesetting braket_slot_typesetting =
8889 Defaults::braket_slot_typesetting;
90+ // / the default bra/ket permutational Symmetry for deserialized tensors
91+ Symmetry symmetry = Defaults::symmetry;
92+ // / the default Hermiticity for deserialized tensors; the braket symmetry
93+ // / of a deserialized tensor is *derived* from this and its #base_field
94+ Hermiticity hermiticity = Defaults::hermiticity;
95+ // / the default ColumnSymmetry (particle-permutation symmetry) for
96+ // / deserialized tensors
97+ ColumnSymmetry column_symmetry = Defaults::column_symmetry;
8998 };
9099 static Options make_default_options () { return {}; }
91100
@@ -155,6 +164,15 @@ class Context {
155164 // / \return BraKetSlotTypesetting of this context; see BraKetSlotTypesetting
156165 // / for the meaning of the possible values
157166 BraKetSlotTypesetting braket_slot_typesetting () const ;
167+ // / \return the default bra/ket permutational Symmetry for deserialized tensors
168+ Symmetry symmetry () const ;
169+ // / \return the default Hermiticity for deserialized tensors; the braket
170+ // / symmetry of a deserialized tensor is *derived* from this and its
171+ // / #base_field
172+ Hermiticity hermiticity () const ;
173+ // / \return the default ColumnSymmetry (particle-permutation symmetry) for
174+ // / deserialized tensors
175+ ColumnSymmetry column_symmetry () const ;
158176
159177 // / Sets the Vacuum for this context, convenient for chaining
160178 // / \param vacuum Vacuum
@@ -195,6 +213,16 @@ class Context {
195213 // / \param braket_slot_typeset BraKetSlotTypesetting
196214 // / \return ref to `*this`, for chaining
197215 Context& set (BraKetSlotTypesetting braket_slot_typeset);
216+ // / Sets the default bra/ket permutational Symmetry for deserialized tensors
217+ // / \return ref to `*this`, for chaining
218+ Context& set (Symmetry symmetry);
219+ // / Sets the default Hermiticity for deserialized tensors (the braket symmetry
220+ // / of a deserialized tensor is derived from this and its base field)
221+ // / \return ref to `*this`, for chaining
222+ Context& set (Hermiticity hermiticity);
223+ // / Sets the default ColumnSymmetry for deserialized tensors
224+ // / \return ref to `*this`, for chaining
225+ Context& set (ColumnSymmetry column_symmetry);
198226
199227 private:
200228 std::shared_ptr<IndexSpaceRegistry> idx_space_reg_ = nullptr ;
@@ -207,6 +235,9 @@ class Context {
207235 BraKetTypesetting braket_typesetting_ = Defaults::braket_typesetting;
208236 BraKetSlotTypesetting braket_slot_typesetting_ =
209237 Defaults::braket_slot_typesetting;
238+ Symmetry symmetry_ = Defaults::symmetry;
239+ Hermiticity hermiticity_ = Defaults::hermiticity;
240+ ColumnSymmetry column_symmetry_ = Defaults::column_symmetry;
210241};
211242
212243// / Context object equality comparison
0 commit comments