Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-17 08:48:09

0001 //           Copyright Maksym Zhelyenzyakov 2025-2026.
0002 // Distributed under the Boost Software License, Version 1.0.
0003 //      (See accompanying file LICENSE_1_0.txt or copy at
0004 //           https://www.boost.org/LICENSE_1_0.txt)
0005 #ifndef REVERSE_MODE_AUTODIFF_STL_ET_HPP
0006 #define REVERSE_MODE_AUTODIFF_STL_ET_HPP
0007 
0008 #include <boost/math/differentiation/detail/reverse_mode_autodiff_stl_expressions.hpp>
0009 namespace boost {
0010 namespace math {
0011 namespace differentiation {
0012 namespace reverse_mode {
0013 
0014 template<typename RealType, size_t DerivativeOrder, typename ARG>
0015 fabs_expr<RealType, DerivativeOrder, ARG> fabs(const expression<RealType, DerivativeOrder, ARG> &arg)
0016 {
0017     return fabs_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0018 }
0019 template<typename RealType, size_t DerivativeOrder, typename ARG>
0020 auto abs(const expression<RealType, DerivativeOrder, ARG> &arg)
0021 {
0022     return fabs(arg);
0023 }
0024 template<typename RealType, size_t DerivativeOrder, typename ARG>
0025 ceil_expr<RealType, DerivativeOrder, ARG> ceil(const expression<RealType, DerivativeOrder, ARG> &arg)
0026 {
0027     return ceil_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0028 }
0029 template<typename RealType, size_t DerivativeOrder, typename ARG>
0030 floor_expr<RealType, DerivativeOrder, ARG> floor(
0031     const expression<RealType, DerivativeOrder, ARG> &arg)
0032 {
0033     return floor_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0034 }
0035 
0036 template<typename RealType, size_t DerivativeOrder, typename ARG>
0037 exp_expr<RealType, DerivativeOrder, ARG> exp(const expression<RealType, DerivativeOrder, ARG> &arg)
0038 {
0039     return exp_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0040 }
0041 
0042 template<typename RealType, size_t DerivativeOrder, typename LHS, typename RHS>
0043 pow_expr<RealType, DerivativeOrder, LHS, RHS> pow(
0044     const expression<RealType, DerivativeOrder, LHS> &lhs,
0045     const expression<RealType, DerivativeOrder, RHS> &rhs)
0046 {
0047     return pow_expr<RealType, DerivativeOrder, LHS, RHS>(lhs, rhs);
0048 }
0049 
0050 template<typename RealType2,
0051          typename RealType1,
0052          size_t DerivativeOrder,
0053          typename ARG,
0054          typename = typename std::enable_if<!detail::is_expression<RealType2>::value>::type>
0055 expr_pow_float_expr<RealType1, DerivativeOrder, ARG> pow(
0056     const expression<RealType1, DerivativeOrder, ARG> &arg, const RealType2 &v)
0057 {
0058     return expr_pow_float_expr<RealType1, DerivativeOrder, ARG>(arg, static_cast<RealType1>(v));
0059 };
0060 
0061 template<typename RealType, size_t DerivativeOrder, typename ARG>
0062 float_pow_expr_expr<RealType, DerivativeOrder, ARG> pow(
0063     const RealType &v, const expression<RealType, DerivativeOrder, ARG> &arg)
0064 {
0065     return float_pow_expr_expr<RealType, DerivativeOrder, ARG>(arg, v);
0066 };
0067 
0068 template<typename RealType, size_t DerivativeOrder, typename ARG>
0069 log_expr<RealType, DerivativeOrder, ARG> log(const expression<RealType, DerivativeOrder, ARG> &arg)
0070 {
0071     return log_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0072 };
0073 
0074 template<typename RealType, size_t DerivativeOrder, typename ARG>
0075 sqrt_expr<RealType, DerivativeOrder, ARG> sqrt(const expression<RealType, DerivativeOrder, ARG> &arg)
0076 {
0077     return sqrt_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0078 };
0079 
0080 template<typename RealType, size_t DerivativeOrder, typename ARG>
0081 auto frexp(const expression<RealType, DerivativeOrder, ARG> &arg, int *i)
0082 {
0083     BOOST_MATH_STD_USING
0084     frexp(arg.evaluate(), i);
0085     return arg / pow(static_cast<RealType>(2.0), *i);
0086 }
0087 
0088 template<typename RealType, size_t DerivativeOrder, typename ARG>
0089 auto ldexp(const expression<RealType, DerivativeOrder, ARG> &arg, const int &i)
0090 {
0091     BOOST_MATH_STD_USING
0092     return arg * pow(static_cast<RealType>(2.0), i);
0093 }
0094 
0095 template<typename RealType, size_t DerivativeOrder, typename ARG>
0096 cos_expr<RealType, DerivativeOrder, ARG> cos(const expression<RealType, DerivativeOrder, ARG> &arg)
0097 {
0098     return cos_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0099 };
0100 
0101 template<typename RealType, size_t DerivativeOrder, typename ARG>
0102 sin_expr<RealType, DerivativeOrder, ARG> sin(const expression<RealType, DerivativeOrder, ARG> &arg)
0103 {
0104     return sin_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0105 };
0106 
0107 template<typename RealType, size_t DerivativeOrder, typename ARG>
0108 tan_expr<RealType, DerivativeOrder, ARG> tan(const expression<RealType, DerivativeOrder, ARG> &arg)
0109 {
0110     return tan_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0111 };
0112 
0113 template<typename RealType, size_t DerivativeOrder, typename ARG>
0114 acos_expr<RealType, DerivativeOrder, ARG> acos(const expression<RealType, DerivativeOrder, ARG> &arg)
0115 {
0116     return acos_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0117 };
0118 
0119 template<typename RealType, size_t DerivativeOrder, typename ARG>
0120 asin_expr<RealType, DerivativeOrder, ARG> asin(const expression<RealType, DerivativeOrder, ARG> &arg)
0121 {
0122     return asin_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0123 };
0124 
0125 template<typename RealType, size_t DerivativeOrder, typename ARG>
0126 atan_expr<RealType, DerivativeOrder, ARG> atan(const expression<RealType, DerivativeOrder, ARG> &arg)
0127 {
0128     return atan_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0129 };
0130 
0131 template<typename RealType, size_t DerivativeOrder, typename LHS, typename RHS>
0132 atan2_expr<RealType, DerivativeOrder, LHS, RHS> atan2(
0133     const expression<RealType, DerivativeOrder, LHS> &lhs,
0134     const expression<RealType, DerivativeOrder, RHS> &rhs)
0135 {
0136     return atan2_expr<RealType, DerivativeOrder, LHS, RHS>(lhs, rhs);
0137 }
0138 
0139 template<typename RealType, size_t DerivativeOrder, typename ARG>
0140 atan2_right_float_expr<RealType, DerivativeOrder, ARG> atan2(
0141     const expression<RealType, DerivativeOrder, ARG> &arg, const RealType &v)
0142 {
0143     return atan2_right_float_expr<RealType, DerivativeOrder, ARG>(arg, v);
0144 };
0145 
0146 template<typename RealType, size_t DerivativeOrder, typename ARG>
0147 atan2_left_float_expr<RealType, DerivativeOrder, ARG> atan2(
0148     const RealType &v, const expression<RealType, DerivativeOrder, ARG> &arg)
0149 {
0150     return atan2_left_float_expr<RealType, DerivativeOrder, ARG>(arg, v);
0151 };
0152 
0153 template<typename RealType, size_t DerivativeOrder, typename ARG>
0154 trunc_expr<RealType, DerivativeOrder, ARG> trunc(
0155     const expression<RealType, DerivativeOrder, ARG> &arg)
0156 {
0157     return trunc_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0158 }
0159 
0160 template<typename RealType, size_t DerivativeOrder, typename LHS, typename RHS>
0161 auto fmod(const expression<RealType, DerivativeOrder, LHS> &lhs,
0162           const expression<RealType, DerivativeOrder, RHS> &rhs)
0163 {
0164     return fmod_expr<RealType, DerivativeOrder, LHS, RHS>(lhs, rhs);
0165 }
0166 
0167 template<typename RealType, size_t DerivativeOrder, typename ARG>
0168 auto fmod(const expression<RealType, DerivativeOrder, ARG> &lhs, const RealType rhs)
0169 {
0170     return fmod_right_float_expr<RealType, DerivativeOrder, ARG>(lhs, rhs);
0171 }
0172 
0173 template<typename RealType, size_t DerivativeOrder, typename ARG>
0174 auto fmod(const RealType lhs, const expression<RealType, DerivativeOrder, ARG> &rhs)
0175 {
0176     return fmod_left_float_expr<RealType, DerivativeOrder, ARG>(rhs, lhs);
0177 }
0178 
0179 template<typename RealType, size_t DerivativeOrder, typename ARG>
0180 round_expr<RealType, DerivativeOrder, ARG> round(
0181     const expression<RealType, DerivativeOrder, ARG> &arg)
0182 {
0183     return round_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0184 }
0185 
0186 template<typename RealType, size_t DerivativeOrder, typename ARG>
0187 int iround(const expression<RealType, DerivativeOrder, ARG> &arg)
0188 {
0189     rvar<RealType, DerivativeOrder> tmp = arg.evaluate();
0190     return iround(tmp.item());
0191 }
0192 template<typename RealType, size_t DerivativeOrder, typename ARG>
0193 long lround(const expression<RealType, DerivativeOrder, ARG> &arg)
0194 {
0195     BOOST_MATH_STD_USING
0196     rvar<RealType, DerivativeOrder> tmp = arg.evaluate();
0197     return lround(tmp.item());
0198 }
0199 
0200 template<typename RealType, size_t DerivativeOrder, typename ARG>
0201 long long llround(const expression<RealType, DerivativeOrder, ARG> &arg)
0202 {
0203     rvar<RealType, DerivativeOrder> tmp = arg.evaluate();
0204     return llround(tmp.item());
0205 }
0206 
0207 template<typename RealType, size_t DerivativeOrder, typename ARG>
0208 int itrunc(const expression<RealType, DerivativeOrder, ARG> &arg)
0209 {
0210     rvar<RealType, DerivativeOrder> tmp = arg.evaluate();
0211     return itrunc(tmp.item());
0212 }
0213 
0214 template<typename RealType, size_t DerivativeOrder, typename ARG>
0215 long ltrunc(const expression<RealType, DerivativeOrder, ARG> &arg)
0216 {
0217     rvar<RealType, DerivativeOrder> tmp = arg.evaluate();
0218     return ltrunc(tmp.item());
0219 }
0220 
0221 template<typename RealType, size_t DerivativeOrder, typename ARG>
0222 long long lltrunc(const expression<RealType, DerivativeOrder, ARG> &arg)
0223 {
0224     rvar<RealType, DerivativeOrder> tmp = arg.evaluate();
0225     return lltrunc(tmp.item());
0226 }
0227 
0228 template<typename RealType, size_t DerivativeOrder, typename ARG>
0229 sinh_expr<RealType, DerivativeOrder, ARG> sinh(const expression<RealType, DerivativeOrder, ARG> &arg)
0230 {
0231     return sinh_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0232 }
0233 
0234 template<typename RealType, size_t DerivativeOrder, typename ARG>
0235 cosh_expr<RealType, DerivativeOrder, ARG> cosh(const expression<RealType, DerivativeOrder, ARG> &arg)
0236 {
0237     return cosh_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0238 }
0239 
0240 template<typename RealType, size_t DerivativeOrder, typename ARG>
0241 tanh_expr<RealType, DerivativeOrder, ARG> tanh(const expression<RealType, DerivativeOrder, ARG> &arg)
0242 {
0243     return tanh_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0244 }
0245 
0246 template<typename RealType, size_t DerivativeOrder, typename ARG>
0247 log10_expr<RealType, DerivativeOrder, ARG> log10(
0248     const expression<RealType, DerivativeOrder, ARG> &arg)
0249 {
0250     return log10_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0251 }
0252 template<typename RealType, size_t DerivativeOrder, typename ARG>
0253 asinh_expr<RealType, DerivativeOrder, ARG> asinh(
0254     const expression<RealType, DerivativeOrder, ARG> &arg)
0255 {
0256     return asinh_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0257 }
0258 template<typename RealType, size_t DerivativeOrder, typename ARG>
0259 acosh_expr<RealType, DerivativeOrder, ARG> acosh(
0260     const expression<RealType, DerivativeOrder, ARG> &arg)
0261 {
0262     return acosh_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0263 }
0264 template<typename RealType, size_t DerivativeOrder, typename ARG>
0265 atanh_expr<RealType, DerivativeOrder, ARG> atanh(
0266     const expression<RealType, DerivativeOrder, ARG> &arg)
0267 {
0268     return atanh_expr<RealType, DerivativeOrder, ARG>(arg, static_cast<RealType>(0.0));
0269 }
0270 } // namespace reverse_mode
0271 } // namespace differentiation
0272 } // namespace math
0273 } // namespace boost
0274 
0275 #endif