From 894ef4f3eac38e1b058325ad24576cb3ddcbc04e Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Sat, 23 Mar 2024 19:53:18 +0100 Subject: [PATCH] Rename quantity to make way for an actual quantity concept --- geometry/grassmann.hpp | 22 +++++++++---------- geometry/grassmann_body.hpp | 22 +++++++++---------- geometry/hilbert.hpp | 4 ++-- geometry/hilbert_body.hpp | 8 +++---- geometry/point.hpp | 10 ++++----- geometry/point_body.hpp | 4 ++-- geometry/r3_element.hpp | 22 +++++++++---------- geometry/r3_element_body.hpp | 22 +++++++++---------- geometry/r3x3_matrix.hpp | 12 +++++----- geometry/r3x3_matrix_body.hpp | 6 ++--- numerics/double_precision_body.hpp | 2 +- ...321\213\321\210\321\221\320\262_basis.hpp" | 6 ++--- ...13\321\210\321\221\320\262_basis_body.hpp" | 10 ++++----- quantities/concepts.hpp | 7 +++--- quantities/concepts_test.cpp | 16 +++++++------- 15 files changed, 87 insertions(+), 86 deletions(-) diff --git a/geometry/grassmann.hpp b/geometry/grassmann.hpp index f0778c13f5..40b6b01096 100644 --- a/geometry/grassmann.hpp +++ b/geometry/grassmann.hpp @@ -253,43 +253,43 @@ Multivector operator-( Multivector const& right); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> operator*( LScalar const& left, Multivector const& right); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> operator*( Multivector const& left, RScalar const& right); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> operator/( Multivector const& left, RScalar const& right); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplyAdd( Multivector const& a, RScalar const& b, Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplySubtract( Multivector const& a, RScalar const& b, Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplyAdd( Multivector const& a, RScalar const& b, Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplySubtract( Multivector const& a, @@ -297,25 +297,25 @@ FusedNegatedMultiplySubtract( Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplyAdd( LScalar const& a, Multivector const& b, Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplySubtract( LScalar const& a, Multivector const& b, Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplyAdd( LScalar const& a, Multivector const& b, Multivector, Frame, rank> const& c); template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplySubtract( LScalar const& a, diff --git a/geometry/grassmann_body.hpp b/geometry/grassmann_body.hpp index 5abb90c7b7..4843c56c65 100644 --- a/geometry/grassmann_body.hpp +++ b/geometry/grassmann_body.hpp @@ -426,7 +426,7 @@ Multivector operator-( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> operator*(LScalar const& left, Multivector const& right) { @@ -435,7 +435,7 @@ operator*(LScalar const& left, } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> operator*(Multivector const& left, RScalar const& right) { @@ -444,7 +444,7 @@ operator*(Multivector const& left, } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> operator/(Multivector const& left, RScalar const& right) { @@ -453,7 +453,7 @@ operator/(Multivector const& left, } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplyAdd( Multivector const& a, RScalar const& b, @@ -465,7 +465,7 @@ Multivector, Frame, rank> FusedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplySubtract( Multivector const& a, RScalar const& b, @@ -477,7 +477,7 @@ Multivector, Frame, rank> FusedMultiplySubtract( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplyAdd( Multivector const& a, RScalar const& b, @@ -489,7 +489,7 @@ Multivector, Frame, rank> FusedNegatedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplySubtract( Multivector const& a, @@ -502,7 +502,7 @@ FusedNegatedMultiplySubtract( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplyAdd( LScalar const& a, Multivector const& b, @@ -514,7 +514,7 @@ Multivector, Frame, rank> FusedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedMultiplySubtract( LScalar const& a, Multivector const& b, @@ -526,7 +526,7 @@ Multivector, Frame, rank> FusedMultiplySubtract( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplyAdd( LScalar const& a, Multivector const& b, @@ -538,7 +538,7 @@ Multivector, Frame, rank> FusedNegatedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity Multivector, Frame, rank> FusedNegatedMultiplySubtract( LScalar const& a, diff --git a/geometry/hilbert.hpp b/geometry/hilbert.hpp index 6fca7c2470..ff5d50c6c6 100644 --- a/geometry/hilbert.hpp +++ b/geometry/hilbert.hpp @@ -27,7 +27,7 @@ template struct Hilbert; template - requires quantity && quantity + requires convertible_to_quantity && convertible_to_quantity struct Hilbert : not_constructible { static constexpr int dimension = 1; @@ -36,7 +36,7 @@ struct Hilbert : not_constructible { }; template - requires quantity + requires convertible_to_quantity struct Hilbert : not_constructible { static constexpr int dimension = 1; diff --git a/geometry/hilbert_body.hpp b/geometry/hilbert_body.hpp index 1b3e190bb2..9e36e3ffe1 100644 --- a/geometry/hilbert_body.hpp +++ b/geometry/hilbert_body.hpp @@ -12,26 +12,26 @@ namespace internal { using namespace principia::quantities::_elementary_functions; template - requires quantity && quantity + requires convertible_to_quantity && convertible_to_quantity auto Hilbert::InnerProduct(T1 const& t1, T2 const& t2) -> InnerProductType { return t1 * t2; } template - requires quantity + requires convertible_to_quantity auto Hilbert::InnerProduct(T const& t1, T const& t2) -> InnerProductType { return t1 * t2; } template - requires quantity + requires convertible_to_quantity auto Hilbert::Norm²(T const& t) -> Norm²Type { return t * t; } template - requires quantity + requires convertible_to_quantity auto Hilbert::Norm(T const& t) -> NormType { return Abs(t); } diff --git a/geometry/point.hpp b/geometry/point.hpp index cd7b83daff..39f4da15da 100644 --- a/geometry/point.hpp +++ b/geometry/point.hpp @@ -46,7 +46,7 @@ class Point final { constexpr friend bool operator!=(Point const& left, Point const& right) = default; constexpr friend auto operator<=>(Point const& left, Point const& right) - requires quantity = default; + requires convertible_to_quantity = default; constexpr Vector operator-(Point const& from) const; @@ -79,10 +79,10 @@ class Point final { L const& a, R const& b, Point> const& c); template - requires quantity + requires convertible_to_quantity friend constexpr Point NextUp(Point x); template - requires quantity + requires convertible_to_quantity friend constexpr Point NextDown(Point x); template @@ -106,10 +106,10 @@ Point> FusedNegatedMultiplyAdd(L const& a, Point> const& c); template - requires quantity + requires convertible_to_quantity constexpr Point NextUp(Point x); template - requires quantity + requires convertible_to_quantity constexpr Point NextDown(Point x); template diff --git a/geometry/point_body.hpp b/geometry/point_body.hpp index d79878a350..20860a5802 100644 --- a/geometry/point_body.hpp +++ b/geometry/point_body.hpp @@ -135,14 +135,14 @@ Point> FusedNegatedMultiplyAdd(L const& a, R const& b, } template - requires quantity + requires convertible_to_quantity constexpr Point NextUp(Point const x) { using quantities::_elementary_functions::NextUp; return Point(NextUp(x.coordinates_)); } template - requires quantity + requires convertible_to_quantity constexpr Point NextDown(Point const x) { using quantities::_elementary_functions::NextDown; return Point(NextDown(x.coordinates_)); diff --git a/geometry/r3_element.hpp b/geometry/r3_element.hpp index d9e9c01d24..7d8836a762 100644 --- a/geometry/r3_element.hpp +++ b/geometry/r3_element.hpp @@ -115,41 +115,41 @@ R3Element operator-(R3Element const& left, // product LScalar ⊗ Scalar³. Since LScalar ⊗ Scalar³ ≅ (LScalar ⊗ Scalar)³, // the result is an R3Element>. template - requires quantity + requires convertible_to_quantity R3Element> operator*(LScalar const& left, R3Element const& right); template - requires quantity + requires convertible_to_quantity R3Element> operator*(R3Element const& left, RScalar const& right); template - requires quantity + requires convertible_to_quantity R3Element> operator/(R3Element const& left, RScalar const& right); // FMA for ±vector * scalar ± vector. template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplyAdd( R3Element const& a, RScalar const& b, R3Element> const& c); template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplySubtract( R3Element const& a, RScalar const& b, R3Element> const& c); template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplyAdd( R3Element const& a, RScalar const& b, R3Element> const& c); template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplySubtract( R3Element const& a, RScalar const& b, @@ -157,25 +157,25 @@ R3Element> FusedNegatedMultiplySubtract( // FMA for ±scalar * vector ± vector. template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplyAdd( LScalar const& a, R3Element const& b, R3Element> const& c); template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplySubtract( LScalar const& a, R3Element const& b, R3Element> const& c); template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplyAdd( LScalar const& a, R3Element const& b, R3Element> const& c); template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplySubtract( LScalar const& a, R3Element const& b, diff --git a/geometry/r3_element_body.hpp b/geometry/r3_element_body.hpp index d244005f9f..74e7f79ba9 100644 --- a/geometry/r3_element_body.hpp +++ b/geometry/r3_element_body.hpp @@ -253,7 +253,7 @@ R3Element operator-(R3Element const& left, } template - requires quantity + requires convertible_to_quantity R3Element> operator*( LScalar const& left, R3Element const& right) { @@ -269,7 +269,7 @@ R3Element> operator*( } template - requires quantity + requires convertible_to_quantity R3Element> operator*(R3Element const& left, RScalar const& right) { #if PRINCIPIA_USE_SSE3_INTRINSICS() @@ -284,7 +284,7 @@ R3Element> operator*(R3Element const& left, } template - requires quantity + requires convertible_to_quantity R3Element> operator/(R3Element const& left, RScalar const& right) { #if PRINCIPIA_USE_SSE3_INTRINSICS() @@ -299,7 +299,7 @@ R3Element> operator/(R3Element const& left, } template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplyAdd( R3Element const& a, RScalar const& b, @@ -314,7 +314,7 @@ R3Element> FusedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplySubtract( R3Element const& a, RScalar const& b, @@ -329,7 +329,7 @@ R3Element> FusedMultiplySubtract( } template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplyAdd( R3Element const& a, RScalar const& b, @@ -344,7 +344,7 @@ R3Element> FusedNegatedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplySubtract( R3Element const& a, RScalar const& b, @@ -359,7 +359,7 @@ R3Element> FusedNegatedMultiplySubtract( } template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplyAdd( LScalar const& a, R3Element const& b, @@ -374,7 +374,7 @@ R3Element> FusedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity R3Element> FusedMultiplySubtract( LScalar const& a, R3Element const& b, @@ -389,7 +389,7 @@ R3Element> FusedMultiplySubtract( } template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplyAdd( LScalar const& a, R3Element const& b, @@ -404,7 +404,7 @@ R3Element> FusedNegatedMultiplyAdd( } template - requires quantity + requires convertible_to_quantity R3Element> FusedNegatedMultiplySubtract( LScalar const& a, R3Element const& b, diff --git a/geometry/r3x3_matrix.hpp b/geometry/r3x3_matrix.hpp index 460d7a5a2e..5abc7f7660 100644 --- a/geometry/r3x3_matrix.hpp +++ b/geometry/r3x3_matrix.hpp @@ -112,15 +112,15 @@ class R3x3Matrix final { R3x3Matrix const& right); template - requires quantity + requires convertible_to_quantity friend R3x3Matrix> operator*(LS const& left, R3x3Matrix const& right); template - requires quantity + requires convertible_to_quantity friend R3x3Matrix> operator*(R3x3Matrix const& left, RS const& right); template - requires quantity + requires convertible_to_quantity friend R3x3Matrix> operator/(R3x3Matrix const& left, RS const& right); @@ -156,16 +156,16 @@ R3Element> operator*( R3x3Matrix const& right); template - requires quantity + requires convertible_to_quantity R3x3Matrix> operator*( LScalar const& left, R3x3Matrix const& right); template - requires quantity + requires convertible_to_quantity R3x3Matrix> operator*(R3x3Matrix const& left, RScalar const& right); template - requires quantity + requires convertible_to_quantity R3x3Matrix> operator/( R3x3Matrix const& left, RScalar const& right); diff --git a/geometry/r3x3_matrix_body.hpp b/geometry/r3x3_matrix_body.hpp index 7aa40d56ad..fa86f9e4c5 100644 --- a/geometry/r3x3_matrix_body.hpp +++ b/geometry/r3x3_matrix_body.hpp @@ -342,7 +342,7 @@ R3Element> operator*( template - requires quantity + requires convertible_to_quantity R3x3Matrix> operator*( LScalar const& left, R3x3Matrix const& right) { @@ -355,7 +355,7 @@ R3x3Matrix> operator*( } template - requires quantity + requires convertible_to_quantity R3x3Matrix> operator*( R3x3Matrix const& left, RScalar const& right) { @@ -368,7 +368,7 @@ R3x3Matrix> operator*( } template - requires quantity + requires convertible_to_quantity R3x3Matrix> operator/( R3x3Matrix const& left, RScalar const& right) { diff --git a/numerics/double_precision_body.hpp b/numerics/double_precision_body.hpp index cec2f7d831..bc5d6ed862 100644 --- a/numerics/double_precision_body.hpp +++ b/numerics/double_precision_body.hpp @@ -101,7 +101,7 @@ struct ComponentwiseComparator, R3Element> : not_constructible { }; template - requires quantity && quantity + requires convertible_to_quantity && convertible_to_quantity struct ComponentwiseComparator { static bool GreaterThanOrEqualOrZero(T const& left, U const& right) { return Abs(left) >= Abs(right) || left == T{}; diff --git "a/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis.hpp" "b/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis.hpp" index c2ef9d929a..b402055d82 100644 --- "a/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis.hpp" +++ "b/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis.hpp" @@ -83,12 +83,12 @@ class PolynomialInЧебышёвBasis // of |error_estimate| has no real roots. This is useful if the series is an // approximation of some function with an L∞ error less than |error_estimate|. bool MayHaveRealRoots(Value error_estimate = Value{}) const - requires quantity; + requires convertible_to_quantity; // Returns the real roots of the polynomial, computed as the eigenvalues of // the Frobenius companion matrix. absl::btree_set RealRoots(double ε) const - requires quantity; + requires convertible_to_quantity; // Compatibility deserialization: this class is the equivalent of the old // ЧебышёвSeries. @@ -138,7 +138,7 @@ class PolynomialInЧебышёвBasis // Returns the Frobenius companion matrix suitable for the Чебышёв basis. FixedMatrix FrobeniusCompanionMatrix() const - requires quantity; + requires convertible_to_quantity; void WriteToMessage( not_null message) const override; diff --git "a/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis_body.hpp" "b/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis_body.hpp" index 721be26b6d..a232511540 100644 --- "a/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis_body.hpp" +++ "b/numerics/polynomial_in_\321\207\320\265\320\261\321\213\321\210\321\221\320\262_basis_body.hpp" @@ -38,7 +38,7 @@ using namespace principia::quantities::_si; template bool PolynomialInЧебышёвBasis:: MayHaveRealRoots(Value const error_estimate) const - requires quantity { + requires convertible_to_quantity { return MayHaveRealRootsOrDie(error_estimate); } @@ -46,7 +46,7 @@ template absl::btree_set PolynomialInЧебышёвBasis::RealRoots( double const ε) const - requires quantity { + requires convertible_to_quantity { return RealRootsOrDie(ε); } @@ -212,7 +212,7 @@ PolynomialInЧебышёвBasis::upper_bound() const template FixedMatrix PolynomialInЧебышёвBasis::FrobeniusCompanionMatrix() - const requires quantity { + const requires convertible_to_quantity { int const N = degree(); FixedMatrix A(uninitialized); @@ -304,7 +304,7 @@ PolynomialInЧебышёвBasis::ReadFromMessage( template bool PolynomialInЧебышёвBasis:: MayHaveRealRootsOrDie(Value const error_estimate) const { - if constexpr (quantity) { + if constexpr (convertible_to_quantity) { CHECK_LE(Value{}, error_estimate); // This code follow [Boy06], theorem 2. Note that [Boy06] has another // criterion, B₁ and concludes: “There was no detectable difference between @@ -332,7 +332,7 @@ template absl::btree_set PolynomialInЧебышёвBasis:: RealRootsOrDie(double const ε) const { - if constexpr (quantity) { + if constexpr (convertible_to_quantity) { auto const companion_matrix = FrobeniusCompanionMatrix(); auto const real_schur_decomposition = RealSchurDecomposition(companion_matrix, ε); diff --git a/quantities/concepts.hpp b/quantities/concepts.hpp index 80a3f571ac..2b46b19bbf 100644 --- a/quantities/concepts.hpp +++ b/quantities/concepts.hpp @@ -50,8 +50,9 @@ template concept real_affine_space = affine_space; template -concept quantity = std::integral || std::floating_point || - is_instance_of_v>; +concept convertible_to_quantity = + std::convertible_to || + is_instance_of_v>; } // namespace internal @@ -59,7 +60,7 @@ using internal::additive_group; using internal::affine_space; using internal::real_affine_space; using internal::real_vector_space; -using internal::quantity; +using internal::convertible_to_quantity; using internal::vector_space; } // namespace _concepts diff --git a/quantities/concepts_test.cpp b/quantities/concepts_test.cpp index e6815c4461..a5f224531e 100644 --- a/quantities/concepts_test.cpp +++ b/quantities/concepts_test.cpp @@ -12,14 +12,14 @@ using namespace principia::quantities::_named_quantities; using namespace principia::quantities::_quantities; TEST(Traits, IsQuantityV) { - static_assert(quantity); - static_assert(quantity); - static_assert(quantity); - static_assert(quantity); - // Not sure if the following is what we want, but at least let's nail it in a - // test. - static_assert(!quantity); - static_assert(!quantity); + static_assert(convertible_to_quantity); + static_assert(convertible_to_quantity); + static_assert(convertible_to_quantity); + static_assert(convertible_to_quantity); + static_assert(convertible_to_quantity); + static_assert(convertible_to_quantity); + + static_assert(!convertible_to_quantity); } } // namespace quantities