25 #define macro_unary_tube(f) \
28 for(auto it = y.tdomain()->begin() ; it != y.tdomain()->end() ; it++) \
30 auto sy = y.slice(it); \
31 sy->codomain() = f(sy->codomain()); \
36 #define macro_binary_tube_tube(f,output_type) \
38 assert_release(x1.tdomain() == x2.tdomain()); \
39 auto y = output_type; \
40 for(auto it = y.tdomain()->begin() ; it != y.tdomain()->end() ; it++) \
42 auto sy = y.slice(it); \
43 sy->codomain() = f(x1.slice(it)->codomain(), x2.slice(it)->codomain()); \
48 #define macro_binary_real_tube(f) \
51 for(auto it = y.tdomain()->begin() ; it != y.tdomain()->end() ; it++) \
53 auto sy = y.slice(it); \
54 sy->codomain() = f(x1, sy->codomain()); \
59 #define macro_binary_tube_real(f) \
62 for(auto it = y.tdomain()->begin() ; it != y.tdomain()->end() ; it++) \
64 auto sy = y.slice(it); \
65 sy->codomain() = f(sy->codomain(), x2); \
70 #define macro_member_binary_tube_tube(f) \
72 assert_release(x1.tdomain() == x2.tdomain()); \
73 for(auto it = x1.tdomain()->begin() ; it != x1.tdomain()->end() ; it++) \
75 auto sx1 = x1.slice(it); \
76 sx1->codomain() = f(sx1->codomain(), x2.slice(it)->codomain()); \
81 #define macro_member_binary_tube_real(f) \
83 for(auto it = x1.tdomain()->begin() ; it != x1.tdomain()->end() ; it++) \
85 auto sx1 = x1.slice(it); \
86 sx1->codomain() = f(sx1->codomain(), x2); \
92 struct is_slicedtube : std::false_type {};
95 struct is_slicedtube<
SlicedTube<U>> : std::true_type {};
98 inline constexpr bool is_slicedtube_v = is_slicedtube<std::remove_cvref_t<U>>::value;
101 concept NonSlicedTube = !is_slicedtube_v<Q>;
104 concept NonScalarTubeCodomain =
105 !std::is_same_v<std::remove_cvref_t<T>,
double> &&
106 !std::is_same_v<std::remove_cvref_t<T>,
Interval>;
109 inline T operator_tube_union(
const T& x1,
const T& x2) {
return x1 | x2; }
112 inline T operator_tube_intersection(
const T& x1,
const T& x2) {
return x1 & x2; }
114 template<
typename T,
typename X1,
typename X2>
115 inline T operator_tube_add(
const X1& x1,
const X2& x2) {
return x1 + x2; }
117 template<
typename T,
typename X1,
typename X2>
118 inline T operator_tube_sub(
const X1& x1,
const X2& x2) {
return x1 - x2; }
120 template<
typename T,
typename X1,
typename X2>
121 inline T operator_tube_mul(
const X1& x1,
const X2& x2) {
return x1 * x2; }
124 inline T operator_tube_scal_mul(
const Interval& x1,
const T& x2) {
return x1 * x2; }
127 inline T operator_tube_mul_scal(
const T& x1,
const Interval& x2) {
return x1 * x2; }
131 template<
typename T,
typename X1,
typename X2>
132 inline T operator_tube_div(
const X1& x1,
const X2& x2) {
return x1 / x2; }
134 template<
typename T,
typename X1>
135 inline T operator_tube_div_scal(
const X1& x1,
const Interval& x2) {
return x1 / x2; }
151 macro_member_binary_tube_tube(operator_tube_union<T>)
167 macro_binary_tube_tube(operator_tube_union<T>,x1)
183 macro_member_binary_tube_tube(operator_tube_intersection<T>)
199 macro_binary_tube_tube(operator_tube_intersection<T>,x1)
230 macro_binary_tube_tube(operator_tube_add<T>,x1)
244 template<
typename T,
typename Q>
245 requires NonSlicedTube<Q>
247 macro_binary_tube_real(operator_tube_add<T>)
261 template<
typename T,
typename Q>
262 requires NonSlicedTube<Q>
264 macro_binary_real_tube(operator_tube_add<T>)
273 template<
typename T,
typename Q>
274 requires NonSlicedTube<Q>
276 macro_member_binary_tube_real(operator_tube_add<T>)
287 macro_member_binary_tube_tube(operator_tube_add<T>)
318 macro_binary_tube_tube(operator_tube_sub<T>,x1)
332 template<
typename T,
typename Q>
333 requires NonSlicedTube<Q>
335 macro_binary_tube_real(operator_tube_sub<T>)
349 template<
typename T,
typename Q>
350 requires NonSlicedTube<Q>
352 macro_binary_real_tube(operator_tube_sub<T>)
361 template<
typename T,
typename Q>
362 requires NonSlicedTube<Q>
364 macro_member_binary_tube_real(operator_tube_sub<T>)
375 macro_member_binary_tube_tube(operator_tube_sub<T>)
390 requires (!std::is_same_v<T, double>)
392 macro_binary_real_tube(operator_tube_scal_mul<T>)
407 requires (!std::is_same_v<T, double>)
409 macro_binary_tube_real(operator_tube_mul_scal<T>)
421 macro_binary_tube_tube(operator_tube_mul<
Interval>,x1)
459 requires NonScalarTubeCodomain<T>
461 macro_binary_tube_tube(operator_tube_mul<T>,x2)
475 requires NonScalarTubeCodomain<T>
477 macro_binary_tube_tube(operator_tube_mul<T>,x1)
491 template<typename T, typename Q>
492 requires NonSlicedTube<Q>
494 macro_binary_tube_real(operator_tube_mul<T>)
508 template<typename T, typename Q>
509 requires NonSlicedTube<Q>
511 macro_binary_real_tube(operator_tube_mul<T>)
523 macro_binary_tube_tube(operator_tube_mul_vec,x2)
532 template<typename T, typename Q>
533 requires NonSlicedTube<Q>
535 macro_member_binary_tube_real(operator_tube_mul<T>)
546 macro_member_binary_tube_tube(operator_tube_mul<T>)
560 requires NonScalarTubeCodomain<T>
562 macro_member_binary_tube_tube(operator_tube_mul<T>)
577 requires (!std::is_same_v<T,
double>)
579 macro_binary_tube_real(operator_tube_div_scal<T>)
591 macro_binary_tube_tube(operator_tube_div<
Interval>,x1)
605 requires NonScalarTubeCodomain<T>
607 macro_binary_tube_tube(operator_tube_div<T>,x1)
621 template<typename T, typename Q>
622 requires NonSlicedTube<Q>
624 macro_binary_tube_real(operator_tube_div<T>)
638 template<typename T, typename Q>
639 requires NonSlicedTube<Q>
641 macro_binary_real_tube(operator_tube_div<T>)
650 template<typename T, typename Q>
651 requires NonSlicedTube<Q>
653 macro_member_binary_tube_real(operator_tube_div<T>)
664 macro_member_binary_tube_tube(operator_tube_div<T>)
678 requires NonScalarTubeCodomain<T>
680 macro_member_binary_tube_tube(operator_tube_div<T>)
Interval class, for representing closed and connected subsets of .
Definition codac2_Interval.h:50
Tube represented over a sliced temporal domain.
Definition codac2_SlicedTube.h:38
Definition codac2_OctaSym.h:21
Interval ceil(const Interval &x)
Returns ceil of .
Definition codac2_Interval_operations_impl.h:294
Interval atan(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:133
SlicedTube< T > & operator+=(SlicedTube< T > &x1, const Q &x2)
Pointwise addition assignment with a constant object of matching codomain type.
Definition codac2_SlicedTube_operations.h:275
Interval max(const Interval &x, const Interval &y)
Returns .
Definition codac2_Interval_operations_impl.h:274
SlicedTube< T > & operator-=(SlicedTube< T > &x1, const Q &x2)
Pointwise subtraction assignment with a constant object of matching codomain type.
Definition codac2_SlicedTube_operations.h:363
Interval asinh(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:237
Interval atanh(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:257
Interval pow(const Interval &x, int n)
Returns , .
Definition codac2_Interval_operations_impl.h:33
Interval sqrt(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:26
Interval cosh(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:205
Interval floor(const Interval &x)
Returns floor of .
Definition codac2_Interval_operations_impl.h:289
Interval sinh(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:216
Interval acos(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:119
Eigen::Matrix< Interval,-1, 1 > IntervalVector
Alias for a dynamic-size column vector of intervals.
Definition codac2_IntervalVector.h:25
Ellipsoid operator+(const Ellipsoid &e1, const Ellipsoid &e2)
Compute the Minkowski sum of two ellipsoids.
Interval atan2(const Interval &y, const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:140
Interval log(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:85
CtcInterType< typenameC1::ContractedTypes >::Ctc operator&(const C1 &c1, const C2 &c2)
Builds an intersection contractor from two contractors.
Definition codac2_CtcInter.h:230
SlicedTube< T > & operator&=(SlicedTube< T > &x1, const SlicedTube< T > &x2)
Pointwise intersection assignment of two tubes with the same codomain type.
Definition codac2_SlicedTube_operations.h:182
Interval operator-(const Interval &x, double y)
Returns with .
Definition codac2_Interval_impl.h:438
SlicedTube< T > & operator|=(SlicedTube< T > &x1, const SlicedTube< T > &x2)
Pointwise hull-union assignment of two tubes with the same codomain type.
Definition codac2_SlicedTube_operations.h:150
Interval cos(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:98
Interval exp(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:78
Interval tanh(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:223
Interval sqr(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:21
Interval abs(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:264
Interval asin(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:126
Interval integer(const Interval &x)
Returns the largest integer interval included in .
Definition codac2_Interval_operations_impl.h:284
Interval min(const Interval &x, const Interval &y)
Returns .
Definition codac2_Interval_operations_impl.h:269
Eigen::Matrix< Interval,-1,-1 > IntervalMatrix
Alias for a dynamic-size matrix of intervals.
Definition codac2_IntervalMatrix.h:25
Interval acosh(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:230
Interval sign(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:279
Interval sin(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:105
Interval tan(const Interval &x)
Returns .
Definition codac2_Interval_operations_impl.h:112