@lakutata/math 0.0.0-stage → 3.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1728) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +954 -2
  3. package/README.zh-CN.md +578 -0
  4. package/THIRD_PARTY_NOTICES.md +553 -0
  5. package/binding.gyp +89 -0
  6. package/dist/cjs/exceptions/MathArgumentException.d.ts +11 -0
  7. package/dist/cjs/exceptions/MathArgumentException.js +18 -0
  8. package/dist/cjs/exceptions/MathCancelledException.d.ts +10 -0
  9. package/dist/cjs/exceptions/MathCancelledException.js +17 -0
  10. package/dist/cjs/exceptions/MathDefinitionException.d.ts +11 -0
  11. package/dist/cjs/exceptions/MathDefinitionException.js +18 -0
  12. package/dist/cjs/exceptions/MathDivisionByZeroException.d.ts +10 -0
  13. package/dist/cjs/exceptions/MathDivisionByZeroException.js +17 -0
  14. package/dist/cjs/exceptions/MathDomainException.d.ts +11 -0
  15. package/dist/cjs/exceptions/MathDomainException.js +18 -0
  16. package/dist/cjs/exceptions/MathException.d.ts +19 -0
  17. package/dist/cjs/exceptions/MathException.js +22 -0
  18. package/dist/cjs/exceptions/MathNotSupportedException.d.ts +11 -0
  19. package/dist/cjs/exceptions/MathNotSupportedException.js +18 -0
  20. package/dist/cjs/exceptions/MathSyntaxException.d.ts +11 -0
  21. package/dist/cjs/exceptions/MathSyntaxException.js +18 -0
  22. package/dist/cjs/exceptions/MathTimeoutException.d.ts +10 -0
  23. package/dist/cjs/exceptions/MathTimeoutException.js +17 -0
  24. package/dist/cjs/exceptions/MathUnitException.d.ts +11 -0
  25. package/dist/cjs/exceptions/MathUnitException.js +18 -0
  26. package/dist/cjs/exceptions/MathUnknownFunctionException.d.ts +12 -0
  27. package/dist/cjs/exceptions/MathUnknownFunctionException.js +19 -0
  28. package/dist/cjs/exports/Math.d.ts +28 -0
  29. package/dist/cjs/exports/Math.js +84 -0
  30. package/dist/cjs/lib/Addon.d.ts +5 -0
  31. package/dist/cjs/lib/Addon.js +9 -0
  32. package/dist/cjs/lib/Context.d.ts +90 -0
  33. package/dist/cjs/lib/Context.js +134 -0
  34. package/dist/cjs/lib/Decimal.d.ts +276 -0
  35. package/dist/cjs/lib/Decimal.js +402 -0
  36. package/dist/cjs/lib/Defaults.d.ts +273 -0
  37. package/dist/cjs/lib/Defaults.js +308 -0
  38. package/dist/cjs/lib/Distribution.d.ts +177 -0
  39. package/dist/cjs/lib/Distribution.js +196 -0
  40. package/dist/cjs/lib/Expression.d.ts +791 -0
  41. package/dist/cjs/lib/Expression.js +991 -0
  42. package/dist/cjs/lib/ExpressionMatrix.d.ts +284 -0
  43. package/dist/cjs/lib/ExpressionMatrix.js +412 -0
  44. package/dist/cjs/lib/LinearAlgebra.d.ts +613 -0
  45. package/dist/cjs/lib/LinearAlgebra.js +712 -0
  46. package/dist/cjs/lib/MathScope.d.ts +268 -0
  47. package/dist/cjs/lib/MathScope.js +316 -0
  48. package/dist/cjs/lib/MathSet.d.ts +139 -0
  49. package/dist/cjs/lib/MathSet.js +376 -0
  50. package/dist/cjs/lib/Matrix.d.ts +212 -0
  51. package/dist/cjs/lib/Matrix.js +393 -0
  52. package/dist/cjs/lib/Native.d.ts +80 -0
  53. package/dist/cjs/lib/Native.js +61 -0
  54. package/dist/cjs/lib/NumberTheory.d.ts +356 -0
  55. package/dist/cjs/lib/NumberTheory.js +524 -0
  56. package/dist/cjs/lib/Numeric.d.ts +363 -0
  57. package/dist/cjs/lib/Numeric.js +243 -0
  58. package/dist/cjs/lib/Polynomials.d.ts +140 -0
  59. package/dist/cjs/lib/Polynomials.js +167 -0
  60. package/dist/cjs/lib/SparseMatrix.d.ts +125 -0
  61. package/dist/cjs/lib/SparseMatrix.js +341 -0
  62. package/dist/cjs/lib/Statistics.d.ts +366 -0
  63. package/dist/cjs/lib/Statistics.js +380 -0
  64. package/dist/cjs/lib/Unit.d.ts +342 -0
  65. package/dist/cjs/lib/Unit.js +1027 -0
  66. package/dist/cjs/lib/UnitTable.d.ts +39 -0
  67. package/dist/cjs/lib/UnitTable.js +634 -0
  68. package/dist/cjs/package.json +1 -0
  69. package/dist/esm/exceptions/MathArgumentException.js +14 -0
  70. package/dist/esm/exceptions/MathCancelledException.js +13 -0
  71. package/dist/esm/exceptions/MathDefinitionException.js +14 -0
  72. package/dist/esm/exceptions/MathDivisionByZeroException.js +13 -0
  73. package/dist/esm/exceptions/MathDomainException.js +14 -0
  74. package/dist/esm/exceptions/MathException.js +18 -0
  75. package/dist/esm/exceptions/MathNotSupportedException.js +14 -0
  76. package/dist/esm/exceptions/MathSyntaxException.js +14 -0
  77. package/dist/esm/exceptions/MathTimeoutException.js +13 -0
  78. package/dist/esm/exceptions/MathUnitException.js +14 -0
  79. package/dist/esm/exceptions/MathUnknownFunctionException.js +15 -0
  80. package/dist/esm/exports/Math.js +26 -0
  81. package/dist/esm/lib/Addon.js +10 -0
  82. package/dist/esm/lib/Context.js +128 -0
  83. package/dist/esm/lib/Decimal.js +397 -0
  84. package/dist/esm/lib/Defaults.js +290 -0
  85. package/dist/esm/lib/Distribution.js +191 -0
  86. package/dist/esm/lib/Expression.js +979 -0
  87. package/dist/esm/lib/ExpressionMatrix.js +407 -0
  88. package/dist/esm/lib/LinearAlgebra.js +708 -0
  89. package/dist/esm/lib/MathScope.js +311 -0
  90. package/dist/esm/lib/MathSet.js +370 -0
  91. package/dist/esm/lib/Matrix.js +382 -0
  92. package/dist/esm/lib/Native.js +56 -0
  93. package/dist/esm/lib/NumberTheory.js +520 -0
  94. package/dist/esm/lib/Numeric.js +239 -0
  95. package/dist/esm/lib/Polynomials.js +163 -0
  96. package/dist/esm/lib/SparseMatrix.js +332 -0
  97. package/dist/esm/lib/Statistics.js +376 -0
  98. package/dist/esm/lib/Unit.js +1018 -0
  99. package/dist/esm/lib/UnitTable.js +631 -0
  100. package/dist/types/exceptions/MathArgumentException.d.ts +11 -0
  101. package/dist/types/exceptions/MathCancelledException.d.ts +10 -0
  102. package/dist/types/exceptions/MathDefinitionException.d.ts +11 -0
  103. package/dist/types/exceptions/MathDivisionByZeroException.d.ts +10 -0
  104. package/dist/types/exceptions/MathDomainException.d.ts +11 -0
  105. package/dist/types/exceptions/MathException.d.ts +19 -0
  106. package/dist/types/exceptions/MathNotSupportedException.d.ts +11 -0
  107. package/dist/types/exceptions/MathSyntaxException.d.ts +11 -0
  108. package/dist/types/exceptions/MathTimeoutException.d.ts +10 -0
  109. package/dist/types/exceptions/MathUnitException.d.ts +11 -0
  110. package/dist/types/exceptions/MathUnknownFunctionException.d.ts +12 -0
  111. package/dist/types/exports/Math.d.ts +28 -0
  112. package/dist/types/lib/Addon.d.ts +5 -0
  113. package/dist/types/lib/Context.d.ts +90 -0
  114. package/dist/types/lib/Decimal.d.ts +276 -0
  115. package/dist/types/lib/Defaults.d.ts +273 -0
  116. package/dist/types/lib/Distribution.d.ts +177 -0
  117. package/dist/types/lib/Expression.d.ts +791 -0
  118. package/dist/types/lib/ExpressionMatrix.d.ts +284 -0
  119. package/dist/types/lib/LinearAlgebra.d.ts +613 -0
  120. package/dist/types/lib/MathScope.d.ts +268 -0
  121. package/dist/types/lib/MathSet.d.ts +139 -0
  122. package/dist/types/lib/Matrix.d.ts +212 -0
  123. package/dist/types/lib/Native.d.ts +80 -0
  124. package/dist/types/lib/NumberTheory.d.ts +356 -0
  125. package/dist/types/lib/Numeric.d.ts +363 -0
  126. package/dist/types/lib/Polynomials.d.ts +140 -0
  127. package/dist/types/lib/SparseMatrix.d.ts +125 -0
  128. package/dist/types/lib/Statistics.d.ts +366 -0
  129. package/dist/types/lib/Unit.d.ts +342 -0
  130. package/dist/types/lib/UnitTable.d.ts +39 -0
  131. package/native/addon.cpp +1374 -0
  132. package/native/async/Pool.cpp +133 -0
  133. package/native/async/Pool.h +59 -0
  134. package/native/config/boost_math_policy.h +26 -0
  135. package/native/config/mpdecimal/mpdecimal.h +809 -0
  136. package/native/config/symengine/symengine_config.h +44 -0
  137. package/native/config/symengine/symengine_export.h +19 -0
  138. package/native/core/Errors.cpp +77 -0
  139. package/native/core/Errors.h +72 -0
  140. package/native/core/Handle.cpp +109 -0
  141. package/native/core/Handle.h +72 -0
  142. package/native/core/Scope.cpp +122 -0
  143. package/native/core/Scope.h +36 -0
  144. package/native/functions/Functions.cpp +468 -0
  145. package/native/functions/Functions.h +115 -0
  146. package/native/functions/Gosper.cpp +429 -0
  147. package/native/functions/Gosper.h +20 -0
  148. package/native/functions/SpecialIntegrals.cpp +329 -0
  149. package/native/functions/SpecialIntegrals.h +53 -0
  150. package/native/functions/Summation.cpp +645 -0
  151. package/native/functions/Summation.h +42 -0
  152. package/native/integrals/Integrals.cpp +1428 -0
  153. package/native/integrals/Integrals.h +32 -0
  154. package/native/limits/Gruntz.cpp +1332 -0
  155. package/native/limits/Gruntz.h +24 -0
  156. package/native/linalg/Decompositions.cpp +159 -0
  157. package/native/linalg/Functions.cpp +199 -0
  158. package/native/linalg/Linalg.cpp +123 -0
  159. package/native/linalg/Linalg.h +67 -0
  160. package/native/linalg/LinalgSupport.h +69 -0
  161. package/native/linalg/Sparse.cpp +172 -0
  162. package/native/matrix/Matrices.cpp +766 -0
  163. package/native/matrix/Matrices.h +74 -0
  164. package/native/ntheory/NumberTheory.cpp +754 -0
  165. package/native/ntheory/NumberTheory.h +56 -0
  166. package/native/numeric/Compiled.cpp +93 -0
  167. package/native/numeric/Compiled.h +49 -0
  168. package/native/numeric/Integrate.cpp +718 -0
  169. package/native/numeric/Numeric.h +95 -0
  170. package/native/numeric/ODE.cpp +542 -0
  171. package/native/numeric/Roots.cpp +402 -0
  172. package/native/ops/Decimal.cpp +776 -0
  173. package/native/ops/Decimal.h +182 -0
  174. package/native/ops/DecimalComplex.cpp +738 -0
  175. package/native/ops/DecimalEvaluator.h +79 -0
  176. package/native/ops/DecimalFunctions.cpp +439 -0
  177. package/native/ops/DecimalOperations.cpp +236 -0
  178. package/native/ops/DecimalSpecial.cpp +1028 -0
  179. package/native/ops/DecimalSupport.h +109 -0
  180. package/native/ops/Operations.cpp +969 -0
  181. package/native/ops/Operations.h +120 -0
  182. package/native/ops/Piecewise.cpp +195 -0
  183. package/native/ops/Piecewise.h +40 -0
  184. package/native/parser/Parser.cpp +853 -0
  185. package/native/parser/Parser.h +56 -0
  186. package/native/poly/Convert.cpp +210 -0
  187. package/native/poly/Convert.h +40 -0
  188. package/native/poly/Dense.cpp +1008 -0
  189. package/native/poly/Dense.h +136 -0
  190. package/native/poly/Euclid.cpp +446 -0
  191. package/native/poly/Euclid.h +44 -0
  192. package/native/poly/Factor.cpp +919 -0
  193. package/native/poly/Factor.h +36 -0
  194. package/native/poly/Galois.cpp +439 -0
  195. package/native/poly/Galois.h +86 -0
  196. package/native/poly/Inequalities.cpp +227 -0
  197. package/native/poly/Inequalities.h +21 -0
  198. package/native/poly/Poly.cpp +338 -0
  199. package/native/poly/Poly.h +46 -0
  200. package/native/poly/Rational.cpp +403 -0
  201. package/native/poly/Rational.h +33 -0
  202. package/native/poly/RealRoots.cpp +136 -0
  203. package/native/poly/RealRoots.h +35 -0
  204. package/native/printer/Printer.cpp +973 -0
  205. package/native/printer/Printer.h +23 -0
  206. package/native/simplify/Simplify.cpp +921 -0
  207. package/native/simplify/Simplify.h +21 -0
  208. package/native/stats/Distributions.cpp +392 -0
  209. package/native/stats/Distributions.h +33 -0
  210. package/native/stats/Statistics.cpp +255 -0
  211. package/native/stats/Statistics.h +25 -0
  212. package/package.json +85 -4
  213. package/scripts/sources.mjs +35 -0
  214. package/vendor/PATCHES.md +169 -0
  215. package/vendor/boost/config/README.md +43 -0
  216. package/vendor/boost/config/include/boost/config/abi/borland_prefix.hpp +27 -0
  217. package/vendor/boost/config/include/boost/config/abi/borland_suffix.hpp +12 -0
  218. package/vendor/boost/config/include/boost/config/abi/msvc_prefix.hpp +22 -0
  219. package/vendor/boost/config/include/boost/config/abi/msvc_suffix.hpp +8 -0
  220. package/vendor/boost/config/include/boost/config/abi_prefix.hpp +25 -0
  221. package/vendor/boost/config/include/boost/config/abi_suffix.hpp +25 -0
  222. package/vendor/boost/config/include/boost/config/assert_cxx03.hpp +211 -0
  223. package/vendor/boost/config/include/boost/config/assert_cxx11.hpp +212 -0
  224. package/vendor/boost/config/include/boost/config/assert_cxx14.hpp +47 -0
  225. package/vendor/boost/config/include/boost/config/assert_cxx17.hpp +65 -0
  226. package/vendor/boost/config/include/boost/config/assert_cxx20.hpp +59 -0
  227. package/vendor/boost/config/include/boost/config/assert_cxx23.hpp +41 -0
  228. package/vendor/boost/config/include/boost/config/assert_cxx98.hpp +23 -0
  229. package/vendor/boost/config/include/boost/config/auto_link.hpp +530 -0
  230. package/vendor/boost/config/include/boost/config/compiler/borland.hpp +342 -0
  231. package/vendor/boost/config/include/boost/config/compiler/clang.hpp +370 -0
  232. package/vendor/boost/config/include/boost/config/compiler/clang_version.hpp +98 -0
  233. package/vendor/boost/config/include/boost/config/compiler/codegear.hpp +389 -0
  234. package/vendor/boost/config/include/boost/config/compiler/comeau.hpp +59 -0
  235. package/vendor/boost/config/include/boost/config/compiler/common_edg.hpp +185 -0
  236. package/vendor/boost/config/include/boost/config/compiler/compaq_cxx.hpp +19 -0
  237. package/vendor/boost/config/include/boost/config/compiler/cray.hpp +446 -0
  238. package/vendor/boost/config/include/boost/config/compiler/diab.hpp +26 -0
  239. package/vendor/boost/config/include/boost/config/compiler/digitalmars.hpp +146 -0
  240. package/vendor/boost/config/include/boost/config/compiler/gcc.hpp +386 -0
  241. package/vendor/boost/config/include/boost/config/compiler/gcc_xml.hpp +115 -0
  242. package/vendor/boost/config/include/boost/config/compiler/greenhills.hpp +28 -0
  243. package/vendor/boost/config/include/boost/config/compiler/hp_acc.hpp +153 -0
  244. package/vendor/boost/config/include/boost/config/compiler/intel.hpp +577 -0
  245. package/vendor/boost/config/include/boost/config/compiler/kai.hpp +33 -0
  246. package/vendor/boost/config/include/boost/config/compiler/metrowerks.hpp +201 -0
  247. package/vendor/boost/config/include/boost/config/compiler/mpw.hpp +143 -0
  248. package/vendor/boost/config/include/boost/config/compiler/nvcc.hpp +64 -0
  249. package/vendor/boost/config/include/boost/config/compiler/pathscale.hpp +141 -0
  250. package/vendor/boost/config/include/boost/config/compiler/pgi.hpp +23 -0
  251. package/vendor/boost/config/include/boost/config/compiler/sgi_mipspro.hpp +29 -0
  252. package/vendor/boost/config/include/boost/config/compiler/sunpro_cc.hpp +225 -0
  253. package/vendor/boost/config/include/boost/config/compiler/vacpp.hpp +189 -0
  254. package/vendor/boost/config/include/boost/config/compiler/visualc.hpp +400 -0
  255. package/vendor/boost/config/include/boost/config/compiler/xlcpp.hpp +303 -0
  256. package/vendor/boost/config/include/boost/config/compiler/xlcpp_zos.hpp +174 -0
  257. package/vendor/boost/config/include/boost/config/detail/cxx_composite.hpp +218 -0
  258. package/vendor/boost/config/include/boost/config/detail/posix_features.hpp +95 -0
  259. package/vendor/boost/config/include/boost/config/detail/select_compiler_config.hpp +157 -0
  260. package/vendor/boost/config/include/boost/config/detail/select_platform_config.hpp +147 -0
  261. package/vendor/boost/config/include/boost/config/detail/select_stdlib_config.hpp +121 -0
  262. package/vendor/boost/config/include/boost/config/detail/suffix.hpp +1334 -0
  263. package/vendor/boost/config/include/boost/config/header_deprecated.hpp +26 -0
  264. package/vendor/boost/config/include/boost/config/helper_macros.hpp +37 -0
  265. package/vendor/boost/config/include/boost/config/no_tr1/cmath.hpp +28 -0
  266. package/vendor/boost/config/include/boost/config/no_tr1/complex.hpp +28 -0
  267. package/vendor/boost/config/include/boost/config/no_tr1/functional.hpp +28 -0
  268. package/vendor/boost/config/include/boost/config/no_tr1/memory.hpp +28 -0
  269. package/vendor/boost/config/include/boost/config/no_tr1/utility.hpp +28 -0
  270. package/vendor/boost/config/include/boost/config/platform/aix.hpp +33 -0
  271. package/vendor/boost/config/include/boost/config/platform/amigaos.hpp +15 -0
  272. package/vendor/boost/config/include/boost/config/platform/beos.hpp +26 -0
  273. package/vendor/boost/config/include/boost/config/platform/bsd.hpp +83 -0
  274. package/vendor/boost/config/include/boost/config/platform/cloudabi.hpp +18 -0
  275. package/vendor/boost/config/include/boost/config/platform/cray.hpp +18 -0
  276. package/vendor/boost/config/include/boost/config/platform/cygwin.hpp +71 -0
  277. package/vendor/boost/config/include/boost/config/platform/haiku.hpp +31 -0
  278. package/vendor/boost/config/include/boost/config/platform/hpux.hpp +87 -0
  279. package/vendor/boost/config/include/boost/config/platform/irix.hpp +31 -0
  280. package/vendor/boost/config/include/boost/config/platform/linux.hpp +106 -0
  281. package/vendor/boost/config/include/boost/config/platform/macos.hpp +87 -0
  282. package/vendor/boost/config/include/boost/config/platform/qnxnto.hpp +31 -0
  283. package/vendor/boost/config/include/boost/config/platform/solaris.hpp +31 -0
  284. package/vendor/boost/config/include/boost/config/platform/symbian.hpp +97 -0
  285. package/vendor/boost/config/include/boost/config/platform/vms.hpp +25 -0
  286. package/vendor/boost/config/include/boost/config/platform/vxworks.hpp +422 -0
  287. package/vendor/boost/config/include/boost/config/platform/wasm.hpp +23 -0
  288. package/vendor/boost/config/include/boost/config/platform/win32.hpp +90 -0
  289. package/vendor/boost/config/include/boost/config/platform/zos.hpp +32 -0
  290. package/vendor/boost/config/include/boost/config/pragma_message.hpp +31 -0
  291. package/vendor/boost/config/include/boost/config/requires_threads.hpp +92 -0
  292. package/vendor/boost/config/include/boost/config/stdlib/dinkumware.hpp +324 -0
  293. package/vendor/boost/config/include/boost/config/stdlib/libcomo.hpp +93 -0
  294. package/vendor/boost/config/include/boost/config/stdlib/libcpp.hpp +185 -0
  295. package/vendor/boost/config/include/boost/config/stdlib/libstdcpp3.hpp +482 -0
  296. package/vendor/boost/config/include/boost/config/stdlib/modena.hpp +79 -0
  297. package/vendor/boost/config/include/boost/config/stdlib/msl.hpp +98 -0
  298. package/vendor/boost/config/include/boost/config/stdlib/roguewave.hpp +208 -0
  299. package/vendor/boost/config/include/boost/config/stdlib/sgi.hpp +168 -0
  300. package/vendor/boost/config/include/boost/config/stdlib/stlport.hpp +258 -0
  301. package/vendor/boost/config/include/boost/config/stdlib/vacpp.hpp +74 -0
  302. package/vendor/boost/config/include/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  303. package/vendor/boost/config/include/boost/config/user.hpp +133 -0
  304. package/vendor/boost/config/include/boost/config/warning_disable.hpp +47 -0
  305. package/vendor/boost/config/include/boost/config/workaround.hpp +310 -0
  306. package/vendor/boost/config/include/boost/config.hpp +67 -0
  307. package/vendor/boost/config/include/boost/cstdint.hpp +556 -0
  308. package/vendor/boost/config/include/boost/cxx11_char_types.hpp +70 -0
  309. package/vendor/boost/config/include/boost/detail/workaround.hpp +10 -0
  310. package/vendor/boost/config/include/boost/limits.hpp +146 -0
  311. package/vendor/boost/config/include/boost/static_assert.hpp +179 -0
  312. package/vendor/boost/config/include/boost/version.hpp +32 -0
  313. package/vendor/boost/math/LICENSE +23 -0
  314. package/vendor/boost/math/README.md +184 -0
  315. package/vendor/boost/math/include/boost/cstdfloat.hpp +58 -0
  316. package/vendor/boost/math/include/boost/math/bindings/detail/big_digamma.hpp +297 -0
  317. package/vendor/boost/math/include/boost/math/bindings/detail/big_lanczos.hpp +777 -0
  318. package/vendor/boost/math/include/boost/math/bindings/mpfr.hpp +974 -0
  319. package/vendor/boost/math/include/boost/math/bindings/mpreal.hpp +921 -0
  320. package/vendor/boost/math/include/boost/math/bindings/rr.hpp +876 -0
  321. package/vendor/boost/math/include/boost/math/ccmath/abs.hpp +89 -0
  322. package/vendor/boost/math/include/boost/math/ccmath/ccmath.hpp +45 -0
  323. package/vendor/boost/math/include/boost/math/ccmath/ceil.hpp +78 -0
  324. package/vendor/boost/math/include/boost/math/ccmath/copysign.hpp +81 -0
  325. package/vendor/boost/math/include/boost/math/ccmath/detail/config.hpp +52 -0
  326. package/vendor/boost/math/include/boost/math/ccmath/detail/swap.hpp +21 -0
  327. package/vendor/boost/math/include/boost/math/ccmath/div.hpp +86 -0
  328. package/vendor/boost/math/include/boost/math/ccmath/fabs.hpp +41 -0
  329. package/vendor/boost/math/include/boost/math/ccmath/fdim.hpp +93 -0
  330. package/vendor/boost/math/include/boost/math/ccmath/floor.hpp +131 -0
  331. package/vendor/boost/math/include/boost/math/ccmath/fma.hpp +130 -0
  332. package/vendor/boost/math/include/boost/math/ccmath/fmax.hpp +89 -0
  333. package/vendor/boost/math/include/boost/math/ccmath/fmin.hpp +89 -0
  334. package/vendor/boost/math/include/boost/math/ccmath/fmod.hpp +114 -0
  335. package/vendor/boost/math/include/boost/math/ccmath/fpclassify.hpp +48 -0
  336. package/vendor/boost/math/include/boost/math/ccmath/frexp.hpp +101 -0
  337. package/vendor/boost/math/include/boost/math/ccmath/hypot.hpp +116 -0
  338. package/vendor/boost/math/include/boost/math/ccmath/ilogb.hpp +60 -0
  339. package/vendor/boost/math/include/boost/math/ccmath/isfinite.hpp +53 -0
  340. package/vendor/boost/math/include/boost/math/ccmath/isgreater.hpp +42 -0
  341. package/vendor/boost/math/include/boost/math/ccmath/isgreaterequal.hpp +42 -0
  342. package/vendor/boost/math/include/boost/math/ccmath/isinf.hpp +61 -0
  343. package/vendor/boost/math/include/boost/math/ccmath/isless.hpp +42 -0
  344. package/vendor/boost/math/include/boost/math/ccmath/islessequal.hpp +42 -0
  345. package/vendor/boost/math/include/boost/math/ccmath/isnan.hpp +42 -0
  346. package/vendor/boost/math/include/boost/math/ccmath/isnormal.hpp +47 -0
  347. package/vendor/boost/math/include/boost/math/ccmath/isunordered.hpp +35 -0
  348. package/vendor/boost/math/include/boost/math/ccmath/ldexp.hpp +81 -0
  349. package/vendor/boost/math/include/boost/math/ccmath/logb.hpp +86 -0
  350. package/vendor/boost/math/include/boost/math/ccmath/modf.hpp +79 -0
  351. package/vendor/boost/math/include/boost/math/ccmath/next.hpp +458 -0
  352. package/vendor/boost/math/include/boost/math/ccmath/remainder.hpp +106 -0
  353. package/vendor/boost/math/include/boost/math/ccmath/round.hpp +179 -0
  354. package/vendor/boost/math/include/boost/math/ccmath/scalbln.hpp +60 -0
  355. package/vendor/boost/math/include/boost/math/ccmath/scalbn.hpp +81 -0
  356. package/vendor/boost/math/include/boost/math/ccmath/signbit.hpp +218 -0
  357. package/vendor/boost/math/include/boost/math/ccmath/sqrt.hpp +80 -0
  358. package/vendor/boost/math/include/boost/math/ccmath/trunc.hpp +70 -0
  359. package/vendor/boost/math/include/boost/math/common_factor.hpp +23 -0
  360. package/vendor/boost/math/include/boost/math/common_factor_ct.hpp +34 -0
  361. package/vendor/boost/math/include/boost/math/common_factor_rt.hpp +30 -0
  362. package/vendor/boost/math/include/boost/math/complex/acos.hpp +245 -0
  363. package/vendor/boost/math/include/boost/math/complex/acosh.hpp +34 -0
  364. package/vendor/boost/math/include/boost/math/complex/asin.hpp +252 -0
  365. package/vendor/boost/math/include/boost/math/complex/asinh.hpp +32 -0
  366. package/vendor/boost/math/include/boost/math/complex/atan.hpp +36 -0
  367. package/vendor/boost/math/include/boost/math/complex/atanh.hpp +214 -0
  368. package/vendor/boost/math/include/boost/math/complex/details.hpp +68 -0
  369. package/vendor/boost/math/include/boost/math/complex/fabs.hpp +23 -0
  370. package/vendor/boost/math/include/boost/math/complex.hpp +32 -0
  371. package/vendor/boost/math/include/boost/math/concepts/distributions.hpp +497 -0
  372. package/vendor/boost/math/include/boost/math/concepts/real_concept.hpp +400 -0
  373. package/vendor/boost/math/include/boost/math/concepts/real_type_concept.hpp +119 -0
  374. package/vendor/boost/math/include/boost/math/concepts/std_real_concept.hpp +427 -0
  375. package/vendor/boost/math/include/boost/math/constants/calculate_constants.hpp +1117 -0
  376. package/vendor/boost/math/include/boost/math/constants/constants.hpp +360 -0
  377. package/vendor/boost/math/include/boost/math/constants/info.hpp +169 -0
  378. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_cmath.hpp +1012 -0
  379. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_complex.hpp +38 -0
  380. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_complex_std.hpp +813 -0
  381. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_iostream.hpp +822 -0
  382. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_limits.hpp +87 -0
  383. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_types.hpp +441 -0
  384. package/vendor/boost/math/include/boost/math/differentiation/autodiff.hpp +2061 -0
  385. package/vendor/boost/math/include/boost/math/differentiation/autodiff_cpp11.hpp +387 -0
  386. package/vendor/boost/math/include/boost/math/differentiation/autodiff_reverse.hpp +811 -0
  387. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_operator_expressions.hpp +276 -0
  388. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_ops_et.hpp +160 -0
  389. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_ops_no_et.hpp +154 -0
  390. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_comparison_operator_overloads.hpp +167 -0
  391. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_erf_overloads.hpp +234 -0
  392. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_expression_template_base.hpp +258 -0
  393. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_helper_functions.hpp +18 -0
  394. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp +462 -0
  395. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_et.hpp +275 -0
  396. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_expressions.hpp +852 -0
  397. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_no_et.hpp +266 -0
  398. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_utilities.hpp +51 -0
  399. package/vendor/boost/math/include/boost/math/differentiation/finite_difference.hpp +266 -0
  400. package/vendor/boost/math/include/boost/math/differentiation/lanczos_smoothing.hpp +591 -0
  401. package/vendor/boost/math/include/boost/math/distributions/arcsine.hpp +593 -0
  402. package/vendor/boost/math/include/boost/math/distributions/bernoulli.hpp +349 -0
  403. package/vendor/boost/math/include/boost/math/distributions/beta.hpp +584 -0
  404. package/vendor/boost/math/include/boost/math/distributions/binomial.hpp +729 -0
  405. package/vendor/boost/math/include/boost/math/distributions/cauchy.hpp +379 -0
  406. package/vendor/boost/math/include/boost/math/distributions/chi_squared.hpp +345 -0
  407. package/vendor/boost/math/include/boost/math/distributions/complement.hpp +198 -0
  408. package/vendor/boost/math/include/boost/math/distributions/detail/common_error_handling.hpp +228 -0
  409. package/vendor/boost/math/include/boost/math/distributions/detail/derived_accessors.hpp +190 -0
  410. package/vendor/boost/math/include/boost/math/distributions/detail/generic_mode.hpp +145 -0
  411. package/vendor/boost/math/include/boost/math/distributions/detail/generic_quantile.hpp +100 -0
  412. package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_cdf.hpp +101 -0
  413. package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_pdf.hpp +490 -0
  414. package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_quantile.hpp +245 -0
  415. package/vendor/boost/math/include/boost/math/distributions/detail/inv_discrete_quantile.hpp +583 -0
  416. package/vendor/boost/math/include/boost/math/distributions/empirical_cumulative_distribution_function.hpp +73 -0
  417. package/vendor/boost/math/include/boost/math/distributions/exponential.hpp +352 -0
  418. package/vendor/boost/math/include/boost/math/distributions/extreme_value.hpp +388 -0
  419. package/vendor/boost/math/include/boost/math/distributions/find_location.hpp +141 -0
  420. package/vendor/boost/math/include/boost/math/distributions/find_scale.hpp +200 -0
  421. package/vendor/boost/math/include/boost/math/distributions/fisher_f.hpp +393 -0
  422. package/vendor/boost/math/include/boost/math/distributions/fwd.hpp +171 -0
  423. package/vendor/boost/math/include/boost/math/distributions/gamma.hpp +396 -0
  424. package/vendor/boost/math/include/boost/math/distributions/geometric.hpp +571 -0
  425. package/vendor/boost/math/include/boost/math/distributions/holtsmark.hpp +2518 -0
  426. package/vendor/boost/math/include/boost/math/distributions/hyperexponential.hpp +641 -0
  427. package/vendor/boost/math/include/boost/math/distributions/hypergeometric.hpp +313 -0
  428. package/vendor/boost/math/include/boost/math/distributions/inverse_chi_squared.hpp +398 -0
  429. package/vendor/boost/math/include/boost/math/distributions/inverse_gamma.hpp +504 -0
  430. package/vendor/boost/math/include/boost/math/distributions/inverse_gaussian.hpp +566 -0
  431. package/vendor/boost/math/include/boost/math/distributions/kolmogorov_smirnov.hpp +511 -0
  432. package/vendor/boost/math/include/boost/math/distributions/landau.hpp +4642 -0
  433. package/vendor/boost/math/include/boost/math/distributions/laplace.hpp +494 -0
  434. package/vendor/boost/math/include/boost/math/distributions/logistic.hpp +377 -0
  435. package/vendor/boost/math/include/boost/math/distributions/lognormal.hpp +361 -0
  436. package/vendor/boost/math/include/boost/math/distributions/mapairy.hpp +4220 -0
  437. package/vendor/boost/math/include/boost/math/distributions/negative_binomial.hpp +609 -0
  438. package/vendor/boost/math/include/boost/math/distributions/non_central_beta.hpp +981 -0
  439. package/vendor/boost/math/include/boost/math/distributions/non_central_chi_squared.hpp +998 -0
  440. package/vendor/boost/math/include/boost/math/distributions/non_central_f.hpp +712 -0
  441. package/vendor/boost/math/include/boost/math/distributions/non_central_t.hpp +1324 -0
  442. package/vendor/boost/math/include/boost/math/distributions/normal.hpp +368 -0
  443. package/vendor/boost/math/include/boost/math/distributions/pareto.hpp +508 -0
  444. package/vendor/boost/math/include/boost/math/distributions/poisson.hpp +563 -0
  445. package/vendor/boost/math/include/boost/math/distributions/rayleigh.hpp +381 -0
  446. package/vendor/boost/math/include/boost/math/distributions/saspoint5.hpp +2796 -0
  447. package/vendor/boost/math/include/boost/math/distributions/skew_normal.hpp +760 -0
  448. package/vendor/boost/math/include/boost/math/distributions/students_t.hpp +721 -0
  449. package/vendor/boost/math/include/boost/math/distributions/triangular.hpp +548 -0
  450. package/vendor/boost/math/include/boost/math/distributions/uniform.hpp +398 -0
  451. package/vendor/boost/math/include/boost/math/distributions/weibull.hpp +487 -0
  452. package/vendor/boost/math/include/boost/math/distributions.hpp +58 -0
  453. package/vendor/boost/math/include/boost/math/filters/daubechies.hpp +99 -0
  454. package/vendor/boost/math/include/boost/math/interpolators/barycentric_rational.hpp +99 -0
  455. package/vendor/boost/math/include/boost/math/interpolators/bezier_polynomial.hpp +60 -0
  456. package/vendor/boost/math/include/boost/math/interpolators/bilinear_uniform.hpp +54 -0
  457. package/vendor/boost/math/include/boost/math/interpolators/cardinal_cubic_b_spline.hpp +87 -0
  458. package/vendor/boost/math/include/boost/math/interpolators/cardinal_quadratic_b_spline.hpp +57 -0
  459. package/vendor/boost/math/include/boost/math/interpolators/cardinal_quintic_b_spline.hpp +62 -0
  460. package/vendor/boost/math/include/boost/math/interpolators/cardinal_trigonometric.hpp +58 -0
  461. package/vendor/boost/math/include/boost/math/interpolators/catmull_rom.hpp +310 -0
  462. package/vendor/boost/math/include/boost/math/interpolators/cubic_b_spline.hpp +90 -0
  463. package/vendor/boost/math/include/boost/math/interpolators/cubic_hermite.hpp +142 -0
  464. package/vendor/boost/math/include/boost/math/interpolators/detail/barycentric_rational_detail.hpp +215 -0
  465. package/vendor/boost/math/include/boost/math/interpolators/detail/bezier_polynomial_detail.hpp +167 -0
  466. package/vendor/boost/math/include/boost/math/interpolators/detail/bilinear_uniform_detail.hpp +137 -0
  467. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_cubic_b_spline_detail.hpp +331 -0
  468. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_quadratic_b_spline_detail.hpp +208 -0
  469. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_quintic_b_spline_detail.hpp +241 -0
  470. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_trigonometric_detail.hpp +684 -0
  471. package/vendor/boost/math/include/boost/math/interpolators/detail/cubic_b_spline_detail.hpp +330 -0
  472. package/vendor/boost/math/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +439 -0
  473. package/vendor/boost/math/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +586 -0
  474. package/vendor/boost/math/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +653 -0
  475. package/vendor/boost/math/include/boost/math/interpolators/detail/vector_barycentric_rational_detail.hpp +196 -0
  476. package/vendor/boost/math/include/boost/math/interpolators/detail/whittaker_shannon_detail.hpp +128 -0
  477. package/vendor/boost/math/include/boost/math/interpolators/makima.hpp +178 -0
  478. package/vendor/boost/math/include/boost/math/interpolators/pchip.hpp +136 -0
  479. package/vendor/boost/math/include/boost/math/interpolators/quintic_hermite.hpp +143 -0
  480. package/vendor/boost/math/include/boost/math/interpolators/septic_hermite.hpp +147 -0
  481. package/vendor/boost/math/include/boost/math/interpolators/vector_barycentric_rational.hpp +82 -0
  482. package/vendor/boost/math/include/boost/math/interpolators/whittaker_shannon.hpp +47 -0
  483. package/vendor/boost/math/include/boost/math/octonion.hpp +4254 -0
  484. package/vendor/boost/math/include/boost/math/optimization/cma_es.hpp +392 -0
  485. package/vendor/boost/math/include/boost/math/optimization/detail/common.hpp +200 -0
  486. package/vendor/boost/math/include/boost/math/optimization/detail/differentiable_opt_utilties.hpp +157 -0
  487. package/vendor/boost/math/include/boost/math/optimization/detail/gradient_opt_base.hpp +92 -0
  488. package/vendor/boost/math/include/boost/math/optimization/detail/line_search_policies.hpp +206 -0
  489. package/vendor/boost/math/include/boost/math/optimization/detail/rdiff_optimization_policies.hpp +134 -0
  490. package/vendor/boost/math/include/boost/math/optimization/differential_evolution.hpp +236 -0
  491. package/vendor/boost/math/include/boost/math/optimization/gradient_descent.hpp +202 -0
  492. package/vendor/boost/math/include/boost/math/optimization/gradient_optimizers.hpp +18 -0
  493. package/vendor/boost/math/include/boost/math/optimization/jso.hpp +465 -0
  494. package/vendor/boost/math/include/boost/math/optimization/lbfgs.hpp +382 -0
  495. package/vendor/boost/math/include/boost/math/optimization/minimizer.hpp +336 -0
  496. package/vendor/boost/math/include/boost/math/optimization/nesterov.hpp +208 -0
  497. package/vendor/boost/math/include/boost/math/optimization/random_search.hpp +145 -0
  498. package/vendor/boost/math/include/boost/math/policies/error_handling.hpp +1062 -0
  499. package/vendor/boost/math/include/boost/math/policies/policy.hpp +1034 -0
  500. package/vendor/boost/math/include/boost/math/quadrature/detail/exp_sinh_detail.hpp +2002 -0
  501. package/vendor/boost/math/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp +692 -0
  502. package/vendor/boost/math/include/boost/math/quadrature/detail/sinh_sinh_detail.hpp +1353 -0
  503. package/vendor/boost/math/include/boost/math/quadrature/detail/tanh_sinh_detail.hpp +879 -0
  504. package/vendor/boost/math/include/boost/math/quadrature/exp_sinh.hpp +180 -0
  505. package/vendor/boost/math/include/boost/math/quadrature/gauss.hpp +904 -0
  506. package/vendor/boost/math/include/boost/math/quadrature/gauss_kronrod.hpp +1317 -0
  507. package/vendor/boost/math/include/boost/math/quadrature/naive_monte_carlo.hpp +469 -0
  508. package/vendor/boost/math/include/boost/math/quadrature/ooura_fourier_integrals.hpp +68 -0
  509. package/vendor/boost/math/include/boost/math/quadrature/sinh_sinh.hpp +72 -0
  510. package/vendor/boost/math/include/boost/math/quadrature/tanh_sinh.hpp +289 -0
  511. package/vendor/boost/math/include/boost/math/quadrature/trapezoidal.hpp +125 -0
  512. package/vendor/boost/math/include/boost/math/quadrature/wavelet_transforms.hpp +47 -0
  513. package/vendor/boost/math/include/boost/math/quaternion.hpp +1190 -0
  514. package/vendor/boost/math/include/boost/math/special_functions/acosh.hpp +102 -0
  515. package/vendor/boost/math/include/boost/math/special_functions/airy.hpp +475 -0
  516. package/vendor/boost/math/include/boost/math/special_functions/asinh.hpp +110 -0
  517. package/vendor/boost/math/include/boost/math/special_functions/atanh.hpp +116 -0
  518. package/vendor/boost/math/include/boost/math/special_functions/bernoulli.hpp +149 -0
  519. package/vendor/boost/math/include/boost/math/special_functions/bessel.hpp +795 -0
  520. package/vendor/boost/math/include/boost/math/special_functions/bessel_iterators.hpp +187 -0
  521. package/vendor/boost/math/include/boost/math/special_functions/bessel_prime.hpp +343 -0
  522. package/vendor/boost/math/include/boost/math/special_functions/beta.hpp +1870 -0
  523. package/vendor/boost/math/include/boost/math/special_functions/binomial.hpp +87 -0
  524. package/vendor/boost/math/include/boost/math/special_functions/cardinal_b_spline.hpp +218 -0
  525. package/vendor/boost/math/include/boost/math/special_functions/cbrt.hpp +215 -0
  526. package/vendor/boost/math/include/boost/math/special_functions/chebyshev.hpp +314 -0
  527. package/vendor/boost/math/include/boost/math/special_functions/chebyshev_transform.hpp +237 -0
  528. package/vendor/boost/math/include/boost/math/special_functions/cos_pi.hpp +128 -0
  529. package/vendor/boost/math/include/boost/math/special_functions/daubechies_scaling.hpp +491 -0
  530. package/vendor/boost/math/include/boost/math/special_functions/daubechies_wavelet.hpp +266 -0
  531. package/vendor/boost/math/include/boost/math/special_functions/detail/airy_ai_bi_zero.hpp +222 -0
  532. package/vendor/boost/math/include/boost/math/special_functions/detail/bernoulli_details.hpp +629 -0
  533. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_derivatives_linear.hpp +107 -0
  534. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_i0.hpp +550 -0
  535. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_i1.hpp +556 -0
  536. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_ik.hpp +447 -0
  537. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_j0.hpp +192 -0
  538. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_j1.hpp +179 -0
  539. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jn.hpp +127 -0
  540. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy.hpp +603 -0
  541. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_asym.hpp +230 -0
  542. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp +141 -0
  543. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp +219 -0
  544. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_series.hpp +267 -0
  545. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_zero.hpp +643 -0
  546. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_k0.hpp +485 -0
  547. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_k1.hpp +526 -0
  548. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_kn.hpp +91 -0
  549. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_y0.hpp +205 -0
  550. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_y1.hpp +183 -0
  551. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_yn.hpp +113 -0
  552. package/vendor/boost/math/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +244 -0
  553. package/vendor/boost/math/include/boost/math/special_functions/detail/erf_inv.hpp +559 -0
  554. package/vendor/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp +562 -0
  555. package/vendor/boost/math/include/boost/math/special_functions/detail/gamma_inva.hpp +241 -0
  556. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_0F1_bessel.hpp +46 -0
  557. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_addition_theorems_on_z.hpp +293 -0
  558. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_bessel.hpp +768 -0
  559. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_by_ratios.hpp +678 -0
  560. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_cf.hpp +50 -0
  561. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_large_a.hpp +35 -0
  562. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_large_abz.hpp +492 -0
  563. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_negative_b_regions.hpp +521 -0
  564. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_recurrence.hpp +522 -0
  565. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_scaled_series.hpp +60 -0
  566. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_small_a_negative_b_by_ratio.hpp +70 -0
  567. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_asym.hpp +179 -0
  568. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_cf.hpp +228 -0
  569. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_pFq_checked_series.hpp +687 -0
  570. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_pade.hpp +131 -0
  571. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_rational.hpp +167 -0
  572. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_separated_series.hpp +50 -0
  573. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_series.hpp +434 -0
  574. package/vendor/boost/math/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp +331 -0
  575. package/vendor/boost/math/include/boost/math/special_functions/detail/ibeta_inverse.hpp +1122 -0
  576. package/vendor/boost/math/include/boost/math/special_functions/detail/iconv.hpp +43 -0
  577. package/vendor/boost/math/include/boost/math/special_functions/detail/igamma_inverse.hpp +587 -0
  578. package/vendor/boost/math/include/boost/math/special_functions/detail/igamma_large.hpp +823 -0
  579. package/vendor/boost/math/include/boost/math/special_functions/detail/lambert_w_lookup_table.ipp +162 -0
  580. package/vendor/boost/math/include/boost/math/special_functions/detail/lanczos_sse2.hpp +238 -0
  581. package/vendor/boost/math/include/boost/math/special_functions/detail/lgamma_small.hpp +569 -0
  582. package/vendor/boost/math/include/boost/math/special_functions/detail/polygamma.hpp +538 -0
  583. package/vendor/boost/math/include/boost/math/special_functions/detail/round_fwd.hpp +87 -0
  584. package/vendor/boost/math/include/boost/math/special_functions/detail/t_distribution_inv.hpp +567 -0
  585. package/vendor/boost/math/include/boost/math/special_functions/detail/unchecked_bernoulli.hpp +1305 -0
  586. package/vendor/boost/math/include/boost/math/special_functions/detail/unchecked_factorial.hpp +1727 -0
  587. package/vendor/boost/math/include/boost/math/special_functions/digamma.hpp +631 -0
  588. package/vendor/boost/math/include/boost/math/special_functions/ellint_1.hpp +815 -0
  589. package/vendor/boost/math/include/boost/math/special_functions/ellint_2.hpp +756 -0
  590. package/vendor/boost/math/include/boost/math/special_functions/ellint_3.hpp +374 -0
  591. package/vendor/boost/math/include/boost/math/special_functions/ellint_d.hpp +183 -0
  592. package/vendor/boost/math/include/boost/math/special_functions/ellint_rc.hpp +112 -0
  593. package/vendor/boost/math/include/boost/math/special_functions/ellint_rd.hpp +207 -0
  594. package/vendor/boost/math/include/boost/math/special_functions/ellint_rf.hpp +169 -0
  595. package/vendor/boost/math/include/boost/math/special_functions/ellint_rg.hpp +130 -0
  596. package/vendor/boost/math/include/boost/math/special_functions/ellint_rj.hpp +299 -0
  597. package/vendor/boost/math/include/boost/math/special_functions/erf.hpp +1334 -0
  598. package/vendor/boost/math/include/boost/math/special_functions/expint.hpp +1614 -0
  599. package/vendor/boost/math/include/boost/math/special_functions/expm1.hpp +416 -0
  600. package/vendor/boost/math/include/boost/math/special_functions/factorials.hpp +276 -0
  601. package/vendor/boost/math/include/boost/math/special_functions/fibonacci.hpp +92 -0
  602. package/vendor/boost/math/include/boost/math/special_functions/fourier_transform_daubechies.hpp +248 -0
  603. package/vendor/boost/math/include/boost/math/special_functions/fpclassify.hpp +797 -0
  604. package/vendor/boost/math/include/boost/math/special_functions/gamma.hpp +2628 -0
  605. package/vendor/boost/math/include/boost/math/special_functions/gegenbauer.hpp +84 -0
  606. package/vendor/boost/math/include/boost/math/special_functions/hankel.hpp +186 -0
  607. package/vendor/boost/math/include/boost/math/special_functions/hermite.hpp +79 -0
  608. package/vendor/boost/math/include/boost/math/special_functions/heuman_lambda.hpp +97 -0
  609. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_0F1.hpp +116 -0
  610. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_1F0.hpp +69 -0
  611. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_1F1.hpp +822 -0
  612. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_2F0.hpp +163 -0
  613. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_pFq.hpp +205 -0
  614. package/vendor/boost/math/include/boost/math/special_functions/hypot.hpp +148 -0
  615. package/vendor/boost/math/include/boost/math/special_functions/jacobi.hpp +69 -0
  616. package/vendor/boost/math/include/boost/math/special_functions/jacobi_elliptic.hpp +319 -0
  617. package/vendor/boost/math/include/boost/math/special_functions/jacobi_theta.hpp +802 -0
  618. package/vendor/boost/math/include/boost/math/special_functions/jacobi_zeta.hpp +83 -0
  619. package/vendor/boost/math/include/boost/math/special_functions/laguerre.hpp +139 -0
  620. package/vendor/boost/math/include/boost/math/special_functions/lambert_w.hpp +2171 -0
  621. package/vendor/boost/math/include/boost/math/special_functions/lanczos.hpp +2760 -0
  622. package/vendor/boost/math/include/boost/math/special_functions/legendre.hpp +380 -0
  623. package/vendor/boost/math/include/boost/math/special_functions/legendre_stieltjes.hpp +234 -0
  624. package/vendor/boost/math/include/boost/math/special_functions/log1p.hpp +417 -0
  625. package/vendor/boost/math/include/boost/math/special_functions/logaddexp.hpp +41 -0
  626. package/vendor/boost/math/include/boost/math/special_functions/logistic_sigmoid.hpp +46 -0
  627. package/vendor/boost/math/include/boost/math/special_functions/logit.hpp +56 -0
  628. package/vendor/boost/math/include/boost/math/special_functions/logsumexp.hpp +60 -0
  629. package/vendor/boost/math/include/boost/math/special_functions/math_fwd.hpp +1927 -0
  630. package/vendor/boost/math/include/boost/math/special_functions/modf.hpp +74 -0
  631. package/vendor/boost/math/include/boost/math/special_functions/next.hpp +886 -0
  632. package/vendor/boost/math/include/boost/math/special_functions/nonfinite_num_facets.hpp +588 -0
  633. package/vendor/boost/math/include/boost/math/special_functions/owens_t.hpp +1067 -0
  634. package/vendor/boost/math/include/boost/math/special_functions/polygamma.hpp +83 -0
  635. package/vendor/boost/math/include/boost/math/special_functions/pow.hpp +144 -0
  636. package/vendor/boost/math/include/boost/math/special_functions/powm1.hpp +101 -0
  637. package/vendor/boost/math/include/boost/math/special_functions/prime.hpp +2433 -0
  638. package/vendor/boost/math/include/boost/math/special_functions/relative_difference.hpp +134 -0
  639. package/vendor/boost/math/include/boost/math/special_functions/round.hpp +353 -0
  640. package/vendor/boost/math/include/boost/math/special_functions/rsqrt.hpp +52 -0
  641. package/vendor/boost/math/include/boost/math/special_functions/sign.hpp +241 -0
  642. package/vendor/boost/math/include/boost/math/special_functions/sin_pi.hpp +135 -0
  643. package/vendor/boost/math/include/boost/math/special_functions/sinc.hpp +123 -0
  644. package/vendor/boost/math/include/boost/math/special_functions/sinhc.hpp +142 -0
  645. package/vendor/boost/math/include/boost/math/special_functions/spherical_harmonic.hpp +205 -0
  646. package/vendor/boost/math/include/boost/math/special_functions/sqrt1pm1.hpp +49 -0
  647. package/vendor/boost/math/include/boost/math/special_functions/trigamma.hpp +448 -0
  648. package/vendor/boost/math/include/boost/math/special_functions/trunc.hpp +385 -0
  649. package/vendor/boost/math/include/boost/math/special_functions/ulp.hpp +102 -0
  650. package/vendor/boost/math/include/boost/math/special_functions/zeta.hpp +1081 -0
  651. package/vendor/boost/math/include/boost/math/special_functions.hpp +86 -0
  652. package/vendor/boost/math/include/boost/math/statistics/anderson_darling.hpp +112 -0
  653. package/vendor/boost/math/include/boost/math/statistics/bivariate_statistics.hpp +470 -0
  654. package/vendor/boost/math/include/boost/math/statistics/chatterjee_correlation.hpp +159 -0
  655. package/vendor/boost/math/include/boost/math/statistics/detail/rank.hpp +140 -0
  656. package/vendor/boost/math/include/boost/math/statistics/detail/single_pass.hpp +401 -0
  657. package/vendor/boost/math/include/boost/math/statistics/linear_regression.hpp +133 -0
  658. package/vendor/boost/math/include/boost/math/statistics/ljung_box.hpp +70 -0
  659. package/vendor/boost/math/include/boost/math/statistics/runs_test.hpp +121 -0
  660. package/vendor/boost/math/include/boost/math/statistics/signal_statistics.hpp +350 -0
  661. package/vendor/boost/math/include/boost/math/statistics/t_test.hpp +275 -0
  662. package/vendor/boost/math/include/boost/math/statistics/univariate_statistics.hpp +1184 -0
  663. package/vendor/boost/math/include/boost/math/statistics/z_test.hpp +161 -0
  664. package/vendor/boost/math/include/boost/math/tools/agm.hpp +47 -0
  665. package/vendor/boost/math/include/boost/math/tools/array.hpp +41 -0
  666. package/vendor/boost/math/include/boost/math/tools/assert.hpp +49 -0
  667. package/vendor/boost/math/include/boost/math/tools/atomic.hpp +50 -0
  668. package/vendor/boost/math/include/boost/math/tools/big_constant.hpp +110 -0
  669. package/vendor/boost/math/include/boost/math/tools/bivariate_statistics.hpp +96 -0
  670. package/vendor/boost/math/include/boost/math/tools/centered_continued_fraction.hpp +173 -0
  671. package/vendor/boost/math/include/boost/math/tools/cohen_acceleration.hpp +51 -0
  672. package/vendor/boost/math/include/boost/math/tools/color_maps.hpp +1943 -0
  673. package/vendor/boost/math/include/boost/math/tools/complex.hpp +115 -0
  674. package/vendor/boost/math/include/boost/math/tools/concepts.hpp +24 -0
  675. package/vendor/boost/math/include/boost/math/tools/condition_numbers.hpp +144 -0
  676. package/vendor/boost/math/include/boost/math/tools/config.hpp +856 -0
  677. package/vendor/boost/math/include/boost/math/tools/convert_from_string.hpp +85 -0
  678. package/vendor/boost/math/include/boost/math/tools/cstdint.hpp +107 -0
  679. package/vendor/boost/math/include/boost/math/tools/cubic_roots.hpp +198 -0
  680. package/vendor/boost/math/include/boost/math/tools/cxx03_warn.hpp +95 -0
  681. package/vendor/boost/math/include/boost/math/tools/detail/is_const_iterable.hpp +38 -0
  682. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_10.hpp +84 -0
  683. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_11.hpp +90 -0
  684. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_12.hpp +96 -0
  685. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_13.hpp +102 -0
  686. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_14.hpp +108 -0
  687. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_15.hpp +114 -0
  688. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_16.hpp +120 -0
  689. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_17.hpp +126 -0
  690. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_18.hpp +132 -0
  691. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_19.hpp +138 -0
  692. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_2.hpp +36 -0
  693. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_20.hpp +144 -0
  694. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_3.hpp +42 -0
  695. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_4.hpp +48 -0
  696. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_5.hpp +54 -0
  697. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_6.hpp +60 -0
  698. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_7.hpp +66 -0
  699. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_8.hpp +72 -0
  700. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_9.hpp +78 -0
  701. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_10.hpp +90 -0
  702. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_11.hpp +97 -0
  703. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_12.hpp +104 -0
  704. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_13.hpp +111 -0
  705. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_14.hpp +118 -0
  706. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_15.hpp +125 -0
  707. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_16.hpp +132 -0
  708. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_17.hpp +139 -0
  709. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_18.hpp +146 -0
  710. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_19.hpp +153 -0
  711. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_2.hpp +48 -0
  712. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_20.hpp +160 -0
  713. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_3.hpp +48 -0
  714. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_4.hpp +48 -0
  715. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_5.hpp +55 -0
  716. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_6.hpp +62 -0
  717. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_7.hpp +69 -0
  718. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_8.hpp +76 -0
  719. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_9.hpp +83 -0
  720. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_10.hpp +156 -0
  721. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_11.hpp +181 -0
  722. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_12.hpp +208 -0
  723. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_13.hpp +237 -0
  724. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_14.hpp +268 -0
  725. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_15.hpp +301 -0
  726. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_16.hpp +336 -0
  727. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_17.hpp +373 -0
  728. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_18.hpp +412 -0
  729. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_19.hpp +453 -0
  730. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_2.hpp +48 -0
  731. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_20.hpp +496 -0
  732. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_3.hpp +48 -0
  733. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_4.hpp +48 -0
  734. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_5.hpp +61 -0
  735. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_6.hpp +76 -0
  736. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_7.hpp +93 -0
  737. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_8.hpp +112 -0
  738. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_9.hpp +133 -0
  739. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_10.hpp +138 -0
  740. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_11.hpp +150 -0
  741. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_12.hpp +162 -0
  742. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_13.hpp +174 -0
  743. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_14.hpp +186 -0
  744. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_15.hpp +198 -0
  745. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_16.hpp +210 -0
  746. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_17.hpp +222 -0
  747. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_18.hpp +234 -0
  748. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_19.hpp +246 -0
  749. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_2.hpp +42 -0
  750. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_20.hpp +258 -0
  751. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_3.hpp +54 -0
  752. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_4.hpp +66 -0
  753. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_5.hpp +78 -0
  754. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_6.hpp +90 -0
  755. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_7.hpp +102 -0
  756. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_8.hpp +114 -0
  757. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_9.hpp +126 -0
  758. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_10.hpp +144 -0
  759. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_11.hpp +160 -0
  760. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_12.hpp +176 -0
  761. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_13.hpp +192 -0
  762. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_14.hpp +208 -0
  763. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_15.hpp +224 -0
  764. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_16.hpp +240 -0
  765. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_17.hpp +256 -0
  766. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_18.hpp +272 -0
  767. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_19.hpp +288 -0
  768. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_2.hpp +48 -0
  769. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_20.hpp +304 -0
  770. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_3.hpp +48 -0
  771. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_4.hpp +48 -0
  772. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_5.hpp +64 -0
  773. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_6.hpp +80 -0
  774. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_7.hpp +96 -0
  775. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_8.hpp +112 -0
  776. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_9.hpp +128 -0
  777. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_10.hpp +396 -0
  778. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_11.hpp +482 -0
  779. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_12.hpp +576 -0
  780. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_13.hpp +678 -0
  781. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_14.hpp +788 -0
  782. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_15.hpp +906 -0
  783. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_16.hpp +1032 -0
  784. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_17.hpp +1166 -0
  785. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_18.hpp +1308 -0
  786. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_19.hpp +1458 -0
  787. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_2.hpp +48 -0
  788. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_20.hpp +1616 -0
  789. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_3.hpp +48 -0
  790. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_4.hpp +48 -0
  791. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_5.hpp +86 -0
  792. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_6.hpp +132 -0
  793. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_7.hpp +186 -0
  794. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_8.hpp +248 -0
  795. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_9.hpp +318 -0
  796. package/vendor/boost/math/include/boost/math/tools/engel_expansion.hpp +124 -0
  797. package/vendor/boost/math/include/boost/math/tools/estrin.hpp +72 -0
  798. package/vendor/boost/math/include/boost/math/tools/fraction.hpp +354 -0
  799. package/vendor/boost/math/include/boost/math/tools/header_deprecated.hpp +27 -0
  800. package/vendor/boost/math/include/boost/math/tools/is_constant_evaluated.hpp +51 -0
  801. package/vendor/boost/math/include/boost/math/tools/is_detected.hpp +56 -0
  802. package/vendor/boost/math/include/boost/math/tools/is_standalone.hpp +18 -0
  803. package/vendor/boost/math/include/boost/math/tools/luroth_expansion.hpp +147 -0
  804. package/vendor/boost/math/include/boost/math/tools/minima.hpp +164 -0
  805. package/vendor/boost/math/include/boost/math/tools/mp.hpp +423 -0
  806. package/vendor/boost/math/include/boost/math/tools/norms.hpp +638 -0
  807. package/vendor/boost/math/include/boost/math/tools/nothrow.hpp +27 -0
  808. package/vendor/boost/math/include/boost/math/tools/numeric_limits.hpp +888 -0
  809. package/vendor/boost/math/include/boost/math/tools/numerical_differentiation.hpp +12 -0
  810. package/vendor/boost/math/include/boost/math/tools/polynomial.hpp +862 -0
  811. package/vendor/boost/math/include/boost/math/tools/polynomial_gcd.hpp +268 -0
  812. package/vendor/boost/math/include/boost/math/tools/precision.hpp +418 -0
  813. package/vendor/boost/math/include/boost/math/tools/promotion.hpp +135 -0
  814. package/vendor/boost/math/include/boost/math/tools/quartic_roots.hpp +157 -0
  815. package/vendor/boost/math/include/boost/math/tools/random_vector.hpp +101 -0
  816. package/vendor/boost/math/include/boost/math/tools/rational.hpp +346 -0
  817. package/vendor/boost/math/include/boost/math/tools/real_cast.hpp +31 -0
  818. package/vendor/boost/math/include/boost/math/tools/recurrence.hpp +330 -0
  819. package/vendor/boost/math/include/boost/math/tools/roots.hpp +1072 -0
  820. package/vendor/boost/math/include/boost/math/tools/series.hpp +221 -0
  821. package/vendor/boost/math/include/boost/math/tools/signal_statistics.hpp +353 -0
  822. package/vendor/boost/math/include/boost/math/tools/simple_continued_fraction.hpp +177 -0
  823. package/vendor/boost/math/include/boost/math/tools/stats.hpp +87 -0
  824. package/vendor/boost/math/include/boost/math/tools/test_value.hpp +143 -0
  825. package/vendor/boost/math/include/boost/math/tools/throw_exception.hpp +43 -0
  826. package/vendor/boost/math/include/boost/math/tools/toms748_solve.hpp +636 -0
  827. package/vendor/boost/math/include/boost/math/tools/traits.hpp +140 -0
  828. package/vendor/boost/math/include/boost/math/tools/tuple.hpp +88 -0
  829. package/vendor/boost/math/include/boost/math/tools/type_traits.hpp +489 -0
  830. package/vendor/boost/math/include/boost/math/tools/ulps_plot.hpp +598 -0
  831. package/vendor/boost/math/include/boost/math/tools/univariate_statistics.hpp +437 -0
  832. package/vendor/boost/math/include/boost/math/tools/user.hpp +105 -0
  833. package/vendor/boost/math/include/boost/math/tools/utility.hpp +69 -0
  834. package/vendor/boost/math/include/boost/math/tools/workaround.hpp +42 -0
  835. package/vendor/boost/math/include/boost/math/tr1.hpp +1121 -0
  836. package/vendor/boost/math/include/boost/math/tr1_c_macros.ipp +810 -0
  837. package/vendor/boost/math/include/boost/math_fwd.hpp +42 -0
  838. package/vendor/boost/multiprecision/LICENSE +23 -0
  839. package/vendor/boost/multiprecision/README.md +168 -0
  840. package/vendor/boost/multiprecision/include/boost/config/abi/borland_prefix.hpp +27 -0
  841. package/vendor/boost/multiprecision/include/boost/config/abi/borland_suffix.hpp +12 -0
  842. package/vendor/boost/multiprecision/include/boost/config/abi/msvc_prefix.hpp +22 -0
  843. package/vendor/boost/multiprecision/include/boost/config/abi/msvc_suffix.hpp +8 -0
  844. package/vendor/boost/multiprecision/include/boost/config/abi_prefix.hpp +25 -0
  845. package/vendor/boost/multiprecision/include/boost/config/abi_suffix.hpp +25 -0
  846. package/vendor/boost/multiprecision/include/boost/config/assert_cxx03.hpp +211 -0
  847. package/vendor/boost/multiprecision/include/boost/config/assert_cxx11.hpp +212 -0
  848. package/vendor/boost/multiprecision/include/boost/config/assert_cxx14.hpp +47 -0
  849. package/vendor/boost/multiprecision/include/boost/config/assert_cxx17.hpp +65 -0
  850. package/vendor/boost/multiprecision/include/boost/config/assert_cxx20.hpp +59 -0
  851. package/vendor/boost/multiprecision/include/boost/config/assert_cxx23.hpp +41 -0
  852. package/vendor/boost/multiprecision/include/boost/config/assert_cxx98.hpp +23 -0
  853. package/vendor/boost/multiprecision/include/boost/config/auto_link.hpp +530 -0
  854. package/vendor/boost/multiprecision/include/boost/config/compiler/borland.hpp +342 -0
  855. package/vendor/boost/multiprecision/include/boost/config/compiler/clang.hpp +370 -0
  856. package/vendor/boost/multiprecision/include/boost/config/compiler/clang_version.hpp +98 -0
  857. package/vendor/boost/multiprecision/include/boost/config/compiler/codegear.hpp +389 -0
  858. package/vendor/boost/multiprecision/include/boost/config/compiler/comeau.hpp +59 -0
  859. package/vendor/boost/multiprecision/include/boost/config/compiler/common_edg.hpp +185 -0
  860. package/vendor/boost/multiprecision/include/boost/config/compiler/compaq_cxx.hpp +19 -0
  861. package/vendor/boost/multiprecision/include/boost/config/compiler/cray.hpp +446 -0
  862. package/vendor/boost/multiprecision/include/boost/config/compiler/diab.hpp +26 -0
  863. package/vendor/boost/multiprecision/include/boost/config/compiler/digitalmars.hpp +146 -0
  864. package/vendor/boost/multiprecision/include/boost/config/compiler/gcc.hpp +386 -0
  865. package/vendor/boost/multiprecision/include/boost/config/compiler/gcc_xml.hpp +115 -0
  866. package/vendor/boost/multiprecision/include/boost/config/compiler/greenhills.hpp +28 -0
  867. package/vendor/boost/multiprecision/include/boost/config/compiler/hp_acc.hpp +153 -0
  868. package/vendor/boost/multiprecision/include/boost/config/compiler/intel.hpp +577 -0
  869. package/vendor/boost/multiprecision/include/boost/config/compiler/kai.hpp +33 -0
  870. package/vendor/boost/multiprecision/include/boost/config/compiler/metrowerks.hpp +201 -0
  871. package/vendor/boost/multiprecision/include/boost/config/compiler/mpw.hpp +143 -0
  872. package/vendor/boost/multiprecision/include/boost/config/compiler/nvcc.hpp +64 -0
  873. package/vendor/boost/multiprecision/include/boost/config/compiler/pathscale.hpp +141 -0
  874. package/vendor/boost/multiprecision/include/boost/config/compiler/pgi.hpp +23 -0
  875. package/vendor/boost/multiprecision/include/boost/config/compiler/sgi_mipspro.hpp +29 -0
  876. package/vendor/boost/multiprecision/include/boost/config/compiler/sunpro_cc.hpp +225 -0
  877. package/vendor/boost/multiprecision/include/boost/config/compiler/vacpp.hpp +189 -0
  878. package/vendor/boost/multiprecision/include/boost/config/compiler/visualc.hpp +400 -0
  879. package/vendor/boost/multiprecision/include/boost/config/compiler/xlcpp.hpp +303 -0
  880. package/vendor/boost/multiprecision/include/boost/config/compiler/xlcpp_zos.hpp +174 -0
  881. package/vendor/boost/multiprecision/include/boost/config/detail/cxx_composite.hpp +218 -0
  882. package/vendor/boost/multiprecision/include/boost/config/detail/posix_features.hpp +95 -0
  883. package/vendor/boost/multiprecision/include/boost/config/detail/select_compiler_config.hpp +157 -0
  884. package/vendor/boost/multiprecision/include/boost/config/detail/select_platform_config.hpp +147 -0
  885. package/vendor/boost/multiprecision/include/boost/config/detail/select_stdlib_config.hpp +121 -0
  886. package/vendor/boost/multiprecision/include/boost/config/detail/suffix.hpp +1334 -0
  887. package/vendor/boost/multiprecision/include/boost/config/header_deprecated.hpp +26 -0
  888. package/vendor/boost/multiprecision/include/boost/config/helper_macros.hpp +37 -0
  889. package/vendor/boost/multiprecision/include/boost/config/no_tr1/cmath.hpp +28 -0
  890. package/vendor/boost/multiprecision/include/boost/config/no_tr1/complex.hpp +28 -0
  891. package/vendor/boost/multiprecision/include/boost/config/no_tr1/functional.hpp +28 -0
  892. package/vendor/boost/multiprecision/include/boost/config/no_tr1/memory.hpp +28 -0
  893. package/vendor/boost/multiprecision/include/boost/config/no_tr1/utility.hpp +28 -0
  894. package/vendor/boost/multiprecision/include/boost/config/platform/aix.hpp +33 -0
  895. package/vendor/boost/multiprecision/include/boost/config/platform/amigaos.hpp +15 -0
  896. package/vendor/boost/multiprecision/include/boost/config/platform/beos.hpp +26 -0
  897. package/vendor/boost/multiprecision/include/boost/config/platform/bsd.hpp +83 -0
  898. package/vendor/boost/multiprecision/include/boost/config/platform/cloudabi.hpp +18 -0
  899. package/vendor/boost/multiprecision/include/boost/config/platform/cray.hpp +18 -0
  900. package/vendor/boost/multiprecision/include/boost/config/platform/cygwin.hpp +71 -0
  901. package/vendor/boost/multiprecision/include/boost/config/platform/haiku.hpp +31 -0
  902. package/vendor/boost/multiprecision/include/boost/config/platform/hpux.hpp +87 -0
  903. package/vendor/boost/multiprecision/include/boost/config/platform/irix.hpp +31 -0
  904. package/vendor/boost/multiprecision/include/boost/config/platform/linux.hpp +106 -0
  905. package/vendor/boost/multiprecision/include/boost/config/platform/macos.hpp +87 -0
  906. package/vendor/boost/multiprecision/include/boost/config/platform/qnxnto.hpp +31 -0
  907. package/vendor/boost/multiprecision/include/boost/config/platform/solaris.hpp +31 -0
  908. package/vendor/boost/multiprecision/include/boost/config/platform/symbian.hpp +97 -0
  909. package/vendor/boost/multiprecision/include/boost/config/platform/vms.hpp +25 -0
  910. package/vendor/boost/multiprecision/include/boost/config/platform/vxworks.hpp +422 -0
  911. package/vendor/boost/multiprecision/include/boost/config/platform/wasm.hpp +23 -0
  912. package/vendor/boost/multiprecision/include/boost/config/platform/win32.hpp +90 -0
  913. package/vendor/boost/multiprecision/include/boost/config/platform/zos.hpp +32 -0
  914. package/vendor/boost/multiprecision/include/boost/config/pragma_message.hpp +31 -0
  915. package/vendor/boost/multiprecision/include/boost/config/requires_threads.hpp +92 -0
  916. package/vendor/boost/multiprecision/include/boost/config/stdlib/dinkumware.hpp +324 -0
  917. package/vendor/boost/multiprecision/include/boost/config/stdlib/libcomo.hpp +93 -0
  918. package/vendor/boost/multiprecision/include/boost/config/stdlib/libcpp.hpp +185 -0
  919. package/vendor/boost/multiprecision/include/boost/config/stdlib/libstdcpp3.hpp +482 -0
  920. package/vendor/boost/multiprecision/include/boost/config/stdlib/modena.hpp +79 -0
  921. package/vendor/boost/multiprecision/include/boost/config/stdlib/msl.hpp +98 -0
  922. package/vendor/boost/multiprecision/include/boost/config/stdlib/roguewave.hpp +208 -0
  923. package/vendor/boost/multiprecision/include/boost/config/stdlib/sgi.hpp +168 -0
  924. package/vendor/boost/multiprecision/include/boost/config/stdlib/stlport.hpp +258 -0
  925. package/vendor/boost/multiprecision/include/boost/config/stdlib/vacpp.hpp +74 -0
  926. package/vendor/boost/multiprecision/include/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  927. package/vendor/boost/multiprecision/include/boost/config/user.hpp +133 -0
  928. package/vendor/boost/multiprecision/include/boost/config/warning_disable.hpp +47 -0
  929. package/vendor/boost/multiprecision/include/boost/config/workaround.hpp +310 -0
  930. package/vendor/boost/multiprecision/include/boost/config.hpp +67 -0
  931. package/vendor/boost/multiprecision/include/boost/cstdint.hpp +556 -0
  932. package/vendor/boost/multiprecision/include/boost/cxx11_char_types.hpp +70 -0
  933. package/vendor/boost/multiprecision/include/boost/detail/workaround.hpp +10 -0
  934. package/vendor/boost/multiprecision/include/boost/limits.hpp +146 -0
  935. package/vendor/boost/multiprecision/include/boost/multiprecision/complex128.hpp +24 -0
  936. package/vendor/boost/multiprecision/include/boost/multiprecision/complex_adaptor.hpp +1049 -0
  937. package/vendor/boost/multiprecision/include/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  938. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float/io.hpp +700 -0
  939. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  940. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float.hpp +2374 -0
  941. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_complex.hpp +12 -0
  942. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_dec_float.hpp +3807 -0
  943. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail.hpp +177 -0
  944. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath.hpp +25 -0
  945. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fabs.hpp +27 -0
  946. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_floor.hpp +116 -0
  947. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fma.hpp +65 -0
  948. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fpclassify.hpp +52 -0
  949. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_frexp.hpp +93 -0
  950. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_isinf.hpp +24 -0
  951. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_isnan.hpp +21 -0
  952. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_ldexp.hpp +71 -0
  953. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_limits.hpp +218 -0
  954. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_log.hpp +172 -0
  955. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_sqrt.hpp +57 -0
  956. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_constants.hpp +80 -0
  957. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_double_fp.hpp +2690 -0
  958. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/add.hpp +368 -0
  959. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  960. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/bitwise.hpp +896 -0
  961. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/checked.hpp +178 -0
  962. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  963. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  964. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/divide.hpp +703 -0
  965. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  966. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  967. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/limits.hpp +292 -0
  968. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/literals.hpp +296 -0
  969. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/misc.hpp +1462 -0
  970. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  971. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/serialize.hpp +209 -0
  972. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  973. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int.hpp +2360 -0
  974. package/vendor/boost/multiprecision/include/boost/multiprecision/debug_adaptor.hpp +760 -0
  975. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/assert.hpp +29 -0
  976. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/atomic.hpp +62 -0
  977. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/bitscan.hpp +317 -0
  978. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  979. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/constexpr.hpp +88 -0
  980. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/default_ops.hpp +4077 -0
  981. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/digits.hpp +49 -0
  982. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  983. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/empty_value.hpp +87 -0
  984. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/endian.hpp +35 -0
  985. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/et_ops.hpp +1831 -0
  986. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/float128_functions.hpp +95 -0
  987. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  988. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/fpclassify.hpp +101 -0
  989. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/constants.hpp +289 -0
  990. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/pow.hpp +941 -0
  991. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/trig.hpp +1064 -0
  992. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  993. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  994. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/hash.hpp +56 -0
  995. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/integer_ops.hpp +474 -0
  996. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/itos.hpp +39 -0
  997. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/min_max.hpp +106 -0
  998. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  999. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  1000. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/number_base.hpp +1656 -0
  1001. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/number_compare.hpp +848 -0
  1002. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/precision.hpp +313 -0
  1003. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/rebind.hpp +19 -0
  1004. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/standalone_config.hpp +165 -0
  1005. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/static_array.hpp +42 -0
  1006. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/string_helpers.hpp +48 -0
  1007. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/tables.hpp +80 -0
  1008. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  1009. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  1010. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/utype_helper.hpp +374 -0
  1011. package/vendor/boost/multiprecision/include/boost/multiprecision/eigen.hpp +248 -0
  1012. package/vendor/boost/multiprecision/include/boost/multiprecision/float128.hpp +960 -0
  1013. package/vendor/boost/multiprecision/include/boost/multiprecision/fwd.hpp +268 -0
  1014. package/vendor/boost/multiprecision/include/boost/multiprecision/gmp.hpp +4100 -0
  1015. package/vendor/boost/multiprecision/include/boost/multiprecision/integer.hpp +363 -0
  1016. package/vendor/boost/multiprecision/include/boost/multiprecision/logged_adaptor.hpp +834 -0
  1017. package/vendor/boost/multiprecision/include/boost/multiprecision/miller_rabin.hpp +221 -0
  1018. package/vendor/boost/multiprecision/include/boost/multiprecision/mpc.hpp +1721 -0
  1019. package/vendor/boost/multiprecision/include/boost/multiprecision/mpfi.hpp +2579 -0
  1020. package/vendor/boost/multiprecision/include/boost/multiprecision/mpfr.hpp +3668 -0
  1021. package/vendor/boost/multiprecision/include/boost/multiprecision/number.hpp +2491 -0
  1022. package/vendor/boost/multiprecision/include/boost/multiprecision/random.hpp +23 -0
  1023. package/vendor/boost/multiprecision/include/boost/multiprecision/rational_adaptor.hpp +1289 -0
  1024. package/vendor/boost/multiprecision/include/boost/multiprecision/tommath.hpp +1044 -0
  1025. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  1026. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  1027. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_backend.hpp +91 -0
  1028. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  1029. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_complex.hpp +22 -0
  1030. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  1031. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  1032. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  1033. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/max_digits10.hpp +79 -0
  1034. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/std_integer_traits.hpp +95 -0
  1035. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  1036. package/vendor/boost/multiprecision/include/boost/static_assert.hpp +179 -0
  1037. package/vendor/boost/multiprecision/include/boost/version.hpp +32 -0
  1038. package/vendor/eigen/COPYING.APACHE +203 -0
  1039. package/vendor/eigen/COPYING.BSD +26 -0
  1040. package/vendor/eigen/COPYING.MPL2 +373 -0
  1041. package/vendor/eigen/COPYING.README +6 -0
  1042. package/vendor/eigen/Eigen/AccelerateSupport +52 -0
  1043. package/vendor/eigen/Eigen/Cholesky +43 -0
  1044. package/vendor/eigen/Eigen/CholmodSupport +48 -0
  1045. package/vendor/eigen/Eigen/Core +451 -0
  1046. package/vendor/eigen/Eigen/Dense +7 -0
  1047. package/vendor/eigen/Eigen/Eigen +2 -0
  1048. package/vendor/eigen/Eigen/Eigenvalues +63 -0
  1049. package/vendor/eigen/Eigen/Geometry +59 -0
  1050. package/vendor/eigen/Eigen/Householder +31 -0
  1051. package/vendor/eigen/Eigen/IterativeLinearSolvers +52 -0
  1052. package/vendor/eigen/Eigen/Jacobi +33 -0
  1053. package/vendor/eigen/Eigen/KLUSupport +43 -0
  1054. package/vendor/eigen/Eigen/LU +46 -0
  1055. package/vendor/eigen/Eigen/MetisSupport +35 -0
  1056. package/vendor/eigen/Eigen/OrderingMethods +73 -0
  1057. package/vendor/eigen/Eigen/PaStiXSupport +51 -0
  1058. package/vendor/eigen/Eigen/PardisoSupport +38 -0
  1059. package/vendor/eigen/Eigen/QR +48 -0
  1060. package/vendor/eigen/Eigen/QtAlignedMalloc +32 -0
  1061. package/vendor/eigen/Eigen/SPQRSupport +41 -0
  1062. package/vendor/eigen/Eigen/SVD +56 -0
  1063. package/vendor/eigen/Eigen/Sparse +33 -0
  1064. package/vendor/eigen/Eigen/SparseCholesky +40 -0
  1065. package/vendor/eigen/Eigen/SparseCore +70 -0
  1066. package/vendor/eigen/Eigen/SparseLU +50 -0
  1067. package/vendor/eigen/Eigen/SparseQR +38 -0
  1068. package/vendor/eigen/Eigen/StdDeque +30 -0
  1069. package/vendor/eigen/Eigen/StdList +29 -0
  1070. package/vendor/eigen/Eigen/StdVector +30 -0
  1071. package/vendor/eigen/Eigen/SuperLUSupport +70 -0
  1072. package/vendor/eigen/Eigen/ThreadPool +80 -0
  1073. package/vendor/eigen/Eigen/UmfPackSupport +42 -0
  1074. package/vendor/eigen/Eigen/Version +14 -0
  1075. package/vendor/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  1076. package/vendor/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  1077. package/vendor/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  1078. package/vendor/eigen/Eigen/src/Cholesky/LDLT.h +649 -0
  1079. package/vendor/eigen/Eigen/src/Cholesky/LLT.h +514 -0
  1080. package/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +124 -0
  1081. package/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +738 -0
  1082. package/vendor/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  1083. package/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  1084. package/vendor/eigen/Eigen/src/Core/Array.h +376 -0
  1085. package/vendor/eigen/Eigen/src/Core/ArrayBase.h +213 -0
  1086. package/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +165 -0
  1087. package/vendor/eigen/Eigen/src/Core/Assign.h +80 -0
  1088. package/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +1057 -0
  1089. package/vendor/eigen/Eigen/src/Core/Assign_MKL.h +183 -0
  1090. package/vendor/eigen/Eigen/src/Core/BandMatrix.h +338 -0
  1091. package/vendor/eigen/Eigen/src/Core/Block.h +429 -0
  1092. package/vendor/eigen/Eigen/src/Core/CommaInitializer.h +149 -0
  1093. package/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +173 -0
  1094. package/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +2018 -0
  1095. package/vendor/eigen/Eigen/src/Core/CoreIterators.h +141 -0
  1096. package/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +166 -0
  1097. package/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +975 -0
  1098. package/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +171 -0
  1099. package/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +91 -0
  1100. package/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +167 -0
  1101. package/vendor/eigen/Eigen/src/Core/DenseBase.h +673 -0
  1102. package/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +568 -0
  1103. package/vendor/eigen/Eigen/src/Core/DenseStorage.h +573 -0
  1104. package/vendor/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  1105. package/vendor/eigen/Eigen/src/Core/Diagonal.h +219 -0
  1106. package/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +420 -0
  1107. package/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +30 -0
  1108. package/vendor/eigen/Eigen/src/Core/Dot.h +268 -0
  1109. package/vendor/eigen/Eigen/src/Core/EigenBase.h +149 -0
  1110. package/vendor/eigen/Eigen/src/Core/Fill.h +138 -0
  1111. package/vendor/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  1112. package/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +127 -0
  1113. package/vendor/eigen/Eigen/src/Core/Fuzzy.h +132 -0
  1114. package/vendor/eigen/Eigen/src/Core/GeneralProduct.h +519 -0
  1115. package/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +1702 -0
  1116. package/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +230 -0
  1117. package/vendor/eigen/Eigen/src/Core/IO.h +233 -0
  1118. package/vendor/eigen/Eigen/src/Core/IndexedView.h +321 -0
  1119. package/vendor/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  1120. package/vendor/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  1121. package/vendor/eigen/Eigen/src/Core/Inverse.h +108 -0
  1122. package/vendor/eigen/Eigen/src/Core/Map.h +153 -0
  1123. package/vendor/eigen/Eigen/src/Core/MapBase.h +283 -0
  1124. package/vendor/eigen/Eigen/src/Core/MathFunctions.h +2103 -0
  1125. package/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +263 -0
  1126. package/vendor/eigen/Eigen/src/Core/Matrix.h +534 -0
  1127. package/vendor/eigen/Eigen/src/Core/MatrixBase.h +545 -0
  1128. package/vendor/eigen/Eigen/src/Core/NestByValue.h +91 -0
  1129. package/vendor/eigen/Eigen/src/Core/NoAlias.h +102 -0
  1130. package/vendor/eigen/Eigen/src/Core/NumTraits.h +335 -0
  1131. package/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  1132. package/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +555 -0
  1133. package/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1014 -0
  1134. package/vendor/eigen/Eigen/src/Core/Product.h +307 -0
  1135. package/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1287 -0
  1136. package/vendor/eigen/Eigen/src/Core/Random.h +207 -0
  1137. package/vendor/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  1138. package/vendor/eigen/Eigen/src/Core/RealView.h +250 -0
  1139. package/vendor/eigen/Eigen/src/Core/Redux.h +535 -0
  1140. package/vendor/eigen/Eigen/src/Core/Ref.h +383 -0
  1141. package/vendor/eigen/Eigen/src/Core/Replicate.h +130 -0
  1142. package/vendor/eigen/Eigen/src/Core/Reshaped.h +398 -0
  1143. package/vendor/eigen/Eigen/src/Core/ReturnByValue.h +111 -0
  1144. package/vendor/eigen/Eigen/src/Core/Reverse.h +202 -0
  1145. package/vendor/eigen/Eigen/src/Core/Select.h +92 -0
  1146. package/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +329 -0
  1147. package/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +50 -0
  1148. package/vendor/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  1149. package/vendor/eigen/Eigen/src/Core/Solve.h +174 -0
  1150. package/vendor/eigen/Eigen/src/Core/SolveTriangular.h +237 -0
  1151. package/vendor/eigen/Eigen/src/Core/SolverBase.h +167 -0
  1152. package/vendor/eigen/Eigen/src/Core/StableNorm.h +217 -0
  1153. package/vendor/eigen/Eigen/src/Core/StlIterators.h +619 -0
  1154. package/vendor/eigen/Eigen/src/Core/Stride.h +114 -0
  1155. package/vendor/eigen/Eigen/src/Core/Swap.h +99 -0
  1156. package/vendor/eigen/Eigen/src/Core/Transpose.h +427 -0
  1157. package/vendor/eigen/Eigen/src/Core/Transpositions.h +323 -0
  1158. package/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +900 -0
  1159. package/vendor/eigen/Eigen/src/Core/VectorBlock.h +83 -0
  1160. package/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +733 -0
  1161. package/vendor/eigen/Eigen/src/Core/Visitor.h +537 -0
  1162. package/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +565 -0
  1163. package/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +130 -0
  1164. package/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +3081 -0
  1165. package/vendor/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  1166. package/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +308 -0
  1167. package/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  1168. package/vendor/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  1169. package/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +141 -0
  1170. package/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  1171. package/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +3146 -0
  1172. package/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  1173. package/vendor/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  1174. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  1175. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  1176. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  1177. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  1178. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +653 -0
  1179. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +81 -0
  1180. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  1181. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  1182. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  1183. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  1184. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  1185. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3729 -0
  1186. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  1187. package/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  1188. package/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +128 -0
  1189. package/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  1190. package/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  1191. package/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  1192. package/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +47 -0
  1193. package/vendor/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  1194. package/vendor/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  1195. package/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  1196. package/vendor/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  1197. package/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  1198. package/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  1199. package/vendor/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  1200. package/vendor/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  1201. package/vendor/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  1202. package/vendor/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  1203. package/vendor/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  1204. package/vendor/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  1205. package/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  1206. package/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  1207. package/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  1208. package/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +732 -0
  1209. package/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  1210. package/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +68 -0
  1211. package/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +6096 -0
  1212. package/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  1213. package/vendor/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  1214. package/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +503 -0
  1215. package/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +88 -0
  1216. package/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2384 -0
  1217. package/vendor/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  1218. package/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +230 -0
  1219. package/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  1220. package/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  1221. package/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  1222. package/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  1223. package/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  1224. package/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  1225. package/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  1226. package/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +570 -0
  1227. package/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +244 -0
  1228. package/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1413 -0
  1229. package/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +174 -0
  1230. package/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +747 -0
  1231. package/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +274 -0
  1232. package/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +149 -0
  1233. package/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +52 -0
  1234. package/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1420 -0
  1235. package/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +3153 -0
  1236. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +459 -0
  1237. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +330 -0
  1238. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +148 -0
  1239. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +205 -0
  1240. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +473 -0
  1241. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +139 -0
  1242. package/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +282 -0
  1243. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +483 -0
  1244. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +277 -0
  1245. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +253 -0
  1246. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +115 -0
  1247. package/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  1248. package/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +95 -0
  1249. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +397 -0
  1250. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +325 -0
  1251. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +347 -0
  1252. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +275 -0
  1253. package/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +388 -0
  1254. package/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +166 -0
  1255. package/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +122 -0
  1256. package/vendor/eigen/Eigen/src/Core/util/Assert.h +158 -0
  1257. package/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +622 -0
  1258. package/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  1259. package/vendor/eigen/Eigen/src/Core/util/Constants.h +598 -0
  1260. package/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +146 -0
  1261. package/vendor/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  1262. package/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +524 -0
  1263. package/vendor/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  1264. package/vendor/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  1265. package/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  1266. package/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  1267. package/vendor/eigen/Eigen/src/Core/util/MKL_support.h +139 -0
  1268. package/vendor/eigen/Eigen/src/Core/util/Macros.h +1346 -0
  1269. package/vendor/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  1270. package/vendor/eigen/Eigen/src/Core/util/Memory.h +1385 -0
  1271. package/vendor/eigen/Eigen/src/Core/util/Meta.h +760 -0
  1272. package/vendor/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  1273. package/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +44 -0
  1274. package/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  1275. package/vendor/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  1276. package/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +105 -0
  1277. package/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  1278. package/vendor/eigen/Eigen/src/Core/util/XprHelper.h +1093 -0
  1279. package/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +315 -0
  1280. package/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +442 -0
  1281. package/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +95 -0
  1282. package/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +579 -0
  1283. package/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +402 -0
  1284. package/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +212 -0
  1285. package/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +356 -0
  1286. package/vendor/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  1287. package/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +142 -0
  1288. package/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +587 -0
  1289. package/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +519 -0
  1290. package/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +83 -0
  1291. package/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +850 -0
  1292. package/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +90 -0
  1293. package/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +529 -0
  1294. package/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +485 -0
  1295. package/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +245 -0
  1296. package/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +203 -0
  1297. package/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +453 -0
  1298. package/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +273 -0
  1299. package/vendor/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  1300. package/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +257 -0
  1301. package/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  1302. package/vendor/eigen/Eigen/src/Geometry/Quaternion.h +930 -0
  1303. package/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +201 -0
  1304. package/vendor/eigen/Eigen/src/Geometry/RotationBase.h +209 -0
  1305. package/vendor/eigen/Eigen/src/Geometry/Scaling.h +195 -0
  1306. package/vendor/eigen/Eigen/src/Geometry/Transform.h +1485 -0
  1307. package/vendor/eigen/Eigen/src/Geometry/Translation.h +204 -0
  1308. package/vendor/eigen/Eigen/src/Geometry/Umeyama.h +161 -0
  1309. package/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  1310. package/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +115 -0
  1311. package/vendor/eigen/Eigen/src/Householder/Householder.h +154 -0
  1312. package/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +504 -0
  1313. package/vendor/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  1314. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +213 -0
  1315. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +220 -0
  1316. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +217 -0
  1317. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +402 -0
  1318. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +449 -0
  1319. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  1320. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +395 -0
  1321. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +193 -0
  1322. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +111 -0
  1323. package/vendor/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  1324. package/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +427 -0
  1325. package/vendor/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  1326. package/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  1327. package/vendor/eigen/Eigen/src/LU/Determinant.h +98 -0
  1328. package/vendor/eigen/Eigen/src/LU/FullPivLU.h +826 -0
  1329. package/vendor/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  1330. package/vendor/eigen/Eigen/src/LU/InverseImpl.h +353 -0
  1331. package/vendor/eigen/Eigen/src/LU/PartialPivLU.h +586 -0
  1332. package/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +97 -0
  1333. package/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  1334. package/vendor/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  1335. package/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +125 -0
  1336. package/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +413 -0
  1337. package/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1690 -0
  1338. package/vendor/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  1339. package/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +146 -0
  1340. package/vendor/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  1341. package/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +632 -0
  1342. package/vendor/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  1343. package/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +500 -0
  1344. package/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  1345. package/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +161 -0
  1346. package/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +648 -0
  1347. package/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +733 -0
  1348. package/vendor/eigen/Eigen/src/QR/HouseholderQR.h +543 -0
  1349. package/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +77 -0
  1350. package/vendor/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  1351. package/vendor/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  1352. package/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +315 -0
  1353. package/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1470 -0
  1354. package/vendor/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  1355. package/vendor/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  1356. package/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +846 -0
  1357. package/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +127 -0
  1358. package/vendor/eigen/Eigen/src/SVD/SVDBase.h +436 -0
  1359. package/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +379 -0
  1360. package/vendor/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  1361. package/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +868 -0
  1362. package/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +388 -0
  1363. package/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +329 -0
  1364. package/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +206 -0
  1365. package/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +308 -0
  1366. package/vendor/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  1367. package/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +279 -0
  1368. package/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +534 -0
  1369. package/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +194 -0
  1370. package/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +592 -0
  1371. package/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +938 -0
  1372. package/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +142 -0
  1373. package/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +314 -0
  1374. package/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  1375. package/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +100 -0
  1376. package/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +31 -0
  1377. package/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +295 -0
  1378. package/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1876 -0
  1379. package/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +451 -0
  1380. package/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +249 -0
  1381. package/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +178 -0
  1382. package/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +47 -0
  1383. package/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +370 -0
  1384. package/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +613 -0
  1385. package/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +115 -0
  1386. package/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +184 -0
  1387. package/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +83 -0
  1388. package/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +177 -0
  1389. package/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +209 -0
  1390. package/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +532 -0
  1391. package/vendor/eigen/Eigen/src/SparseCore/SparseView.h +225 -0
  1392. package/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +274 -0
  1393. package/vendor/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  1394. package/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +969 -0
  1395. package/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +79 -0
  1396. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +210 -0
  1397. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +113 -0
  1398. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +319 -0
  1399. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +75 -0
  1400. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +177 -0
  1401. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +168 -0
  1402. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
  1403. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +114 -0
  1404. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +133 -0
  1405. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +215 -0
  1406. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +235 -0
  1407. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +136 -0
  1408. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +130 -0
  1409. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +81 -0
  1410. package/vendor/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  1411. package/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +706 -0
  1412. package/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +51 -0
  1413. package/vendor/eigen/Eigen/src/StlSupport/StdList.h +50 -0
  1414. package/vendor/eigen/Eigen/src/StlSupport/StdVector.h +51 -0
  1415. package/vendor/eigen/Eigen/src/StlSupport/details.h +82 -0
  1416. package/vendor/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  1417. package/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +929 -0
  1418. package/vendor/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  1419. package/vendor/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  1420. package/vendor/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  1421. package/vendor/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  1422. package/vendor/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  1423. package/vendor/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  1424. package/vendor/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  1425. package/vendor/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  1426. package/vendor/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  1427. package/vendor/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  1428. package/vendor/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  1429. package/vendor/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  1430. package/vendor/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  1431. package/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +606 -0
  1432. package/vendor/eigen/Eigen/src/misc/Image.h +80 -0
  1433. package/vendor/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  1434. package/vendor/eigen/Eigen/src/misc/Kernel.h +77 -0
  1435. package/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +53 -0
  1436. package/vendor/eigen/Eigen/src/misc/blas.h +97 -0
  1437. package/vendor/eigen/Eigen/src/misc/lapacke.h +10085 -0
  1438. package/vendor/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  1439. package/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +16 -0
  1440. package/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  1441. package/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  1442. package/vendor/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  1443. package/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  1444. package/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  1445. package/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  1446. package/vendor/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  1447. package/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  1448. package/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  1449. package/vendor/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  1450. package/vendor/eigen/README.md +5 -0
  1451. package/vendor/mpdecimal/COPYRIGHT.txt +23 -0
  1452. package/vendor/mpdecimal/README.txt +53 -0
  1453. package/vendor/mpdecimal/libmpdec/.objs/README.txt +8 -0
  1454. package/vendor/mpdecimal/libmpdec/.objs/symbols32.exp +343 -0
  1455. package/vendor/mpdecimal/libmpdec/.objs/symbols64.exp +347 -0
  1456. package/vendor/mpdecimal/libmpdec/.pc/libmpdec.pc.in +11 -0
  1457. package/vendor/mpdecimal/libmpdec/.profile/train.sh +35 -0
  1458. package/vendor/mpdecimal/libmpdec/README.txt +84 -0
  1459. package/vendor/mpdecimal/libmpdec/basearith.c +649 -0
  1460. package/vendor/mpdecimal/libmpdec/basearith.h +217 -0
  1461. package/vendor/mpdecimal/libmpdec/bits.h +188 -0
  1462. package/vendor/mpdecimal/libmpdec/constants.c +129 -0
  1463. package/vendor/mpdecimal/libmpdec/constants.h +88 -0
  1464. package/vendor/mpdecimal/libmpdec/context.c +285 -0
  1465. package/vendor/mpdecimal/libmpdec/convolute.c +172 -0
  1466. package/vendor/mpdecimal/libmpdec/convolute.h +48 -0
  1467. package/vendor/mpdecimal/libmpdec/crt.c +178 -0
  1468. package/vendor/mpdecimal/libmpdec/crt.h +45 -0
  1469. package/vendor/mpdecimal/libmpdec/difradix2.c +171 -0
  1470. package/vendor/mpdecimal/libmpdec/difradix2.h +46 -0
  1471. package/vendor/mpdecimal/libmpdec/fnt.c +77 -0
  1472. package/vendor/mpdecimal/libmpdec/fnt.h +46 -0
  1473. package/vendor/mpdecimal/libmpdec/fourstep.c +242 -0
  1474. package/vendor/mpdecimal/libmpdec/fourstep.h +46 -0
  1475. package/vendor/mpdecimal/libmpdec/io.c +1610 -0
  1476. package/vendor/mpdecimal/libmpdec/io.h +61 -0
  1477. package/vendor/mpdecimal/libmpdec/mpalloc.c +347 -0
  1478. package/vendor/mpdecimal/libmpdec/mpalloc.h +53 -0
  1479. package/vendor/mpdecimal/libmpdec/mpdecimal.c +9155 -0
  1480. package/vendor/mpdecimal/libmpdec/mpdecimal.h.in +804 -0
  1481. package/vendor/mpdecimal/libmpdec/mpsignal.c +966 -0
  1482. package/vendor/mpdecimal/libmpdec/numbertheory.c +129 -0
  1483. package/vendor/mpdecimal/libmpdec/numbertheory.h +75 -0
  1484. package/vendor/mpdecimal/libmpdec/sixstep.c +212 -0
  1485. package/vendor/mpdecimal/libmpdec/sixstep.h +46 -0
  1486. package/vendor/mpdecimal/libmpdec/transpose.c +275 -0
  1487. package/vendor/mpdecimal/libmpdec/transpose.h +60 -0
  1488. package/vendor/mpdecimal/libmpdec/typearith.h +661 -0
  1489. package/vendor/mpdecimal/libmpdec/umodarith.h +645 -0
  1490. package/vendor/symengine/AUTHORS +101 -0
  1491. package/vendor/symengine/LICENSE +254 -0
  1492. package/vendor/symengine/README.md +199 -0
  1493. package/vendor/symengine/symengine/add.cpp +508 -0
  1494. package/vendor/symengine/symengine/add.h +187 -0
  1495. package/vendor/symengine/symengine/as_real_imag.cpp +289 -0
  1496. package/vendor/symengine/symengine/assumptions.cpp +202 -0
  1497. package/vendor/symengine/symengine/assumptions.h +47 -0
  1498. package/vendor/symengine/symengine/basic-inl.h +152 -0
  1499. package/vendor/symengine/symengine/basic-methods.inc +9 -0
  1500. package/vendor/symengine/symengine/basic.cpp +110 -0
  1501. package/vendor/symengine/symengine/basic.h +356 -0
  1502. package/vendor/symengine/symengine/complex.cpp +198 -0
  1503. package/vendor/symengine/symengine/complex.h +396 -0
  1504. package/vendor/symengine/symengine/complex_double.cpp +72 -0
  1505. package/vendor/symengine/symengine/complex_double.h +570 -0
  1506. package/vendor/symengine/symengine/complex_mpc.h +406 -0
  1507. package/vendor/symengine/symengine/constants.cpp +130 -0
  1508. package/vendor/symengine/symengine/constants.h +81 -0
  1509. package/vendor/symengine/symengine/cse.cpp +556 -0
  1510. package/vendor/symengine/symengine/cwrapper.h +949 -0
  1511. package/vendor/symengine/symengine/dense_matrix.cpp +2100 -0
  1512. package/vendor/symengine/symengine/derivative.cpp +841 -0
  1513. package/vendor/symengine/symengine/derivative.h +137 -0
  1514. package/vendor/symengine/symengine/dict.cpp +125 -0
  1515. package/vendor/symengine/symengine/dict.h +333 -0
  1516. package/vendor/symengine/symengine/diophantine.cpp +139 -0
  1517. package/vendor/symengine/symengine/diophantine.h +20 -0
  1518. package/vendor/symengine/symengine/eval.cpp +109 -0
  1519. package/vendor/symengine/symengine/eval.h +40 -0
  1520. package/vendor/symengine/symengine/eval_arb.h +31 -0
  1521. package/vendor/symengine/symengine/eval_double.cpp +959 -0
  1522. package/vendor/symengine/symengine/eval_double.h +28 -0
  1523. package/vendor/symengine/symengine/eval_mpc.h +29 -0
  1524. package/vendor/symengine/symengine/eval_mpfr.h +26 -0
  1525. package/vendor/symengine/symengine/expand.cpp +379 -0
  1526. package/vendor/symengine/symengine/expression.cpp +24 -0
  1527. package/vendor/symengine/symengine/expression.h +375 -0
  1528. package/vendor/symengine/symengine/fields.cpp +861 -0
  1529. package/vendor/symengine/symengine/fields.h +647 -0
  1530. package/vendor/symengine/symengine/finitediff.cpp +70 -0
  1531. package/vendor/symengine/symengine/finitediff.h +21 -0
  1532. package/vendor/symengine/symengine/flint_wrapper.h +1010 -0
  1533. package/vendor/symengine/symengine/functions.cpp +3913 -0
  1534. package/vendor/symengine/symengine/functions.h +1321 -0
  1535. package/vendor/symengine/symengine/infinity.cpp +537 -0
  1536. package/vendor/symengine/symengine/infinity.h +118 -0
  1537. package/vendor/symengine/symengine/integer.cpp +153 -0
  1538. package/vendor/symengine/symengine/integer.h +227 -0
  1539. package/vendor/symengine/symengine/interruption.cpp +9 -0
  1540. package/vendor/symengine/symengine/interruption.h +19 -0
  1541. package/vendor/symengine/symengine/lambda_double.h +918 -0
  1542. package/vendor/symengine/symengine/limits.h +35 -0
  1543. package/vendor/symengine/symengine/llvm_double.h +201 -0
  1544. package/vendor/symengine/symengine/logic.cpp +812 -0
  1545. package/vendor/symengine/symengine/logic.h +281 -0
  1546. package/vendor/symengine/symengine/matrices/conjugate_matrix.cpp +139 -0
  1547. package/vendor/symengine/symengine/matrices/conjugate_matrix.h +39 -0
  1548. package/vendor/symengine/symengine/matrices/diagonal_matrix.cpp +79 -0
  1549. package/vendor/symengine/symengine/matrices/diagonal_matrix.h +52 -0
  1550. package/vendor/symengine/symengine/matrices/hadamard_product.cpp +151 -0
  1551. package/vendor/symengine/symengine/matrices/hadamard_product.h +42 -0
  1552. package/vendor/symengine/symengine/matrices/identity_matrix.cpp +63 -0
  1553. package/vendor/symengine/symengine/matrices/identity_matrix.h +40 -0
  1554. package/vendor/symengine/symengine/matrices/immutable_dense_matrix.cpp +143 -0
  1555. package/vendor/symengine/symengine/matrices/immutable_dense_matrix.h +65 -0
  1556. package/vendor/symengine/symengine/matrices/is_diagonal.cpp +115 -0
  1557. package/vendor/symengine/symengine/matrices/is_lower.cpp +110 -0
  1558. package/vendor/symengine/symengine/matrices/is_real.cpp +78 -0
  1559. package/vendor/symengine/symengine/matrices/is_square.cpp +85 -0
  1560. package/vendor/symengine/symengine/matrices/is_symmetric.cpp +112 -0
  1561. package/vendor/symengine/symengine/matrices/is_toeplitz.cpp +104 -0
  1562. package/vendor/symengine/symengine/matrices/is_upper.cpp +108 -0
  1563. package/vendor/symengine/symengine/matrices/is_zero.cpp +81 -0
  1564. package/vendor/symengine/symengine/matrices/matrix_add.cpp +176 -0
  1565. package/vendor/symengine/symengine/matrices/matrix_add.h +42 -0
  1566. package/vendor/symengine/symengine/matrices/matrix_expr.h +19 -0
  1567. package/vendor/symengine/symengine/matrices/matrix_mul.cpp +258 -0
  1568. package/vendor/symengine/symengine/matrices/matrix_mul.h +55 -0
  1569. package/vendor/symengine/symengine/matrices/matrix_symbol.cpp +34 -0
  1570. package/vendor/symengine/symengine/matrices/matrix_symbol.h +41 -0
  1571. package/vendor/symengine/symengine/matrices/size.cpp +121 -0
  1572. package/vendor/symengine/symengine/matrices/size.h +15 -0
  1573. package/vendor/symengine/symengine/matrices/trace.cpp +112 -0
  1574. package/vendor/symengine/symengine/matrices/trace.h +31 -0
  1575. package/vendor/symengine/symengine/matrices/transpose.cpp +126 -0
  1576. package/vendor/symengine/symengine/matrices/transpose.h +39 -0
  1577. package/vendor/symengine/symengine/matrices/zero_matrix.cpp +94 -0
  1578. package/vendor/symengine/symengine/matrices/zero_matrix.h +47 -0
  1579. package/vendor/symengine/symengine/matrix.cpp +33 -0
  1580. package/vendor/symengine/symengine/matrix.h +675 -0
  1581. package/vendor/symengine/symengine/matrix_expressions.h +51 -0
  1582. package/vendor/symengine/symengine/monomials.cpp +33 -0
  1583. package/vendor/symengine/symengine/monomials.h +20 -0
  1584. package/vendor/symengine/symengine/mp_boost.cpp +635 -0
  1585. package/vendor/symengine/symengine/mp_class.h +1286 -0
  1586. package/vendor/symengine/symengine/mp_wrapper.h +510 -0
  1587. package/vendor/symengine/symengine/mul.cpp +629 -0
  1588. package/vendor/symengine/symengine/mul.h +146 -0
  1589. package/vendor/symengine/symengine/nan.cpp +234 -0
  1590. package/vendor/symengine/symengine/nan.h +82 -0
  1591. package/vendor/symengine/symengine/ntheory.cpp +1700 -0
  1592. package/vendor/symengine/symengine/ntheory.h +213 -0
  1593. package/vendor/symengine/symengine/ntheory_funcs.cpp +189 -0
  1594. package/vendor/symengine/symengine/ntheory_funcs.h +78 -0
  1595. package/vendor/symengine/symengine/number.cpp +36 -0
  1596. package/vendor/symengine/symengine/number.h +256 -0
  1597. package/vendor/symengine/symengine/numer_denom.cpp +149 -0
  1598. package/vendor/symengine/symengine/parser/parser.cpp +367 -0
  1599. package/vendor/symengine/symengine/parser/parser.h +56 -0
  1600. package/vendor/symengine/symengine/parser/parser.tab.cc +1495 -0
  1601. package/vendor/symengine/symengine/parser/parser.tab.hh +1410 -0
  1602. package/vendor/symengine/symengine/parser/parser_old.cpp +688 -0
  1603. package/vendor/symengine/symengine/parser/tokenizer.cpp +435 -0
  1604. package/vendor/symengine/symengine/parser/tokenizer.h +35 -0
  1605. package/vendor/symengine/symengine/parser.h +25 -0
  1606. package/vendor/symengine/symengine/polys/basic_conversions.cpp +178 -0
  1607. package/vendor/symengine/symengine/polys/basic_conversions.h +575 -0
  1608. package/vendor/symengine/symengine/polys/cancel.h +39 -0
  1609. package/vendor/symengine/symengine/polys/msymenginepoly.cpp +130 -0
  1610. package/vendor/symengine/symengine/polys/msymenginepoly.h +536 -0
  1611. package/vendor/symengine/symengine/polys/uexprpoly.cpp +90 -0
  1612. package/vendor/symengine/symengine/polys/uexprpoly.h +205 -0
  1613. package/vendor/symengine/symengine/polys/uintpoly.cpp +62 -0
  1614. package/vendor/symengine/symengine/polys/uintpoly.h +134 -0
  1615. package/vendor/symengine/symengine/polys/uintpoly_flint.h +228 -0
  1616. package/vendor/symengine/symengine/polys/uintpoly_piranha.h +373 -0
  1617. package/vendor/symengine/symengine/polys/upolybase.h +769 -0
  1618. package/vendor/symengine/symengine/polys/uratpoly.cpp +59 -0
  1619. package/vendor/symengine/symengine/polys/uratpoly.h +58 -0
  1620. package/vendor/symengine/symengine/polys/usymenginepoly.h +139 -0
  1621. package/vendor/symengine/symengine/pow.cpp +303 -0
  1622. package/vendor/symengine/symengine/pow.h +76 -0
  1623. package/vendor/symengine/symengine/prime_sieve.cpp +143 -0
  1624. package/vendor/symengine/symengine/prime_sieve.h +64 -0
  1625. package/vendor/symengine/symengine/printers/codegen.cpp +716 -0
  1626. package/vendor/symengine/symengine/printers/codegen.h +168 -0
  1627. package/vendor/symengine/symengine/printers/latex.cpp +630 -0
  1628. package/vendor/symengine/symengine/printers/latex.h +76 -0
  1629. package/vendor/symengine/symengine/printers/mathml.cpp +358 -0
  1630. package/vendor/symengine/symengine/printers/mathml.h +62 -0
  1631. package/vendor/symengine/symengine/printers/stringbox.cpp +276 -0
  1632. package/vendor/symengine/symengine/printers/stringbox.h +60 -0
  1633. package/vendor/symengine/symengine/printers/strprinter.cpp +1212 -0
  1634. package/vendor/symengine/symengine/printers/strprinter.h +217 -0
  1635. package/vendor/symengine/symengine/printers/unicode.cpp +730 -0
  1636. package/vendor/symengine/symengine/printers/unicode.h +84 -0
  1637. package/vendor/symengine/symengine/printers.h +46 -0
  1638. package/vendor/symengine/symengine/rational.cpp +365 -0
  1639. package/vendor/symengine/symengine/rational.h +341 -0
  1640. package/vendor/symengine/symengine/real_double.cpp +388 -0
  1641. package/vendor/symengine/symengine/real_double.h +492 -0
  1642. package/vendor/symengine/symengine/real_mpfr.h +379 -0
  1643. package/vendor/symengine/symengine/refine.cpp +213 -0
  1644. package/vendor/symengine/symengine/refine.h +43 -0
  1645. package/vendor/symengine/symengine/rewrite.cpp +235 -0
  1646. package/vendor/symengine/symengine/rings.cpp +107 -0
  1647. package/vendor/symengine/symengine/rings.h +24 -0
  1648. package/vendor/symengine/symengine/serialize-cereal.h +964 -0
  1649. package/vendor/symengine/symengine/series.cpp +85 -0
  1650. package/vendor/symengine/symengine/series.h +727 -0
  1651. package/vendor/symengine/symengine/series_flint.h +214 -0
  1652. package/vendor/symengine/symengine/series_generic.cpp +247 -0
  1653. package/vendor/symengine/symengine/series_generic.h +86 -0
  1654. package/vendor/symengine/symengine/series_piranha.h +95 -0
  1655. package/vendor/symengine/symengine/series_visitor.h +357 -0
  1656. package/vendor/symengine/symengine/set_funcs.cpp +296 -0
  1657. package/vendor/symengine/symengine/sets.cpp +1854 -0
  1658. package/vendor/symengine/symengine/sets.h +696 -0
  1659. package/vendor/symengine/symengine/simplify.cpp +62 -0
  1660. package/vendor/symengine/symengine/simplify.h +34 -0
  1661. package/vendor/symengine/symengine/solve.cpp +665 -0
  1662. package/vendor/symengine/symengine/solve.h +117 -0
  1663. package/vendor/symengine/symengine/sparse_matrix.cpp +776 -0
  1664. package/vendor/symengine/symengine/special_boost.cpp +85 -0
  1665. package/vendor/symengine/symengine/special_double.h +570 -0
  1666. package/vendor/symengine/symengine/subs.h +579 -0
  1667. package/vendor/symengine/symengine/symbol.cpp +88 -0
  1668. package/vendor/symengine/symengine/symbol.h +116 -0
  1669. package/vendor/symengine/symengine/symengine_assert.h +50 -0
  1670. package/vendor/symengine/symengine/symengine_casts.h +139 -0
  1671. package/vendor/symengine/symengine/symengine_exception.h +101 -0
  1672. package/vendor/symengine/symengine/symengine_rcp.cpp +21 -0
  1673. package/vendor/symengine/symengine/symengine_rcp.h +384 -0
  1674. package/vendor/symengine/symengine/test_visitors.cpp +1083 -0
  1675. package/vendor/symengine/symengine/test_visitors.h +466 -0
  1676. package/vendor/symengine/symengine/tribool.h +85 -0
  1677. package/vendor/symengine/symengine/tuple.cpp +47 -0
  1678. package/vendor/symengine/symengine/tuple.h +32 -0
  1679. package/vendor/symengine/symengine/type_codes.inc +139 -0
  1680. package/vendor/symengine/symengine/utilities/cereal/LICENSE +24 -0
  1681. package/vendor/symengine/symengine/utilities/cereal/include/cereal/access.hpp +351 -0
  1682. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/adapters.hpp +163 -0
  1683. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/binary.hpp +169 -0
  1684. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/json.hpp +1024 -0
  1685. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/portable_binary.hpp +334 -0
  1686. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/xml.hpp +956 -0
  1687. package/vendor/symengine/symengine/utilities/cereal/include/cereal/cereal.hpp +1120 -0
  1688. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/helpers.hpp +422 -0
  1689. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/polymorphic_impl.hpp +825 -0
  1690. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/polymorphic_impl_fwd.hpp +65 -0
  1691. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/static_object.hpp +128 -0
  1692. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/traits.hpp +1411 -0
  1693. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/util.hpp +84 -0
  1694. package/vendor/symengine/symengine/utilities/cereal/include/cereal/macros.hpp +156 -0
  1695. package/vendor/symengine/symengine/utilities/cereal/include/cereal/specialize.hpp +139 -0
  1696. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/array.hpp +79 -0
  1697. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/atomic.hpp +55 -0
  1698. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/base_class.hpp +203 -0
  1699. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/bitset.hpp +176 -0
  1700. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/boost_variant.hpp +164 -0
  1701. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/chrono.hpp +72 -0
  1702. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/common.hpp +129 -0
  1703. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/complex.hpp +56 -0
  1704. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/concepts/pair_associative_container.hpp +73 -0
  1705. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/deque.hpp +62 -0
  1706. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/forward_list.hpp +68 -0
  1707. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/functional.hpp +43 -0
  1708. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/list.hpp +62 -0
  1709. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/map.hpp +36 -0
  1710. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/memory.hpp +425 -0
  1711. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/optional.hpp +65 -0
  1712. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/polymorphic.hpp +483 -0
  1713. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/queue.hpp +132 -0
  1714. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/set.hpp +103 -0
  1715. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/stack.hpp +76 -0
  1716. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/string.hpp +61 -0
  1717. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/tuple.hpp +123 -0
  1718. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/unordered_map.hpp +36 -0
  1719. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/unordered_set.hpp +99 -0
  1720. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/utility.hpp +47 -0
  1721. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/valarray.hpp +89 -0
  1722. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/variant.hpp +108 -0
  1723. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/vector.hpp +112 -0
  1724. package/vendor/symengine/symengine/utilities/cereal/include/cereal/version.hpp +52 -0
  1725. package/vendor/symengine/symengine/utilities/fast_float/include/fast_float/fast_float.h +3720 -0
  1726. package/vendor/symengine/symengine/utilities/stream_fmt.h +25 -0
  1727. package/vendor/symengine/symengine/visitor.cpp +348 -0
  1728. package/vendor/symengine/symengine/visitor.h +425 -0
