@@ -16,7 +16,7 @@ namespace cpp2 {
1616template <typename R, int dim> class taylor ;
1717
1818
19- #line 225 "cpp2taylor.h2"
19+ #line 242 "cpp2taylor.h2"
2020}
2121
2222
@@ -72,41 +72,49 @@ template<typename R, int dim> class taylor {
7272 public: [[nodiscard]] auto operator -(cpp2::impl::in<taylor> o) const & -> taylor;
7373
7474#line 66 "cpp2taylor.h2"
75+ // Overload for simple handling of prefix +.
76+ public: [[nodiscard]] auto operator +() const & -> taylor;
77+
78+ #line 71 "cpp2taylor.h2"
79+ // Overload for simple handling of prefix -.
80+ public: [[nodiscard]] auto operator -() const & -> taylor;
81+
82+ #line 83 "cpp2taylor.h2"
7583 public: [[nodiscard]] auto add (cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor;
7684
77- #line 77 "cpp2taylor.h2"
85+ #line 94 "cpp2taylor.h2"
7886 public: [[nodiscard]] auto sub (cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor;
7987
80- #line 88 "cpp2taylor.h2"
88+ #line 105 "cpp2taylor.h2"
8189 public: [[nodiscard]] auto mul (cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor;
8290
83- #line 101 "cpp2taylor.h2"
91+ #line 118 "cpp2taylor.h2"
8492 public: [[nodiscard]] auto div (cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor;
8593
86- #line 119 "cpp2taylor.h2"
94+ #line 136 "cpp2taylor.h2"
8795 public: [[nodiscard]] auto sqrt (cpp2::impl::in<R> v0) const & -> taylor;
8896
89- #line 138 "cpp2taylor.h2"
97+ #line 155 "cpp2taylor.h2"
9098 public: [[nodiscard]] auto log (cpp2::impl::in<R> v0) const & -> taylor;
9199
92- #line 157 "cpp2taylor.h2"
100+ #line 174 "cpp2taylor.h2"
93101 public: [[nodiscard]] auto exp (cpp2::impl::in<R> v0) const & -> taylor;
94102
95- #line 176 "cpp2taylor.h2"
103+ #line 193 "cpp2taylor.h2"
96104 public: static auto comp_sin_cos (taylor& s, taylor& c, cpp2::impl::in<taylor> u, cpp2::impl::in<R> u0) -> void;
97105
98- #line 193 "cpp2taylor.h2"
106+ #line 210 "cpp2taylor.h2"
99107 public: [[nodiscard]] auto sin (cpp2::impl::in<R> v0) const & -> taylor;
100108
101- #line 203 "cpp2taylor.h2"
109+ #line 220 "cpp2taylor.h2"
102110 public: [[nodiscard]] auto cos (cpp2::impl::in<R> v0) const & -> taylor;
103111
104- #line 212 "cpp2taylor.h2"
112+ #line 229 "cpp2taylor.h2"
105113};
106114
107115template <typename R, int order> [[nodiscard]] auto to_string (taylor<R,order> const & o) -> std::string;
108116
109- #line 225 "cpp2taylor.h2"
117+ #line 242 "cpp2taylor.h2"
110118} // cpp2 namespace
111119
112120#endif // CPP2_CPP2TAYLOR_H
@@ -228,62 +236,83 @@ auto i{2};
228236 return sub (o, 0.0 , 0.0 ); // Primal values are not required.
229237 }
230238
231- #line 66 "cpp2taylor.h2"
239+ #line 67 "cpp2taylor.h2"
240+ template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::operator +() const & -> taylor{
241+ return (*this );
242+ }
243+
244+ #line 72 "cpp2taylor.h2"
245+ template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::operator -() const & -> taylor{
246+ taylor r {};
247+ {
248+ auto k{1 };
249+
250+ #line 76 "cpp2taylor.h2"
251+ for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
252+ CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) = -CPP2_ASSERT_IN_BOUNDS (v, k - 1 );
253+ }
254+ }
255+
256+ #line 80 "cpp2taylor.h2"
257+ return r;
258+ }
259+
260+ #line 83 "cpp2taylor.h2"
232261 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::add(cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor{
233262 taylor r {};
234263{
235264auto k{1 };
236265
237- #line 70 "cpp2taylor.h2"
266+ #line 87 "cpp2taylor.h2"
238267 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
239268 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) = get (k, v0) + CPP2_UFCS (get)(o, k, o0);
240269 }
241270}
242271
243- #line 74 "cpp2taylor.h2"
272+ #line 91 "cpp2taylor.h2"
244273 return r;
245274 }
246275
247- #line 77 "cpp2taylor.h2"
276+ #line 94 "cpp2taylor.h2"
248277 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::sub(cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor{
249278 taylor r {};
250279{
251280auto k{1 };
252281
253- #line 81 "cpp2taylor.h2"
282+ #line 98 "cpp2taylor.h2"
254283 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
255284 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) = get (k, v0) - CPP2_UFCS (get)(o, k, o0);
256285 }
257286}
258287
259- #line 85 "cpp2taylor.h2"
288+ #line 102 "cpp2taylor.h2"
260289 return r;
261290 }
262291
263- #line 88 "cpp2taylor.h2"
292+ #line 105 "cpp2taylor.h2"
264293 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::mul(cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor{
265294 taylor r {};
266295{
267296auto k{1 };
268297
269- #line 92 "cpp2taylor.h2"
298+ #line 109 "cpp2taylor.h2"
270299 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
271300{
272301auto j{0 };
273302
274- #line 94 "cpp2taylor.h2"
303+ #line 111 "cpp2taylor.h2"
275304 for ( ; cpp2::impl::cmp_less_eq (j,k); j += 1 ) {
276305 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) += get (j, v0) * o.get (k - j, o0);
277306 }
278307}
279- #line 97 "cpp2taylor.h2"
308+ #line 114 "cpp2taylor.h2"
280309 }
281310}
282- #line 98 "cpp2taylor.h2"
311+ #line 115 "cpp2taylor.h2"
283312 return r;
284313 }
285314
286- #line 101 "cpp2taylor.h2"
315+ #line 118 "cpp2taylor.h2"
287316 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::div(cpp2::impl::in<taylor> o, cpp2::impl::in<R> v0, cpp2::impl::in<R> o0) const & -> taylor{
288317 taylor r {};
289318 R r0 {v0 / CPP2_ASSERT_NOT_ZERO (CPP2_TYPEOF (v0),o0)};
@@ -292,26 +321,26 @@ auto j{0};
292321{
293322auto k{1 };
294323
295- #line 108 "cpp2taylor.h2"
324+ #line 125 "cpp2taylor.h2"
296325 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
297326 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) = get (k, v0);
298327{
299328auto j{0 };
300329
301- #line 111 "cpp2taylor.h2"
330+ #line 128 "cpp2taylor.h2"
302331 for ( ; cpp2::impl::cmp_less (j,k); j += 1 ) {
303332 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) -= CPP2_UFCS (get)(r, j, r0) * o.get (k - j, o0);
304333 }
305334}
306- #line 114 "cpp2taylor.h2"
335+ #line 131 "cpp2taylor.h2"
307336 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) *= factor;
308337 }
309338}
310- #line 116 "cpp2taylor.h2"
339+ #line 133 "cpp2taylor.h2"
311340 return r;
312341 }
313342
314- #line 119 "cpp2taylor.h2"
343+ #line 136 "cpp2taylor.h2"
315344 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::sqrt(cpp2::impl::in<R> v0) const & -> taylor{
316345 taylor r {};
317346 R r0 {std::sqrt (v0)};
@@ -320,27 +349,27 @@ auto j{0};
320349{
321350auto k{1 };
322351
323- #line 126 "cpp2taylor.h2"
352+ #line 143 "cpp2taylor.h2"
324353 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
325354 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) = get (k, v0);
326355{
327356auto j{1 };
328357
329- #line 129 "cpp2taylor.h2"
358+ #line 146 "cpp2taylor.h2"
330359 for ( ; cpp2::impl::cmp_less (j,k); j += 1 ) {
331360 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) -= r.get (j, r0) * r.get (k - j, r0);
332361 }
333362}
334- #line 132 "cpp2taylor.h2"
363+ #line 149 "cpp2taylor.h2"
335364 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) *= factor;
336365 }
337366}
338367
339- #line 135 "cpp2taylor.h2"
368+ #line 152 "cpp2taylor.h2"
340369 return r;
341370 }
342371
343- #line 138 "cpp2taylor.h2"
372+ #line 155 "cpp2taylor.h2"
344373 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::log(cpp2::impl::in<R> v0) const & -> taylor{
345374 taylor r {};
346375 R r0 {std::log (v0)};
@@ -349,27 +378,27 @@ auto j{1};
349378{
350379auto k{1 };
351380
352- #line 145 "cpp2taylor.h2"
381+ #line 162 "cpp2taylor.h2"
353382 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
354383 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) = k * get (k, v0);
355384{
356385auto j{1 };
357386
358- #line 148 "cpp2taylor.h2"
387+ #line 165 "cpp2taylor.h2"
359388 for ( ; cpp2::impl::cmp_less (j,k); j += 1 ) {
360389 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) -= j * get (k - j, v0) * r.get (j, r0);
361390 }
362391}
363- #line 151 "cpp2taylor.h2"
392+ #line 168 "cpp2taylor.h2"
364393 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) *= factor / CPP2_ASSERT_NOT_ZERO (CPP2_TYPEOF (factor),k);
365394 }
366395}
367396
368- #line 154 "cpp2taylor.h2"
397+ #line 171 "cpp2taylor.h2"
369398 return r;
370399 }
371400
372- #line 157 "cpp2taylor.h2"
401+ #line 174 "cpp2taylor.h2"
373402 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::exp(cpp2::impl::in<R> v0) const & -> taylor{
374403 taylor r {};
375404 R r0 {std::exp (v0)};
@@ -378,52 +407,52 @@ auto j{1};
378407{
379408auto k{1 };
380409
381- #line 164 "cpp2taylor.h2"
410+ #line 181 "cpp2taylor.h2"
382411 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
383412{
384413auto j{1 };
385414
386- #line 166 "cpp2taylor.h2"
415+ #line 183 "cpp2taylor.h2"
387416 for ( ; cpp2::impl::cmp_less_eq (j,k); j += 1 ) {
388417 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) += j * r.get (k - j, r0) * get (j, v0);
389418 }
390419}
391- #line 169 "cpp2taylor.h2"
420+ #line 186 "cpp2taylor.h2"
392421 CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 ) /= CPP2_ASSERT_NOT_ZERO (CPP2_TYPEOF (CPP2_ASSERT_IN_BOUNDS (r.v , k - 1 )),k);
393422 }
394423}
395424
396- #line 172 "cpp2taylor.h2"
425+ #line 189 "cpp2taylor.h2"
397426 return r;
398427 }
399428
400- #line 176 "cpp2taylor.h2"
429+ #line 193 "cpp2taylor.h2"
401430 template <typename R, int dim> auto taylor<R,dim>::comp_sin_cos(taylor& s, taylor& c, cpp2::impl::in<taylor> u, cpp2::impl::in<R> u0) -> void {
402431 R s0 {std::sin (u0)};
403432 R c0 {std::cos (u0)};
404433{
405434auto k{1 };
406435
407- #line 181 "cpp2taylor.h2"
436+ #line 198 "cpp2taylor.h2"
408437 for ( ; cpp2::impl::cmp_less_eq (k,dim); k += 1 ) {
409438{
410439auto j{1 };
411440
412- #line 183 "cpp2taylor.h2"
441+ #line 200 "cpp2taylor.h2"
413442 for ( ; cpp2::impl::cmp_less_eq (j,k); j += 1 ) {
414443 CPP2_ASSERT_IN_BOUNDS (s.v , k - 1 ) += j * u.get (j, u0) * CPP2_UFCS (get)(c, k - j, c0);
415444 CPP2_ASSERT_IN_BOUNDS (c.v , k - 1 ) -= j * u.get (j, u0) * CPP2_UFCS (get)(s, k - j, s0);
416445 }
417446}
418- #line 187 "cpp2taylor.h2"
447+ #line 204 "cpp2taylor.h2"
419448 CPP2_ASSERT_IN_BOUNDS (s.v , k - 1 ) /= CPP2_ASSERT_NOT_ZERO (CPP2_TYPEOF (CPP2_ASSERT_IN_BOUNDS (s.v , k - 1 )),k);
420449 CPP2_ASSERT_IN_BOUNDS (c.v , k - 1 ) /= CPP2_ASSERT_NOT_ZERO (CPP2_TYPEOF (CPP2_ASSERT_IN_BOUNDS (c.v , k - 1 )),k);
421450 }
422451}
423- #line 190 "cpp2taylor.h2"
452+ #line 207 "cpp2taylor.h2"
424453 }
425454
426- #line 193 "cpp2taylor.h2"
455+ #line 210 "cpp2taylor.h2"
427456 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::sin(cpp2::impl::in<R> v0) const & -> taylor{
428457 taylor t {};
429458 taylor r {};
@@ -434,7 +463,7 @@ auto j{1};
434463 return r;
435464 }
436465
437- #line 203 "cpp2taylor.h2"
466+ #line 220 "cpp2taylor.h2"
438467 template <typename R, int dim> [[nodiscard]] auto taylor<R,dim>::cos(cpp2::impl::in<R> v0) const & -> taylor{
439468 taylor t {};
440469 taylor r {};
@@ -445,18 +474,18 @@ auto j{1};
445474 return r;
446475 }
447476
448- #line 214 "cpp2taylor.h2"
477+ #line 231 "cpp2taylor.h2"
449478template <typename R, int order> [[nodiscard]] auto to_string (taylor<R,order> const & o) -> std::string{
450479 std::string r {" (" };
451480{
452481auto i{1 };
453482
454- #line 217 "cpp2taylor.h2"
483+ #line 234 "cpp2taylor.h2"
455484 for ( ; cpp2::impl::cmp_less_eq (i,order); i += 1 ) {
456485 r += " " + cpp2::to_string (CPP2_ASSERT_IN_BOUNDS (o, i)) + " " ;
457486 }
458487}
459- #line 220 "cpp2taylor.h2"
488+ #line 237 "cpp2taylor.h2"
460489 r += " )" ;
461490
462491 return r;
0 commit comments