NumCpp  2.10.1
A Templatized Header Only C++ Implementation of the Python NumPy Library
ellint_3.hpp
Go to the documentation of this file.
1 #pragma once
29 
30 #include <cmath>
31 
32 #if defined(__cpp_lib_math_special_functions) || !defined(NUMCPP_NO_USE_BOOST)
33 
37 #include "NumCpp/NdArray.hpp"
38 
39 #ifndef __cpp_lib_math_special_functions
40 #include "boost/math/special_functions/ellint_3.hpp"
41 #endif
42 
43 #include <type_traits>
44 
45 namespace nc::special
46 {
47  //============================================================================
48  // Method Description:
58  template<typename dtype1, typename dtype2, typename dtype3>
59  auto ellint_3(dtype1 inK, dtype2 inV, dtype3 inP)
60  {
64 
65 #ifdef __cpp_lib_math_special_functions
66  return std::ellint_3(inK, inV, inP);
67 #else
68  return boost::math::ellint_3(inK, inV, inP);
69 #endif
70  }
71 
72  //============================================================================
73  // Method Description:
83  template<typename dtype1, typename dtype2, typename dtype3>
84  auto ellint_3(const NdArray<dtype1>& inArrayK, const NdArray<dtype2>& inArrayV, const NdArray<dtype3>& inArrayP)
85  {
86  if (inArrayK.size() != inArrayV.size() || inArrayK.size() != inArrayP.size())
87  {
88  THROW_INVALID_ARGUMENT_ERROR("Shapes of inArrayK, inArrayV, and inArrayP must match.");
89  }
90 
91  NdArray<decltype(ellint_3(dtype1{ 0 }, dtype2{ 0 }, dtype3{ 0 }))> returnArray(inArrayK.shape());
92 
93  for (uint32 i = 0; i < inArrayK.size(); ++i)
94  {
95  returnArray[i] = ellint_3(inArrayK[i], inArrayV[i], inArrayP[i]);
96  }
97 
98  return returnArray;
99  }
100 } // namespace nc::special
101 
102 #endif // #if defined(__cpp_lib_math_special_functions) || !defined(NUMCPP_NO_USE_BOOST)
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition: Error.hpp:37
#define STATIC_ASSERT_ARITHMETIC(dtype)
Definition: StaticAsserts.hpp:39
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition: NdArrayCore.hpp:138
size_type size() const noexcept
Definition: NdArrayCore.hpp:4415
Shape shape() const noexcept
Definition: NdArrayCore.hpp:4402
Definition: airy_ai.hpp:39
auto ellint_3(dtype1 inK, dtype2 inV, dtype3 inP)
Definition: ellint_3.hpp:59
auto ellint_3(const NdArray< dtype1 > &inArrayK, const NdArray< dtype2 > &inArrayV, const NdArray< dtype3 > &inArrayP)
Definition: ellint_3.hpp:84
std::uint32_t uint32
Definition: Types.hpp:40