@@ -0,0 +1,4254 @@
1
+ // boost octonion.hpp header file
2
+
3
+ // (C) Copyright Hubert Holin 2001.
4
+ // Distributed under the Boost Software License, Version 1.0. (See
5
+ // accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+
8
+ // See http://www.boost.org for updates, documentation, and revision history.
9
+
10
+
11
+ #ifndef BOOST_OCTONION_HPP
12
+ #define BOOST_OCTONION_HPP
13
+
14
+ #include <boost/math/quaternion.hpp>
15
+ #include <valarray>
16
+
17
+
18
+ namespace boost
19
+ {
20
+ namespace math
21
+ {
22
+
23
+ #define BOOST_OCTONION_ACCESSOR_GENERATOR(type) \
24
+ type real() const \
25
+ { \
26
+ return(a); \
27
+ } \
28
+ \
29
+ octonion<type> unreal() const \
30
+ { \
31
+ return( octonion<type>(static_cast<type>(0),b,c,d,e,f,g,h)); \
32
+ } \
33
+ \
34
+ type R_component_1() const \
35
+ { \
36
+ return(a); \
37
+ } \
38
+ \
39
+ type R_component_2() const \
40
+ { \
41
+ return(b); \
42
+ } \
43
+ \
44
+ type R_component_3() const \
45
+ { \
46
+ return(c); \
47
+ } \
48
+ \
49
+ type R_component_4() const \
50
+ { \
51
+ return(d); \
52
+ } \
53
+ \
54
+ type R_component_5() const \
55
+ { \
56
+ return(e); \
57
+ } \
58
+ \
59
+ type R_component_6() const \
60
+ { \
61
+ return(f); \
62
+ } \
63
+ \
64
+ type R_component_7() const \
65
+ { \
66
+ return(g); \
67
+ } \
68
+ \
69
+ type R_component_8() const \
70
+ { \
71
+ return(h); \
72
+ } \
73
+ \
74
+ ::std::complex<type> C_component_1() const \
75
+ { \
76
+ return(::std::complex<type>(a,b)); \
77
+ } \
78
+ \
79
+ ::std::complex<type> C_component_2() const \
80
+ { \
81
+ return(::std::complex<type>(c,d)); \
82
+ } \
83
+ \
84
+ ::std::complex<type> C_component_3() const \
85
+ { \
86
+ return(::std::complex<type>(e,f)); \
87
+ } \
88
+ \
89
+ ::std::complex<type> C_component_4() const \
90
+ { \
91
+ return(::std::complex<type>(g,h)); \
92
+ } \
93
+ \
94
+ ::boost::math::quaternion<type> H_component_1() const \
95
+ { \
96
+ return(::boost::math::quaternion<type>(a,b,c,d)); \
97
+ } \
98
+ \
99
+ ::boost::math::quaternion<type> H_component_2() const \
100
+ { \
101
+ return(::boost::math::quaternion<type>(e,f,g,h)); \
102
+ }
103
+
104
+
105
+ #define BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(type) \
106
+ template<typename X> \
107
+ octonion<type> & operator = (octonion<X> const & a_affecter) \
108
+ { \
109
+ a = static_cast<type>(a_affecter.R_component_1()); \
110
+ b = static_cast<type>(a_affecter.R_component_2()); \
111
+ c = static_cast<type>(a_affecter.R_component_3()); \
112
+ d = static_cast<type>(a_affecter.R_component_4()); \
113
+ e = static_cast<type>(a_affecter.R_component_5()); \
114
+ f = static_cast<type>(a_affecter.R_component_6()); \
115
+ g = static_cast<type>(a_affecter.R_component_7()); \
116
+ h = static_cast<type>(a_affecter.R_component_8()); \
117
+ \
118
+ return(*this); \
119
+ } \
120
+ \
121
+ octonion<type> & operator = (octonion<type> const & a_affecter) \
122
+ { \
123
+ a = a_affecter.a; \
124
+ b = a_affecter.b; \
125
+ c = a_affecter.c; \
126
+ d = a_affecter.d; \
127
+ e = a_affecter.e; \
128
+ f = a_affecter.f; \
129
+ g = a_affecter.g; \
130
+ h = a_affecter.h; \
131
+ \
132
+ return(*this); \
133
+ } \
134
+ \
135
+ octonion<type> & operator = (type const & a_affecter) \
136
+ { \
137
+ a = a_affecter; \
138
+ \
139
+ b = c = d = e = f= g = h = static_cast<type>(0); \
140
+ \
141
+ return(*this); \
142
+ } \
143
+ \
144
+ octonion<type> & operator = (::std::complex<type> const & a_affecter) \
145
+ { \
146
+ a = a_affecter.real(); \
147
+ b = a_affecter.imag(); \
148
+ \
149
+ c = d = e = f = g = h = static_cast<type>(0); \
150
+ \
151
+ return(*this); \
152
+ } \
153
+ \
154
+ octonion<type> & operator = (::boost::math::quaternion<type> const & a_affecter) \
155
+ { \
156
+ a = a_affecter.R_component_1(); \
157
+ b = a_affecter.R_component_2(); \
158
+ c = a_affecter.R_component_3(); \
159
+ d = a_affecter.R_component_4(); \
160
+ \
161
+ e = f = g = h = static_cast<type>(0); \
162
+ \
163
+ return(*this); \
164
+ }
165
+
166
+
167
+ #define BOOST_OCTONION_MEMBER_DATA_GENERATOR(type) \
168
+ type a; \
169
+ type b; \
170
+ type c; \
171
+ type d; \
172
+ type e; \
173
+ type f; \
174
+ type g; \
175
+ type h; \
176
+
177
+ // LCOV_EXCL_START
178
+ // No code coverage for the generic case, like std::complex,
179
+ // the The behavior of octonion is unspecified if T is not
180
+ // one of float, double or long double.
181
+
182
+ template<typename T>
183
+ class octonion
184
+ {
185
+ public:
186
+
187
+ using value_type = T;
188
+
189
+ // constructor for O seen as R^8
190
+ // (also default constructor)
191
+
192
+ explicit octonion( T const & requested_a = T(),
193
+ T const & requested_b = T(),
194
+ T const & requested_c = T(),
195
+ T const & requested_d = T(),
196
+ T const & requested_e = T(),
197
+ T const & requested_f = T(),
198
+ T const & requested_g = T(),
199
+ T const & requested_h = T())
200
+ : a(requested_a),
201
+ b(requested_b),
202
+ c(requested_c),
203
+ d(requested_d),
204
+ e(requested_e),
205
+ f(requested_f),
206
+ g(requested_g),
207
+ h(requested_h)
208
+ {
209
+ // nothing to do!
210
+ }
211
+
212
+
213
+ // constructor for H seen as C^4
214
+
215
+ explicit octonion( ::std::complex<T> const & z0,
216
+ ::std::complex<T> const & z1 = ::std::complex<T>(),
217
+ ::std::complex<T> const & z2 = ::std::complex<T>(),
218
+ ::std::complex<T> const & z3 = ::std::complex<T>())
219
+ : a(z0.real()),
220
+ b(z0.imag()),
221
+ c(z1.real()),
222
+ d(z1.imag()),
223
+ e(z2.real()),
224
+ f(z2.imag()),
225
+ g(z3.real()),
226
+ h(z3.imag())
227
+ {
228
+ // nothing to do!
229
+ }
230
+
231
+
232
+ // constructor for O seen as H^2
233
+
234
+ explicit octonion( ::boost::math::quaternion<T> const & q0,
235
+ ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>())
236
+ : a(q0.R_component_1()),
237
+ b(q0.R_component_2()),
238
+ c(q0.R_component_3()),
239
+ d(q0.R_component_4()),
240
+ e(q1.R_component_1()),
241
+ f(q1.R_component_2()),
242
+ g(q1.R_component_3()),
243
+ h(q1.R_component_4())
244
+ {
245
+ // nothing to do!
246
+ }
247
+
248
+
249
+ // UNtemplated copy constructor
250
+ octonion(const octonion&) = default;
251
+
252
+
253
+ // templated copy constructor
254
+
255
+ template<typename X>
256
+ explicit octonion(octonion<X> const & a_recopier)
257
+ : a(static_cast<T>(a_recopier.R_component_1())),
258
+ b(static_cast<T>(a_recopier.R_component_2())),
259
+ c(static_cast<T>(a_recopier.R_component_3())),
260
+ d(static_cast<T>(a_recopier.R_component_4())),
261
+ e(static_cast<T>(a_recopier.R_component_5())),
262
+ f(static_cast<T>(a_recopier.R_component_6())),
263
+ g(static_cast<T>(a_recopier.R_component_7())),
264
+ h(static_cast<T>(a_recopier.R_component_8()))
265
+ {
266
+ // nothing to do!
267
+ }
268
+
269
+
270
+ // destructor
271
+ ~octonion() = default;
272
+
273
+
274
+ // accessors
275
+ //
276
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
277
+ // but unlike them there is no meaningful notion of "imaginary part".
278
+ // Instead there is an "unreal part" which itself is an octonion, and usually
279
+ // nothing simpler (as opposed to the complex number case).
280
+ // However, for practicality, there are accessors for the other components
281
+ // (these are necessary for the templated copy constructor, for instance).
282
+
283
+ BOOST_OCTONION_ACCESSOR_GENERATOR(T)
284
+
285
+ // assignment operators
286
+
287
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(T)
288
+
289
+ // other assignment-related operators
290
+ //
291
+ // NOTE: Octonion multiplication is *NOT* commutative;
292
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
293
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
294
+ // octonion multiplication is also *NOT* associative
295
+
296
+ octonion<T> & operator += (T const & rhs)
297
+ {
298
+ T at = a + rhs; // exception guard
299
+
300
+ a = at;
301
+
302
+ return(*this);
303
+ }
304
+
305
+
306
+ octonion<T> & operator += (::std::complex<T> const & rhs)
307
+ {
308
+ T at = a + rhs.real(); // exception guard
309
+ T bt = b + rhs.imag(); // exception guard
310
+
311
+ a = at;
312
+ b = bt;
313
+
314
+ return(*this);
315
+ }
316
+
317
+
318
+ octonion<T> & operator += (::boost::math::quaternion<T> const & rhs)
319
+ {
320
+ T at = a + rhs.R_component_1(); // exception guard
321
+ T bt = b + rhs.R_component_2(); // exception guard
322
+ T ct = c + rhs.R_component_3(); // exception guard
323
+ T dt = d + rhs.R_component_4(); // exception guard
324
+
325
+ a = at;
326
+ b = bt;
327
+ c = ct;
328
+ d = dt;
329
+
330
+ return(*this);
331
+ }
332
+
333
+
334
+ template<typename X>
335
+ octonion<T> & operator += (octonion<X> const & rhs)
336
+ {
337
+ T at = a + static_cast<T>(rhs.R_component_1()); // exception guard
338
+ T bt = b + static_cast<T>(rhs.R_component_2()); // exception guard
339
+ T ct = c + static_cast<T>(rhs.R_component_3()); // exception guard
340
+ T dt = d + static_cast<T>(rhs.R_component_4()); // exception guard
341
+ T et = e + static_cast<T>(rhs.R_component_5()); // exception guard
342
+ T ft = f + static_cast<T>(rhs.R_component_6()); // exception guard
343
+ T gt = g + static_cast<T>(rhs.R_component_7()); // exception guard
344
+ T ht = h + static_cast<T>(rhs.R_component_8()); // exception guard
345
+
346
+ a = at;
347
+ b = bt;
348
+ c = ct;
349
+ d = dt;
350
+ e = et;
351
+ f = ft;
352
+ g = gt;
353
+ h = ht;
354
+
355
+ return(*this);
356
+ }
357
+
358
+
359
+
360
+ octonion<T> & operator -= (T const & rhs)
361
+ {
362
+ T at = a - rhs; // exception guard
363
+
364
+ a = at;
365
+
366
+ return(*this);
367
+ }
368
+
369
+
370
+ octonion<T> & operator -= (::std::complex<T> const & rhs)
371
+ {
372
+ T at = a - rhs.real(); // exception guard
373
+ T bt = b - rhs.imag(); // exception guard
374
+
375
+ a = at;
376
+ b = bt;
377
+
378
+ return(*this);
379
+ }
380
+
381
+
382
+ octonion<T> & operator -= (::boost::math::quaternion<T> const & rhs)
383
+ {
384
+ T at = a - rhs.R_component_1(); // exception guard
385
+ T bt = b - rhs.R_component_2(); // exception guard
386
+ T ct = c - rhs.R_component_3(); // exception guard
387
+ T dt = d - rhs.R_component_4(); // exception guard
388
+
389
+ a = at;
390
+ b = bt;
391
+ c = ct;
392
+ d = dt;
393
+
394
+ return(*this);
395
+ }
396
+
397
+
398
+ template<typename X>
399
+ octonion<T> & operator -= (octonion<X> const & rhs)
400
+ {
401
+ T at = a - static_cast<T>(rhs.R_component_1()); // exception guard
402
+ T bt = b - static_cast<T>(rhs.R_component_2()); // exception guard
403
+ T ct = c - static_cast<T>(rhs.R_component_3()); // exception guard
404
+ T dt = d - static_cast<T>(rhs.R_component_4()); // exception guard
405
+ T et = e - static_cast<T>(rhs.R_component_5()); // exception guard
406
+ T ft = f - static_cast<T>(rhs.R_component_6()); // exception guard
407
+ T gt = g - static_cast<T>(rhs.R_component_7()); // exception guard
408
+ T ht = h - static_cast<T>(rhs.R_component_8()); // exception guard
409
+
410
+ a = at;
411
+ b = bt;
412
+ c = ct;
413
+ d = dt;
414
+ e = et;
415
+ f = ft;
416
+ g = gt;
417
+ h = ht;
418
+
419
+ return(*this);
420
+ }
421
+
422
+
423
+ octonion<T> & operator *= (T const & rhs)
424
+ {
425
+ T at = a * rhs; // exception guard
426
+ T bt = b * rhs; // exception guard
427
+ T ct = c * rhs; // exception guard
428
+ T dt = d * rhs; // exception guard
429
+ T et = e * rhs; // exception guard
430
+ T ft = f * rhs; // exception guard
431
+ T gt = g * rhs; // exception guard
432
+ T ht = h * rhs; // exception guard
433
+
434
+ a = at;
435
+ b = bt;
436
+ c = ct;
437
+ d = dt;
438
+ e = et;
439
+ f = ft;
440
+ g = gt;
441
+ h = ht;
442
+
443
+ return(*this);
444
+ }
445
+
446
+
447
+ octonion<T> & operator *= (::std::complex<T> const & rhs)
448
+ {
449
+ T ar = rhs.real();
450
+ T br = rhs.imag();
451
+
452
+ T at = +a*ar-b*br;
453
+ T bt = +a*br+b*ar;
454
+ T ct = +c*ar+d*br;
455
+ T dt = -c*br+d*ar;
456
+ T et = +e*ar+f*br;
457
+ T ft = -e*br+f*ar;
458
+ T gt = +g*ar-h*br;
459
+ T ht = +g*br+h*ar;
460
+
461
+ a = at;
462
+ b = bt;
463
+ c = ct;
464
+ d = dt;
465
+ e = et;
466
+ f = ft;
467
+ g = gt;
468
+ h = ht;
469
+
470
+ return(*this);
471
+ }
472
+
473
+
474
+ octonion<T> & operator *= (::boost::math::quaternion<T> const & rhs)
475
+ {
476
+ T ar = rhs.R_component_1();
477
+ T br = rhs.R_component_2();
478
+ T cr = rhs.R_component_2();
479
+ T dr = rhs.R_component_2();
480
+
481
+ T at = +a*ar-b*br-c*cr-d*dr;
482
+ T bt = +a*br+b*ar+c*dr-d*cr;
483
+ T ct = +a*cr-b*dr+c*ar+d*br;
484
+ T dt = +a*dr+b*cr-c*br+d*ar;
485
+ T et = +e*ar+f*br+g*cr+h*dr;
486
+ T ft = -e*br+f*ar-g*dr+h*cr;
487
+ T gt = -e*cr+f*dr+g*ar-h*br;
488
+ T ht = -e*dr-f*cr+g*br+h*ar;
489
+
490
+ a = at;
491
+ b = bt;
492
+ c = ct;
493
+ d = dt;
494
+ e = et;
495
+ f = ft;
496
+ g = gt;
497
+ h = ht;
498
+
499
+ return(*this);
500
+ }
501
+
502
+
503
+ template<typename X>
504
+ octonion<T> & operator *= (octonion<X> const & rhs)
505
+ {
506
+ T ar = static_cast<T>(rhs.R_component_1());
507
+ T br = static_cast<T>(rhs.R_component_2());
508
+ T cr = static_cast<T>(rhs.R_component_3());
509
+ T dr = static_cast<T>(rhs.R_component_4());
510
+ T er = static_cast<T>(rhs.R_component_5());
511
+ T fr = static_cast<T>(rhs.R_component_6());
512
+ T gr = static_cast<T>(rhs.R_component_7());
513
+ T hr = static_cast<T>(rhs.R_component_8());
514
+
515
+ T at = +a*ar-b*br-c*cr-d*dr-e*er-f*fr-g*gr-h*hr;
516
+ T bt = +a*br+b*ar+c*dr-d*cr+e*fr-f*er-g*hr+h*gr;
517
+ T ct = +a*cr-b*dr+c*ar+d*br+e*gr+f*hr-g*er-h*fr;
518
+ T dt = +a*dr+b*cr-c*br+d*ar+e*hr-f*gr+g*fr-h*er;
519
+ T et = +a*er-b*fr-c*gr-d*hr+e*ar+f*br+g*cr+h*dr;
520
+ T ft = +a*fr+b*er-c*hr+d*gr-e*br+f*ar-g*dr+h*cr;
521
+ T gt = +a*gr+b*hr+c*er-d*fr-e*cr+f*dr+g*ar-h*br;
522
+ T ht = +a*hr-b*gr+c*fr+d*er-e*dr-f*cr+g*br+h*ar;
523
+
524
+ a = at;
525
+ b = bt;
526
+ c = ct;
527
+ d = dt;
528
+ e = et;
529
+ f = ft;
530
+ g = gt;
531
+ h = ht;
532
+
533
+ return(*this);
534
+ }
535
+
536
+
537
+ octonion<T> & operator /= (T const & rhs)
538
+ {
539
+ T at = a / rhs; // exception guard
540
+ T bt = b / rhs; // exception guard
541
+ T ct = c / rhs; // exception guard
542
+ T dt = d / rhs; // exception guard
543
+ T et = e / rhs; // exception guard
544
+ T ft = f / rhs; // exception guard
545
+ T gt = g / rhs; // exception guard
546
+ T ht = h / rhs; // exception guard
547
+
548
+ a = at;
549
+ b = bt;
550
+ c = ct;
551
+ d = dt;
552
+ e = et;
553
+ f = ft;
554
+ g = gt;
555
+ h = ht;
556
+
557
+ return(*this);
558
+ }
559
+
560
+
561
+ octonion<T> & operator /= (::std::complex<T> const & rhs)
562
+ {
563
+ T ar = rhs.real();
564
+ T br = rhs.imag();
565
+
566
+ T denominator = ar*ar+br*br;
567
+
568
+ T at = (+a*ar-b*br)/denominator;
569
+ T bt = (-a*br+b*ar)/denominator;
570
+ T ct = (+c*ar-d*br)/denominator;
571
+ T dt = (+c*br+d*ar)/denominator;
572
+ T et = (+e*ar-f*br)/denominator;
573
+ T ft = (+e*br+f*ar)/denominator;
574
+ T gt = (+g*ar+h*br)/denominator;
575
+ T ht = (+g*br+h*ar)/denominator;
576
+
577
+ a = at;
578
+ b = bt;
579
+ c = ct;
580
+ d = dt;
581
+ e = et;
582
+ f = ft;
583
+ g = gt;
584
+ h = ht;
585
+
586
+ return(*this);
587
+ }
588
+
589
+
590
+ octonion<T> & operator /= (::boost::math::quaternion<T> const & rhs)
591
+ {
592
+ T ar = rhs.R_component_1();
593
+ T br = rhs.R_component_2();
594
+ T cr = rhs.R_component_2();
595
+ T dr = rhs.R_component_2();
596
+
597
+ T denominator = ar*ar+br*br+cr*cr+dr*dr;
598
+
599
+ T at = (+a*ar+b*br+c*cr+d*dr)/denominator;
600
+ T bt = (-a*br+b*ar-c*dr+d*cr)/denominator;
601
+ T ct = (-a*cr+b*dr+c*ar-d*br)/denominator;
602
+ T dt = (-a*dr-b*cr+c*br+d*ar)/denominator;
603
+ T et = (+e*ar-f*br-g*cr-h*dr)/denominator;
604
+ T ft = (+e*br+f*ar+g*dr-h*cr)/denominator;
605
+ T gt = (+e*cr-f*dr+g*ar+h*br)/denominator;
606
+ T ht = (+e*dr+f*cr-g*br+h*ar)/denominator;
607
+
608
+ a = at;
609
+ b = bt;
610
+ c = ct;
611
+ d = dt;
612
+ e = et;
613
+ f = ft;
614
+ g = gt;
615
+ h = ht;
616
+
617
+ return(*this);
618
+ }
619
+
620
+
621
+ template<typename X>
622
+ octonion<T> & operator /= (octonion<X> const & rhs)
623
+ {
624
+ T ar = static_cast<T>(rhs.R_component_1());
625
+ T br = static_cast<T>(rhs.R_component_2());
626
+ T cr = static_cast<T>(rhs.R_component_3());
627
+ T dr = static_cast<T>(rhs.R_component_4());
628
+ T er = static_cast<T>(rhs.R_component_5());
629
+ T fr = static_cast<T>(rhs.R_component_6());
630
+ T gr = static_cast<T>(rhs.R_component_7());
631
+ T hr = static_cast<T>(rhs.R_component_8());
632
+
633
+ T denominator = ar*ar+br*br+cr*cr+dr*dr+er*er+fr*fr+gr*gr+hr*hr;
634
+
635
+ T at = (+a*ar+b*br+c*cr+d*dr+e*er+f*fr+g*gr+h*hr)/denominator;
636
+ T bt = (-a*br+b*ar-c*dr+d*cr-e*fr+f*er+g*hr-h*gr)/denominator;
637
+ T ct = (-a*cr+b*dr+c*ar-d*br-e*gr-f*hr+g*er+h*fr)/denominator;
638
+ T dt = (-a*dr-b*cr+c*br+d*ar-e*hr+f*gr-g*fr+h*er)/denominator;
639
+ T et = (-a*er+b*fr+c*gr+d*hr+e*ar-f*br-g*cr-h*dr)/denominator;
640
+ T ft = (-a*fr-b*er+c*hr-d*gr+e*br+f*ar+g*dr-h*cr)/denominator;
641
+ T gt = (-a*gr-b*hr-c*er+d*fr+e*cr-f*dr+g*ar+h*br)/denominator;
642
+ T ht = (-a*hr+b*gr-c*fr-d*er+e*dr+f*cr-g*br+h*ar)/denominator;
643
+
644
+ a = at;
645
+ b = bt;
646
+ c = ct;
647
+ d = dt;
648
+ e = et;
649
+ f = ft;
650
+ g = gt;
651
+ h = ht;
652
+
653
+ return(*this);
654
+ }
655
+
656
+
657
+ protected:
658
+
659
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(T)
660
+
661
+
662
+ private:
663
+
664
+ };
665
+ // LCOV_EXCL_STOP
666
+
667
+ // declaration of octonion specialization
668
+
669
+ template<> class octonion<float>;
670
+ template<> class octonion<double>;
671
+ template<> class octonion<long double>;
672
+
673
+
674
+ // helper templates for converting copy constructors (declaration)
675
+
676
+ namespace detail
677
+ {
678
+
679
+ template< typename T,
680
+ typename U
681
+ >
682
+ octonion<T> octonion_type_converter(octonion<U> const & rhs);
683
+ }
684
+
685
+
686
+ // implementation of octonion specialization
687
+
688
+
689
+ #define BOOST_OCTONION_CONSTRUCTOR_GENERATOR(type) \
690
+ explicit octonion( type const & requested_a = static_cast<type>(0), \
691
+ type const & requested_b = static_cast<type>(0), \
692
+ type const & requested_c = static_cast<type>(0), \
693
+ type const & requested_d = static_cast<type>(0), \
694
+ type const & requested_e = static_cast<type>(0), \
695
+ type const & requested_f = static_cast<type>(0), \
696
+ type const & requested_g = static_cast<type>(0), \
697
+ type const & requested_h = static_cast<type>(0)) \
698
+ : a(requested_a), \
699
+ b(requested_b), \
700
+ c(requested_c), \
701
+ d(requested_d), \
702
+ e(requested_e), \
703
+ f(requested_f), \
704
+ g(requested_g), \
705
+ h(requested_h) \
706
+ { \
707
+ } \
708
+ \
709
+ explicit octonion( ::std::complex<type> const & z0, \
710
+ ::std::complex<type> const & z1 = ::std::complex<type>(), \
711
+ ::std::complex<type> const & z2 = ::std::complex<type>(), \
712
+ ::std::complex<type> const & z3 = ::std::complex<type>()) \
713
+ : a(z0.real()), \
714
+ b(z0.imag()), \
715
+ c(z1.real()), \
716
+ d(z1.imag()), \
717
+ e(z2.real()), \
718
+ f(z2.imag()), \
719
+ g(z3.real()), \
720
+ h(z3.imag()) \
721
+ { \
722
+ } \
723
+ \
724
+ explicit octonion( ::boost::math::quaternion<type> const & q0, \
725
+ ::boost::math::quaternion<type> const & q1 = ::boost::math::quaternion<type>()) \
726
+ : a(q0.R_component_1()), \
727
+ b(q0.R_component_2()), \
728
+ c(q0.R_component_3()), \
729
+ d(q0.R_component_4()), \
730
+ e(q1.R_component_1()), \
731
+ f(q1.R_component_2()), \
732
+ g(q1.R_component_3()), \
733
+ h(q1.R_component_4()) \
734
+ { \
735
+ }
736
+
737
+
738
+ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \
739
+ octonion<type> & operator += (type const & rhs) \
740
+ { \
741
+ a += rhs; \
742
+ \
743
+ return(*this); \
744
+ }
745
+
746
+ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \
747
+ octonion<type> & operator += (::std::complex<type> const & rhs) \
748
+ { \
749
+ a += rhs.real(); \
750
+ b += rhs.imag(); \
751
+ \
752
+ return(*this); \
753
+ }
754
+
755
+ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_3(type) \
756
+ octonion<type> & operator += (::boost::math::quaternion<type> const & rhs) \
757
+ { \
758
+ a += rhs.R_component_1(); \
759
+ b += rhs.R_component_2(); \
760
+ c += rhs.R_component_3(); \
761
+ d += rhs.R_component_4(); \
762
+ \
763
+ return(*this); \
764
+ }
765
+
766
+ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_4(type) \
767
+ template<typename X> \
768
+ octonion<type> & operator += (octonion<X> const & rhs) \
769
+ { \
770
+ a += static_cast<type>(rhs.R_component_1()); \
771
+ b += static_cast<type>(rhs.R_component_2()); \
772
+ c += static_cast<type>(rhs.R_component_3()); \
773
+ d += static_cast<type>(rhs.R_component_4()); \
774
+ e += static_cast<type>(rhs.R_component_5()); \
775
+ f += static_cast<type>(rhs.R_component_6()); \
776
+ g += static_cast<type>(rhs.R_component_7()); \
777
+ h += static_cast<type>(rhs.R_component_8()); \
778
+ \
779
+ return(*this); \
780
+ }
781
+
782
+ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_1(type) \
783
+ octonion<type> & operator -= (type const & rhs) \
784
+ { \
785
+ a -= rhs; \
786
+ \
787
+ return(*this); \
788
+ }
789
+
790
+ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_2(type) \
791
+ octonion<type> & operator -= (::std::complex<type> const & rhs) \
792
+ { \
793
+ a -= rhs.real(); \
794
+ b -= rhs.imag(); \
795
+ \
796
+ return(*this); \
797
+ }
798
+
799
+ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_3(type) \
800
+ octonion<type> & operator -= (::boost::math::quaternion<type> const & rhs) \
801
+ { \
802
+ a -= rhs.R_component_1(); \
803
+ b -= rhs.R_component_2(); \
804
+ c -= rhs.R_component_3(); \
805
+ d -= rhs.R_component_4(); \
806
+ \
807
+ return(*this); \
808
+ }
809
+
810
+ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_4(type) \
811
+ template<typename X> \
812
+ octonion<type> & operator -= (octonion<X> const & rhs) \
813
+ { \
814
+ a -= static_cast<type>(rhs.R_component_1()); \
815
+ b -= static_cast<type>(rhs.R_component_2()); \
816
+ c -= static_cast<type>(rhs.R_component_3()); \
817
+ d -= static_cast<type>(rhs.R_component_4()); \
818
+ e -= static_cast<type>(rhs.R_component_5()); \
819
+ f -= static_cast<type>(rhs.R_component_6()); \
820
+ g -= static_cast<type>(rhs.R_component_7()); \
821
+ h -= static_cast<type>(rhs.R_component_8()); \
822
+ \
823
+ return(*this); \
824
+ }
825
+
826
+ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_1(type) \
827
+ octonion<type> & operator *= (type const & rhs) \
828
+ { \
829
+ a *= rhs; \
830
+ b *= rhs; \
831
+ c *= rhs; \
832
+ d *= rhs; \
833
+ e *= rhs; \
834
+ f *= rhs; \
835
+ g *= rhs; \
836
+ h *= rhs; \
837
+ \
838
+ return(*this); \
839
+ }
840
+
841
+ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_2(type) \
842
+ octonion<type> & operator *= (::std::complex<type> const & rhs) \
843
+ { \
844
+ type ar = rhs.real(); \
845
+ type br = rhs.imag(); \
846
+ \
847
+ type at = +a*ar-b*br; \
848
+ type bt = +a*br+b*ar; \
849
+ type ct = +c*ar+d*br; \
850
+ type dt = -c*br+d*ar; \
851
+ type et = +e*ar+f*br; \
852
+ type ft = -e*br+f*ar; \
853
+ type gt = +g*ar-h*br; \
854
+ type ht = +g*br+h*ar; \
855
+ \
856
+ a = at; \
857
+ b = bt; \
858
+ c = ct; \
859
+ d = dt; \
860
+ e = et; \
861
+ f = ft; \
862
+ g = gt; \
863
+ h = ht; \
864
+ \
865
+ return(*this); \
866
+ }
867
+
868
+ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_3(type) \
869
+ octonion<type> & operator *= (::boost::math::quaternion<type> const & rhs) \
870
+ { \
871
+ type ar = rhs.R_component_1(); \
872
+ type br = rhs.R_component_2(); \
873
+ type cr = rhs.R_component_2(); \
874
+ type dr = rhs.R_component_2(); \
875
+ \
876
+ type at = +a*ar-b*br-c*cr-d*dr; \
877
+ type bt = +a*br+b*ar+c*dr-d*cr; \
878
+ type ct = +a*cr-b*dr+c*ar+d*br; \
879
+ type dt = +a*dr+b*cr-c*br+d*ar; \
880
+ type et = +e*ar+f*br+g*cr+h*dr; \
881
+ type ft = -e*br+f*ar-g*dr+h*cr; \
882
+ type gt = -e*cr+f*dr+g*ar-h*br; \
883
+ type ht = -e*dr-f*cr+g*br+h*ar; \
884
+ \
885
+ a = at; \
886
+ b = bt; \
887
+ c = ct; \
888
+ d = dt; \
889
+ e = et; \
890
+ f = ft; \
891
+ g = gt; \
892
+ h = ht; \
893
+ \
894
+ return(*this); \
895
+ }
896
+
897
+ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_4(type) \
898
+ template<typename X> \
899
+ octonion<type> & operator *= (octonion<X> const & rhs) \
900
+ { \
901
+ type ar = static_cast<type>(rhs.R_component_1()); \
902
+ type br = static_cast<type>(rhs.R_component_2()); \
903
+ type cr = static_cast<type>(rhs.R_component_3()); \
904
+ type dr = static_cast<type>(rhs.R_component_4()); \
905
+ type er = static_cast<type>(rhs.R_component_5()); \
906
+ type fr = static_cast<type>(rhs.R_component_6()); \
907
+ type gr = static_cast<type>(rhs.R_component_7()); \
908
+ type hr = static_cast<type>(rhs.R_component_8()); \
909
+ \
910
+ type at = +a*ar-b*br-c*cr-d*dr-e*er-f*fr-g*gr-h*hr; \
911
+ type bt = +a*br+b*ar+c*dr-d*cr+e*fr-f*er-g*hr+h*gr; \
912
+ type ct = +a*cr-b*dr+c*ar+d*br+e*gr+f*hr-g*er-h*fr; \
913
+ type dt = +a*dr+b*cr-c*br+d*ar+e*hr-f*gr+g*fr-h*er; \
914
+ type et = +a*er-b*fr-c*gr-d*hr+e*ar+f*br+g*cr+h*dr; \
915
+ type ft = +a*fr+b*er-c*hr+d*gr-e*br+f*ar-g*dr+h*cr; \
916
+ type gt = +a*gr+b*hr+c*er-d*fr-e*cr+f*dr+g*ar-h*br; \
917
+ type ht = +a*hr-b*gr+c*fr+d*er-e*dr-f*cr+g*br+h*ar; \
918
+ \
919
+ a = at; \
920
+ b = bt; \
921
+ c = ct; \
922
+ d = dt; \
923
+ e = et; \
924
+ f = ft; \
925
+ g = gt; \
926
+ h = ht; \
927
+ \
928
+ return(*this); \
929
+ }
930
+
931
+ // There is quite a lot of repetition in the code below. This is intentional.
932
+ // The last conditional block is the normal form, and the others merely
933
+ // consist of workarounds for various compiler deficiencies. Hopefully, when
934
+ // more compilers are conformant and we can retire support for those that are
935
+ // not, we will be able to remove the clutter. This is makes the situation
936
+ // (painfully) explicit.
937
+
938
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_1(type) \
939
+ octonion<type> & operator /= (type const & rhs) \
940
+ { \
941
+ a /= rhs; \
942
+ b /= rhs; \
943
+ c /= rhs; \
944
+ d /= rhs; \
945
+ e /= rhs; \
946
+ f /= rhs; \
947
+ g /= rhs; \
948
+ h /= rhs; \
949
+ \
950
+ return(*this); \
951
+ }
952
+
953
+ #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
954
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
955
+ octonion<type> & operator /= (::std::complex<type> const & rhs) \
956
+ { \
957
+ using ::std::valarray; \
958
+ using ::std::abs; \
959
+ \
960
+ valarray<type> tr(2); \
961
+ \
962
+ tr[0] = rhs.real(); \
963
+ tr[1] = rhs.imag(); \
964
+ \
965
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
966
+ \
967
+ tr *= mixam; \
968
+ \
969
+ valarray<type> tt(8); \
970
+ \
971
+ tt[0] = +a*tr[0]-b*tr[1]; \
972
+ tt[1] = -a*tr[1]+b*tr[0]; \
973
+ tt[2] = +c*tr[0]-d*tr[1]; \
974
+ tt[3] = +c*tr[1]+d*tr[0]; \
975
+ tt[4] = +e*tr[0]-f*tr[1]; \
976
+ tt[5] = +e*tr[1]+f*tr[0]; \
977
+ tt[6] = +g*tr[0]+h*tr[1]; \
978
+ tt[7] = +g*tr[1]+h*tr[0]; \
979
+ \
980
+ tr *= tr; \
981
+ \
982
+ tt *= (mixam/tr.sum()); \
983
+ \
984
+ a = tt[0]; \
985
+ b = tt[1]; \
986
+ c = tt[2]; \
987
+ d = tt[3]; \
988
+ e = tt[4]; \
989
+ f = tt[5]; \
990
+ g = tt[6]; \
991
+ h = tt[7]; \
992
+ \
993
+ return(*this); \
994
+ }
995
+ #else
996
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
997
+ octonion<type> & operator /= (::std::complex<type> const & rhs) \
998
+ { \
999
+ using ::std::valarray; \
1000
+ \
1001
+ valarray<type> tr(2); \
1002
+ \
1003
+ tr[0] = rhs.real(); \
1004
+ tr[1] = rhs.imag(); \
1005
+ \
1006
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
1007
+ \
1008
+ tr *= mixam; \
1009
+ \
1010
+ valarray<type> tt(8); \
1011
+ \
1012
+ tt[0] = +a*tr[0]-b*tr[1]; \
1013
+ tt[1] = -a*tr[1]+b*tr[0]; \
1014
+ tt[2] = +c*tr[0]-d*tr[1]; \
1015
+ tt[3] = +c*tr[1]+d*tr[0]; \
1016
+ tt[4] = +e*tr[0]-f*tr[1]; \
1017
+ tt[5] = +e*tr[1]+f*tr[0]; \
1018
+ tt[6] = +g*tr[0]+h*tr[1]; \
1019
+ tt[7] = +g*tr[1]+h*tr[0]; \
1020
+ \
1021
+ tr *= tr; \
1022
+ \
1023
+ tt *= (mixam/tr.sum()); \
1024
+ \
1025
+ a = tt[0]; \
1026
+ b = tt[1]; \
1027
+ c = tt[2]; \
1028
+ d = tt[3]; \
1029
+ e = tt[4]; \
1030
+ f = tt[5]; \
1031
+ g = tt[6]; \
1032
+ h = tt[7]; \
1033
+ \
1034
+ return(*this); \
1035
+ }
1036
+ #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
1037
+
1038
+ #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
1039
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
1040
+ octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
1041
+ { \
1042
+ using ::std::valarray; \
1043
+ using ::std::abs; \
1044
+ \
1045
+ valarray<type> tr(4); \
1046
+ \
1047
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
1048
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
1049
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
1050
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
1051
+ \
1052
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
1053
+ \
1054
+ tr *= mixam; \
1055
+ \
1056
+ valarray<type> tt(8); \
1057
+ \
1058
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
1059
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
1060
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
1061
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
1062
+ tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
1063
+ tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
1064
+ tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
1065
+ tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
1066
+ \
1067
+ tr *= tr; \
1068
+ \
1069
+ tt *= (mixam/tr.sum()); \
1070
+ \
1071
+ a = tt[0]; \
1072
+ b = tt[1]; \
1073
+ c = tt[2]; \
1074
+ d = tt[3]; \
1075
+ e = tt[4]; \
1076
+ f = tt[5]; \
1077
+ g = tt[6]; \
1078
+ h = tt[7]; \
1079
+ \
1080
+ return(*this); \
1081
+ }
1082
+ #else
1083
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
1084
+ octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
1085
+ { \
1086
+ using ::std::valarray; \
1087
+ \
1088
+ valarray<type> tr(4); \
1089
+ \
1090
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
1091
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
1092
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
1093
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
1094
+ \
1095
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
1096
+ \
1097
+ tr *= mixam; \
1098
+ \
1099
+ valarray<type> tt(8); \
1100
+ \
1101
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
1102
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
1103
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
1104
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
1105
+ tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
1106
+ tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
1107
+ tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
1108
+ tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
1109
+ \
1110
+ tr *= tr; \
1111
+ \
1112
+ tt *= (mixam/tr.sum()); \
1113
+ \
1114
+ a = tt[0]; \
1115
+ b = tt[1]; \
1116
+ c = tt[2]; \
1117
+ d = tt[3]; \
1118
+ e = tt[4]; \
1119
+ f = tt[5]; \
1120
+ g = tt[6]; \
1121
+ h = tt[7]; \
1122
+ \
1123
+ return(*this); \
1124
+ }
1125
+ #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
1126
+
1127
+ #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
1128
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
1129
+ template<typename X> \
1130
+ octonion<type> & operator /= (octonion<X> const & rhs) \
1131
+ { \
1132
+ using ::std::valarray; \
1133
+ using ::std::abs; \
1134
+ \
1135
+ valarray<type> tr(8); \
1136
+ \
1137
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
1138
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
1139
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
1140
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
1141
+ tr[4] = static_cast<type>(rhs.R_component_5()); \
1142
+ tr[5] = static_cast<type>(rhs.R_component_6()); \
1143
+ tr[6] = static_cast<type>(rhs.R_component_7()); \
1144
+ tr[7] = static_cast<type>(rhs.R_component_8()); \
1145
+ \
1146
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
1147
+ \
1148
+ tr *= mixam; \
1149
+ \
1150
+ valarray<type> tt(8); \
1151
+ \
1152
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \
1153
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \
1154
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \
1155
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \
1156
+ tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
1157
+ tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
1158
+ tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
1159
+ tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
1160
+ \
1161
+ tr *= tr; \
1162
+ \
1163
+ tt *= (mixam/tr.sum()); \
1164
+ \
1165
+ a = tt[0]; \
1166
+ b = tt[1]; \
1167
+ c = tt[2]; \
1168
+ d = tt[3]; \
1169
+ e = tt[4]; \
1170
+ f = tt[5]; \
1171
+ g = tt[6]; \
1172
+ h = tt[7]; \
1173
+ \
1174
+ return(*this); \
1175
+ }
1176
+ #else
1177
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
1178
+ template<typename X> \
1179
+ octonion<type> & operator /= (octonion<X> const & rhs) \
1180
+ { \
1181
+ using ::std::valarray; \
1182
+ \
1183
+ valarray<type> tr(8); \
1184
+ \
1185
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
1186
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
1187
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
1188
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
1189
+ tr[4] = static_cast<type>(rhs.R_component_5()); \
1190
+ tr[5] = static_cast<type>(rhs.R_component_6()); \
1191
+ tr[6] = static_cast<type>(rhs.R_component_7()); \
1192
+ tr[7] = static_cast<type>(rhs.R_component_8()); \
1193
+ \
1194
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
1195
+ \
1196
+ tr *= mixam; \
1197
+ \
1198
+ valarray<type> tt(8); \
1199
+ \
1200
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \
1201
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \
1202
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \
1203
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \
1204
+ tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
1205
+ tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
1206
+ tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
1207
+ tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
1208
+ \
1209
+ tr *= tr; \
1210
+ \
1211
+ tt *= (mixam/tr.sum()); \
1212
+ \
1213
+ a = tt[0]; \
1214
+ b = tt[1]; \
1215
+ c = tt[2]; \
1216
+ d = tt[3]; \
1217
+ e = tt[4]; \
1218
+ f = tt[5]; \
1219
+ g = tt[6]; \
1220
+ h = tt[7]; \
1221
+ \
1222
+ return(*this); \
1223
+ }
1224
+ #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
1225
+
1226
+
1227
+ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \
1228
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \
1229
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \
1230
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_3(type) \
1231
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_4(type)
1232
+
1233
+ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR(type) \
1234
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_1(type) \
1235
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_2(type) \
1236
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_3(type) \
1237
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_4(type)
1238
+
1239
+ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR(type) \
1240
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_1(type) \
1241
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_2(type) \
1242
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_3(type) \
1243
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_4(type)
1244
+
1245
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR(type) \
1246
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_1(type) \
1247
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
1248
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
1249
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type)
1250
+
1251
+ #define BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(type) \
1252
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \
1253
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR(type) \
1254
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR(type) \
1255
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR(type)
1256
+
1257
+
1258
+ template<>
1259
+ class octonion<float>
1260
+ {
1261
+ public:
1262
+
1263
+ using value_type = float;
1264
+
1265
+ BOOST_OCTONION_CONSTRUCTOR_GENERATOR(float)
1266
+
1267
+ // UNtemplated copy constructor
1268
+ octonion(const octonion&) = default;
1269
+
1270
+ // explicit copy constructors (precision-losing converters)
1271
+
1272
+ explicit octonion(octonion<double> const & a_recopier)
1273
+ {
1274
+ *this = detail::octonion_type_converter<float, double>(a_recopier);
1275
+ }
1276
+
1277
+ explicit octonion(octonion<long double> const & a_recopier)
1278
+ {
1279
+ *this = detail::octonion_type_converter<float, long double>(a_recopier);
1280
+ }
1281
+
1282
+ // destructor
1283
+ ~octonion() = default;
1284
+
1285
+ // accessors
1286
+ //
1287
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
1288
+ // but unlike them there is no meaningful notion of "imaginary part".
1289
+ // Instead there is an "unreal part" which itself is an octonion, and usually
1290
+ // nothing simpler (as opposed to the complex number case).
1291
+ // However, for practicality, there are accessors for the other components
1292
+ // (these are necessary for the templated copy constructor, for instance).
1293
+
1294
+ BOOST_OCTONION_ACCESSOR_GENERATOR(float)
1295
+
1296
+ // assignment operators
1297
+
1298
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(float)
1299
+
1300
+ // other assignment-related operators
1301
+ //
1302
+ // NOTE: Octonion multiplication is *NOT* commutative;
1303
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
1304
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
1305
+ // octonion multiplication is also *NOT* associative
1306
+
1307
+ BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(float)
1308
+
1309
+
1310
+ protected:
1311
+
1312
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(float)
1313
+ };
1314
+
1315
+
1316
+ template<>
1317
+ class octonion<double>
1318
+ {
1319
+ public:
1320
+
1321
+ using value_type = double;
1322
+
1323
+ BOOST_OCTONION_CONSTRUCTOR_GENERATOR(double)
1324
+
1325
+ // Untemplated copy constructor
1326
+ octonion(const octonion&) = default;
1327
+
1328
+ // converting copy constructor
1329
+
1330
+ explicit octonion(octonion<float> const & a_recopier)
1331
+ {
1332
+ *this = detail::octonion_type_converter<double, float>(a_recopier);
1333
+ }
1334
+
1335
+ // explicit copy constructors (precision-losing converters)
1336
+
1337
+ explicit octonion(octonion<long double> const & a_recopier)
1338
+ {
1339
+ *this = detail::octonion_type_converter<double, long double>(a_recopier);
1340
+ }
1341
+
1342
+ // destructor
1343
+ // (this is taken care of by the compiler itself)
1344
+
1345
+ // accessors
1346
+ //
1347
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
1348
+ // but unlike them there is no meaningful notion of "imaginary part".
1349
+ // Instead there is an "unreal part" which itself is an octonion, and usually
1350
+ // nothing simpler (as opposed to the complex number case).
1351
+ // However, for practicality, there are accessors for the other components
1352
+ // (these are necessary for the templated copy constructor, for instance).
1353
+
1354
+ BOOST_OCTONION_ACCESSOR_GENERATOR(double)
1355
+
1356
+ // assignment operators
1357
+
1358
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(double)
1359
+
1360
+ // other assignment-related operators
1361
+ //
1362
+ // NOTE: Octonion multiplication is *NOT* commutative;
1363
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
1364
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
1365
+ // octonion multiplication is also *NOT* associative
1366
+
1367
+ BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(double)
1368
+
1369
+
1370
+ protected:
1371
+
1372
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(double)
1373
+ };
1374
+
1375
+
1376
+ template<>
1377
+ class octonion<long double>
1378
+ {
1379
+ public:
1380
+
1381
+ using value_type = long double;
1382
+
1383
+ BOOST_OCTONION_CONSTRUCTOR_GENERATOR(long double)
1384
+
1385
+ // UNtemplated copy constructor
1386
+ octonion(const octonion&) = default;
1387
+
1388
+ // converting copy constructor
1389
+
1390
+ explicit octonion(octonion<float> const & a_recopier)
1391
+ {
1392
+ *this = detail::octonion_type_converter<long double, float>(a_recopier);
1393
+ }
1394
+
1395
+
1396
+ explicit octonion(octonion<double> const & a_recopier)
1397
+ {
1398
+ *this = detail::octonion_type_converter<long double, double>(a_recopier);
1399
+ }
1400
+
1401
+
1402
+ // destructor
1403
+ // (this is taken care of by the compiler itself)
1404
+
1405
+ // accessors
1406
+ //
1407
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
1408
+ // but unlike them there is no meaningful notion of "imaginary part".
1409
+ // Instead there is an "unreal part" which itself is an octonion, and usually
1410
+ // nothing simpler (as opposed to the complex number case).
1411
+ // However, for practicality, there are accessors for the other components
1412
+ // (these are necessary for the templated copy constructor, for instance).
1413
+
1414
+ BOOST_OCTONION_ACCESSOR_GENERATOR(long double)
1415
+
1416
+ // assignment operators
1417
+
1418
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(long double)
1419
+
1420
+ // other assignment-related operators
1421
+ //
1422
+ // NOTE: Octonion multiplication is *NOT* commutative;
1423
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
1424
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
1425
+ // octonion multiplication is also *NOT* associative
1426
+
1427
+ BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(long double)
1428
+
1429
+
1430
+ protected:
1431
+
1432
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(long double)
1433
+
1434
+
1435
+ private:
1436
+
1437
+ };
1438
+
1439
+
1440
+ #undef BOOST_OCTONION_CONSTRUCTOR_GENERATOR
1441
+
1442
+ #undef BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR
1443
+
1444
+ #undef BOOST_OCTONION_MEMBER_ADD_GENERATOR
1445
+ #undef BOOST_OCTONION_MEMBER_SUB_GENERATOR
1446
+ #undef BOOST_OCTONION_MEMBER_MUL_GENERATOR
1447
+ #undef BOOST_OCTONION_MEMBER_DIV_GENERATOR
1448
+
1449
+ #undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_1
1450
+ #undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_2
1451
+ #undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_3
1452
+ #undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_4
1453
+ #undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_1
1454
+ #undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_2
1455
+ #undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_3
1456
+ #undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_4
1457
+ #undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_1
1458
+ #undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_2
1459
+ #undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_3
1460
+ #undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_4
1461
+ #undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_1
1462
+ #undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_2
1463
+ #undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_3
1464
+ #undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_4
1465
+
1466
+
1467
+ #undef BOOST_OCTONION_MEMBER_DATA_GENERATOR
1468
+
1469
+ #undef BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR
1470
+
1471
+ #undef BOOST_OCTONION_ACCESSOR_GENERATOR
1472
+
1473
+
1474
+ // operators
1475
+
1476
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op) \
1477
+ { \
1478
+ octonion<T> res(lhs); \
1479
+ res op##= rhs; \
1480
+ return(res); \
1481
+ }
1482
+
1483
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_1_L(op) \
1484
+ template<typename T> \
1485
+ inline octonion<T> operator op (T const & lhs, octonion<T> const & rhs) \
1486
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1487
+
1488
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_1_R(op) \
1489
+ template<typename T> \
1490
+ inline octonion<T> operator op (octonion<T> const & lhs, T const & rhs) \
1491
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1492
+
1493
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_2_L(op) \
1494
+ template<typename T> \
1495
+ inline octonion<T> operator op (::std::complex<T> const & lhs, octonion<T> const & rhs) \
1496
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1497
+
1498
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_2_R(op) \
1499
+ template<typename T> \
1500
+ inline octonion<T> operator op (octonion<T> const & lhs, ::std::complex<T> const & rhs) \
1501
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1502
+
1503
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_3_L(op) \
1504
+ template<typename T> \
1505
+ inline octonion<T> operator op (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs) \
1506
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1507
+
1508
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_3_R(op) \
1509
+ template<typename T> \
1510
+ inline octonion<T> operator op (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs) \
1511
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1512
+
1513
+ #define BOOST_OCTONION_OPERATOR_GENERATOR_4(op) \
1514
+ template<typename T> \
1515
+ inline octonion<T> operator op (octonion<T> const & lhs, octonion<T> const & rhs) \
1516
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
1517
+
1518
+ #define BOOST_OCTONION_OPERATOR_GENERATOR(op) \
1519
+ BOOST_OCTONION_OPERATOR_GENERATOR_1_L(op) \
1520
+ BOOST_OCTONION_OPERATOR_GENERATOR_1_R(op) \
1521
+ BOOST_OCTONION_OPERATOR_GENERATOR_2_L(op) \
1522
+ BOOST_OCTONION_OPERATOR_GENERATOR_2_R(op) \
1523
+ BOOST_OCTONION_OPERATOR_GENERATOR_3_L(op) \
1524
+ BOOST_OCTONION_OPERATOR_GENERATOR_3_R(op) \
1525
+ BOOST_OCTONION_OPERATOR_GENERATOR_4(op)
1526
+
1527
+
1528
+ BOOST_OCTONION_OPERATOR_GENERATOR(+)
1529
+ BOOST_OCTONION_OPERATOR_GENERATOR(-)
1530
+ BOOST_OCTONION_OPERATOR_GENERATOR(*)
1531
+ BOOST_OCTONION_OPERATOR_GENERATOR(/)
1532
+
1533
+
1534
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR
1535
+
1536
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_1_L
1537
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_1_R
1538
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_2_L
1539
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_2_R
1540
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_3_L
1541
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_3_R
1542
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_4
1543
+
1544
+ #undef BOOST_OCTONION_OPERATOR_GENERATOR_BODY
1545
+
1546
+
1547
+ template<typename T>
1548
+ inline octonion<T> operator + (octonion<T> const & o)
1549
+ {
1550
+ return(o);
1551
+ }
1552
+
1553
+
1554
+ template<typename T>
1555
+ inline octonion<T> operator - (octonion<T> const & o)
1556
+ {
1557
+ return(octonion<T>(-o.R_component_1(),-o.R_component_2(),-o.R_component_3(),-o.R_component_4(),-o.R_component_5(),-o.R_component_6(),-o.R_component_7(),-o.R_component_8()));
1558
+ }
1559
+
1560
+
1561
+ template<typename T>
1562
+ inline bool operator == (T const & lhs, octonion<T> const & rhs)
1563
+ {
1564
+ return(
1565
+ (rhs.R_component_1() == lhs)&&
1566
+ (rhs.R_component_2() == static_cast<T>(0))&&
1567
+ (rhs.R_component_3() == static_cast<T>(0))&&
1568
+ (rhs.R_component_4() == static_cast<T>(0))&&
1569
+ (rhs.R_component_5() == static_cast<T>(0))&&
1570
+ (rhs.R_component_6() == static_cast<T>(0))&&
1571
+ (rhs.R_component_7() == static_cast<T>(0))&&
1572
+ (rhs.R_component_8() == static_cast<T>(0))
1573
+ );
1574
+ }
1575
+
1576
+
1577
+ template<typename T>
1578
+ inline bool operator == (octonion<T> const & lhs, T const & rhs)
1579
+ {
1580
+ return(
1581
+ (lhs.R_component_1() == rhs)&&
1582
+ (lhs.R_component_2() == static_cast<T>(0))&&
1583
+ (lhs.R_component_3() == static_cast<T>(0))&&
1584
+ (lhs.R_component_4() == static_cast<T>(0))&&
1585
+ (lhs.R_component_5() == static_cast<T>(0))&&
1586
+ (lhs.R_component_6() == static_cast<T>(0))&&
1587
+ (lhs.R_component_7() == static_cast<T>(0))&&
1588
+ (lhs.R_component_8() == static_cast<T>(0))
1589
+ );
1590
+ }
1591
+
1592
+
1593
+ template<typename T>
1594
+ inline bool operator == (::std::complex<T> const & lhs, octonion<T> const & rhs)
1595
+ {
1596
+ return(
1597
+ (rhs.R_component_1() == lhs.real())&&
1598
+ (rhs.R_component_2() == lhs.imag())&&
1599
+ (rhs.R_component_3() == static_cast<T>(0))&&
1600
+ (rhs.R_component_4() == static_cast<T>(0))&&
1601
+ (rhs.R_component_5() == static_cast<T>(0))&&
1602
+ (rhs.R_component_6() == static_cast<T>(0))&&
1603
+ (rhs.R_component_7() == static_cast<T>(0))&&
1604
+ (rhs.R_component_8() == static_cast<T>(0))
1605
+ );
1606
+ }
1607
+
1608
+
1609
+ template<typename T>
1610
+ inline bool operator == (octonion<T> const & lhs, ::std::complex<T> const & rhs)
1611
+ {
1612
+ return(
1613
+ (lhs.R_component_1() == rhs.real())&&
1614
+ (lhs.R_component_2() == rhs.imag())&&
1615
+ (lhs.R_component_3() == static_cast<T>(0))&&
1616
+ (lhs.R_component_4() == static_cast<T>(0))&&
1617
+ (lhs.R_component_5() == static_cast<T>(0))&&
1618
+ (lhs.R_component_6() == static_cast<T>(0))&&
1619
+ (lhs.R_component_7() == static_cast<T>(0))&&
1620
+ (lhs.R_component_8() == static_cast<T>(0))
1621
+ );
1622
+ }
1623
+
1624
+
1625
+ template<typename T>
1626
+ inline bool operator == (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
1627
+ {
1628
+ return(
1629
+ (rhs.R_component_1() == lhs.R_component_1())&&
1630
+ (rhs.R_component_2() == lhs.R_component_2())&&
1631
+ (rhs.R_component_3() == lhs.R_component_3())&&
1632
+ (rhs.R_component_4() == lhs.R_component_4())&&
1633
+ (rhs.R_component_5() == static_cast<T>(0))&&
1634
+ (rhs.R_component_6() == static_cast<T>(0))&&
1635
+ (rhs.R_component_7() == static_cast<T>(0))&&
1636
+ (rhs.R_component_8() == static_cast<T>(0))
1637
+ );
1638
+ }
1639
+
1640
+
1641
+ template<typename T>
1642
+ inline bool operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
1643
+ {
1644
+ return(
1645
+ (lhs.R_component_1() == rhs.R_component_1())&&
1646
+ (lhs.R_component_2() == rhs.R_component_2())&&
1647
+ (lhs.R_component_3() == rhs.R_component_3())&&
1648
+ (lhs.R_component_4() == rhs.R_component_4())&&
1649
+ (lhs.R_component_5() == static_cast<T>(0))&&
1650
+ (lhs.R_component_6() == static_cast<T>(0))&&
1651
+ (lhs.R_component_7() == static_cast<T>(0))&&
1652
+ (lhs.R_component_8() == static_cast<T>(0))
1653
+ );
1654
+ }
1655
+
1656
+
1657
+ template<typename T>
1658
+ inline bool operator == (octonion<T> const & lhs, octonion<T> const & rhs)
1659
+ {
1660
+ return(
1661
+ (rhs.R_component_1() == lhs.R_component_1())&&
1662
+ (rhs.R_component_2() == lhs.R_component_2())&&
1663
+ (rhs.R_component_3() == lhs.R_component_3())&&
1664
+ (rhs.R_component_4() == lhs.R_component_4())&&
1665
+ (rhs.R_component_5() == lhs.R_component_5())&&
1666
+ (rhs.R_component_6() == lhs.R_component_6())&&
1667
+ (rhs.R_component_7() == lhs.R_component_7())&&
1668
+ (rhs.R_component_8() == lhs.R_component_8())
1669
+ );
1670
+ }
1671
+
1672
+
1673
+ #define BOOST_OCTONION_NOT_EQUAL_GENERATOR \
1674
+ { \
1675
+ return(!(lhs == rhs)); \
1676
+ }
1677
+
1678
+ template<typename T>
1679
+ inline bool operator != (T const & lhs, octonion<T> const & rhs)
1680
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1681
+
1682
+ template<typename T>
1683
+ inline bool operator != (octonion<T> const & lhs, T const & rhs)
1684
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1685
+
1686
+ template<typename T>
1687
+ inline bool operator != (::std::complex<T> const & lhs, octonion<T> const & rhs)
1688
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1689
+
1690
+ template<typename T>
1691
+ inline bool operator != (octonion<T> const & lhs, ::std::complex<T> const & rhs)
1692
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1693
+
1694
+ template<typename T>
1695
+ inline bool operator != (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
1696
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1697
+
1698
+ template<typename T>
1699
+ inline bool operator != (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
1700
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1701
+
1702
+ template<typename T>
1703
+ inline bool operator != (octonion<T> const & lhs, octonion<T> const & rhs)
1704
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
1705
+
1706
+ #undef BOOST_OCTONION_NOT_EQUAL_GENERATOR
1707
+
1708
+ // LCOV_EXCL_START
1709
+ // Something like 2,100 lines of input-streaming up to line 3,800 and beyond.
1710
+
1711
+ // Note: the default values in the constructors of the complex and quaternions make for
1712
+ // a very complex and ambiguous situation; we have made choices to disambiguate.
1713
+ template<typename T, typename charT, class traits>
1714
+ ::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is,
1715
+ octonion<T> & o)
1716
+ {
1717
+ #ifdef BOOST_NO_STD_LOCALE
1718
+ #else
1719
+ const ::std::ctype<charT> & ct = ::std::use_facet< ::std::ctype<charT> >(is.getloc());
1720
+ #endif /* BOOST_NO_STD_LOCALE */
1721
+
1722
+ T a = T();
1723
+ T b = T();
1724
+ T c = T();
1725
+ T d = T();
1726
+ T e = T();
1727
+ T f = T();
1728
+ T g = T();
1729
+ T h = T();
1730
+
1731
+ ::std::complex<T> u = ::std::complex<T>();
1732
+ ::std::complex<T> v = ::std::complex<T>();
1733
+ ::std::complex<T> x = ::std::complex<T>();
1734
+ ::std::complex<T> y = ::std::complex<T>();
1735
+
1736
+ ::boost::math::quaternion<T> p = ::boost::math::quaternion<T>();
1737
+ ::boost::math::quaternion<T> q = ::boost::math::quaternion<T>();
1738
+
1739
+ charT ch = charT();
1740
+ char cc;
1741
+
1742
+ is >> ch; // get the first lexeme
1743
+
1744
+ if (!is.good()) goto finish;
1745
+
1746
+ #ifdef BOOST_NO_STD_LOCALE
1747
+ cc = ch;
1748
+ #else
1749
+ cc = ct.narrow(ch, char());
1750
+ #endif /* BOOST_NO_STD_LOCALE */
1751
+
1752
+ if (cc == '(') // read "("
1753
+ {
1754
+ is >> ch; // get the second lexeme
1755
+
1756
+ if (!is.good()) goto finish;
1757
+
1758
+ #ifdef BOOST_NO_STD_LOCALE
1759
+ cc = ch;
1760
+ #else
1761
+ cc = ct.narrow(ch, char());
1762
+ #endif /* BOOST_NO_STD_LOCALE */
1763
+
1764
+ if (cc == '(') // read "(("
1765
+ {
1766
+ is >> ch; // get the third lexeme
1767
+
1768
+ if (!is.good()) goto finish;
1769
+
1770
+ #ifdef BOOST_NO_STD_LOCALE
1771
+ cc = ch;
1772
+ #else
1773
+ cc = ct.narrow(ch, char());
1774
+ #endif /* BOOST_NO_STD_LOCALE */
1775
+
1776
+ if (cc == '(') // read "((("
1777
+ {
1778
+ is.putback(ch);
1779
+
1780
+ is >> u; // read "((u"
1781
+
1782
+ if (!is.good()) goto finish;
1783
+
1784
+ is >> ch; // get the next lexeme
1785
+
1786
+ if (!is.good()) goto finish;
1787
+
1788
+ #ifdef BOOST_NO_STD_LOCALE
1789
+ cc = ch;
1790
+ #else
1791
+ cc = ct.narrow(ch, char());
1792
+ #endif /* BOOST_NO_STD_LOCALE */
1793
+
1794
+ if (cc == ')') // read "((u)"
1795
+ {
1796
+ is >> ch; // get the next lexeme
1797
+
1798
+ if (!is.good()) goto finish;
1799
+
1800
+ #ifdef BOOST_NO_STD_LOCALE
1801
+ cc = ch;
1802
+ #else
1803
+ cc = ct.narrow(ch, char());
1804
+ #endif /* BOOST_NO_STD_LOCALE */
1805
+
1806
+ if (cc == ')') // format: (((a))), (((a,b)))
1807
+ {
1808
+ o = octonion<T>(u);
1809
+ }
1810
+ else if (cc == ',') // read "((u),"
1811
+ {
1812
+ p = ::boost::math::quaternion<T>(u);
1813
+
1814
+ is >> q; // read "((u),q"
1815
+
1816
+ if (!is.good()) goto finish;
1817
+
1818
+ is >> ch; // get the next lexeme
1819
+
1820
+ if (!is.good()) goto finish;
1821
+
1822
+ #ifdef BOOST_NO_STD_LOCALE
1823
+ cc = ch;
1824
+ #else
1825
+ cc = ct.narrow(ch, char());
1826
+ #endif /* BOOST_NO_STD_LOCALE */
1827
+
1828
+ if (cc == ')') // format: (((a)),q), (((a,b)),q)
1829
+ {
1830
+ o = octonion<T>(p,q);
1831
+ }
1832
+ else // error
1833
+ {
1834
+ is.setstate(::std::ios_base::failbit);
1835
+ }
1836
+ }
1837
+ else // error
1838
+ {
1839
+ is.setstate(::std::ios_base::failbit);
1840
+ }
1841
+ }
1842
+ else if (cc ==',') // read "((u,"
1843
+ {
1844
+ is >> v; // read "((u,v"
1845
+
1846
+ if (!is.good()) goto finish;
1847
+
1848
+ is >> ch; // get the next lexeme
1849
+
1850
+ if (!is.good()) goto finish;
1851
+
1852
+ #ifdef BOOST_NO_STD_LOCALE
1853
+ cc = ch;
1854
+ #else
1855
+ cc = ct.narrow(ch, char());
1856
+ #endif /* BOOST_NO_STD_LOCALE */
1857
+
1858
+ if (cc == ')') // read "((u,v)"
1859
+ {
1860
+ p = ::boost::math::quaternion<T>(u,v);
1861
+
1862
+ is >> ch; // get the next lexeme
1863
+
1864
+ if (!is.good()) goto finish;
1865
+
1866
+ #ifdef BOOST_NO_STD_LOCALE
1867
+ cc = ch;
1868
+ #else
1869
+ cc = ct.narrow(ch, char());
1870
+ #endif /* BOOST_NO_STD_LOCALE */
1871
+
1872
+ if (cc == ')') // format: (((a),v)), (((a,b),v))
1873
+ {
1874
+ o = octonion<T>(p);
1875
+ }
1876
+ else if (cc == ',') // read "((u,v),"
1877
+ {
1878
+ is >> q; // read "(p,q"
1879
+
1880
+ if (!is.good()) goto finish;
1881
+
1882
+ is >> ch; // get the next lexeme
1883
+
1884
+ if (!is.good()) goto finish;
1885
+
1886
+ #ifdef BOOST_NO_STD_LOCALE
1887
+ cc = ch;
1888
+ #else
1889
+ cc = ct.narrow(ch, char());
1890
+ #endif /* BOOST_NO_STD_LOCALE */
1891
+
1892
+ if (cc == ')') // format: (((a),v),q), (((a,b),v),q)
1893
+ {
1894
+ o = octonion<T>(p,q);
1895
+ }
1896
+ else // error
1897
+ {
1898
+ is.setstate(::std::ios_base::failbit);
1899
+ }
1900
+ }
1901
+ else // error
1902
+ {
1903
+ is.setstate(::std::ios_base::failbit);
1904
+ }
1905
+ }
1906
+ else // error
1907
+ {
1908
+ is.setstate(::std::ios_base::failbit);
1909
+ }
1910
+ }
1911
+ else // error
1912
+ {
1913
+ is.setstate(::std::ios_base::failbit);
1914
+ }
1915
+ }
1916
+ else // read "((a"
1917
+ {
1918
+ is.putback(ch);
1919
+
1920
+ is >> a; // we extract the first component
1921
+
1922
+ if (!is.good()) goto finish;
1923
+
1924
+ is >> ch; // get the next lexeme
1925
+
1926
+ if (!is.good()) goto finish;
1927
+
1928
+ #ifdef BOOST_NO_STD_LOCALE
1929
+ cc = ch;
1930
+ #else
1931
+ cc = ct.narrow(ch, char());
1932
+ #endif /* BOOST_NO_STD_LOCALE */
1933
+
1934
+ if (cc == ')') // read "((a)"
1935
+ {
1936
+ is >> ch; // get the next lexeme
1937
+
1938
+ if (!is.good()) goto finish;
1939
+
1940
+ #ifdef BOOST_NO_STD_LOCALE
1941
+ cc = ch;
1942
+ #else
1943
+ cc = ct.narrow(ch, char());
1944
+ #endif /* BOOST_NO_STD_LOCALE */
1945
+
1946
+ if (cc == ')') // read "((a))"
1947
+ {
1948
+ o = octonion<T>(a);
1949
+ }
1950
+ else if (cc == ',') // read "((a),"
1951
+ {
1952
+ is >> ch; // get the next lexeme
1953
+
1954
+ if (!is.good()) goto finish;
1955
+
1956
+ #ifdef BOOST_NO_STD_LOCALE
1957
+ cc = ch;
1958
+ #else
1959
+ cc = ct.narrow(ch, char());
1960
+ #endif /* BOOST_NO_STD_LOCALE */
1961
+
1962
+ if (cc == '(') // read "((a),("
1963
+ {
1964
+ is >> ch; // get the next lexeme
1965
+
1966
+ if (!is.good()) goto finish;
1967
+
1968
+ #ifdef BOOST_NO_STD_LOCALE
1969
+ cc = ch;
1970
+ #else
1971
+ cc = ct.narrow(ch, char());
1972
+ #endif /* BOOST_NO_STD_LOCALE */
1973
+
1974
+ if (cc == '(') // read "((a),(("
1975
+ {
1976
+ is.putback(ch);
1977
+
1978
+ is.putback(ch); // we backtrack twice, with the same value!
1979
+
1980
+ is >> q; // read "((a),q"
1981
+
1982
+ if (!is.good()) goto finish;
1983
+
1984
+ is >> ch; // get the next lexeme
1985
+
1986
+ if (!is.good()) goto finish;
1987
+
1988
+ #ifdef BOOST_NO_STD_LOCALE
1989
+ cc = ch;
1990
+ #else
1991
+ cc = ct.narrow(ch, char());
1992
+ #endif /* BOOST_NO_STD_LOCALE */
1993
+
1994
+ if (cc == ')') // read "((a),q)"
1995
+ {
1996
+ p = ::boost::math::quaternion<T>(a);
1997
+
1998
+ o = octonion<T>(p,q);
1999
+ }
2000
+ else // error
2001
+ {
2002
+ is.setstate(::std::ios_base::failbit);
2003
+ }
2004
+ }
2005
+ else // read "((a),(c" or "((a),(e"
2006
+ {
2007
+ is.putback(ch);
2008
+
2009
+ is >> c;
2010
+
2011
+ if (!is.good()) goto finish;
2012
+
2013
+ is >> ch; // get the next lexeme
2014
+
2015
+ if (!is.good()) goto finish;
2016
+
2017
+ #ifdef BOOST_NO_STD_LOCALE
2018
+ cc = ch;
2019
+ #else
2020
+ cc = ct.narrow(ch, char());
2021
+ #endif /* BOOST_NO_STD_LOCALE */
2022
+
2023
+ if (cc == ')') // read "((a),(c)" (ambiguity resolution)
2024
+ {
2025
+ is >> ch; // get the next lexeme
2026
+
2027
+ if (!is.good()) goto finish;
2028
+
2029
+ #ifdef BOOST_NO_STD_LOCALE
2030
+ cc = ch;
2031
+ #else
2032
+ cc = ct.narrow(ch, char());
2033
+ #endif /* BOOST_NO_STD_LOCALE */
2034
+
2035
+ if (cc == ')') // read "((a),(c))"
2036
+ {
2037
+ o = octonion<T>(a,b,c);
2038
+ }
2039
+ else if (cc == ',') // read "((a),(c),"
2040
+ {
2041
+ u = ::std::complex<T>(a);
2042
+
2043
+ v = ::std::complex<T>(c);
2044
+
2045
+ is >> x; // read "((a),(c),x"
2046
+
2047
+ if (!is.good()) goto finish;
2048
+
2049
+ is >> ch; // get the next lexeme
2050
+
2051
+ if (!is.good()) goto finish;
2052
+
2053
+ #ifdef BOOST_NO_STD_LOCALE
2054
+ cc = ch;
2055
+ #else
2056
+ cc = ct.narrow(ch, char());
2057
+ #endif /* BOOST_NO_STD_LOCALE */
2058
+
2059
+ if (cc == ')') // read "((a),(c),x)"
2060
+ {
2061
+ o = octonion<T>(u,v,x);
2062
+ }
2063
+ else if (cc == ',') // read "((a),(c),x,"
2064
+ {
2065
+ is >> y; // read "((a),(c),x,y"
2066
+
2067
+ if (!is.good()) goto finish;
2068
+
2069
+ is >> ch; // get the next lexeme
2070
+
2071
+ if (!is.good()) goto finish;
2072
+
2073
+ #ifdef BOOST_NO_STD_LOCALE
2074
+ cc = ch;
2075
+ #else
2076
+ cc = ct.narrow(ch, char());
2077
+ #endif /* BOOST_NO_STD_LOCALE */
2078
+
2079
+ if (cc == ')') // read "((a),(c),x,y)"
2080
+ {
2081
+ o = octonion<T>(u,v,x,y);
2082
+ }
2083
+ else // error
2084
+ {
2085
+ is.setstate(::std::ios_base::failbit);
2086
+ }
2087
+ }
2088
+ else // error
2089
+ {
2090
+ is.setstate(::std::ios_base::failbit);
2091
+ }
2092
+ }
2093
+ else // error
2094
+ {
2095
+ is.setstate(::std::ios_base::failbit);
2096
+ }
2097
+ }
2098
+ else if (cc == ',') // read "((a),(c," or "((a),(e,"
2099
+ {
2100
+ is >> ch; // get the next lexeme
2101
+
2102
+ if (!is.good()) goto finish;
2103
+
2104
+ #ifdef BOOST_NO_STD_LOCALE
2105
+ cc = ch;
2106
+ #else
2107
+ cc = ct.narrow(ch, char());
2108
+ #endif /* BOOST_NO_STD_LOCALE */
2109
+
2110
+ if (cc == '(') // read "((a),(e,(" (ambiguity resolution)
2111
+ {
2112
+ p = ::boost::math::quaternion<T>(a);
2113
+
2114
+ x = ::std::complex<T>(c); // "c" was actually "e"
2115
+
2116
+ is.putback(ch); // we can only backtrace once
2117
+
2118
+ is >> y; // read "((a),(e,y"
2119
+
2120
+ if (!is.good()) goto finish;
2121
+
2122
+ is >> ch; // get the next lexeme
2123
+
2124
+ #ifdef BOOST_NO_STD_LOCALE
2125
+ cc = ch;
2126
+ #else
2127
+ cc = ct.narrow(ch, char());
2128
+ #endif /* BOOST_NO_STD_LOCALE */
2129
+
2130
+ if (cc == ')') // read "((a),(e,y)"
2131
+ {
2132
+ q = ::boost::math::quaternion<T>(x,y);
2133
+
2134
+ is >> ch; // get the next lexeme
2135
+
2136
+ #ifdef BOOST_NO_STD_LOCALE
2137
+ cc = ch;
2138
+ #else
2139
+ cc = ct.narrow(ch, char());
2140
+ #endif /* BOOST_NO_STD_LOCALE */
2141
+
2142
+ if (cc == ')') // read "((a),(e,y))"
2143
+ {
2144
+ o = octonion<T>(p,q);
2145
+ }
2146
+ else // error
2147
+ {
2148
+ is.setstate(::std::ios_base::failbit);
2149
+ }
2150
+ }
2151
+ else // error
2152
+ {
2153
+ is.setstate(::std::ios_base::failbit);
2154
+ }
2155
+ }
2156
+ else // read "((a),(c,d" or "((a),(e,f"
2157
+ {
2158
+ is.putback(ch);
2159
+
2160
+ is >> d;
2161
+
2162
+ if (!is.good()) goto finish;
2163
+
2164
+ is >> ch; // get the next lexeme
2165
+
2166
+ if (!is.good()) goto finish;
2167
+
2168
+ #ifdef BOOST_NO_STD_LOCALE
2169
+ cc = ch;
2170
+ #else
2171
+ cc = ct.narrow(ch, char());
2172
+ #endif /* BOOST_NO_STD_LOCALE */
2173
+
2174
+ if (cc == ')') // read "((a),(c,d)" (ambiguity resolution)
2175
+ {
2176
+ is >> ch; // get the next lexeme
2177
+
2178
+ if (!is.good()) goto finish;
2179
+
2180
+ #ifdef BOOST_NO_STD_LOCALE
2181
+ cc = ch;
2182
+ #else
2183
+ cc = ct.narrow(ch, char());
2184
+ #endif /* BOOST_NO_STD_LOCALE */
2185
+
2186
+ if (cc == ')') // read "((a),(c,d))"
2187
+ {
2188
+ o = octonion<T>(a,b,c,d);
2189
+ }
2190
+ else if (cc == ',') // read "((a),(c,d),"
2191
+ {
2192
+ u = ::std::complex<T>(a);
2193
+
2194
+ v = ::std::complex<T>(c,d);
2195
+
2196
+ is >> x; // read "((a),(c,d),x"
2197
+
2198
+ if (!is.good()) goto finish;
2199
+
2200
+ is >> ch; // get the next lexeme
2201
+
2202
+ if (!is.good()) goto finish;
2203
+
2204
+ #ifdef BOOST_NO_STD_LOCALE
2205
+ cc = ch;
2206
+ #else
2207
+ cc = ct.narrow(ch, char());
2208
+ #endif /* BOOST_NO_STD_LOCALE */
2209
+
2210
+ if (cc == ')') // read "((a),(c,d),x)"
2211
+ {
2212
+ o = octonion<T>(u,v,x);
2213
+ }
2214
+ else if (cc == ',') // read "((a),(c,d),x,"
2215
+ {
2216
+ is >> y; // read "((a),(c,d),x,y"
2217
+
2218
+ if (!is.good()) goto finish;
2219
+
2220
+ is >> ch; // get the next lexeme
2221
+
2222
+ if (!is.good()) goto finish;
2223
+
2224
+ #ifdef BOOST_NO_STD_LOCALE
2225
+ cc = ch;
2226
+ #else
2227
+ cc = ct.narrow(ch, char());
2228
+ #endif /* BOOST_NO_STD_LOCALE */
2229
+
2230
+ if (cc == ')') // read "((a),(c,d),x,y)"
2231
+ {
2232
+ o = octonion<T>(u,v,x,y);
2233
+ }
2234
+ else // error
2235
+ {
2236
+ is.setstate(::std::ios_base::failbit);
2237
+ }
2238
+ }
2239
+ else // error
2240
+ {
2241
+ is.setstate(::std::ios_base::failbit);
2242
+ }
2243
+ }
2244
+ else // error
2245
+ {
2246
+ is.setstate(::std::ios_base::failbit);
2247
+ }
2248
+ }
2249
+ else if (cc == ',') // read "((a),(e,f," (ambiguity resolution)
2250
+ {
2251
+ p = ::boost::math::quaternion<T>(a);
2252
+
2253
+ is >> g; // read "((a),(e,f,g" (too late to backtrack)
2254
+
2255
+ if (!is.good()) goto finish;
2256
+
2257
+ is >> ch; // get the next lexeme
2258
+
2259
+ if (!is.good()) goto finish;
2260
+
2261
+ #ifdef BOOST_NO_STD_LOCALE
2262
+ cc = ch;
2263
+ #else
2264
+ cc = ct.narrow(ch, char());
2265
+ #endif /* BOOST_NO_STD_LOCALE */
2266
+
2267
+ if (cc == ')') // read "((a),(e,f,g)"
2268
+ {
2269
+ q = ::boost::math::quaternion<T>(c,d,g); // "c" was actually "e", and "d" was actually "f"
2270
+
2271
+ is >> ch; // get the next lexeme
2272
+
2273
+ if (!is.good()) goto finish;
2274
+
2275
+ #ifdef BOOST_NO_STD_LOCALE
2276
+ cc = ch;
2277
+ #else
2278
+ cc = ct.narrow(ch, char());
2279
+ #endif /* BOOST_NO_STD_LOCALE */
2280
+
2281
+ if (cc == ')') // read "((a),(e,f,g))"
2282
+ {
2283
+ o = octonion<T>(p,q);
2284
+ }
2285
+ else // error
2286
+ {
2287
+ is.setstate(::std::ios_base::failbit);
2288
+ }
2289
+ }
2290
+ else if (cc == ',') // read "((a),(e,f,g,"
2291
+ {
2292
+ is >> h; // read "((a),(e,f,g,h"
2293
+
2294
+ if (!is.good()) goto finish;
2295
+
2296
+ is >> ch; // get the next lexeme
2297
+
2298
+ if (!is.good()) goto finish;
2299
+
2300
+ #ifdef BOOST_NO_STD_LOCALE
2301
+ cc = ch;
2302
+ #else
2303
+ cc = ct.narrow(ch, char());
2304
+ #endif /* BOOST_NO_STD_LOCALE */
2305
+
2306
+ if (cc == ')') // read "((a),(e,f,g,h)"
2307
+ {
2308
+ q = ::boost::math::quaternion<T>(c,d,g,h); // "c" was actually "e", and "d" was actually "f"
2309
+
2310
+ is >> ch; // get the next lexeme
2311
+
2312
+ if (!is.good()) goto finish;
2313
+
2314
+ #ifdef BOOST_NO_STD_LOCALE
2315
+ cc = ch;
2316
+ #else
2317
+ cc = ct.narrow(ch, char());
2318
+ #endif /* BOOST_NO_STD_LOCALE */
2319
+
2320
+ if (cc == ')') // read "((a),(e,f,g,h))"
2321
+ {
2322
+ o = octonion<T>(p,q);
2323
+ }
2324
+ else // error
2325
+ {
2326
+ is.setstate(::std::ios_base::failbit);
2327
+ }
2328
+ }
2329
+ else // error
2330
+ {
2331
+ is.setstate(::std::ios_base::failbit);
2332
+ }
2333
+ }
2334
+ else // error
2335
+ {
2336
+ is.setstate(::std::ios_base::failbit);
2337
+ }
2338
+ }
2339
+ else // error
2340
+ {
2341
+ is.setstate(::std::ios_base::failbit);
2342
+ }
2343
+ }
2344
+ }
2345
+ else // error
2346
+ {
2347
+ is.setstate(::std::ios_base::failbit);
2348
+ }
2349
+ }
2350
+ }
2351
+ else // read "((a),c" (ambiguity resolution)
2352
+ {
2353
+ is.putback(ch);
2354
+
2355
+ is >> c; // we extract the third component
2356
+
2357
+ if (!is.good()) goto finish;
2358
+
2359
+ is >> ch; // get the next lexeme
2360
+
2361
+ if (!is.good()) goto finish;
2362
+
2363
+ #ifdef BOOST_NO_STD_LOCALE
2364
+ cc = ch;
2365
+ #else
2366
+ cc = ct.narrow(ch, char());
2367
+ #endif /* BOOST_NO_STD_LOCALE */
2368
+
2369
+ if (cc == ')') // read "((a),c)"
2370
+ {
2371
+ o = octonion<T>(a,b,c);
2372
+ }
2373
+ else if (cc == ',') // read "((a),c,"
2374
+ {
2375
+ is >> x; // read "((a),c,x"
2376
+
2377
+ if (!is.good()) goto finish;
2378
+
2379
+ is >> ch; // get the next lexeme
2380
+
2381
+ if (!is.good()) goto finish;
2382
+
2383
+ #ifdef BOOST_NO_STD_LOCALE
2384
+ cc = ch;
2385
+ #else
2386
+ cc = ct.narrow(ch, char());
2387
+ #endif /* BOOST_NO_STD_LOCALE */
2388
+
2389
+ if (cc == ')') // read "((a),c,x)"
2390
+ {
2391
+ o = octonion<T>(a,b,c,d,x.real(),x.imag());
2392
+ }
2393
+ else if (cc == ',') // read "((a),c,x,"
2394
+ {
2395
+ is >> y;if (!is.good()) goto finish; // read "((a),c,x,y"
2396
+
2397
+ is >> ch; // get the next lexeme
2398
+
2399
+ if (!is.good()) goto finish;
2400
+
2401
+ #ifdef BOOST_NO_STD_LOCALE
2402
+ cc = ch;
2403
+ #else
2404
+ cc = ct.narrow(ch, char());
2405
+ #endif /* BOOST_NO_STD_LOCALE */
2406
+
2407
+ if (cc == ')') // read "((a),c,x,y)"
2408
+ {
2409
+ o = octonion<T>(a,b,c,d,x.real(),x.imag(),y.real(),y.imag());
2410
+ }
2411
+ else // error
2412
+ {
2413
+ is.setstate(::std::ios_base::failbit);
2414
+ }
2415
+ }
2416
+ else // error
2417
+ {
2418
+ is.setstate(::std::ios_base::failbit);
2419
+ }
2420
+ }
2421
+ else // error
2422
+ {
2423
+ is.setstate(::std::ios_base::failbit);
2424
+ }
2425
+ }
2426
+ }
2427
+ else // error
2428
+ {
2429
+ is.setstate(::std::ios_base::failbit);
2430
+ }
2431
+ }
2432
+ else if (cc ==',') // read "((a,"
2433
+ {
2434
+ is >> ch; // get the next lexeme
2435
+
2436
+ if (!is.good()) goto finish;
2437
+
2438
+ #ifdef BOOST_NO_STD_LOCALE
2439
+ cc = ch;
2440
+ #else
2441
+ cc = ct.narrow(ch, char());
2442
+ #endif /* BOOST_NO_STD_LOCALE */
2443
+
2444
+ if (cc == '(') // read "((a,("
2445
+ {
2446
+ u = ::std::complex<T>(a);
2447
+
2448
+ is.putback(ch); // can only backtrack so much
2449
+
2450
+ is >> v; // read "((a,v"
2451
+
2452
+ if (!is.good()) goto finish;
2453
+
2454
+ is >> ch; // get the next lexeme
2455
+
2456
+ if (!is.good()) goto finish;
2457
+
2458
+ #ifdef BOOST_NO_STD_LOCALE
2459
+ cc = ch;
2460
+ #else
2461
+ cc = ct.narrow(ch, char());
2462
+ #endif /* BOOST_NO_STD_LOCALE */
2463
+
2464
+ if (cc == ')') // read "((a,v)"
2465
+ {
2466
+ is >> ch; // get the next lexeme
2467
+
2468
+ if (!is.good()) goto finish;
2469
+
2470
+ #ifdef BOOST_NO_STD_LOCALE
2471
+ cc = ch;
2472
+ #else
2473
+ cc = ct.narrow(ch, char());
2474
+ #endif /* BOOST_NO_STD_LOCALE */
2475
+
2476
+ if (cc == ')') // read "((a,v))"
2477
+ {
2478
+ o = octonion<T>(u,v);
2479
+ }
2480
+ else if (cc == ',') // read "((a,v),"
2481
+ {
2482
+ p = ::boost::math::quaternion<T>(u,v);
2483
+
2484
+ is >> q; // read "((a,v),q"
2485
+
2486
+ if (!is.good()) goto finish;
2487
+
2488
+ is >> ch; // get the next lexeme
2489
+
2490
+ if (!is.good()) goto finish;
2491
+
2492
+ #ifdef BOOST_NO_STD_LOCALE
2493
+ cc = ch;
2494
+ #else
2495
+ cc = ct.narrow(ch, char());
2496
+ #endif /* BOOST_NO_STD_LOCALE */
2497
+
2498
+ if (cc == ')') // read "((a,v),q)"
2499
+ {
2500
+ o = octonion<T>(p,q);
2501
+ }
2502
+ else // error
2503
+ {
2504
+ is.setstate(::std::ios_base::failbit);
2505
+ }
2506
+ }
2507
+ else // error
2508
+ {
2509
+ is.setstate(::std::ios_base::failbit);
2510
+ }
2511
+ }
2512
+ else // error
2513
+ {
2514
+ is.setstate(::std::ios_base::failbit);
2515
+ }
2516
+ }
2517
+ else
2518
+ {
2519
+ is.putback(ch);
2520
+
2521
+ is >> b; // read "((a,b"
2522
+
2523
+ if (!is.good()) goto finish;
2524
+
2525
+ is >> ch; // get the next lexeme
2526
+
2527
+ if (!is.good()) goto finish;
2528
+
2529
+ #ifdef BOOST_NO_STD_LOCALE
2530
+ cc = ch;
2531
+ #else
2532
+ cc = ct.narrow(ch, char());
2533
+ #endif /* BOOST_NO_STD_LOCALE */
2534
+
2535
+ if (cc == ')') // read "((a,b)"
2536
+ {
2537
+ is >> ch; // get the next lexeme
2538
+
2539
+ if (!is.good()) goto finish;
2540
+
2541
+ #ifdef BOOST_NO_STD_LOCALE
2542
+ cc = ch;
2543
+ #else
2544
+ cc = ct.narrow(ch, char());
2545
+ #endif /* BOOST_NO_STD_LOCALE */
2546
+
2547
+ if (cc == ')') // read "((a,b))"
2548
+ {
2549
+ o = octonion<T>(a,b);
2550
+ }
2551
+ else if (cc == ',') // read "((a,b),"
2552
+ {
2553
+ is >> ch; // get the next lexeme
2554
+
2555
+ if (!is.good()) goto finish;
2556
+
2557
+ #ifdef BOOST_NO_STD_LOCALE
2558
+ cc = ch;
2559
+ #else
2560
+ cc = ct.narrow(ch, char());
2561
+ #endif /* BOOST_NO_STD_LOCALE */
2562
+
2563
+ if (cc == '(') // read "((a,b),("
2564
+ {
2565
+ is >> ch; // get the next lexeme
2566
+
2567
+ if (!is.good()) goto finish;
2568
+
2569
+ #ifdef BOOST_NO_STD_LOCALE
2570
+ cc = ch;
2571
+ #else
2572
+ cc = ct.narrow(ch, char());
2573
+ #endif /* BOOST_NO_STD_LOCALE */
2574
+
2575
+ if (cc == '(') // read "((a,b),(("
2576
+ {
2577
+ p = ::boost::math::quaternion<T>(a,b);
2578
+
2579
+ is.putback(ch);
2580
+
2581
+ is.putback(ch); // we backtrack twice, with the same value
2582
+
2583
+ is >> q; // read "((a,b),q"
2584
+
2585
+ if (!is.good()) goto finish;
2586
+
2587
+ is >> ch; // get the next lexeme
2588
+
2589
+ if (!is.good()) goto finish;
2590
+
2591
+ #ifdef BOOST_NO_STD_LOCALE
2592
+ cc = ch;
2593
+ #else
2594
+ cc = ct.narrow(ch, char());
2595
+ #endif /* BOOST_NO_STD_LOCALE */
2596
+
2597
+ if (cc == ')') // read "((a,b),q)"
2598
+ {
2599
+ o = octonion<T>(p,q);
2600
+ }
2601
+ else // error
2602
+ {
2603
+ is.setstate(::std::ios_base::failbit);
2604
+ }
2605
+ }
2606
+ else // read "((a,b),(c" or "((a,b),(e"
2607
+ {
2608
+ is.putback(ch);
2609
+
2610
+ is >> c;
2611
+
2612
+ if (!is.good()) goto finish;
2613
+
2614
+ is >> ch; // get the next lexeme
2615
+
2616
+ if (!is.good()) goto finish;
2617
+
2618
+ #ifdef BOOST_NO_STD_LOCALE
2619
+ cc = ch;
2620
+ #else
2621
+ cc = ct.narrow(ch, char());
2622
+ #endif /* BOOST_NO_STD_LOCALE */
2623
+
2624
+ if (cc == ')') // read "((a,b),(c)" (ambiguity resolution)
2625
+ {
2626
+ is >> ch; // get the next lexeme
2627
+
2628
+ if (!is.good()) goto finish;
2629
+
2630
+ #ifdef BOOST_NO_STD_LOCALE
2631
+ cc = ch;
2632
+ #else
2633
+ cc = ct.narrow(ch, char());
2634
+ #endif /* BOOST_NO_STD_LOCALE */
2635
+
2636
+ if (cc == ')') // read "((a,b),(c))"
2637
+ {
2638
+ o = octonion<T>(a,b,c);
2639
+ }
2640
+ else if (cc == ',') // read "((a,b),(c),"
2641
+ {
2642
+ u = ::std::complex<T>(a,b);
2643
+
2644
+ v = ::std::complex<T>(c);
2645
+
2646
+ is >> x; // read "((a,b),(c),x"
2647
+
2648
+ if (!is.good()) goto finish;
2649
+
2650
+ is >> ch; // get the next lexeme
2651
+
2652
+ if (!is.good()) goto finish;
2653
+
2654
+ #ifdef BOOST_NO_STD_LOCALE
2655
+ cc = ch;
2656
+ #else
2657
+ cc = ct.narrow(ch, char());
2658
+ #endif /* BOOST_NO_STD_LOCALE */
2659
+
2660
+ if (cc == ')') // read "((a,b),(c),x)"
2661
+ {
2662
+ o = octonion<T>(u,v,x);
2663
+ }
2664
+ else if (cc == ',') // read "((a,b),(c),x,"
2665
+ {
2666
+ is >> y; // read "((a,b),(c),x,y"
2667
+
2668
+ if (!is.good()) goto finish;
2669
+
2670
+ is >> ch; // get the next lexeme
2671
+
2672
+ if (!is.good()) goto finish;
2673
+
2674
+ #ifdef BOOST_NO_STD_LOCALE
2675
+ cc = ch;
2676
+ #else
2677
+ cc = ct.narrow(ch, char());
2678
+ #endif /* BOOST_NO_STD_LOCALE */
2679
+
2680
+ if (cc == ')') // read "((a,b),(c),x,y)"
2681
+ {
2682
+ o = octonion<T>(u,v,x,y);
2683
+ }
2684
+ else // error
2685
+ {
2686
+ is.setstate(::std::ios_base::failbit);
2687
+ }
2688
+ }
2689
+ else // error
2690
+ {
2691
+ is.setstate(::std::ios_base::failbit);
2692
+ }
2693
+ }
2694
+ else // error
2695
+ {
2696
+ is.setstate(::std::ios_base::failbit);
2697
+ }
2698
+ }
2699
+ else if (cc == ',') // read "((a,b),(c," or "((a,b),(e,"
2700
+ {
2701
+ is >> ch; // get the next lexeme
2702
+
2703
+ if (!is.good()) goto finish;
2704
+
2705
+ #ifdef BOOST_NO_STD_LOCALE
2706
+ cc = ch;
2707
+ #else
2708
+ cc = ct.narrow(ch, char());
2709
+ #endif /* BOOST_NO_STD_LOCALE */
2710
+
2711
+ if (cc == '(') // read "((a,b),(e,(" (ambiguity resolution)
2712
+ {
2713
+ u = ::std::complex<T>(a,b);
2714
+
2715
+ x = ::std::complex<T>(c); // "c" is actually "e"
2716
+
2717
+ is.putback(ch);
2718
+
2719
+ is >> y; // read "((a,b),(e,y"
2720
+
2721
+ if (!is.good()) goto finish;
2722
+
2723
+ is >> ch; // get the next lexeme
2724
+
2725
+ if (!is.good()) goto finish;
2726
+
2727
+ #ifdef BOOST_NO_STD_LOCALE
2728
+ cc = ch;
2729
+ #else
2730
+ cc = ct.narrow(ch, char());
2731
+ #endif /* BOOST_NO_STD_LOCALE */
2732
+
2733
+ if (cc == ')') // read "((a,b),(e,y)"
2734
+ {
2735
+ is >> ch; // get the next lexeme
2736
+
2737
+ if (!is.good()) goto finish;
2738
+
2739
+ #ifdef BOOST_NO_STD_LOCALE
2740
+ cc = ch;
2741
+ #else
2742
+ cc = ct.narrow(ch, char());
2743
+ #endif /* BOOST_NO_STD_LOCALE */
2744
+
2745
+ if (cc == ')') // read "((a,b),(e,y))"
2746
+ {
2747
+ o = octonion<T>(u,v,x,y);
2748
+ }
2749
+ else // error
2750
+ {
2751
+ is.setstate(::std::ios_base::failbit);
2752
+ }
2753
+ }
2754
+ else // error
2755
+ {
2756
+ is.setstate(::std::ios_base::failbit);
2757
+ }
2758
+ }
2759
+ else // read "((a,b),(c,d" or "((a,b),(e,f"
2760
+ {
2761
+ is.putback(ch);
2762
+
2763
+ is >> d;
2764
+
2765
+ if (!is.good()) goto finish;
2766
+
2767
+ is >> ch; // get the next lexeme
2768
+
2769
+ if (!is.good()) goto finish;
2770
+
2771
+ #ifdef BOOST_NO_STD_LOCALE
2772
+ cc = ch;
2773
+ #else
2774
+ cc = ct.narrow(ch, char());
2775
+ #endif /* BOOST_NO_STD_LOCALE */
2776
+
2777
+ if (cc == ')') // read "((a,b),(c,d)" (ambiguity resolution)
2778
+ {
2779
+ u = ::std::complex<T>(a,b);
2780
+
2781
+ v = ::std::complex<T>(c,d);
2782
+
2783
+ is >> ch; // get the next lexeme
2784
+
2785
+ if (!is.good()) goto finish;
2786
+
2787
+ #ifdef BOOST_NO_STD_LOCALE
2788
+ cc = ch;
2789
+ #else
2790
+ cc = ct.narrow(ch, char());
2791
+ #endif /* BOOST_NO_STD_LOCALE */
2792
+
2793
+ if (cc == ')') // read "((a,b),(c,d))"
2794
+ {
2795
+ o = octonion<T>(u,v);
2796
+ }
2797
+ else if (cc == ',') // read "((a,b),(c,d),"
2798
+ {
2799
+ is >> x; // read "((a,b),(c,d),x
2800
+
2801
+ if (!is.good()) goto finish;
2802
+
2803
+ is >> ch; // get the next lexeme
2804
+
2805
+ if (!is.good()) goto finish;
2806
+
2807
+ #ifdef BOOST_NO_STD_LOCALE
2808
+ cc = ch;
2809
+ #else
2810
+ cc = ct.narrow(ch, char());
2811
+ #endif /* BOOST_NO_STD_LOCALE */
2812
+
2813
+ if (cc == ')') // read "((a,b),(c,d),x)"
2814
+ {
2815
+ o = octonion<T>(u,v,x);
2816
+ }
2817
+ else if (cc == ',') // read "((a,b),(c,d),x,"
2818
+ {
2819
+ is >> y; // read "((a,b),(c,d),x,y"
2820
+
2821
+ if (!is.good()) goto finish;
2822
+
2823
+ is >> ch; // get the next lexeme
2824
+
2825
+ if (!is.good()) goto finish;
2826
+
2827
+ #ifdef BOOST_NO_STD_LOCALE
2828
+ cc = ch;
2829
+ #else
2830
+ cc = ct.narrow(ch, char());
2831
+ #endif /* BOOST_NO_STD_LOCALE */
2832
+
2833
+ if (cc == ')') // read "((a,b),(c,d),x,y)"
2834
+ {
2835
+ o = octonion<T>(u,v,x,y);
2836
+ }
2837
+ else // error
2838
+ {
2839
+ is.setstate(::std::ios_base::failbit);
2840
+ }
2841
+ }
2842
+ else // error
2843
+ {
2844
+ is.setstate(::std::ios_base::failbit);
2845
+ }
2846
+ }
2847
+ else // error
2848
+ {
2849
+ is.setstate(::std::ios_base::failbit);
2850
+ }
2851
+ }
2852
+ else if (cc == ',') // read "((a,b),(e,f," (ambiguity resolution)
2853
+ {
2854
+ p = ::boost::math::quaternion<T>(a,b); // too late to backtrack
2855
+
2856
+ is >> g; // read "((a,b),(e,f,g"
2857
+
2858
+ if (!is.good()) goto finish;
2859
+
2860
+ is >> ch; // get the next lexeme
2861
+
2862
+ if (!is.good()) goto finish;
2863
+
2864
+ #ifdef BOOST_NO_STD_LOCALE
2865
+ cc = ch;
2866
+ #else
2867
+ cc = ct.narrow(ch, char());
2868
+ #endif /* BOOST_NO_STD_LOCALE */
2869
+
2870
+ if (cc == ')') // read "((a,b),(e,f,g)"
2871
+ {
2872
+ is >> ch; // get the next lexeme
2873
+
2874
+ if (!is.good()) goto finish;
2875
+
2876
+ #ifdef BOOST_NO_STD_LOCALE
2877
+ cc = ch;
2878
+ #else
2879
+ cc = ct.narrow(ch, char());
2880
+ #endif /* BOOST_NO_STD_LOCALE */
2881
+
2882
+ if (cc == ')') // read "((a,b),(e,f,g))"
2883
+ {
2884
+ q = ::boost::math::quaternion<T>(c,d,g); // "c" is actually "e" and "d" is actually "f"
2885
+
2886
+ o = octonion<T>(p,q);
2887
+ }
2888
+ else // error
2889
+ {
2890
+ is.setstate(::std::ios_base::failbit);
2891
+ }
2892
+ }
2893
+ else if (cc == ',') // read "((a,b),(e,f,g,"
2894
+ {
2895
+ is >> h; // read "((a,b),(e,f,g,h"
2896
+
2897
+ if (!is.good()) goto finish;
2898
+
2899
+ is >> ch; // get the next lexeme
2900
+
2901
+ if (!is.good()) goto finish;
2902
+
2903
+ #ifdef BOOST_NO_STD_LOCALE
2904
+ cc = ch;
2905
+ #else
2906
+ cc = ct.narrow(ch, char());
2907
+ #endif /* BOOST_NO_STD_LOCALE */
2908
+
2909
+ if (cc == ')') // read "((a,b),(e,f,g,h)"
2910
+ {
2911
+ is >> ch; // get the next lexeme
2912
+
2913
+ if (!is.good()) goto finish;
2914
+
2915
+ #ifdef BOOST_NO_STD_LOCALE
2916
+ cc = ch;
2917
+ #else
2918
+ cc = ct.narrow(ch, char());
2919
+ #endif /* BOOST_NO_STD_LOCALE */
2920
+
2921
+ if (cc == ')') // read ((a,b),(e,f,g,h))"
2922
+ {
2923
+ q = ::boost::math::quaternion<T>(c,d,g,h); // "c" is actually "e" and "d" is actually "f"
2924
+
2925
+ o = octonion<T>(p,q);
2926
+ }
2927
+ else // error
2928
+ {
2929
+ is.setstate(::std::ios_base::failbit);
2930
+ }
2931
+ }
2932
+ else // error
2933
+ {
2934
+ is.setstate(::std::ios_base::failbit);
2935
+ }
2936
+ }
2937
+ else // error
2938
+ {
2939
+ is.setstate(::std::ios_base::failbit);
2940
+ }
2941
+ }
2942
+ else // error
2943
+ {
2944
+ is.setstate(::std::ios_base::failbit);
2945
+ }
2946
+ }
2947
+ }
2948
+ else // error
2949
+ {
2950
+ is.setstate(::std::ios_base::failbit);
2951
+ }
2952
+ }
2953
+ }
2954
+ else // error
2955
+ {
2956
+ is.setstate(::std::ios_base::failbit);
2957
+ }
2958
+ }
2959
+ else // error
2960
+ {
2961
+ is.setstate(::std::ios_base::failbit);
2962
+ }
2963
+ }
2964
+ else if (cc == ',') // read "((a,b,"
2965
+ {
2966
+ is >> c; // read "((a,b,c"
2967
+
2968
+ if (!is.good()) goto finish;
2969
+
2970
+ is >> ch; // get the next lexeme
2971
+
2972
+ if (!is.good()) goto finish;
2973
+
2974
+ #ifdef BOOST_NO_STD_LOCALE
2975
+ cc = ch;
2976
+ #else
2977
+ cc = ct.narrow(ch, char());
2978
+ #endif /* BOOST_NO_STD_LOCALE */
2979
+
2980
+ if (cc == ')') // read "((a,b,c)"
2981
+ {
2982
+ is >> ch; // get the next lexeme
2983
+
2984
+ if (!is.good()) goto finish;
2985
+
2986
+ #ifdef BOOST_NO_STD_LOCALE
2987
+ cc = ch;
2988
+ #else
2989
+ cc = ct.narrow(ch, char());
2990
+ #endif /* BOOST_NO_STD_LOCALE */
2991
+
2992
+ if (cc == ')') // read "((a,b,c))"
2993
+ {
2994
+ o = octonion<T>(a,b,c);
2995
+ }
2996
+ else if (cc == ',') // read "((a,b,c),"
2997
+ {
2998
+ p = ::boost::math::quaternion<T>(a,b,c);
2999
+
3000
+ is >> q; // read "((a,b,c),q"
3001
+
3002
+ if (!is.good()) goto finish;
3003
+
3004
+ is >> ch; // get the next lexeme
3005
+
3006
+ if (!is.good()) goto finish;
3007
+
3008
+ #ifdef BOOST_NO_STD_LOCALE
3009
+ cc = ch;
3010
+ #else
3011
+ cc = ct.narrow(ch, char());
3012
+ #endif /* BOOST_NO_STD_LOCALE */
3013
+
3014
+ if (cc == ')') // read "((a,b,c),q)"
3015
+ {
3016
+ o = octonion<T>(p,q);
3017
+ }
3018
+ else // error
3019
+ {
3020
+ is.setstate(::std::ios_base::failbit);
3021
+ }
3022
+ }
3023
+ else // error
3024
+ {
3025
+ is.setstate(::std::ios_base::failbit);
3026
+ }
3027
+ }
3028
+ else if (cc == ',') // read "((a,b,c,"
3029
+ {
3030
+ is >> d; // read "((a,b,c,d"
3031
+
3032
+ if (!is.good()) goto finish;
3033
+
3034
+ is >> ch; // get the next lexeme
3035
+
3036
+ if (!is.good()) goto finish;
3037
+
3038
+ #ifdef BOOST_NO_STD_LOCALE
3039
+ cc = ch;
3040
+ #else
3041
+ cc = ct.narrow(ch, char());
3042
+ #endif /* BOOST_NO_STD_LOCALE */
3043
+
3044
+ if (cc == ')') // read "((a,b,c,d)"
3045
+ {
3046
+ is >> ch; // get the next lexeme
3047
+
3048
+ if (!is.good()) goto finish;
3049
+
3050
+ #ifdef BOOST_NO_STD_LOCALE
3051
+ cc = ch;
3052
+ #else
3053
+ cc = ct.narrow(ch, char());
3054
+ #endif /* BOOST_NO_STD_LOCALE */
3055
+
3056
+ if (cc == ')') // read "((a,b,c,d))"
3057
+ {
3058
+ o = octonion<T>(a,b,c,d);
3059
+ }
3060
+ else if (cc == ',') // read "((a,b,c,d),"
3061
+ {
3062
+ p = ::boost::math::quaternion<T>(a,b,c,d);
3063
+
3064
+ is >> q; // read "((a,b,c,d),q"
3065
+
3066
+ if (!is.good()) goto finish;
3067
+
3068
+ is >> ch; // get the next lexeme
3069
+
3070
+ if (!is.good()) goto finish;
3071
+
3072
+ #ifdef BOOST_NO_STD_LOCALE
3073
+ cc = ch;
3074
+ #else
3075
+ cc = ct.narrow(ch, char());
3076
+ #endif /* BOOST_NO_STD_LOCALE */
3077
+
3078
+ if (cc == ')') // read "((a,b,c,d),q)"
3079
+ {
3080
+ o = octonion<T>(p,q);
3081
+ }
3082
+ else // error
3083
+ {
3084
+ is.setstate(::std::ios_base::failbit);
3085
+ }
3086
+ }
3087
+ else // error
3088
+ {
3089
+ is.setstate(::std::ios_base::failbit);
3090
+ }
3091
+ }
3092
+ else // error
3093
+ {
3094
+ is.setstate(::std::ios_base::failbit);
3095
+ }
3096
+ }
3097
+ else // error
3098
+ {
3099
+ is.setstate(::std::ios_base::failbit);
3100
+ }
3101
+ }
3102
+ else // error
3103
+ {
3104
+ is.setstate(::std::ios_base::failbit);
3105
+ }
3106
+ }
3107
+ }
3108
+ else // error
3109
+ {
3110
+ is.setstate(::std::ios_base::failbit);
3111
+ }
3112
+ }
3113
+ }
3114
+ else // read "(a"
3115
+ {
3116
+ is.putback(ch);
3117
+
3118
+ is >> a; // we extract the first component
3119
+
3120
+ if (!is.good()) goto finish;
3121
+
3122
+ is >> ch; // get the next lexeme
3123
+
3124
+ if (!is.good()) goto finish;
3125
+
3126
+ #ifdef BOOST_NO_STD_LOCALE
3127
+ cc = ch;
3128
+ #else
3129
+ cc = ct.narrow(ch, char());
3130
+ #endif /* BOOST_NO_STD_LOCALE */
3131
+
3132
+ if (cc == ')') // read "(a)"
3133
+ {
3134
+ o = octonion<T>(a);
3135
+ }
3136
+ else if (cc == ',') // read "(a,"
3137
+ {
3138
+ is >> ch; // get the next lexeme
3139
+
3140
+ if (!is.good()) goto finish;
3141
+
3142
+ #ifdef BOOST_NO_STD_LOCALE
3143
+ cc = ch;
3144
+ #else
3145
+ cc = ct.narrow(ch, char());
3146
+ #endif /* BOOST_NO_STD_LOCALE */
3147
+
3148
+ if (cc == '(') // read "(a,("
3149
+ {
3150
+ is >> ch; // get the next lexeme
3151
+
3152
+ if (!is.good()) goto finish;
3153
+
3154
+ #ifdef BOOST_NO_STD_LOCALE
3155
+ cc = ch;
3156
+ #else
3157
+ cc = ct.narrow(ch, char());
3158
+ #endif /* BOOST_NO_STD_LOCALE */
3159
+
3160
+ if (cc == '(') // read "(a,(("
3161
+ {
3162
+ p = ::boost::math::quaternion<T>(a);
3163
+
3164
+ is.putback(ch);
3165
+
3166
+ is.putback(ch); // we backtrack twice, with the same value
3167
+
3168
+ is >> q; // read "(a,q"
3169
+
3170
+ if (!is.good()) goto finish;
3171
+
3172
+ is >> ch; // get the next lexeme
3173
+
3174
+ if (!is.good()) goto finish;
3175
+
3176
+ #ifdef BOOST_NO_STD_LOCALE
3177
+ cc = ch;
3178
+ #else
3179
+ cc = ct.narrow(ch, char());
3180
+ #endif /* BOOST_NO_STD_LOCALE */
3181
+
3182
+ if (cc == ')') // read "(a,q)"
3183
+ {
3184
+ o = octonion<T>(p,q);
3185
+ }
3186
+ else // error
3187
+ {
3188
+ is.setstate(::std::ios_base::failbit);
3189
+ }
3190
+ }
3191
+ else // read "(a,(c" or "(a,(e"
3192
+ {
3193
+ is.putback(ch);
3194
+
3195
+ is >> c;
3196
+
3197
+ if (!is.good()) goto finish;
3198
+
3199
+ is >> ch; // get the next lexeme
3200
+
3201
+ if (!is.good()) goto finish;
3202
+
3203
+ #ifdef BOOST_NO_STD_LOCALE
3204
+ cc = ch;
3205
+ #else
3206
+ cc = ct.narrow(ch, char());
3207
+ #endif /* BOOST_NO_STD_LOCALE */
3208
+
3209
+ if (cc == ')') // read "(a,(c)" (ambiguity resolution)
3210
+ {
3211
+ is >> ch; // get the next lexeme
3212
+
3213
+ if (!is.good()) goto finish;
3214
+
3215
+ #ifdef BOOST_NO_STD_LOCALE
3216
+ cc = ch;
3217
+ #else
3218
+ cc = ct.narrow(ch, char());
3219
+ #endif /* BOOST_NO_STD_LOCALE */
3220
+
3221
+ if (cc == ')') // read "(a,(c))"
3222
+ {
3223
+ o = octonion<T>(a,b,c);
3224
+ }
3225
+ else if (cc == ',') // read "(a,(c),"
3226
+ {
3227
+ u = ::std::complex<T>(a);
3228
+
3229
+ v = ::std::complex<T>(c);
3230
+
3231
+ is >> x; // read "(a,(c),x"
3232
+
3233
+ if (!is.good()) goto finish;
3234
+
3235
+ is >> ch; // get the next lexeme
3236
+
3237
+ if (!is.good()) goto finish;
3238
+
3239
+ #ifdef BOOST_NO_STD_LOCALE
3240
+ cc = ch;
3241
+ #else
3242
+ cc = ct.narrow(ch, char());
3243
+ #endif /* BOOST_NO_STD_LOCALE */
3244
+
3245
+ if (cc == ')') // read "(a,(c),x)"
3246
+ {
3247
+ o = octonion<T>(u,v,x);
3248
+ }
3249
+ else if (cc == ',') // read "(a,(c),x,"
3250
+ {
3251
+ is >> y; // read "(a,(c),x,y"
3252
+
3253
+ if (!is.good()) goto finish;
3254
+
3255
+ is >> ch; // get the next lexeme
3256
+
3257
+ if (!is.good()) goto finish;
3258
+
3259
+ #ifdef BOOST_NO_STD_LOCALE
3260
+ cc = ch;
3261
+ #else
3262
+ cc = ct.narrow(ch, char());
3263
+ #endif /* BOOST_NO_STD_LOCALE */
3264
+
3265
+ if (cc == ')') // read "(a,(c),x,y)"
3266
+ {
3267
+ o = octonion<T>(u,v,x,y);
3268
+ }
3269
+ else // error
3270
+ {
3271
+ is.setstate(::std::ios_base::failbit);
3272
+ }
3273
+ }
3274
+ else // error
3275
+ {
3276
+ is.setstate(::std::ios_base::failbit);
3277
+ }
3278
+ }
3279
+ else // error
3280
+ {
3281
+ is.setstate(::std::ios_base::failbit);
3282
+ }
3283
+ }
3284
+ else if (cc == ',') // read "(a,(c," or "(a,(e,"
3285
+ {
3286
+ is >> ch; // get the next lexeme
3287
+
3288
+ if (!is.good()) goto finish;
3289
+
3290
+ #ifdef BOOST_NO_STD_LOCALE
3291
+ cc = ch;
3292
+ #else
3293
+ cc = ct.narrow(ch, char());
3294
+ #endif /* BOOST_NO_STD_LOCALE */
3295
+
3296
+ if (cc == '(') // read "(a,(e,(" (ambiguity resolution)
3297
+ {
3298
+ u = ::std::complex<T>(a);
3299
+
3300
+ x = ::std::complex<T>(c); // "c" is actually "e"
3301
+
3302
+ is.putback(ch); // we backtrack
3303
+
3304
+ is >> y; // read "(a,(e,y"
3305
+
3306
+ if (!is.good()) goto finish;
3307
+
3308
+ is >> ch; // get the next lexeme
3309
+
3310
+ if (!is.good()) goto finish;
3311
+
3312
+ #ifdef BOOST_NO_STD_LOCALE
3313
+ cc = ch;
3314
+ #else
3315
+ cc = ct.narrow(ch, char());
3316
+ #endif /* BOOST_NO_STD_LOCALE */
3317
+
3318
+ if (cc == ')') // read "(a,(e,y)"
3319
+ {
3320
+ is >> ch; // get the next lexeme
3321
+
3322
+ if (!is.good()) goto finish;
3323
+
3324
+ #ifdef BOOST_NO_STD_LOCALE
3325
+ cc = ch;
3326
+ #else
3327
+ cc = ct.narrow(ch, char());
3328
+ #endif /* BOOST_NO_STD_LOCALE */
3329
+
3330
+ if (cc == ')') // read "(a,(e,y))"
3331
+ {
3332
+ o = octonion<T>(u,v,x,y);
3333
+ }
3334
+ else // error
3335
+ {
3336
+ is.setstate(::std::ios_base::failbit);
3337
+ }
3338
+ }
3339
+ else // error
3340
+ {
3341
+ is.setstate(::std::ios_base::failbit);
3342
+ }
3343
+ }
3344
+ else // read "(a,(c,d" or "(a,(e,f"
3345
+ {
3346
+ is.putback(ch);
3347
+
3348
+ is >> d;
3349
+
3350
+ if (!is.good()) goto finish;
3351
+
3352
+ is >> ch; // get the next lexeme
3353
+
3354
+ if (!is.good()) goto finish;
3355
+
3356
+ #ifdef BOOST_NO_STD_LOCALE
3357
+ cc = ch;
3358
+ #else
3359
+ cc = ct.narrow(ch, char());
3360
+ #endif /* BOOST_NO_STD_LOCALE */
3361
+
3362
+ if (cc == ')') // read "(a,(c,d)" (ambiguity resolution)
3363
+ {
3364
+ is >> ch; // get the next lexeme
3365
+
3366
+ if (!is.good()) goto finish;
3367
+
3368
+ #ifdef BOOST_NO_STD_LOCALE
3369
+ cc = ch;
3370
+ #else
3371
+ cc = ct.narrow(ch, char());
3372
+ #endif /* BOOST_NO_STD_LOCALE */
3373
+
3374
+ if (cc == ')') // read "(a,(c,d))"
3375
+ {
3376
+ o = octonion<T>(a,b,c,d);
3377
+ }
3378
+ else if (cc == ',') // read "(a,(c,d),"
3379
+ {
3380
+ u = ::std::complex<T>(a);
3381
+
3382
+ v = ::std::complex<T>(c,d);
3383
+
3384
+ is >> x; // read "(a,(c,d),x"
3385
+
3386
+ if (!is.good()) goto finish;
3387
+
3388
+ is >> ch; // get the next lexeme
3389
+
3390
+ if (!is.good()) goto finish;
3391
+
3392
+ #ifdef BOOST_NO_STD_LOCALE
3393
+ cc = ch;
3394
+ #else
3395
+ cc = ct.narrow(ch, char());
3396
+ #endif /* BOOST_NO_STD_LOCALE */
3397
+
3398
+ if (cc == ')') // read "(a,(c,d),x)"
3399
+ {
3400
+ o = octonion<T>(u,v,x);
3401
+ }
3402
+ else if (cc == ',') // read "(a,(c,d),x,"
3403
+ {
3404
+ is >> y; // read "(a,(c,d),x,y"
3405
+
3406
+ if (!is.good()) goto finish;
3407
+
3408
+ is >> ch; // get the next lexeme
3409
+
3410
+ if (!is.good()) goto finish;
3411
+
3412
+ #ifdef BOOST_NO_STD_LOCALE
3413
+ cc = ch;
3414
+ #else
3415
+ cc = ct.narrow(ch, char());
3416
+ #endif /* BOOST_NO_STD_LOCALE */
3417
+
3418
+ if (cc == ')') // read "(a,(c,d),x,y)"
3419
+ {
3420
+ o = octonion<T>(u,v,x,y);
3421
+ }
3422
+ else // error
3423
+ {
3424
+ is.setstate(::std::ios_base::failbit);
3425
+ }
3426
+ }
3427
+ else // error
3428
+ {
3429
+ is.setstate(::std::ios_base::failbit);
3430
+ }
3431
+ }
3432
+ else // error
3433
+ {
3434
+ is.setstate(::std::ios_base::failbit);
3435
+ }
3436
+ }
3437
+ else if (cc == ',') // read "(a,(e,f," (ambiguity resolution)
3438
+ {
3439
+ p = ::boost::math::quaternion<T>(a);
3440
+
3441
+ is >> g; // read "(a,(e,f,g"
3442
+
3443
+ if (!is.good()) goto finish;
3444
+
3445
+ is >> ch; // get the next lexeme
3446
+
3447
+ if (!is.good()) goto finish;
3448
+
3449
+ #ifdef BOOST_NO_STD_LOCALE
3450
+ cc = ch;
3451
+ #else
3452
+ cc = ct.narrow(ch, char());
3453
+ #endif /* BOOST_NO_STD_LOCALE */
3454
+
3455
+ if (cc == ')') // read "(a,(e,f,g)"
3456
+ {
3457
+ is >> ch; // get the next lexeme
3458
+
3459
+ if (!is.good()) goto finish;
3460
+
3461
+ #ifdef BOOST_NO_STD_LOCALE
3462
+ cc = ch;
3463
+ #else
3464
+ cc = ct.narrow(ch, char());
3465
+ #endif /* BOOST_NO_STD_LOCALE */
3466
+
3467
+ if (cc == ')') // read "(a,(e,f,g))"
3468
+ {
3469
+ q = ::boost::math::quaternion<T>(c,d,g); // "c" is actually "e" and "d" is actually "f"
3470
+
3471
+ o = octonion<T>(p,q);
3472
+ }
3473
+ else // error
3474
+ {
3475
+ is.setstate(::std::ios_base::failbit);
3476
+ }
3477
+ }
3478
+ else if (cc == ',') // read "(a,(e,f,g,"
3479
+ {
3480
+ is >> h; // read "(a,(e,f,g,h"
3481
+
3482
+ if (!is.good()) goto finish;
3483
+
3484
+ is >> ch; // get the next lexeme
3485
+
3486
+ if (!is.good()) goto finish;
3487
+
3488
+ #ifdef BOOST_NO_STD_LOCALE
3489
+ cc = ch;
3490
+ #else
3491
+ cc = ct.narrow(ch, char());
3492
+ #endif /* BOOST_NO_STD_LOCALE */
3493
+
3494
+ if (cc == ')') // read "(a,(e,f,g,h)"
3495
+ {
3496
+ is >> ch; // get the next lexeme
3497
+
3498
+ if (!is.good()) goto finish;
3499
+
3500
+ #ifdef BOOST_NO_STD_LOCALE
3501
+ cc = ch;
3502
+ #else
3503
+ cc = ct.narrow(ch, char());
3504
+ #endif /* BOOST_NO_STD_LOCALE */
3505
+
3506
+ if (cc == ')') // read "(a,(e,f,g,h))"
3507
+ {
3508
+ q = ::boost::math::quaternion<T>(c,d,g,h); // "c" is actually "e" and "d" is actually "f"
3509
+
3510
+ o = octonion<T>(p,q);
3511
+ }
3512
+ else // error
3513
+ {
3514
+ is.setstate(::std::ios_base::failbit);
3515
+ }
3516
+ }
3517
+ else // error
3518
+ {
3519
+ is.setstate(::std::ios_base::failbit);
3520
+ }
3521
+ }
3522
+ else // error
3523
+ {
3524
+ is.setstate(::std::ios_base::failbit);
3525
+ }
3526
+ }
3527
+ else // error
3528
+ {
3529
+ is.setstate(::std::ios_base::failbit);
3530
+ }
3531
+ }
3532
+ }
3533
+ else // error
3534
+ {
3535
+ is.setstate(::std::ios_base::failbit);
3536
+ }
3537
+ }
3538
+ }
3539
+ else // read "(a,b" or "(a,c" (ambiguity resolution)
3540
+ {
3541
+ is.putback(ch);
3542
+
3543
+ is >> b;
3544
+
3545
+ if (!is.good()) goto finish;
3546
+
3547
+ is >> ch; // get the next lexeme
3548
+
3549
+ if (!is.good()) goto finish;
3550
+
3551
+ #ifdef BOOST_NO_STD_LOCALE
3552
+ cc = ch;
3553
+ #else
3554
+ cc = ct.narrow(ch, char());
3555
+ #endif /* BOOST_NO_STD_LOCALE */
3556
+
3557
+ if (cc == ')') // read "(a,b)" (ambiguity resolution)
3558
+ {
3559
+ o = octonion<T>(a,b);
3560
+ }
3561
+ else if (cc == ',') // read "(a,b," or "(a,c,"
3562
+ {
3563
+ is >> ch; // get the next lexeme
3564
+
3565
+ if (!is.good()) goto finish;
3566
+
3567
+ #ifdef BOOST_NO_STD_LOCALE
3568
+ cc = ch;
3569
+ #else
3570
+ cc = ct.narrow(ch, char());
3571
+ #endif /* BOOST_NO_STD_LOCALE */
3572
+
3573
+ if (cc == '(') // read "(a,c,(" (ambiguity resolution)
3574
+ {
3575
+ u = ::std::complex<T>(a);
3576
+
3577
+ v = ::std::complex<T>(b); // "b" is actually "c"
3578
+
3579
+ is.putback(ch); // we backtrack
3580
+
3581
+ is >> x; // read "(a,c,x"
3582
+
3583
+ if (!is.good()) goto finish;
3584
+
3585
+ is >> ch; // get the next lexeme
3586
+
3587
+ if (!is.good()) goto finish;
3588
+
3589
+ #ifdef BOOST_NO_STD_LOCALE
3590
+ cc = ch;
3591
+ #else
3592
+ cc = ct.narrow(ch, char());
3593
+ #endif /* BOOST_NO_STD_LOCALE */
3594
+
3595
+ if (cc == ')') // read "(a,c,x)"
3596
+ {
3597
+ o = octonion<T>(u,v,x);
3598
+ }
3599
+ else if (cc == ',') // read "(a,c,x,"
3600
+ {
3601
+ is >> y; // read "(a,c,x,y" // read "(a,c,x"
3602
+
3603
+ if (!is.good()) goto finish;
3604
+
3605
+ is >> ch; // get the next lexeme
3606
+
3607
+ if (!is.good()) goto finish;
3608
+
3609
+ #ifdef BOOST_NO_STD_LOCALE
3610
+ cc = ch;
3611
+ #else
3612
+ cc = ct.narrow(ch, char());
3613
+ #endif /* BOOST_NO_STD_LOCALE */
3614
+
3615
+ if (cc == ')') // read "(a,c,x,y)"
3616
+ {
3617
+ o = octonion<T>(u,v,x,y);
3618
+ }
3619
+ else // error
3620
+ {
3621
+ is.setstate(::std::ios_base::failbit);
3622
+ }
3623
+ }
3624
+ else // error
3625
+ {
3626
+ is.setstate(::std::ios_base::failbit);
3627
+ }
3628
+ }
3629
+ else // read "(a,b,c" or "(a,c,e"
3630
+ {
3631
+ is.putback(ch);
3632
+
3633
+ is >> c;
3634
+
3635
+ if (!is.good()) goto finish;
3636
+
3637
+ is >> ch; // get the next lexeme
3638
+
3639
+ if (!is.good()) goto finish;
3640
+
3641
+ #ifdef BOOST_NO_STD_LOCALE
3642
+ cc = ch;
3643
+ #else
3644
+ cc = ct.narrow(ch, char());
3645
+ #endif /* BOOST_NO_STD_LOCALE */
3646
+
3647
+ if (cc == ')') // read "(a,b,c)" (ambiguity resolution)
3648
+ {
3649
+ o = octonion<T>(a,b,c);
3650
+ }
3651
+ else if (cc == ',') // read "(a,b,c," or "(a,c,e,"
3652
+ {
3653
+ is >> ch; // get the next lexeme
3654
+
3655
+ if (!is.good()) goto finish;
3656
+
3657
+ #ifdef BOOST_NO_STD_LOCALE
3658
+ cc = ch;
3659
+ #else
3660
+ cc = ct.narrow(ch, char());
3661
+ #endif /* BOOST_NO_STD_LOCALE */
3662
+
3663
+ if (cc == '(') // read "(a,c,e,(") (ambiguity resolution)
3664
+ {
3665
+ u = ::std::complex<T>(a);
3666
+
3667
+ v = ::std::complex<T>(b); // "b" is actually "c"
3668
+
3669
+ x = ::std::complex<T>(c); // "c" is actually "e"
3670
+
3671
+ is.putback(ch); // we backtrack
3672
+
3673
+ is >> y; // read "(a,c,e,y"
3674
+
3675
+ if (!is.good()) goto finish;
3676
+
3677
+ is >> ch; // get the next lexeme
3678
+
3679
+ if (!is.good()) goto finish;
3680
+
3681
+ #ifdef BOOST_NO_STD_LOCALE
3682
+ cc = ch;
3683
+ #else
3684
+ cc = ct.narrow(ch, char());
3685
+ #endif /* BOOST_NO_STD_LOCALE */
3686
+
3687
+ if (cc == ')') // read "(a,c,e,y)"
3688
+ {
3689
+ o = octonion<T>(u,v,x,y);
3690
+ }
3691
+ else // error
3692
+ {
3693
+ is.setstate(::std::ios_base::failbit);
3694
+ }
3695
+ }
3696
+ else // read "(a,b,c,d" (ambiguity resolution)
3697
+ {
3698
+ is.putback(ch); // we backtrack
3699
+
3700
+ is >> d;
3701
+
3702
+ if (!is.good()) goto finish;
3703
+
3704
+ is >> ch; // get the next lexeme
3705
+
3706
+ if (!is.good()) goto finish;
3707
+
3708
+ #ifdef BOOST_NO_STD_LOCALE
3709
+ cc = ch;
3710
+ #else
3711
+ cc = ct.narrow(ch, char());
3712
+ #endif /* BOOST_NO_STD_LOCALE */
3713
+
3714
+ if (cc == ')') // read "(a,b,c,d)"
3715
+ {
3716
+ o = octonion<T>(a,b,c,d);
3717
+ }
3718
+ else if (cc == ',') // read "(a,b,c,d,"
3719
+ {
3720
+ is >> e; // read "(a,b,c,d,e"
3721
+
3722
+ if (!is.good()) goto finish;
3723
+
3724
+ is >> ch; // get the next lexeme
3725
+
3726
+ if (!is.good()) goto finish;
3727
+
3728
+ #ifdef BOOST_NO_STD_LOCALE
3729
+ cc = ch;
3730
+ #else
3731
+ cc = ct.narrow(ch, char());
3732
+ #endif /* BOOST_NO_STD_LOCALE */
3733
+
3734
+ if (cc == ')') // read "(a,b,c,d,e)"
3735
+ {
3736
+ o = octonion<T>(a,b,c,d,e);
3737
+ }
3738
+ else if (cc == ',') // read "(a,b,c,d,e,"
3739
+ {
3740
+ is >> f; // read "(a,b,c,d,e,f"
3741
+
3742
+ if (!is.good()) goto finish;
3743
+
3744
+ is >> ch; // get the next lexeme
3745
+
3746
+ if (!is.good()) goto finish;
3747
+
3748
+ #ifdef BOOST_NO_STD_LOCALE
3749
+ cc = ch;
3750
+ #else
3751
+ cc = ct.narrow(ch, char());
3752
+ #endif /* BOOST_NO_STD_LOCALE */
3753
+
3754
+ if (cc == ')') // read "(a,b,c,d,e,f)"
3755
+ {
3756
+ o = octonion<T>(a,b,c,d,e,f);
3757
+ }
3758
+ else if (cc == ',') // read "(a,b,c,d,e,f,"
3759
+ {
3760
+ is >> g; // read "(a,b,c,d,e,f,g" // read "(a,b,c,d,e,f"
3761
+
3762
+ if (!is.good()) goto finish;
3763
+
3764
+ is >> ch; // get the next lexeme
3765
+
3766
+ if (!is.good()) goto finish;
3767
+
3768
+ #ifdef BOOST_NO_STD_LOCALE
3769
+ cc = ch;
3770
+ #else
3771
+ cc = ct.narrow(ch, char());
3772
+ #endif /* BOOST_NO_STD_LOCALE */
3773
+
3774
+ if (cc == ')') // read "(a,b,c,d,e,f,g)"
3775
+ {
3776
+ o = octonion<T>(a,b,c,d,e,f,g);
3777
+ }
3778
+ else if (cc == ',') // read "(a,b,c,d,e,f,g,"
3779
+ {
3780
+ is >> h; // read "(a,b,c,d,e,f,g,h" // read "(a,b,c,d,e,f,g" // read "(a,b,c,d,e,f"
3781
+
3782
+ if (!is.good()) goto finish;
3783
+
3784
+ is >> ch; // get the next lexeme
3785
+
3786
+ if (!is.good()) goto finish;
3787
+
3788
+ #ifdef BOOST_NO_STD_LOCALE
3789
+ cc = ch;
3790
+ #else
3791
+ cc = ct.narrow(ch, char());
3792
+ #endif /* BOOST_NO_STD_LOCALE */
3793
+
3794
+ if (cc == ')') // read "(a,b,c,d,e,f,g,h)"
3795
+ {
3796
+ o = octonion<T>(a,b,c,d,e,f,g,h);
3797
+ }
3798
+ else // error
3799
+ {
3800
+ is.setstate(::std::ios_base::failbit);
3801
+ }
3802
+ }
3803
+ else // error
3804
+ {
3805
+ is.setstate(::std::ios_base::failbit);
3806
+ }
3807
+ }
3808
+ else // error
3809
+ {
3810
+ is.setstate(::std::ios_base::failbit);
3811
+ }
3812
+ }
3813
+ else // error
3814
+ {
3815
+ is.setstate(::std::ios_base::failbit);
3816
+ }
3817
+ }
3818
+ else // error
3819
+ {
3820
+ is.setstate(::std::ios_base::failbit);
3821
+ }
3822
+ }
3823
+ }
3824
+ else // error
3825
+ {
3826
+ is.setstate(::std::ios_base::failbit);
3827
+ }
3828
+ }
3829
+ }
3830
+ else // error
3831
+ {
3832
+ is.setstate(::std::ios_base::failbit);
3833
+ }
3834
+ }
3835
+ }
3836
+ else // error
3837
+ {
3838
+ is.setstate(::std::ios_base::failbit);
3839
+ }
3840
+ }
3841
+ }
3842
+ else // format: a
3843
+ {
3844
+ is.putback(ch);
3845
+
3846
+ is >> a; // we extract the first component
3847
+
3848
+ if (!is.good()) goto finish;
3849
+
3850
+ o = octonion<T>(a);
3851
+ }
3852
+
3853
+ finish:
3854
+ return(is);
3855
+ }
3856
+ // LCOV_EXCL_STOP
3857
+
3858
+
3859
+ template<typename T, typename charT, class traits>
3860
+ ::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os,
3861
+ octonion<T> const & o)
3862
+ {
3863
+ ::std::basic_ostringstream<charT,traits> s;
3864
+
3865
+ s.flags(os.flags());
3866
+ #ifdef BOOST_NO_STD_LOCALE
3867
+ #else
3868
+ s.imbue(os.getloc());
3869
+ #endif /* BOOST_NO_STD_LOCALE */
3870
+ s.precision(os.precision());
3871
+
3872
+ s << '(' << o.R_component_1() << ','
3873
+ << o.R_component_2() << ','
3874
+ << o.R_component_3() << ','
3875
+ << o.R_component_4() << ','
3876
+ << o.R_component_5() << ','
3877
+ << o.R_component_6() << ','
3878
+ << o.R_component_7() << ','
3879
+ << o.R_component_8() << ')';
3880
+
3881
+ return os << s.str();
3882
+ }
3883
+
3884
+
3885
+ // values
3886
+
3887
+ template<typename T>
3888
+ inline T real(octonion<T> const & o)
3889
+ {
3890
+ return(o.real());
3891
+ }
3892
+
3893
+
3894
+ template<typename T>
3895
+ inline octonion<T> unreal(octonion<T> const & o)
3896
+ {
3897
+ return(o.unreal());
3898
+ }
3899
+
3900
+
3901
+ #define BOOST_OCTONION_VALARRAY_LOADER \
3902
+ using ::std::valarray; \
3903
+ \
3904
+ valarray<T> temp(8); \
3905
+ \
3906
+ temp[0] = o.R_component_1(); \
3907
+ temp[1] = o.R_component_2(); \
3908
+ temp[2] = o.R_component_3(); \
3909
+ temp[3] = o.R_component_4(); \
3910
+ temp[4] = o.R_component_5(); \
3911
+ temp[5] = o.R_component_6(); \
3912
+ temp[6] = o.R_component_7(); \
3913
+ temp[7] = o.R_component_8();
3914
+
3915
+
3916
+ template<typename T>
3917
+ inline T sup(octonion<T> const & o)
3918
+ {
3919
+ #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
3920
+ using ::std::abs;
3921
+ #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
3922
+
3923
+ BOOST_OCTONION_VALARRAY_LOADER
3924
+
3925
+ return((abs(temp).max)());
3926
+ }
3927
+
3928
+
3929
+ template<typename T>
3930
+ inline T l1(octonion<T> const & o)
3931
+ {
3932
+ #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
3933
+ using ::std::abs;
3934
+ #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
3935
+
3936
+ BOOST_OCTONION_VALARRAY_LOADER
3937
+
3938
+ return(abs(temp).sum());
3939
+ }
3940
+
3941
+
3942
+ template<typename T>
3943
+ inline T abs(const octonion<T> & o)
3944
+ {
3945
+ #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
3946
+ using ::std::abs;
3947
+ #endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
3948
+
3949
+ using ::std::sqrt;
3950
+
3951
+ BOOST_OCTONION_VALARRAY_LOADER
3952
+
3953
+ T maxim = (abs(temp).max)(); // overflow protection
3954
+
3955
+ if (maxim == static_cast<T>(0))
3956
+ {
3957
+ return(maxim);
3958
+ }
3959
+ else
3960
+ {
3961
+ T mixam = static_cast<T>(1)/maxim; // prefer multiplications over divisions
3962
+
3963
+ temp *= mixam;
3964
+
3965
+ temp *= temp;
3966
+
3967
+ return(maxim*sqrt(temp.sum()));
3968
+ }
3969
+
3970
+ //return(::std::sqrt(norm(o)));
3971
+ }
3972
+
3973
+
3974
+ #undef BOOST_OCTONION_VALARRAY_LOADER
3975
+
3976
+
3977
+ // Note: This is the Cayley norm, not the Euclidean norm...
3978
+
3979
+ template<typename T>
3980
+ inline T norm(octonion<T> const & o)
3981
+ {
3982
+ return(real(o*conj(o)));
3983
+ }
3984
+
3985
+
3986
+ template<typename T>
3987
+ inline octonion<T> conj(octonion<T> const & o)
3988
+ {
3989
+ return(octonion<T>( +o.R_component_1(),
3990
+ -o.R_component_2(),
3991
+ -o.R_component_3(),
3992
+ -o.R_component_4(),
3993
+ -o.R_component_5(),
3994
+ -o.R_component_6(),
3995
+ -o.R_component_7(),
3996
+ -o.R_component_8()));
3997
+ }
3998
+
3999
+
4000
+ // Note: There is little point, for the octonions, to introduce the equivalents
4001
+ // to the complex "arg" and the quaternionic "cylindropolar".
4002
+
4003
+
4004
+ template<typename T>
4005
+ inline octonion<T> spherical(T const & rho,
4006
+ T const & theta,
4007
+ T const & phi1,
4008
+ T const & phi2,
4009
+ T const & phi3,
4010
+ T const & phi4,
4011
+ T const & phi5,
4012
+ T const & phi6)
4013
+ {
4014
+ using ::std::cos;
4015
+ using ::std::sin;
4016
+
4017
+ //T a = cos(theta)*cos(phi1)*cos(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
4018
+ //T b = sin(theta)*cos(phi1)*cos(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
4019
+ //T c = sin(phi1)*cos(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
4020
+ //T d = sin(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
4021
+ //T e = sin(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
4022
+ //T f = sin(phi4)*cos(phi5)*cos(phi6);
4023
+ //T g = sin(phi5)*cos(phi6);
4024
+ //T h = sin(phi6);
4025
+
4026
+ T courrant = static_cast<T>(1);
4027
+
4028
+ T h = sin(phi6);
4029
+
4030
+ courrant *= cos(phi6);
4031
+
4032
+ T g = sin(phi5)*courrant;
4033
+
4034
+ courrant *= cos(phi5);
4035
+
4036
+ T f = sin(phi4)*courrant;
4037
+
4038
+ courrant *= cos(phi4);
4039
+
4040
+ T e = sin(phi3)*courrant;
4041
+
4042
+ courrant *= cos(phi3);
4043
+
4044
+ T d = sin(phi2)*courrant;
4045
+
4046
+ courrant *= cos(phi2);
4047
+
4048
+ T c = sin(phi1)*courrant;
4049
+
4050
+ courrant *= cos(phi1);
4051
+
4052
+ T b = sin(theta)*courrant;
4053
+ T a = cos(theta)*courrant;
4054
+
4055
+ return(rho*octonion<T>(a,b,c,d,e,f,g,h));
4056
+ }
4057
+
4058
+
4059
+ template<typename T>
4060
+ inline octonion<T> multipolar(T const & rho1,
4061
+ T const & theta1,
4062
+ T const & rho2,
4063
+ T const & theta2,
4064
+ T const & rho3,
4065
+ T const & theta3,
4066
+ T const & rho4,
4067
+ T const & theta4)
4068
+ {
4069
+ using ::std::cos;
4070
+ using ::std::sin;
4071
+
4072
+ T a = rho1*cos(theta1);
4073
+ T b = rho1*sin(theta1);
4074
+ T c = rho2*cos(theta2);
4075
+ T d = rho2*sin(theta2);
4076
+ T e = rho3*cos(theta3);
4077
+ T f = rho3*sin(theta3);
4078
+ T g = rho4*cos(theta4);
4079
+ T h = rho4*sin(theta4);
4080
+
4081
+ return(octonion<T>(a,b,c,d,e,f,g,h));
4082
+ }
4083
+
4084
+
4085
+ template<typename T>
4086
+ inline octonion<T> cylindrical(T const & r,
4087
+ T const & angle,
4088
+ T const & h1,
4089
+ T const & h2,
4090
+ T const & h3,
4091
+ T const & h4,
4092
+ T const & h5,
4093
+ T const & h6)
4094
+ {
4095
+ using ::std::cos;
4096
+ using ::std::sin;
4097
+
4098
+ T a = r*cos(angle);
4099
+ T b = r*sin(angle);
4100
+
4101
+ return(octonion<T>(a,b,h1,h2,h3,h4,h5,h6));
4102
+ }
4103
+
4104
+
4105
+ template<typename T>
4106
+ inline octonion<T> exp(octonion<T> const & o)
4107
+ {
4108
+ using ::std::exp;
4109
+ using ::std::cos;
4110
+
4111
+ using ::boost::math::sinc_pi;
4112
+
4113
+ T u = exp(real(o));
4114
+
4115
+ T z = abs(unreal(o));
4116
+
4117
+ T w = sinc_pi(z);
4118
+
4119
+ return(u*octonion<T>(cos(z),
4120
+ w*o.R_component_2(), w*o.R_component_3(),
4121
+ w*o.R_component_4(), w*o.R_component_5(),
4122
+ w*o.R_component_6(), w*o.R_component_7(),
4123
+ w*o.R_component_8()));
4124
+ }
4125
+
4126
+
4127
+ template<typename T>
4128
+ inline octonion<T> cos(octonion<T> const & o)
4129
+ {
4130
+ using ::std::sin;
4131
+ using ::std::cos;
4132
+ using ::std::cosh;
4133
+
4134
+ using ::boost::math::sinhc_pi;
4135
+
4136
+ T z = abs(unreal(o));
4137
+
4138
+ T w = -sin(o.real())*sinhc_pi(z);
4139
+
4140
+ return(octonion<T>(cos(o.real())*cosh(z),
4141
+ w*o.R_component_2(), w*o.R_component_3(),
4142
+ w*o.R_component_4(), w*o.R_component_5(),
4143
+ w*o.R_component_6(), w*o.R_component_7(),
4144
+ w*o.R_component_8()));
4145
+ }
4146
+
4147
+
4148
+ template<typename T>
4149
+ inline octonion<T> sin(octonion<T> const & o)
4150
+ {
4151
+ using ::std::sin;
4152
+ using ::std::cos;
4153
+ using ::std::cosh;
4154
+
4155
+ using ::boost::math::sinhc_pi;
4156
+
4157
+ T z = abs(unreal(o));
4158
+
4159
+ T w = +cos(o.real())*sinhc_pi(z);
4160
+
4161
+ return(octonion<T>(sin(o.real())*cosh(z),
4162
+ w*o.R_component_2(), w*o.R_component_3(),
4163
+ w*o.R_component_4(), w*o.R_component_5(),
4164
+ w*o.R_component_6(), w*o.R_component_7(),
4165
+ w*o.R_component_8()));
4166
+ }
4167
+
4168
+
4169
+ template<typename T>
4170
+ inline octonion<T> tan(octonion<T> const & o)
4171
+ {
4172
+ return(sin(o)/cos(o));
4173
+ }
4174
+
4175
+
4176
+ template<typename T>
4177
+ inline octonion<T> cosh(octonion<T> const & o)
4178
+ {
4179
+ return((exp(+o)+exp(-o))/static_cast<T>(2));
4180
+ }
4181
+
4182
+
4183
+ template<typename T>
4184
+ inline octonion<T> sinh(octonion<T> const & o)
4185
+ {
4186
+ return((exp(+o)-exp(-o))/static_cast<T>(2));
4187
+ }
4188
+
4189
+
4190
+ template<typename T>
4191
+ inline octonion<T> tanh(octonion<T> const & o)
4192
+ {
4193
+ return(sinh(o)/cosh(o));
4194
+ }
4195
+
4196
+
4197
+ template<typename T>
4198
+ octonion<T> pow(octonion<T> const & o,
4199
+ int n)
4200
+ {
4201
+ if (n > 1)
4202
+ {
4203
+ int m = n>>1;
4204
+
4205
+ octonion<T> result = pow(o, m);
4206
+
4207
+ result *= result;
4208
+
4209
+ if (n != (m<<1))
4210
+ {
4211
+ result *= o; // n odd
4212
+ }
4213
+
4214
+ return(result);
4215
+ }
4216
+ else if (n == 1)
4217
+ {
4218
+ return(o);
4219
+ }
4220
+ else if (n == 0)
4221
+ {
4222
+ return(octonion<T>(static_cast<T>(1)));
4223
+ }
4224
+ else /* n < 0 */
4225
+ {
4226
+ return(pow(octonion<T>(static_cast<T>(1))/o,-n));
4227
+ }
4228
+ }
4229
+
4230
+
4231
+ // helper templates for converting copy constructors (definition)
4232
+
4233
+ namespace detail
4234
+ {
4235
+
4236
+ template< typename T,
4237
+ typename U
4238
+ >
4239
+ octonion<T> octonion_type_converter(octonion<U> const & rhs)
4240
+ {
4241
+ return(octonion<T>( static_cast<T>(rhs.R_component_1()),
4242
+ static_cast<T>(rhs.R_component_2()),
4243
+ static_cast<T>(rhs.R_component_3()),
4244
+ static_cast<T>(rhs.R_component_4()),
4245
+ static_cast<T>(rhs.R_component_5()),
4246
+ static_cast<T>(rhs.R_component_6()),
4247
+ static_cast<T>(rhs.R_component_7()),
4248
+ static_cast<T>(rhs.R_component_8())));
4249
+ }
4250
+ }
4251
+ }
4252
+ }
4253
+
4254
+ #endif /* BOOST_OCTONION_HPP */