18 t.implicitPrimitive();
19 ct.implicitPrimitive();
21 { ct.implicitPrimitive().potential() } -> std::same_as<typename T::Scalar>;
22 { ct.implicitPrimitive().potential(v) } -> std::same_as<typename T::Scalar>;
24 { ct.implicitPrimitive().primitiveGradient() } -> std::convertible_to<typename T::VectorType>;
25 { ct.implicitPrimitive().primitiveGradient(v) } -> std::same_as<typename T::VectorType>;
27 t.implicitPrimitive().changeBasis(v);
43 { ct.algebraicSphere().isPlane() } -> std::same_as<bool>;
44 { ct.algebraicSphere().isValid() } -> std::same_as<bool>;
45 { ct.algebraicSphere().isNormalized() } -> std::same_as<bool>;
46 { ct.algebraicSphere().isApprox(ct, s) } -> std::same_as<bool>;
48 { t.algebraicSphere().applyPrattNorm() } -> std::same_as<bool>;
49 { ct.algebraicSphere().prattNorm() } -> std::same_as<typename T::Scalar>;
50 { ct.algebraicSphere().prattNorm2() } -> std::same_as<typename T::Scalar>;
52 { ct.algebraicSphere().radius() } -> std::convertible_to<typename T::Scalar>;
53 { ct.algebraicSphere().center() } -> std::convertible_to<typename T::VectorType>;
92 { ct.glsParam().tau() } -> std::same_as<typename T::Scalar>;
93 { ct.glsParam().eta() } -> std::same_as<typename T::VectorType>;
94 { ct.glsParam().kappa() } -> std::same_as<typename T::Scalar>;
96 { ct.glsParam().tau_normalized() } -> std::same_as<typename T::Scalar>;
97 { ct.glsParam().eta_normalized() } -> std::same_as<typename T::VectorType>;
98 { ct.glsParam().kappa_normalized() } -> std::same_as<typename T::Scalar>;
100 { ct.glsParam().fitness() } -> std::same_as<typename T::Scalar>;
101 { ct.glsParam().compareTo(ct,
true) } -> std::same_as<typename T::Scalar>;
108 { ct.glsDer().tau() } -> std::same_as<typename T::ScalarArray>;
109 { ct.glsDer().eta() } -> std::same_as<typename T::VectorTypeArray>;
110 { ct.glsDer().kappa() } -> std::same_as<typename T::ScalarArray>;
112 { ct.glsDer().tau_normalized() } -> std::same_as<typename T::ScalarArray>;
113 { ct.glsDer().eta_normalized() } -> std::same_as<typename T::VectorTypeArray>;
114 { ct.glsDer().kappa_normalized() } -> std::same_as<typename T::ScalarArray>;
156 { ct.heightField().height(s, s) } -> std::same_as<typename T::Scalar>;
157 { ct.heightField().h_uu() } -> std::same_as<const typename T::Scalar&>;
158 { ct.heightField().h_vv() } -> std::same_as<const typename T::Scalar&>;
159 { ct.heightField().h_uv() } -> std::same_as<const typename T::Scalar&>;
160 { ct.heightField().h_c() } -> std::same_as<const typename T::Scalar&>;
161 { ct.heightField().h_uu() } -> std::same_as<const typename T::Scalar&>;
162 { ct.heightField().h_uu() } -> std::same_as<const typename T::Scalar&>;
164 { ct.heightField().dh_du(s, s) } -> std::same_as<typename T::Scalar>;
165 { ct.heightField().dh_dv(s, s) } -> std::same_as<typename T::Scalar>;
166 { ct.heightField().d2h_duu(s, s) } -> std::same_as<typename T::Scalar>;
167 { ct.heightField().d2h_dvv(s, s) } -> std::same_as<typename T::Scalar>;
168 { ct.heightField().d2h_duv(s, s) } -> std::same_as<typename T::Scalar>;
170 { ct.heightField().heightTangentULocal(v) } -> std::same_as<typename T::VectorType>;
171 { ct.heightField().heightTangentVLocal(v) } -> std::same_as<typename T::VectorType>;
216 ct.curvatureTensor();
218 { ct.curvatureTensor().kmin() } -> std::same_as<typename T::Scalar>;
219 { ct.curvatureTensor().kmax() } -> std::same_as<typename T::Scalar>;
220 { ct.curvatureTensor().GaussianCurvature() } -> std::same_as<typename T::Scalar>;
222 { ct.curvatureTensor().kminDirection() } -> std::convertible_to<typename T::VectorType>;
223 { ct.curvatureTensor().kmaxDirection() } -> std::convertible_to<typename T::VectorType>;