cppcolormap v1.4.5
Loading...
Searching...
No Matches
cppcolormap.h
Go to the documentation of this file.
1
7#ifndef CPPCOLORMAP_H
8#define CPPCOLORMAP_H
9
13#define Q(x) #x
14#define QUOTE(x) Q(x)
15
16#define CPPCOLORMAP_ASSERT_IMPL(expr, file, line) \
17 if (!(expr)) { \
18 throw std::runtime_error( \
19 std::string(file) + ':' + std::to_string(line) + ": assertion failed (" #expr ") \n\t" \
20 ); \
21 }
43#ifdef CPPCOLORMAP_ENABLE_ASSERT
44#define CPPCOLORMAP_ASSERT(expr) CPPCOLORMAP_ASSERT_IMPL(expr, __FILE__, __LINE__)
45#else
46#define CPPCOLORMAP_ASSERT(expr)
47#endif
48
69#ifndef CPPCOLORMAP_VERSION
70#define CPPCOLORMAP_VERSION "@PROJECT_VERSION@"
71#endif
72
76// use "M_PI" from "math.h"
77#define _USE_MATH_DEFINES
82#include <cfloat>
83#include <iostream>
84#include <math.h>
85#include <sstream>
86#include <string>
87#include <vector>
88#include <xtensor/xarray.hpp>
89#include <xtensor/xmanipulation.hpp>
90#include <xtensor/xmath.hpp>
91#include <xtensor/xsort.hpp>
92#include <xtensor/xtensor.hpp>
93#include <xtensor/xview.hpp>
94
95namespace cppcolormap {
96
100namespace array_type {
101
102#ifdef CPPCOLORMAP_USE_XTENSOR_PYTHON
103
107template <typename T, size_t N>
108using tensor = xt::pytensor<T, N>;
109
110#else
111
115template <typename T, size_t N>
116using tensor = xt::xtensor<T, N>;
117
118#endif
119
120} // namespace array_type
121
122namespace detail {
123
124inline std::string unquote(const std::string& arg)
125{
126 std::string ret = arg;
127 ret.erase(std::remove(ret.begin(), ret.end(), '\"'), ret.end());
128 return ret;
129}
130
131} // namespace detail
132
137inline std::string version()
138{
139 return detail::unquote(std::string(QUOTE(CPPCOLORMAP_VERSION)));
140}
141
152inline std::vector<std::string> version_dependencies()
153{
154 std::vector<std::string> ret;
155
156 ret.push_back("cppcolormap=" + version());
157
158 ret.push_back(
159 "xtensor=" + detail::unquote(std::string(QUOTE(XTENSOR_VERSION_MAJOR))) + "." +
160 detail::unquote(std::string(QUOTE(XTENSOR_VERSION_MINOR))) + "." +
161 detail::unquote(std::string(QUOTE(XTENSOR_VERSION_PATCH)))
162 );
163
164 return ret;
165}
166
167namespace detail {
168
177std::string rgb2hex(size_t r, size_t g, size_t b)
178{
179 std::stringstream ss;
180 ss << "#" << std::hex << (r << 16 | g << 8 | b);
181 return ss.str();
182}
183
190array_type::tensor<size_t, 1> hex2rgb(std::string hex)
191{
192 if (hex.at(0) == '#') {
193 hex.erase(0, 1);
194 }
195
196 while (hex.length() != 6) {
197 hex += "0";
198 }
199
200 array_type::tensor<size_t, 1> rgb = xt::empty<size_t>({size_t(3)});
201
202 size_t h = (size_t)std::stol(&hex[0], nullptr, 16);
203
204 rgb(0) = h >> 16;
205 rgb(1) = h >> 8 & 0xFF;
206 rgb(2) = h & 0xFF;
207
208 return rgb;
209}
210
211} // namespace detail
212
219template <class T, typename std::enable_if_t<xt::get_rank<T>::value != 1, int> = 0>
220std::vector<std::string> rgb2hex(const T& arg)
221{
222 CPPCOLORMAP_ASSERT(arg.dimension() == 2);
223 CPPCOLORMAP_ASSERT(arg.shape(1) == 3);
224 CPPCOLORMAP_ASSERT(xt::all(arg >= 0.0 && arg <= 1.0));
225
226 std::vector<std::string> ret;
227
228 for (size_t i = 0; i < arg.shape(0); ++i) {
229 ret.push_back(detail::rgb2hex(
230 static_cast<size_t>(arg(i, 0) * 255.0),
231 static_cast<size_t>(arg(i, 1) * 255.0),
232 static_cast<size_t>(arg(i, 2) * 255.0)
233 ));
234 }
235
236 return ret;
237}
238
245template <class T, typename std::enable_if_t<xt::get_rank<T>::value == 1, int> = 0>
246std::string rgb2hex(const T& arg)
247{
248 CPPCOLORMAP_ASSERT(arg.size() == 3);
249 CPPCOLORMAP_ASSERT(xt::all(arg >= 0.0 && arg <= 1.0));
250
251 return detail::rgb2hex(
252 static_cast<size_t>(arg(0) * 255.0),
253 static_cast<size_t>(arg(1) * 255.0),
254 static_cast<size_t>(arg(2) * 255.0)
255 );
256}
257
264array_type::tensor<double, 2> hex2rgb(const std::vector<std::string>& arg)
265{
266 array_type::tensor<double, 2> out = xt::empty<double>({arg.size(), size_t(3)});
267
268 for (size_t i = 0; i < arg.size(); ++i) {
269 xt::view(out, i, xt::all()) = detail::hex2rgb(arg[i]);
270 }
271
272 return out / 255.0;
273}
274
281array_type::tensor<double, 1> hex2rgb(const std::string& arg)
282{
283 return detail::hex2rgb(arg) / 255.0;
284}
285
293template <class T, class R = array_type::tensor<double, 2>>
294inline R interp(const T& arg, size_t N)
295{
296 CPPCOLORMAP_ASSERT(arg.dimension() == 2);
297 using size_type = typename T::shape_type::value_type;
298 size_type n = static_cast<size_type>(N);
299 size_type m = static_cast<size_type>(arg.shape(1));
300
301 if (n == arg.shape(0)) {
302 return arg;
303 }
304
305 R ret = xt::empty<typename R::value_type>({n, m});
306
307 array_type::tensor<double, 1> x = xt::linspace(0.0, 1.0, arg.shape(0));
308 array_type::tensor<double, 1> xi = xt::linspace(0.0, 1.0, n);
309
310 for (size_t j = 0; j < arg.shape(1); j++) {
311 auto c = xt::view(arg, xt::all(), j);
312 auto ci = xt::view(ret, xt::all(), j);
313 ci = xt::interp(xi, x, c);
314 }
315
316 return ret;
317}
318
319namespace detail {
320
321template <class D, class C, typename V, class R>
322inline void as_colors_func(const D& data, const C& colors, V vmin, V vmax, R& ret)
323{
324 CPPCOLORMAP_ASSERT(vmax > vmin);
325 CPPCOLORMAP_ASSERT(colors.shape(0) > 0);
326 CPPCOLORMAP_ASSERT(colors.dimension() == 2);
327
328 auto d = xt::eval((data - vmin) / (vmax - vmin));
329 d = xt::where(data < vmin, 0, d);
330 d = xt::where(data > vmax, 1, d);
331 auto index = xt::eval(xt::cast<size_t>(d * (colors.shape(0) - 1)));
332 size_t stride = colors.shape(1);
333
334 for (size_t i = 0; i < data.size(); ++i) {
335 size_t j = index.flat(i);
336 std::copy(&colors.flat(j * stride), &colors.flat((j + 1) * stride), &ret.flat(i * stride));
337 }
338}
339
340template <class E, typename = void>
341struct as_colors_impl {
342 template <class C, typename S>
343 static xt::xarray<typename C::value_type> run(const E& data, const C& colors, S vmin, S vmax)
344 {
345 size_t N = data.dimension();
346 std::vector<size_t> shape(N + 1);
347 std::copy(data.shape().cbegin(), data.shape().cend(), shape.begin());
348 shape[N] = colors.shape(1);
349 xt::xarray<typename C::value_type> ret(shape);
350 as_colors_func(data, colors, vmin, vmax, ret);
351 return ret;
352 }
353};
354
355template <class E>
356struct as_colors_impl<E, typename xt::has_fixed_rank_t<E>> {
357 using value_type = typename E::value_type;
358 constexpr static size_t N = xt::get_rank<E>::value;
359
360 template <class C, typename S>
362 run(const E& data, const C& colors, S vmin, S vmax)
363 {
364 std::array<size_t, N + 1> shape;
365 std::copy(data.shape().cbegin(), data.shape().cend(), shape.begin());
366 shape[N] = colors.shape(1);
368 as_colors_func(data, colors, vmin, vmax, ret);
369 return ret;
370 }
371};
372} // namespace detail
373
382template <class E, class C, typename S>
383inline auto as_colors(const E& data, const C& colors, S vmin, S vmax)
384{
385 return detail::as_colors_impl<E>::run(data, colors, vmin, vmax);
386}
387
394template <class E, class C>
395inline auto as_colors(const E& data, const C& colors)
396{
397 return detail::as_colors_impl<E>::run(data, colors, xt::amin(data)(), xt::amax(data)());
398}
399
407{
408 // clang-format off
410 {127, 201, 127},
411 {190, 174, 212},
412 {253, 192, 134},
413 {255, 255, 153},
414 { 56, 108, 176},
415 {240, 2, 127},
416 {191, 91, 23},
417 {102, 102, 102},
418 };
419 // clang-format on
420
421 return interp(data / 255.0, N);
422}
423
431{
432 // clang-format off
434 { 27, 158, 119},
435 {217, 95, 2},
436 {117, 112, 179},
437 {231, 41, 138},
438 {102, 166, 30},
439 {230, 171, 2},
440 {166, 118, 29},
441 {102, 102, 102},
442 };
443 // clang-format on
444
445 return interp(data / 255.0, N);
446}
447
455{
456 // clang-format off
458 {166, 206, 227},
459 { 31, 120, 180},
460 {178, 223, 138},
461 { 51, 160, 44},
462 {251, 154, 153},
463 {227, 26, 28},
464 {253, 191, 111},
465 {255, 127, 0},
466 {202, 178, 214},
467 {106, 61, 154},
468 {255, 255, 153},
469 {177, 89, 40},
470 };
471 // clang-format on
472
473 return interp(data / 255.0, N);
474}
475
483{
484 // clang-format off
486 {158, 1, 66},
487 {213, 62, 79},
488 {244, 109, 67},
489 {253, 174, 97},
490 {254, 224, 139},
491 {255, 255, 191},
492 {230, 245, 152},
493 {171, 221, 164},
494 {102, 194, 165},
495 { 50, 136, 189},
496 { 94, 79, 162},
497 };
498 // clang-format on
499
500 return interp(data / 255.0, N);
501}
502
510{
511 // clang-format off
513 {251, 180, 174},
514 {179, 205, 227},
515 {204, 235, 197},
516 {222, 203, 228},
517 {254, 217, 166},
518 {255, 255, 204},
519 {229, 216, 189},
520 {253, 218, 236},
521 {242, 242, 242},
522 };
523 // clang-format on
524
525 return interp(data / 255.0, N);
526}
527
535{
536 // clang-format off
538 {179, 226, 205},
539 {253, 205, 172},
540 {203, 213, 232},
541 {244, 202, 228},
542 {230, 245, 201},
543 {255, 242, 174},
544 {241, 226, 204},
545 {204, 204, 204},
546 };
547 // clang-format on
548
549 return interp(data / 255.0, N);
550}
551
559{
560 // clang-format off
562 {228, 26, 28},
563 { 55, 126, 184},
564 { 77, 175, 74},
565 {152, 78, 163},
566 {255, 127, 0},
567 {255, 255, 51},
568 {166, 86, 40},
569 {247, 129, 191},
570 {153, 153, 153},
571 };
572 // clang-format on
573
574 return interp(data / 255.0, N);
575}
576
584{
585 // clang-format off
587 {102, 194, 165},
588 {252, 141, 98},
589 {141, 160, 203},
590 {231, 138, 195},
591 {166, 216, 84},
592 {255, 217, 47},
593 {229, 196, 148},
594 {179, 179, 179},
595 };
596 // clang-format on
597
598 return interp(data / 255.0, N);
599}
600
608{
609 // clang-format off
611 {141, 211, 199},
612 {255, 255, 179},
613 {190, 186, 218},
614 {251, 128, 114},
615 {128, 177, 211},
616 {253, 180, 98},
617 {179, 222, 105},
618 {252, 205, 229},
619 {217, 217, 217},
620 {188, 128, 189},
621 {204, 235, 197},
622 {255, 237, 111},
623 };
624 // clang-format on
625
626 return interp(data / 255.0, N);
627}
628
636{
637 // clang-format off
639 {247, 251, 255},
640 {222, 235, 247},
641 {198, 219, 239},
642 {158, 202, 225},
643 {107, 174, 214},
644 { 66, 146, 198},
645 { 33, 113, 181},
646 { 8, 81, 156},
647 { 8, 48, 107},
648 };
649 // clang-format on
650
651 return interp(data / 255.0, N);
652}
653
661{
662 // clang-format off
664 {247, 252, 245},
665 {229, 245, 224},
666 {199, 233, 192},
667 {161, 217, 155},
668 {116, 196, 118},
669 { 65, 171, 93},
670 { 35, 139, 69},
671 { 0, 109, 44},
672 { 0, 68, 27},
673 };
674 // clang-format on
675
676 return interp(data / 255.0, N);
677}
678
686{
687 // clang-format off
689 {255, 255, 255},
690 { 0, 0, 0},
691 };
692 // clang-format on
693
694 return interp(data / 255.0, N);
695}
696
704{
705 // clang-format off
707 {255, 245, 235},
708 {254, 230, 206},
709 {253, 208, 162},
710 {253, 174, 107},
711 {253, 141, 60},
712 {241, 105, 19},
713 {217, 72, 1},
714 {166, 54, 3},
715 {127, 39, 4},
716 };
717 // clang-format on
718
719 return interp(data / 255.0, N);
720}
721
729{
730 // clang-format off
732 {252, 251, 253},
733 {239, 237, 245},
734 {218, 218, 235},
735 {188, 189, 220},
736 {158, 154, 200},
737 {128, 125, 186},
738 {106, 81, 163},
739 { 84, 39, 143},
740 { 63, 0, 125},
741 };
742 // clang-format on
743
744 return interp(data / 255.0, N);
745}
746
754{
755 // clang-format off
757 {255, 245, 240},
758 {254, 224, 210},
759 {252, 187, 161},
760 {252, 146, 114},
761 {251, 106, 74},
762 {239, 59, 44},
763 {203, 24, 29},
764 {165, 15, 21},
765 {103, 0, 13},
766 };
767 // clang-format on
768
769 return interp(data / 255.0, N);
770}
771
779{
780 // clang-format off
782 {247, 252, 253},
783 {224, 236, 244},
784 {191, 211, 230},
785 {158, 188, 218},
786 {140, 150, 198},
787 {140, 107, 177},
788 {136, 65, 157},
789 {129, 15, 124},
790 { 77, 0, 75},
791 };
792 // clang-format on
793
794 return interp(data / 255.0, N);
795}
796
804{
805 // clang-format off
807 {247, 252, 240},
808 {224, 243, 219},
809 {204, 235, 197},
810 {168, 221, 181},
811 {123, 204, 196},
812 { 78, 179, 211},
813 { 43, 140, 190},
814 { 8, 104, 172},
815 { 8, 64, 129},
816 };
817 // clang-format on
818
819 return interp(data / 255.0, N);
820}
821
829{
830 // clang-format off
832 {255, 247, 251},
833 {236, 231, 242},
834 {208, 209, 230},
835 {166, 189, 219},
836 {116, 169, 207},
837 { 54, 144, 192},
838 { 5, 112, 176},
839 { 4, 90, 141},
840 { 2, 56, 88},
841 };
842 // clang-format on
843
844 return interp(data / 255.0, N);
845}
846
854{
855 // clang-format off
857 {255, 247, 251},
858 {236, 226, 240},
859 {208, 209, 230},
860 {166, 189, 219},
861 {103, 169, 207},
862 { 54, 144, 192},
863 { 2, 129, 138},
864 { 1, 108, 89},
865 { 1, 70, 54},
866 };
867 // clang-format on
868
869 return interp(data / 255.0, N);
870}
871
879{
880 // clang-format off
882 {247, 244, 249},
883 {231, 225, 239},
884 {212, 185, 218},
885 {201, 148, 199},
886 {223, 101, 176},
887 {231, 41, 138},
888 {206, 18, 86},
889 {152, 0, 67},
890 {103, 0, 31},
891 };
892 // clang-format on
893
894 return interp(data / 255.0, N);
895}
896
904{
905 // clang-format off
907 {255, 247, 243},
908 {253, 224, 221},
909 {252, 197, 192},
910 {250, 159, 181},
911 {247, 104, 161},
912 {221, 52, 151},
913 {174, 1, 126},
914 {122, 1, 119},
915 { 73, 0, 106},
916 };
917 // clang-format on
918
919 return interp(data / 255.0, N);
920}
921
929{
930 // clang-format off
932 {255, 247, 236},
933 {254, 232, 200},
934 {253, 212, 158},
935 {253, 187, 132},
936 {252, 141, 89},
937 {239, 101, 72},
938 {215, 48, 31},
939 {179, 0, 0},
940 {127, 0, 0},
941 };
942 // clang-format on
943
944 return interp(data / 255.0, N);
945}
946
954{
955 // clang-format off
957 {128, 0 , 38 },
958 {189, 0 , 38 },
959 {227, 26 , 28 },
960 {252, 78 , 42 },
961 {253, 141, 60 },
962 {254, 178, 76 },
963 {254, 217, 118},
964 {255, 237, 160},
965 {255, 255, 204},
966 };
967 // clang-format on
968
969 return interp(data / 255.0, N);
970}
971
979{
980 // clang-format off
982 {255, 255, 229},
983 {247, 252, 185},
984 {217, 240, 163},
985 {173, 221, 142},
986 {120, 198, 121},
987 { 65, 171, 93},
988 { 35, 132, 67},
989 { 0, 104, 55},
990 { 0, 69, 41},
991 };
992 // clang-format on
993
994 return interp(data / 255.0, N);
995}
996
1004{
1005 // clang-format off
1007 {255, 255, 217},
1008 {237, 248, 177},
1009 {199, 233, 180},
1010 {127, 205, 187},
1011 { 65, 182, 196},
1012 { 29, 145, 192},
1013 { 34, 94, 168},
1014 { 37, 52, 148},
1015 { 8, 29, 88},
1016 };
1017 // clang-format on
1018
1019 return interp(data / 255.0, N);
1020}
1021
1029{
1030 // clang-format off
1032 {255, 255, 204},
1033 {255, 237, 160},
1034 {254, 217, 118},
1035 {254, 178, 76},
1036 {253, 141, 60},
1037 {252, 78, 42},
1038 {227, 26, 28},
1039 {189, 0, 38},
1040 {128, 0, 38},
1041 };
1042 // clang-format on
1043
1044 return interp(data / 255.0, N);
1045}
1046
1054{
1055 // clang-format off
1057 { 84, 48, 5},
1058 {140, 81, 10},
1059 {191, 129, 45},
1060 {223, 194, 125},
1061 {246, 232, 195},
1062 {245, 245, 245},
1063 {199, 234, 229},
1064 {128, 205, 193},
1065 { 53, 151, 143},
1066 { 1, 102, 94},
1067 { 0, 60, 48},
1068 };
1069 // clang-format on
1070
1071 return interp(data / 255.0, N);
1072}
1073
1081{
1082 // clang-format off
1084 {127, 59, 8},
1085 {179, 88, 6},
1086 {224, 130, 20},
1087 {253, 184, 99},
1088 {254, 224, 182},
1089 {247, 247, 247},
1090 {216, 218, 235},
1091 {178, 171, 210},
1092 {128, 115, 172},
1093 { 84, 39, 136},
1094 { 45, 0, 75},
1095 };
1096 // clang-format on
1097
1098 return interp(data / 255.0, N);
1099}
1100
1108{
1109 // clang-format off
1111 {103, 0, 31},
1112 {178, 24, 43},
1113 {214, 96, 77},
1114 {244, 165, 130},
1115 {253, 219, 199},
1116 {247, 247, 247},
1117 {209, 229, 240},
1118 {146, 197, 222},
1119 { 67, 147, 195},
1120 { 33, 102, 172},
1121 { 5, 48, 97},
1122 };
1123 // clang-format on
1124
1125 return interp(data / 255.0, N);
1126}
1127
1135{
1136 // clang-format off
1138 {103, 0, 31},
1139 {178, 24, 43},
1140 {214, 96, 77},
1141 {244, 165, 130},
1142 {253, 219, 199},
1143 {255, 255, 255},
1144 {224, 224, 224},
1145 {186, 186, 186},
1146 {135, 135, 135},
1147 { 77, 77, 77},
1148 { 26, 26, 26},
1149 };
1150 // clang-format on
1151
1152 return interp(data / 255.0, N);
1153}
1154
1162{
1163 // clang-format off
1165 {165, 0, 38},
1166 {215, 48, 39},
1167 {244, 109, 67},
1168 {253, 174, 97},
1169 {254, 224, 144},
1170 {255, 255, 191},
1171 {224, 243, 248},
1172 {171, 217, 233},
1173 {116, 173, 209},
1174 { 69, 117, 180},
1175 { 49, 54, 149},
1176 };
1177 // clang-format on
1178
1179 return interp(data / 255.0, N);
1180}
1181
1189{
1190 // clang-format off
1192 {165, 0, 38},
1193 {215, 48, 39},
1194 {244, 109, 67},
1195 {253, 174, 97},
1196 {254, 224, 139},
1197 {255, 255, 191},
1198 {217, 239, 139},
1199 {166, 217, 106},
1200 {102, 189, 99},
1201 { 26, 152, 80},
1202 { 0, 104, 55},
1203 };
1204 // clang-format on
1205
1206 return interp(data / 255.0, N);
1207}
1208
1216{
1217 // clang-format off
1219 {142, 1, 82},
1220 {197, 27, 125},
1221 {222, 119, 174},
1222 {241, 182, 218},
1223 {253, 224, 239},
1224 {247, 247, 247},
1225 {230, 245, 208},
1226 {184, 225, 134},
1227 {127, 188, 65},
1228 { 77, 146, 33},
1229 { 39, 100, 25},
1230 };
1231 // clang-format on
1232
1233 return interp(data / 255.0, N);
1234}
1235
1243{
1244 // clang-format off
1246 { 64, 0, 75},
1247 {118, 42, 131},
1248 {153, 112, 171},
1249 {194, 165, 207},
1250 {231, 212, 232},
1251 {247, 247, 247},
1252 {217, 240, 211},
1253 {166, 219, 160},
1254 { 90, 174, 97},
1255 { 27, 120, 55},
1256 { 0, 68, 27},
1257 };
1258 // clang-format on
1259
1260 return interp(data / 255.0, N);
1261}
1262
1263namespace detail {
1264
1266from_anchor_color(size_t N, const array_type::tensor<double, 2>& x)
1267{
1268 size_t n = x.shape(0);
1269 array_type::tensor<size_t, 1> idx = xt::view(x, xt::all(), 0) * (double)N;
1270 idx(0) = 0;
1271 idx(n - 1) = N;
1272
1273 array_type::tensor<double, 1> ret = xt::empty<double>({N});
1274
1275 for (size_t i = 0; i < n - 1; ++i) {
1276 xt::view(ret, xt::range(idx(i), idx(i + 1))) =
1277 x(i, 2) + (x(i + 1, 1) - x(i, 2)) * xt::linspace<double>(0.0, 1.0, idx(i + 1) - idx(i));
1278 }
1279
1280 return ret;
1281}
1282
1283inline array_type::tensor<double, 2> from_anchor(
1284 size_t N,
1288)
1289{
1290 using return_type = array_type::tensor<double, 2>;
1291 using shape_type = return_type::shape_type::value_type;
1292 std::array<shape_type, 2> shape = {static_cast<shape_type>(N), 3};
1293 return_type ret(shape);
1294 xt::view(ret, xt::all(), 0) = from_anchor_color(N, r);
1295 xt::view(ret, xt::all(), 1) = from_anchor_color(N, g);
1296 xt::view(ret, xt::all(), 2) = from_anchor_color(N, b);
1297 return ret;
1298}
1299
1300} // namespace detail
1301
1309{
1310 // clang-format off
1312 {0.0, 1.0, 1.0},
1313 {1.0, 1.0, 1.0}};
1314
1316 {0.0, 0.0, 0.0},
1317 {1.0, 1.0, 1.0}};
1318
1320 {0.0, 1.0, 1.0},
1321 {1.0, 0.0, 0.0}};
1322 // clang-format on
1323
1324 return detail::from_anchor(N, r, g, b);
1325}
1326
1334{
1335 // clang-format off
1337 {0.0, 0.0, 0.0},
1338 {1.0, 1.0, 1.0}};
1339
1341 {0.0, 0.5, 0.5},
1342 {1.0, 1.0, 1.0}};
1343
1345 {0.0, 0.4, 0.4},
1346 {1.0, 0.4, 0.4}};
1347 // clang-format on
1348
1349 return detail::from_anchor(N, r, g, b);
1350}
1351
1359{
1360 // clang-format off
1362 {0.0, 1.0, 1.0},
1363 {1.0, 1.0, 1.0}};
1364
1366 {0.0, 0.0, 0.0},
1367 {1.0, 1.0, 1.0}};
1368
1370 {0.0, 0.0, 0.0},
1371 {1.0, 0.0, 0.0}};
1372 // clang-format on
1373
1374 return detail::from_anchor(N, r, g, b);
1375}
1376
1384{
1385 // clang-format off
1387 {0.0, 0.0, 0.0},
1388 {1.0, 0.0, 0.0}};
1389
1391 {0.0, 0.0, 0.0},
1392 {1.0, 1.0, 1.0}};
1393
1395 {0.0, 1.0, 1.0},
1396 {1.0, 0.5, 0.5}};
1397 // clang-format on
1398
1399 return detail::from_anchor(N, r, g, b);
1400}
1401
1409{
1410 // clang-format off
1412 {0.0, 0.0, 0.0},
1413 {0.746032, 0.652778, 0.652778},
1414 {1.0, 1.0, 1.0}};
1415
1417 {0.0, 0.0, 0.0},
1418 {0.365079, 0.319444, 0.319444},
1419 {0.746032, 0.777778, 0.777778},
1420 {1.0, 1.0, 1.0}};
1421
1423 {0.0, 0.0, 0.0},
1424 {0.365079, 0.444444, 0.444444},
1425 {1.0, 1.0, 1.0}};
1426 // clang-format on
1427
1428 return detail::from_anchor(N, r, g, b);
1429}
1430
1438{
1439 // clang-format off
1441 {0.0, 0.0, 0.0},
1442 {1.0, 1.0, 1.0}};
1443
1445 {0.0, 1.0, 1.0},
1446 {1.0, 0.0, 0.0}};
1447
1449 {0.0, 1.0, 1.0},
1450 {1.0, 1.0, 1.0}};
1451 // clang-format on
1452
1453 return detail::from_anchor(N, r, g, b);
1454}
1455
1463{
1464 // clang-format off
1466 {0.0, 0.0416, 0.0416},
1467 {0.365079, 1.000000, 1.000000},
1468 {1.0, 1.0, 1.0}};
1469
1471 {0.0, 0.0, 0.0},
1472 {0.365079, 0.000000, 0.000000},
1473 {0.746032, 1.000000, 1.000000},
1474 {1.0, 1.0, 1.0}};
1475
1477 {0.0, 0.0, 0.0},
1478 {0.746032, 0.000000, 0.000000},
1479 {1.0, 1.0, 1.0}};
1480 // clang-format on
1481
1482 return detail::from_anchor(N, r, g, b);
1483}
1484
1492{
1493 // clang-format off
1495 {0.0, 0.0, 0.0},
1496 {0.809524, 1.000000, 1.000000},
1497 {1.0, 1.0, 1.0}};
1498
1500 {0.0, 0.0, 0.0},
1501 {1.0, 0.7812, 0.7812}};
1502
1504 {0.0, 0.0, 0.0},
1505 {1.0, 0.4975, 0.4975}};
1506 // clang-format on
1507
1508 return detail::from_anchor(N, r, g, b);
1509}
1510
1518{
1519 // clang-format off
1521 {0.0, 1.0, 1.0},
1522 {0.158730, 1.000000, 1.000000},
1523 {0.174603, 0.968750, 0.968750},
1524 {0.333333, 0.031250, 0.031250},
1525 {0.349206, 0.000000, 0.000000},
1526 {0.666667, 0.000000, 0.000000},
1527 {0.682540, 0.031250, 0.031250},
1528 {0.841270, 0.968750, 0.968750},
1529 {0.857143, 1.000000, 1.000000},
1530 {1.0, 1.0, 1.0}};
1531
1533 {0.0, 0.0, 0.0},
1534 {0.158730, 0.937500, 0.937500},
1535 {0.174603, 1.000000, 1.000000},
1536 {0.507937, 1.000000, 1.000000},
1537 {0.666667, 0.062500, 0.062500},
1538 {0.682540, 0.000000, 0.000000},
1539 {1.0, 0.0, 0.0}};
1540
1542 {0.0, 0.0, 0.0},
1543 {0.333333, 0.000000, 0.000000},
1544 {0.349206, 0.062500, 0.062500},
1545 {0.507937, 1.000000, 1.000000},
1546 {0.841270, 1.000000, 1.000000},
1547 {0.857143, 0.937500, 0.937500},
1548 {1.0, 0.09375, 0.09375}};
1549 // clang-format on
1550
1551 return detail::from_anchor(N, r, g, b);
1552}
1553
1561{
1562 // clang-format off
1564 {0.0, 0.0, 0.0},
1565 {0.05, 0.4667, 0.4667},
1566 {0.10, 0.5333, 0.5333},
1567 {0.15, 0.0, 0.0},
1568 {0.20, 0.0, 0.0},
1569 {0.25, 0.0, 0.0},
1570 {0.30, 0.0, 0.0},
1571 {0.35, 0.0, 0.0},
1572 {0.40, 0.0, 0.0},
1573 {0.45, 0.0, 0.0},
1574 {0.50, 0.0, 0.0},
1575 {0.55, 0.0, 0.0},
1576 {0.60, 0.0, 0.0},
1577 {0.65, 0.7333, 0.7333},
1578 {0.70, 0.9333, 0.9333},
1579 {0.75, 1.0, 1.0},
1580 {0.80, 1.0, 1.0},
1581 {0.85, 1.0, 1.0},
1582 {0.90, 0.8667, 0.8667},
1583 {0.95, 0.80, 0.80},
1584 {1.0, 0.80, 0.80}};
1585
1587 {0.0, 0.0, 0.0},
1588 {0.05, 0.0, 0.0},
1589 {0.10, 0.0, 0.0},
1590 {0.15, 0.0, 0.0},
1591 {0.20, 0.0, 0.0},
1592 {0.25, 0.4667, 0.4667},
1593 {0.30, 0.6000, 0.6000},
1594 {0.35, 0.6667, 0.6667},
1595 {0.40, 0.6667, 0.6667},
1596 {0.45, 0.6000, 0.6000},
1597 {0.50, 0.7333, 0.7333},
1598 {0.55, 0.8667, 0.8667},
1599 {0.60, 1.0, 1.0},
1600 {0.65, 1.0, 1.0},
1601 {0.70, 0.9333, 0.9333},
1602 {0.75, 0.8000, 0.8000},
1603 {0.80, 0.6000, 0.6000},
1604 {0.85, 0.0, 0.0},
1605 {0.90, 0.0, 0.0},
1606 {0.95, 0.0, 0.0},
1607 {1.0, 0.80, 0.80}};
1608
1610 {0.0, 0.0, 0.0},
1611 {0.05, 0.5333, 0.5333},
1612 {0.10, 0.6000, 0.6000},
1613 {0.15, 0.6667, 0.6667},
1614 {0.20, 0.8667, 0.8667},
1615 {0.25, 0.8667, 0.8667},
1616 {0.30, 0.8667, 0.8667},
1617 {0.35, 0.6667, 0.6667},
1618 {0.40, 0.5333, 0.5333},
1619 {0.45, 0.0, 0.0},
1620 {0.5, 0.0, 0.0},
1621 {0.55, 0.0, 0.0},
1622 {0.60, 0.0, 0.0},
1623 {0.65, 0.0, 0.0},
1624 {0.70, 0.0, 0.0},
1625 {0.75, 0.0, 0.0},
1626 {0.80, 0.0, 0.0},
1627 {0.85, 0.0, 0.0},
1628 {0.90, 0.0, 0.0},
1629 {0.95, 0.0, 0.0},
1630 {1.0, 0.80, 0.80}};
1631 // clang-format on
1632
1633 return detail::from_anchor(N, r, g, b);
1634}
1635
1643{
1644 // clang-format off
1646 {0.00, 0.0, 0.0},
1647 {0.35, 0.0, 0.0},
1648 {0.66, 1.0, 1.0},
1649 {0.89, 1.0, 1.0},
1650 {1.00, 0.5, 0.5}};
1651
1653 {0.000, 0.0, 0.0},
1654 {0.125, 0.0, 0.0},
1655 {0.375, 1.0, 1.0},
1656 {0.640, 1.0, 1.0},
1657 {0.910, 0.0, 0.0},
1658 {1.000, 0.0, 0.0}};
1659
1661 {0.00, 0.5, 0.5},
1662 {0.11, 1.0, 1.0},
1663 {0.34, 1.0, 1.0},
1664 {0.65, 0.0, 0.0},
1665 {1.00, 0.0, 0.0}};
1666 // clang-format on
1667
1668 return detail::from_anchor(N, r, g, b);
1669}
1670
1671namespace detail {
1672
1673inline array_type::tensor<double, 2> from_fraction(size_t N, const array_type::tensor<double, 2>& x)
1674{
1675 size_t n = x.shape(0);
1676 array_type::tensor<size_t, 1> idx = xt::view(x, xt::all(), 0) * (double)N;
1677 idx(0) = 0;
1678 idx(n - 1) = N;
1679
1680 array_type::tensor<double, 2> ret = xt::empty<double>({N, (size_t)3});
1681
1682 for (size_t i = 0; i < n - 1; ++i) {
1683 for (size_t j = 0; j < 3; ++j) {
1684 xt::view(ret, xt::range(idx(i), idx(i + 1)), j) =
1685 x(i, j + 1) + (x(i + 1, j + 1) - x(i, j + 1)) *
1686 xt::linspace<double>(0.0, 1.0, idx(i + 1) - idx(i));
1687 }
1688 }
1689
1690 return ret;
1691}
1692
1693} // namespace detail
1694
1702{
1704 {0.00, 0.2, 0.2, 0.6},
1705 {0.15, 0.0, 0.6, 1.0},
1706 {0.25, 0.0, 0.8, 0.4},
1707 {0.50, 1.0, 1.0, 0.6},
1708 {0.75, 0.5, 0.36, 0.33},
1709 {1.00, 1.0, 1.0, 1.0}
1710 };
1711
1712 return detail::from_fraction(N, data);
1713}
1714
1715namespace detail {
1716// Gnuplot palette functions
1718{
1719 return xt::zeros_like(x);
1720}
1721
1723{
1724 return 0.5 * xt::ones_like(x);
1725}
1726
1728{
1729 return xt::ones_like(x);
1730}
1731
1733{
1734 return x;
1735}
1736
1738{
1739 return xt::pow(x, 2.0);
1740}
1741
1743{
1744 return xt::pow(x, 3.0);
1745}
1746
1748{
1749 return xt::pow(x, 4.0);
1750}
1751
1753{
1754 return xt::sqrt(x);
1755}
1756
1758{
1759 return xt::sqrt(xt::sqrt(x));
1760}
1761
1763{
1764 return xt::sin(x * M_PI * 0.5);
1765}
1766
1768{
1769 return xt::cos(x * M_PI * 0.5);
1770}
1771
1773{
1774 return xt::abs(x - 0.5);
1775}
1776
1778{
1779 return xt::pow(2.0 * x - 1.0, 2.0);
1780}
1781
1783{
1784 return xt::sin(x * M_PI);
1785}
1786
1788{
1789 return xt::abs(xt::cos(x * M_PI));
1790}
1791
1793{
1794 return xt::sin(x * 2.0 * M_PI);
1795}
1796
1798{
1799 return xt::cos(x * 2.0 * M_PI);
1800}
1801
1803{
1804 return xt::abs(xt::sin(x * 2.0 * M_PI));
1805}
1806
1808{
1809 return xt::abs(xt::cos(x * 2.0 * M_PI));
1810}
1811
1813{
1814 return xt::abs(xt::sin(x * 4.0 * M_PI));
1815}
1816
1818{
1819 return xt::abs(xt::cos(x * 4.0 * M_PI));
1820}
1821
1823{
1824 return 3.0 * x;
1825}
1826
1828{
1829 return 3.0 * x - 1.0;
1830}
1831
1833{
1834 return 3.0 * x - 2.0;
1835}
1836
1838{
1839 return xt::abs(3.0 * x - 1.0);
1840}
1841
1843{
1844 return xt::abs(3.0 * x - 2.0);
1845}
1846
1848{
1849 return (3.0 * x - 1.0) * 0.5;
1850}
1851
1853{
1854 return (3.0 * x - 2.0) * 0.5;
1855}
1856
1858{
1859 return xt::abs((3.0 * x - 1.0) * 0.5);
1860}
1861
1863{
1864 return xt::abs((3.0 * x - 2.0) * 0.5);
1865}
1866
1868{
1869 return x / 0.32 - 0.78125;
1870}
1871
1873{
1874 return 2.0 * x - 0.84;
1875}
1876
1878{
1879 auto ret = xt::zeros_like(x);
1880 ret = xt::where(xt::less(x, 0.25), 4.0 * x, ret);
1881 ret = xt::where(xt::greater_equal(x, 0.25) && xt::less(x, 0.92), -2.0 * x + 1.84, ret);
1882 ret = xt::where(xt::greater_equal(x, 0.92), x / 0.08 - 11.5, ret);
1883 return ret;
1884}
1885
1887{
1888 return xt::abs(2.0 * x - 0.5);
1889}
1890
1892{
1893 return 2.0 * x;
1894}
1895
1897{
1898 return 2.0 * x - 0.5;
1899}
1900
1902{
1903 return 2.0 * x - 1.0;
1904}
1905
1906inline array_type::tensor<double, 1> gnu_palette(size_t i, const array_type::tensor<double, 1>& x)
1907{
1909
1910 if (i == 0) {
1911 ret = _g0(x);
1912 }
1913 else if (i == 1) {
1914 ret = _g1(x);
1915 }
1916 else if (i == 2) {
1917 ret = _g2(x);
1918 }
1919 else if (i == 3) {
1920 ret = _g3(x);
1921 }
1922 else if (i == 4) {
1923 ret = _g4(x);
1924 }
1925 else if (i == 5) {
1926 ret = _g5(x);
1927 }
1928 else if (i == 6) {
1929 ret = _g6(x);
1930 }
1931 else if (i == 7) {
1932 ret = _g7(x);
1933 }
1934 else if (i == 8) {
1935 ret = _g8(x);
1936 }
1937 else if (i == 9) {
1938 ret = _g9(x);
1939 }
1940 else if (i == 10) {
1941 ret = _g10(x);
1942 }
1943 else if (i == 11) {
1944 ret = _g11(x);
1945 }
1946 else if (i == 12) {
1947 ret = _g12(x);
1948 }
1949 else if (i == 13) {
1950 ret = _g13(x);
1951 }
1952 else if (i == 14) {
1953 ret = _g14(x);
1954 }
1955 else if (i == 15) {
1956 ret = _g15(x);
1957 }
1958 else if (i == 16) {
1959 ret = _g16(x);
1960 }
1961 else if (i == 17) {
1962 ret = _g17(x);
1963 }
1964 else if (i == 18) {
1965 ret = _g18(x);
1966 }
1967 else if (i == 19) {
1968 ret = _g19(x);
1969 }
1970 else if (i == 20) {
1971 ret = _g20(x);
1972 }
1973 else if (i == 21) {
1974 ret = _g21(x);
1975 }
1976 else if (i == 22) {
1977 ret = _g22(x);
1978 }
1979 else if (i == 23) {
1980 ret = _g23(x);
1981 }
1982 else if (i == 24) {
1983 ret = _g24(x);
1984 }
1985 else if (i == 25) {
1986 ret = _g25(x);
1987 }
1988 else if (i == 26) {
1989 ret = _g26(x);
1990 }
1991 else if (i == 27) {
1992 ret = _g27(x);
1993 }
1994 else if (i == 28) {
1995 ret = _g28(x);
1996 }
1997 else if (i == 29) {
1998 ret = _g29(x);
1999 }
2000 else if (i == 30) {
2001 ret = _g30(x);
2002 }
2003 else if (i == 31) {
2004 ret = _g31(x);
2005 }
2006 else if (i == 32) {
2007 ret = _g32(x);
2008 }
2009 else if (i == 33) {
2010 ret = _g33(x);
2011 }
2012 else if (i == 34) {
2013 ret = _g34(x);
2014 }
2015 else if (i == 35) {
2016 ret = _g35(x);
2017 }
2018 else if (i == 36) {
2019 ret = _g36(x);
2020 }
2021 else {
2022 throw std::runtime_error("gnu_palette out-of-bounds");
2023 }
2024
2025 ret = xt::where(xt::greater(ret, 1.0), 1.0, ret);
2026 ret = xt::where(xt::less(ret, 0.0), 0.0, ret);
2027
2028 return ret;
2029}
2030
2031} // namespace detail
2032
2040{
2041 std::array<size_t, 2> shape = {N, 3};
2042 array_type::tensor<double, 2> data = xt::empty<double>(shape);
2043 array_type::tensor<double, 1> x = xt::linspace<double>(0.0, 1.0, N);
2044 xt::view(data, xt::all(), 0) = detail::gnu_palette(34, x);
2045 xt::view(data, xt::all(), 1) = detail::gnu_palette(35, x);
2046 xt::view(data, xt::all(), 2) = detail::gnu_palette(36, x);
2047 return data;
2048}
2049
2057{
2058 // clang-format off
2060 {0.001462, 0.000466, 0.013866},
2061 {0.002258, 0.001295, 0.018331},
2062 {0.003279, 0.002305, 0.023708},
2063 {0.004512, 0.003490, 0.029965},
2064 {0.005950, 0.004843, 0.037130},
2065 {0.007588, 0.006356, 0.044973},
2066 {0.009426, 0.008022, 0.052844},
2067 {0.011465, 0.009828, 0.060750},
2068 {0.013708, 0.011771, 0.068667},
2069 {0.016156, 0.013840, 0.076603},
2070 {0.018815, 0.016026, 0.084584},
2071 {0.021692, 0.018320, 0.092610},
2072 {0.024792, 0.020715, 0.100676},
2073 {0.028123, 0.023201, 0.108787},
2074 {0.031696, 0.025765, 0.116965},
2075 {0.035520, 0.028397, 0.125209},
2076 {0.039608, 0.031090, 0.133515},
2077 {0.043830, 0.033830, 0.141886},
2078 {0.048062, 0.036607, 0.150327},
2079 {0.052320, 0.039407, 0.158841},
2080 {0.056615, 0.042160, 0.167446},
2081 {0.060949, 0.044794, 0.176129},
2082 {0.065330, 0.047318, 0.184892},
2083 {0.069764, 0.049726, 0.193735},
2084 {0.074257, 0.052017, 0.202660},
2085 {0.078815, 0.054184, 0.211667},
2086 {0.083446, 0.056225, 0.220755},
2087 {0.088155, 0.058133, 0.229922},
2088 {0.092949, 0.059904, 0.239164},
2089 {0.097833, 0.061531, 0.248477},
2090 {0.102815, 0.063010, 0.257854},
2091 {0.107899, 0.064335, 0.267289},
2092 {0.113094, 0.065492, 0.276784},
2093 {0.118405, 0.066479, 0.286321},
2094 {0.123833, 0.067295, 0.295879},
2095 {0.129380, 0.067935, 0.305443},
2096 {0.135053, 0.068391, 0.315000},
2097 {0.140858, 0.068654, 0.324538},
2098 {0.146785, 0.068738, 0.334011},
2099 {0.152839, 0.068637, 0.343404},
2100 {0.159018, 0.068354, 0.352688},
2101 {0.165308, 0.067911, 0.361816},
2102 {0.171713, 0.067305, 0.370771},
2103 {0.178212, 0.066576, 0.379497},
2104 {0.184801, 0.065732, 0.387973},
2105 {0.191460, 0.064818, 0.396152},
2106 {0.198177, 0.063862, 0.404009},
2107 {0.204935, 0.062907, 0.411514},
2108 {0.211718, 0.061992, 0.418647},
2109 {0.218512, 0.061158, 0.425392},
2110 {0.225302, 0.060445, 0.431742},
2111 {0.232077, 0.059889, 0.437695},
2112 {0.238826, 0.059517, 0.443256},
2113 {0.245543, 0.059352, 0.448436},
2114 {0.252220, 0.059415, 0.453248},
2115 {0.258857, 0.059706, 0.457710},
2116 {0.265447, 0.060237, 0.461840},
2117 {0.271994, 0.060994, 0.465660},
2118 {0.278493, 0.061978, 0.469190},
2119 {0.284951, 0.063168, 0.472451},
2120 {0.291366, 0.064553, 0.475462},
2121 {0.297740, 0.066117, 0.478243},
2122 {0.304081, 0.067835, 0.480812},
2123 {0.310382, 0.069702, 0.483186},
2124 {0.316654, 0.071690, 0.485380},
2125 {0.322899, 0.073782, 0.487408},
2126 {0.329114, 0.075972, 0.489287},
2127 {0.335308, 0.078236, 0.491024},
2128 {0.341482, 0.080564, 0.492631},
2129 {0.347636, 0.082946, 0.494121},
2130 {0.353773, 0.085373, 0.495501},
2131 {0.359898, 0.087831, 0.496778},
2132 {0.366012, 0.090314, 0.497960},
2133 {0.372116, 0.092816, 0.499053},
2134 {0.378211, 0.095332, 0.500067},
2135 {0.384299, 0.097855, 0.501002},
2136 {0.390384, 0.100379, 0.501864},
2137 {0.396467, 0.102902, 0.502658},
2138 {0.402548, 0.105420, 0.503386},
2139 {0.408629, 0.107930, 0.504052},
2140 {0.414709, 0.110431, 0.504662},
2141 {0.420791, 0.112920, 0.505215},
2142 {0.426877, 0.115395, 0.505714},
2143 {0.432967, 0.117855, 0.506160},
2144 {0.439062, 0.120298, 0.506555},
2145 {0.445163, 0.122724, 0.506901},
2146 {0.451271, 0.125132, 0.507198},
2147 {0.457386, 0.127522, 0.507448},
2148 {0.463508, 0.129893, 0.507652},
2149 {0.469640, 0.132245, 0.507809},
2150 {0.475780, 0.134577, 0.507921},
2151 {0.481929, 0.136891, 0.507989},
2152 {0.488088, 0.139186, 0.508011},
2153 {0.494258, 0.141462, 0.507988},
2154 {0.500438, 0.143719, 0.507920},
2155 {0.506629, 0.145958, 0.507806},
2156 {0.512831, 0.148179, 0.507648},
2157 {0.519045, 0.150383, 0.507443},
2158 {0.525270, 0.152569, 0.507192},
2159 {0.531507, 0.154739, 0.506895},
2160 {0.537755, 0.156894, 0.506551},
2161 {0.544015, 0.159033, 0.506159},
2162 {0.550287, 0.161158, 0.505719},
2163 {0.556571, 0.163269, 0.505230},
2164 {0.562866, 0.165368, 0.504692},
2165 {0.569172, 0.167454, 0.504105},
2166 {0.575490, 0.169530, 0.503466},
2167 {0.581819, 0.171596, 0.502777},
2168 {0.588158, 0.173652, 0.502035},
2169 {0.594508, 0.175701, 0.501241},
2170 {0.600868, 0.177743, 0.500394},
2171 {0.607238, 0.179779, 0.499492},
2172 {0.613617, 0.181811, 0.498536},
2173 {0.620005, 0.183840, 0.497524},
2174 {0.626401, 0.185867, 0.496456},
2175 {0.632805, 0.187893, 0.495332},
2176 {0.639216, 0.189921, 0.494150},
2177 {0.645633, 0.191952, 0.492910},
2178 {0.652056, 0.193986, 0.491611},
2179 {0.658483, 0.196027, 0.490253},
2180 {0.664915, 0.198075, 0.488836},
2181 {0.671349, 0.200133, 0.487358},
2182 {0.677786, 0.202203, 0.485819},
2183 {0.684224, 0.204286, 0.484219},
2184 {0.690661, 0.206384, 0.482558},
2185 {0.697098, 0.208501, 0.480835},
2186 {0.703532, 0.210638, 0.479049},
2187 {0.709962, 0.212797, 0.477201},
2188 {0.716387, 0.214982, 0.475290},
2189 {0.722805, 0.217194, 0.473316},
2190 {0.729216, 0.219437, 0.471279},
2191 {0.735616, 0.221713, 0.469180},
2192 {0.742004, 0.224025, 0.467018},
2193 {0.748378, 0.226377, 0.464794},
2194 {0.754737, 0.228772, 0.462509},
2195 {0.761077, 0.231214, 0.460162},
2196 {0.767398, 0.233705, 0.457755},
2197 {0.773695, 0.236249, 0.455289},
2198 {0.779968, 0.238851, 0.452765},
2199 {0.786212, 0.241514, 0.450184},
2200 {0.792427, 0.244242, 0.447543},
2201 {0.798608, 0.247040, 0.444848},
2202 {0.804752, 0.249911, 0.442102},
2203 {0.810855, 0.252861, 0.439305},
2204 {0.816914, 0.255895, 0.436461},
2205 {0.822926, 0.259016, 0.433573},
2206 {0.828886, 0.262229, 0.430644},
2207 {0.834791, 0.265540, 0.427671},
2208 {0.840636, 0.268953, 0.424666},
2209 {0.846416, 0.272473, 0.421631},
2210 {0.852126, 0.276106, 0.418573},
2211 {0.857763, 0.279857, 0.415496},
2212 {0.863320, 0.283729, 0.412403},
2213 {0.868793, 0.287728, 0.409303},
2214 {0.874176, 0.291859, 0.406205},
2215 {0.879464, 0.296125, 0.403118},
2216 {0.884651, 0.300530, 0.400047},
2217 {0.889731, 0.305079, 0.397002},
2218 {0.894700, 0.309773, 0.393995},
2219 {0.899552, 0.314616, 0.391037},
2220 {0.904281, 0.319610, 0.388137},
2221 {0.908884, 0.324755, 0.385308},
2222 {0.913354, 0.330052, 0.382563},
2223 {0.917689, 0.335500, 0.379915},
2224 {0.921884, 0.341098, 0.377376},
2225 {0.925937, 0.346844, 0.374959},
2226 {0.929845, 0.352734, 0.372677},
2227 {0.933606, 0.358764, 0.370541},
2228 {0.937221, 0.364929, 0.368567},
2229 {0.940687, 0.371224, 0.366762},
2230 {0.944006, 0.377643, 0.365136},
2231 {0.947180, 0.384178, 0.363701},
2232 {0.950210, 0.390820, 0.362468},
2233 {0.953099, 0.397563, 0.361438},
2234 {0.955849, 0.404400, 0.360619},
2235 {0.958464, 0.411324, 0.360014},
2236 {0.960949, 0.418323, 0.359630},
2237 {0.963310, 0.425390, 0.359469},
2238 {0.965549, 0.432519, 0.359529},
2239 {0.967671, 0.439703, 0.359810},
2240 {0.969680, 0.446936, 0.360311},
2241 {0.971582, 0.454210, 0.361030},
2242 {0.973381, 0.461520, 0.361965},
2243 {0.975082, 0.468861, 0.363111},
2244 {0.976690, 0.476226, 0.364466},
2245 {0.978210, 0.483612, 0.366025},
2246 {0.979645, 0.491014, 0.367783},
2247 {0.981000, 0.498428, 0.369734},
2248 {0.982279, 0.505851, 0.371874},
2249 {0.983485, 0.513280, 0.374198},
2250 {0.984622, 0.520713, 0.376698},
2251 {0.985693, 0.528148, 0.379371},
2252 {0.986700, 0.535582, 0.382210},
2253 {0.987646, 0.543015, 0.385210},
2254 {0.988533, 0.550446, 0.388365},
2255 {0.989363, 0.557873, 0.391671},
2256 {0.990138, 0.565296, 0.395122},
2257 {0.990871, 0.572706, 0.398714},
2258 {0.991558, 0.580107, 0.402441},
2259 {0.992196, 0.587502, 0.406299},
2260 {0.992785, 0.594891, 0.410283},
2261 {0.993326, 0.602275, 0.414390},
2262 {0.993834, 0.609644, 0.418613},
2263 {0.994309, 0.616999, 0.422950},
2264 {0.994738, 0.624350, 0.427397},
2265 {0.995122, 0.631696, 0.431951},
2266 {0.995480, 0.639027, 0.436607},
2267 {0.995810, 0.646344, 0.441361},
2268 {0.996096, 0.653659, 0.446213},
2269 {0.996341, 0.660969, 0.451160},
2270 {0.996580, 0.668256, 0.456192},
2271 {0.996775, 0.675541, 0.461314},
2272 {0.996925, 0.682828, 0.466526},
2273 {0.997077, 0.690088, 0.471811},
2274 {0.997186, 0.697349, 0.477182},
2275 {0.997254, 0.704611, 0.482635},
2276 {0.997325, 0.711848, 0.488154},
2277 {0.997351, 0.719089, 0.493755},
2278 {0.997351, 0.726324, 0.499428},
2279 {0.997341, 0.733545, 0.505167},
2280 {0.997285, 0.740772, 0.510983},
2281 {0.997228, 0.747981, 0.516859},
2282 {0.997138, 0.755190, 0.522806},
2283 {0.997019, 0.762398, 0.528821},
2284 {0.996898, 0.769591, 0.534892},
2285 {0.996727, 0.776795, 0.541039},
2286 {0.996571, 0.783977, 0.547233},
2287 {0.996369, 0.791167, 0.553499},
2288 {0.996162, 0.798348, 0.559820},
2289 {0.995932, 0.805527, 0.566202},
2290 {0.995680, 0.812706, 0.572645},
2291 {0.995424, 0.819875, 0.579140},
2292 {0.995131, 0.827052, 0.585701},
2293 {0.994851, 0.834213, 0.592307},
2294 {0.994524, 0.841387, 0.598983},
2295 {0.994222, 0.848540, 0.605696},
2296 {0.993866, 0.855711, 0.612482},
2297 {0.993545, 0.862859, 0.619299},
2298 {0.993170, 0.870024, 0.626189},
2299 {0.992831, 0.877168, 0.633109},
2300 {0.992440, 0.884330, 0.640099},
2301 {0.992089, 0.891470, 0.647116},
2302 {0.991688, 0.898627, 0.654202},
2303 {0.991332, 0.905763, 0.661309},
2304 {0.990930, 0.912915, 0.668481},
2305 {0.990570, 0.920049, 0.675675},
2306 {0.990175, 0.927196, 0.682926},
2307 {0.989815, 0.934329, 0.690198},
2308 {0.989434, 0.941470, 0.697519},
2309 {0.989077, 0.948604, 0.704863},
2310 {0.988717, 0.955742, 0.712242},
2311 {0.988367, 0.962878, 0.719649},
2312 {0.988033, 0.970012, 0.727077},
2313 {0.987691, 0.977154, 0.734536},
2314 {0.987387, 0.984288, 0.742002},
2315 {0.987053, 0.991438, 0.749504},
2316 };
2317 // clang-format on
2318
2319 return interp(data, N);
2320}
2321
2329{
2330 // clang-format off
2332 {0.001462, 0.000466, 0.013866},
2333 {0.002267, 0.001270, 0.018570},
2334 {0.003299, 0.002249, 0.024239},
2335 {0.004547, 0.003392, 0.030909},
2336 {0.006006, 0.004692, 0.038558},
2337 {0.007676, 0.006136, 0.046836},
2338 {0.009561, 0.007713, 0.055143},
2339 {0.011663, 0.009417, 0.063460},
2340 {0.013995, 0.011225, 0.071862},
2341 {0.016561, 0.013136, 0.080282},
2342 {0.019373, 0.015133, 0.088767},
2343 {0.022447, 0.017199, 0.097327},
2344 {0.025793, 0.019331, 0.105930},
2345 {0.029432, 0.021503, 0.114621},
2346 {0.033385, 0.023702, 0.123397},
2347 {0.037668, 0.025921, 0.132232},
2348 {0.042253, 0.028139, 0.141141},
2349 {0.046915, 0.030324, 0.150164},
2350 {0.051644, 0.032474, 0.159254},
2351 {0.056449, 0.034569, 0.168414},
2352 {0.061340, 0.036590, 0.177642},
2353 {0.066331, 0.038504, 0.186962},
2354 {0.071429, 0.040294, 0.196354},
2355 {0.076637, 0.041905, 0.205799},
2356 {0.081962, 0.043328, 0.215289},
2357 {0.087411, 0.044556, 0.224813},
2358 {0.092990, 0.045583, 0.234358},
2359 {0.098702, 0.046402, 0.243904},
2360 {0.104551, 0.047008, 0.253430},
2361 {0.110536, 0.047399, 0.262912},
2362 {0.116656, 0.047574, 0.272321},
2363 {0.122908, 0.047536, 0.281624},
2364 {0.129285, 0.047293, 0.290788},
2365 {0.135778, 0.046856, 0.299776},
2366 {0.142378, 0.046242, 0.308553},
2367 {0.149073, 0.045468, 0.317085},
2368 {0.155850, 0.044559, 0.325338},
2369 {0.162689, 0.043554, 0.333277},
2370 {0.169575, 0.042489, 0.340874},
2371 {0.176493, 0.041402, 0.348111},
2372 {0.183429, 0.040329, 0.354971},
2373 {0.190367, 0.039309, 0.361447},
2374 {0.197297, 0.038400, 0.367535},
2375 {0.204209, 0.037632, 0.373238},
2376 {0.211095, 0.037030, 0.378563},
2377 {0.217949, 0.036615, 0.383522},
2378 {0.224763, 0.036405, 0.388129},
2379 {0.231538, 0.036405, 0.392400},
2380 {0.238273, 0.036621, 0.396353},
2381 {0.244967, 0.037055, 0.400007},
2382 {0.251620, 0.037705, 0.403378},
2383 {0.258234, 0.038571, 0.406485},
2384 {0.264810, 0.039647, 0.409345},
2385 {0.271347, 0.040922, 0.411976},
2386 {0.277850, 0.042353, 0.414392},
2387 {0.284321, 0.043933, 0.416608},
2388 {0.290763, 0.045644, 0.418637},
2389 {0.297178, 0.047470, 0.420491},
2390 {0.303568, 0.049396, 0.422182},
2391 {0.309935, 0.051407, 0.423721},
2392 {0.316282, 0.053490, 0.425116},
2393 {0.322610, 0.055634, 0.426377},
2394 {0.328921, 0.057827, 0.427511},
2395 {0.335217, 0.060060, 0.428524},
2396 {0.341500, 0.062325, 0.429425},
2397 {0.347771, 0.064616, 0.430217},
2398 {0.354032, 0.066925, 0.430906},
2399 {0.360284, 0.069247, 0.431497},
2400 {0.366529, 0.071579, 0.431994},
2401 {0.372768, 0.073915, 0.432400},
2402 {0.379001, 0.076253, 0.432719},
2403 {0.385228, 0.078591, 0.432955},
2404 {0.391453, 0.080927, 0.433109},
2405 {0.397674, 0.083257, 0.433183},
2406 {0.403894, 0.085580, 0.433179},
2407 {0.410113, 0.087896, 0.433098},
2408 {0.416331, 0.090203, 0.432943},
2409 {0.422549, 0.092501, 0.432714},
2410 {0.428768, 0.094790, 0.432412},
2411 {0.434987, 0.097069, 0.432039},
2412 {0.441207, 0.099338, 0.431594},
2413 {0.447428, 0.101597, 0.431080},
2414 {0.453651, 0.103848, 0.430498},
2415 {0.459875, 0.106089, 0.429846},
2416 {0.466100, 0.108322, 0.429125},
2417 {0.472328, 0.110547, 0.428334},
2418 {0.478558, 0.112764, 0.427475},
2419 {0.484789, 0.114974, 0.426548},
2420 {0.491022, 0.117179, 0.425552},
2421 {0.497257, 0.119379, 0.424488},
2422 {0.503493, 0.121575, 0.423356},
2423 {0.509730, 0.123769, 0.422156},
2424 {0.515967, 0.125960, 0.420887},
2425 {0.522206, 0.128150, 0.419549},
2426 {0.528444, 0.130341, 0.418142},
2427 {0.534683, 0.132534, 0.416667},
2428 {0.540920, 0.134729, 0.415123},
2429 {0.547157, 0.136929, 0.413511},
2430 {0.553392, 0.139134, 0.411829},
2431 {0.559624, 0.141346, 0.410078},
2432 {0.565854, 0.143567, 0.408258},
2433 {0.572081, 0.145797, 0.406369},
2434 {0.578304, 0.148039, 0.404411},
2435 {0.584521, 0.150294, 0.402385},
2436 {0.590734, 0.152563, 0.400290},
2437 {0.596940, 0.154848, 0.398125},
2438 {0.603139, 0.157151, 0.395891},
2439 {0.609330, 0.159474, 0.393589},
2440 {0.615513, 0.161817, 0.391219},
2441 {0.621685, 0.164184, 0.388781},
2442 {0.627847, 0.166575, 0.386276},
2443 {0.633998, 0.168992, 0.383704},
2444 {0.640135, 0.171438, 0.381065},
2445 {0.646260, 0.173914, 0.378359},
2446 {0.652369, 0.176421, 0.375586},
2447 {0.658463, 0.178962, 0.372748},
2448 {0.664540, 0.181539, 0.369846},
2449 {0.670599, 0.184153, 0.366879},
2450 {0.676638, 0.186807, 0.363849},
2451 {0.682656, 0.189501, 0.360757},
2452 {0.688653, 0.192239, 0.357603},
2453 {0.694627, 0.195021, 0.354388},
2454 {0.700576, 0.197851, 0.351113},
2455 {0.706500, 0.200728, 0.347777},
2456 {0.712396, 0.203656, 0.344383},
2457 {0.718264, 0.206636, 0.340931},
2458 {0.724103, 0.209670, 0.337424},
2459 {0.729909, 0.212759, 0.333861},
2460 {0.735683, 0.215906, 0.330245},
2461 {0.741423, 0.219112, 0.326576},
2462 {0.747127, 0.222378, 0.322856},
2463 {0.752794, 0.225706, 0.319085},
2464 {0.758422, 0.229097, 0.315266},
2465 {0.764010, 0.232554, 0.311399},
2466 {0.769556, 0.236077, 0.307485},
2467 {0.775059, 0.239667, 0.303526},
2468 {0.780517, 0.243327, 0.299523},
2469 {0.785929, 0.247056, 0.295477},
2470 {0.791293, 0.250856, 0.291390},
2471 {0.796607, 0.254728, 0.287264},
2472 {0.801871, 0.258674, 0.283099},
2473 {0.807082, 0.262692, 0.278898},
2474 {0.812239, 0.266786, 0.274661},
2475 {0.817341, 0.270954, 0.270390},
2476 {0.822386, 0.275197, 0.266085},
2477 {0.827372, 0.279517, 0.261750},
2478 {0.832299, 0.283913, 0.257383},
2479 {0.837165, 0.288385, 0.252988},
2480 {0.841969, 0.292933, 0.248564},
2481 {0.846709, 0.297559, 0.244113},
2482 {0.851384, 0.302260, 0.239636},
2483 {0.855992, 0.307038, 0.235133},
2484 {0.860533, 0.311892, 0.230606},
2485 {0.865006, 0.316822, 0.226055},
2486 {0.869409, 0.321827, 0.221482},
2487 {0.873741, 0.326906, 0.216886},
2488 {0.878001, 0.332060, 0.212268},
2489 {0.882188, 0.337287, 0.207628},
2490 {0.886302, 0.342586, 0.202968},
2491 {0.890341, 0.347957, 0.198286},
2492 {0.894305, 0.353399, 0.193584},
2493 {0.898192, 0.358911, 0.188860},
2494 {0.902003, 0.364492, 0.184116},
2495 {0.905735, 0.370140, 0.179350},
2496 {0.909390, 0.375856, 0.174563},
2497 {0.912966, 0.381636, 0.169755},
2498 {0.916462, 0.387481, 0.164924},
2499 {0.919879, 0.393389, 0.160070},
2500 {0.923215, 0.399359, 0.155193},
2501 {0.926470, 0.405389, 0.150292},
2502 {0.929644, 0.411479, 0.145367},
2503 {0.932737, 0.417627, 0.140417},
2504 {0.935747, 0.423831, 0.135440},
2505 {0.938675, 0.430091, 0.130438},
2506 {0.941521, 0.436405, 0.125409},
2507 {0.944285, 0.442772, 0.120354},
2508 {0.946965, 0.449191, 0.115272},
2509 {0.949562, 0.455660, 0.110164},
2510 {0.952075, 0.462178, 0.105031},
2511 {0.954506, 0.468744, 0.099874},
2512 {0.956852, 0.475356, 0.094695},
2513 {0.959114, 0.482014, 0.089499},
2514 {0.961293, 0.488716, 0.084289},
2515 {0.963387, 0.495462, 0.079073},
2516 {0.965397, 0.502249, 0.073859},
2517 {0.967322, 0.509078, 0.068659},
2518 {0.969163, 0.515946, 0.063488},
2519 {0.970919, 0.522853, 0.058367},
2520 {0.972590, 0.529798, 0.053324},
2521 {0.974176, 0.536780, 0.048392},
2522 {0.975677, 0.543798, 0.043618},
2523 {0.977092, 0.550850, 0.039050},
2524 {0.978422, 0.557937, 0.034931},
2525 {0.979666, 0.565057, 0.031409},
2526 {0.980824, 0.572209, 0.028508},
2527 {0.981895, 0.579392, 0.026250},
2528 {0.982881, 0.586606, 0.024661},
2529 {0.983779, 0.593849, 0.023770},
2530 {0.984591, 0.601122, 0.023606},
2531 {0.985315, 0.608422, 0.024202},
2532 {0.985952, 0.615750, 0.025592},
2533 {0.986502, 0.623105, 0.027814},
2534 {0.986964, 0.630485, 0.030908},
2535 {0.987337, 0.637890, 0.034916},
2536 {0.987622, 0.645320, 0.039886},
2537 {0.987819, 0.652773, 0.045581},
2538 {0.987926, 0.660250, 0.051750},
2539 {0.987945, 0.667748, 0.058329},
2540 {0.987874, 0.675267, 0.065257},
2541 {0.987714, 0.682807, 0.072489},
2542 {0.987464, 0.690366, 0.079990},
2543 {0.987124, 0.697944, 0.087731},
2544 {0.986694, 0.705540, 0.095694},
2545 {0.986175, 0.713153, 0.103863},
2546 {0.985566, 0.720782, 0.112229},
2547 {0.984865, 0.728427, 0.120785},
2548 {0.984075, 0.736087, 0.129527},
2549 {0.983196, 0.743758, 0.138453},
2550 {0.982228, 0.751442, 0.147565},
2551 {0.981173, 0.759135, 0.156863},
2552 {0.980032, 0.766837, 0.166353},
2553 {0.978806, 0.774545, 0.176037},
2554 {0.977497, 0.782258, 0.185923},
2555 {0.976108, 0.789974, 0.196018},
2556 {0.974638, 0.797692, 0.206332},
2557 {0.973088, 0.805409, 0.216877},
2558 {0.971468, 0.813122, 0.227658},
2559 {0.969783, 0.820825, 0.238686},
2560 {0.968041, 0.828515, 0.249972},
2561 {0.966243, 0.836191, 0.261534},
2562 {0.964394, 0.843848, 0.273391},
2563 {0.962517, 0.851476, 0.285546},
2564 {0.960626, 0.859069, 0.298010},
2565 {0.958720, 0.866624, 0.310820},
2566 {0.956834, 0.874129, 0.323974},
2567 {0.954997, 0.881569, 0.337475},
2568 {0.953215, 0.888942, 0.351369},
2569 {0.951546, 0.896226, 0.365627},
2570 {0.950018, 0.903409, 0.380271},
2571 {0.948683, 0.910473, 0.395289},
2572 {0.947594, 0.917399, 0.410665},
2573 {0.946809, 0.924168, 0.426373},
2574 {0.946392, 0.930761, 0.442367},
2575 {0.946403, 0.937159, 0.458592},
2576 {0.946903, 0.943348, 0.474970},
2577 {0.947937, 0.949318, 0.491426},
2578 {0.949545, 0.955063, 0.507860},
2579 {0.951740, 0.960587, 0.524203},
2580 {0.954529, 0.965896, 0.540361},
2581 {0.957896, 0.971003, 0.556275},
2582 {0.961812, 0.975924, 0.571925},
2583 {0.966249, 0.980678, 0.587206},
2584 {0.971162, 0.985282, 0.602154},
2585 {0.976511, 0.989753, 0.616760},
2586 {0.982257, 0.994109, 0.631017},
2587 {0.988362, 0.998364, 0.644924},
2588 };
2589 // clang-format on
2590
2591 return interp(data, N);
2592}
2593
2601{
2602 // clang-format off
2604 {0.050383, 0.029803, 0.527975},
2605 {0.063536, 0.028426, 0.533124},
2606 {0.075353, 0.027206, 0.538007},
2607 {0.086222, 0.026125, 0.542658},
2608 {0.096379, 0.025165, 0.547103},
2609 {0.105980, 0.024309, 0.551368},
2610 {0.115124, 0.023556, 0.555468},
2611 {0.123903, 0.022878, 0.559423},
2612 {0.132381, 0.022258, 0.563250},
2613 {0.140603, 0.021687, 0.566959},
2614 {0.148607, 0.021154, 0.570562},
2615 {0.156421, 0.020651, 0.574065},
2616 {0.164070, 0.020171, 0.577478},
2617 {0.171574, 0.019706, 0.580806},
2618 {0.178950, 0.019252, 0.584054},
2619 {0.186213, 0.018803, 0.587228},
2620 {0.193374, 0.018354, 0.590330},
2621 {0.200445, 0.017902, 0.593364},
2622 {0.207435, 0.017442, 0.596333},
2623 {0.214350, 0.016973, 0.599239},
2624 {0.221197, 0.016497, 0.602083},
2625 {0.227983, 0.016007, 0.604867},
2626 {0.234715, 0.015502, 0.607592},
2627 {0.241396, 0.014979, 0.610259},
2628 {0.248032, 0.014439, 0.612868},
2629 {0.254627, 0.013882, 0.615419},
2630 {0.261183, 0.013308, 0.617911},
2631 {0.267703, 0.012716, 0.620346},
2632 {0.274191, 0.012109, 0.622722},
2633 {0.280648, 0.011488, 0.625038},
2634 {0.287076, 0.010855, 0.627295},
2635 {0.293478, 0.010213, 0.629490},
2636 {0.299855, 0.009561, 0.631624},
2637 {0.306210, 0.008902, 0.633694},
2638 {0.312543, 0.008239, 0.635700},
2639 {0.318856, 0.007576, 0.637640},
2640 {0.325150, 0.006915, 0.639512},
2641 {0.331426, 0.006261, 0.641316},
2642 {0.337683, 0.005618, 0.643049},
2643 {0.343925, 0.004991, 0.644710},
2644 {0.350150, 0.004382, 0.646298},
2645 {0.356359, 0.003798, 0.647810},
2646 {0.362553, 0.003243, 0.649245},
2647 {0.368733, 0.002724, 0.650601},
2648 {0.374897, 0.002245, 0.651876},
2649 {0.381047, 0.001814, 0.653068},
2650 {0.387183, 0.001434, 0.654177},
2651 {0.393304, 0.001114, 0.655199},
2652 {0.399411, 0.000859, 0.656133},
2653 {0.405503, 0.000678, 0.656977},
2654 {0.411580, 0.000577, 0.657730},
2655 {0.417642, 0.000564, 0.658390},
2656 {0.423689, 0.000646, 0.658956},
2657 {0.429719, 0.000831, 0.659425},
2658 {0.435734, 0.001127, 0.659797},
2659 {0.441732, 0.001540, 0.660069},
2660 {0.447714, 0.002080, 0.660240},
2661 {0.453677, 0.002755, 0.660310},
2662 {0.459623, 0.003574, 0.660277},
2663 {0.465550, 0.004545, 0.660139},
2664 {0.471457, 0.005678, 0.659897},
2665 {0.477344, 0.006980, 0.659549},
2666 {0.483210, 0.008460, 0.659095},
2667 {0.489055, 0.010127, 0.658534},
2668 {0.494877, 0.011990, 0.657865},
2669 {0.500678, 0.014055, 0.657088},
2670 {0.506454, 0.016333, 0.656202},
2671 {0.512206, 0.018833, 0.655209},
2672 {0.517933, 0.021563, 0.654109},
2673 {0.523633, 0.024532, 0.652901},
2674 {0.529306, 0.027747, 0.651586},
2675 {0.534952, 0.031217, 0.650165},
2676 {0.540570, 0.034950, 0.648640},
2677 {0.546157, 0.038954, 0.647010},
2678 {0.551715, 0.043136, 0.645277},
2679 {0.557243, 0.047331, 0.643443},
2680 {0.562738, 0.051545, 0.641509},
2681 {0.568201, 0.055778, 0.639477},
2682 {0.573632, 0.060028, 0.637349},
2683 {0.579029, 0.064296, 0.635126},
2684 {0.584391, 0.068579, 0.632812},
2685 {0.589719, 0.072878, 0.630408},
2686 {0.595011, 0.077190, 0.627917},
2687 {0.600266, 0.081516, 0.625342},
2688 {0.605485, 0.085854, 0.622686},
2689 {0.610667, 0.090204, 0.619951},
2690 {0.615812, 0.094564, 0.617140},
2691 {0.620919, 0.098934, 0.614257},
2692 {0.625987, 0.103312, 0.611305},
2693 {0.631017, 0.107699, 0.608287},
2694 {0.636008, 0.112092, 0.605205},
2695 {0.640959, 0.116492, 0.602065},
2696 {0.645872, 0.120898, 0.598867},
2697 {0.650746, 0.125309, 0.595617},
2698 {0.655580, 0.129725, 0.592317},
2699 {0.660374, 0.134144, 0.588971},
2700 {0.665129, 0.138566, 0.585582},
2701 {0.669845, 0.142992, 0.582154},
2702 {0.674522, 0.147419, 0.578688},
2703 {0.679160, 0.151848, 0.575189},
2704 {0.683758, 0.156278, 0.571660},
2705 {0.688318, 0.160709, 0.568103},
2706 {0.692840, 0.165141, 0.564522},
2707 {0.697324, 0.169573, 0.560919},
2708 {0.701769, 0.174005, 0.557296},
2709 {0.706178, 0.178437, 0.553657},
2710 {0.710549, 0.182868, 0.550004},
2711 {0.714883, 0.187299, 0.546338},
2712 {0.719181, 0.191729, 0.542663},
2713 {0.723444, 0.196158, 0.538981},
2714 {0.727670, 0.200586, 0.535293},
2715 {0.731862, 0.205013, 0.531601},
2716 {0.736019, 0.209439, 0.527908},
2717 {0.740143, 0.213864, 0.524216},
2718 {0.744232, 0.218288, 0.520524},
2719 {0.748289, 0.222711, 0.516834},
2720 {0.752312, 0.227133, 0.513149},
2721 {0.756304, 0.231555, 0.509468},
2722 {0.760264, 0.235976, 0.505794},
2723 {0.764193, 0.240396, 0.502126},
2724 {0.768090, 0.244817, 0.498465},
2725 {0.771958, 0.249237, 0.494813},
2726 {0.775796, 0.253658, 0.491171},
2727 {0.779604, 0.258078, 0.487539},
2728 {0.783383, 0.262500, 0.483918},
2729 {0.787133, 0.266922, 0.480307},
2730 {0.790855, 0.271345, 0.476706},
2731 {0.794549, 0.275770, 0.473117},
2732 {0.798216, 0.280197, 0.469538},
2733 {0.801855, 0.284626, 0.465971},
2734 {0.805467, 0.289057, 0.462415},
2735 {0.809052, 0.293491, 0.458870},
2736 {0.812612, 0.297928, 0.455338},
2737 {0.816144, 0.302368, 0.451816},
2738 {0.819651, 0.306812, 0.448306},
2739 {0.823132, 0.311261, 0.444806},
2740 {0.826588, 0.315714, 0.441316},
2741 {0.830018, 0.320172, 0.437836},
2742 {0.833422, 0.324635, 0.434366},
2743 {0.836801, 0.329105, 0.430905},
2744 {0.840155, 0.333580, 0.427455},
2745 {0.843484, 0.338062, 0.424013},
2746 {0.846788, 0.342551, 0.420579},
2747 {0.850066, 0.347048, 0.417153},
2748 {0.853319, 0.351553, 0.413734},
2749 {0.856547, 0.356066, 0.410322},
2750 {0.859750, 0.360588, 0.406917},
2751 {0.862927, 0.365119, 0.403519},
2752 {0.866078, 0.369660, 0.400126},
2753 {0.869203, 0.374212, 0.396738},
2754 {0.872303, 0.378774, 0.393355},
2755 {0.875376, 0.383347, 0.389976},
2756 {0.878423, 0.387932, 0.386600},
2757 {0.881443, 0.392529, 0.383229},
2758 {0.884436, 0.397139, 0.379860},
2759 {0.887402, 0.401762, 0.376494},
2760 {0.890340, 0.406398, 0.373130},
2761 {0.893250, 0.411048, 0.369768},
2762 {0.896131, 0.415712, 0.366407},
2763 {0.898984, 0.420392, 0.363047},
2764 {0.901807, 0.425087, 0.359688},
2765 {0.904601, 0.429797, 0.356329},
2766 {0.907365, 0.434524, 0.352970},
2767 {0.910098, 0.439268, 0.349610},
2768 {0.912800, 0.444029, 0.346251},
2769 {0.915471, 0.448807, 0.342890},
2770 {0.918109, 0.453603, 0.339529},
2771 {0.920714, 0.458417, 0.336166},
2772 {0.923287, 0.463251, 0.332801},
2773 {0.925825, 0.468103, 0.329435},
2774 {0.928329, 0.472975, 0.326067},
2775 {0.930798, 0.477867, 0.322697},
2776 {0.933232, 0.482780, 0.319325},
2777 {0.935630, 0.487712, 0.315952},
2778 {0.937990, 0.492667, 0.312575},
2779 {0.940313, 0.497642, 0.309197},
2780 {0.942598, 0.502639, 0.305816},
2781 {0.944844, 0.507658, 0.302433},
2782 {0.947051, 0.512699, 0.299049},
2783 {0.949217, 0.517763, 0.295662},
2784 {0.951344, 0.522850, 0.292275},
2785 {0.953428, 0.527960, 0.288883},
2786 {0.955470, 0.533093, 0.285490},
2787 {0.957469, 0.538250, 0.282096},
2788 {0.959424, 0.543431, 0.278701},
2789 {0.961336, 0.548636, 0.275305},
2790 {0.963203, 0.553865, 0.271909},
2791 {0.965024, 0.559118, 0.268513},
2792 {0.966798, 0.564396, 0.265118},
2793 {0.968526, 0.569700, 0.261721},
2794 {0.970205, 0.575028, 0.258325},
2795 {0.971835, 0.580382, 0.254931},
2796 {0.973416, 0.585761, 0.251540},
2797 {0.974947, 0.591165, 0.248151},
2798 {0.976428, 0.596595, 0.244767},
2799 {0.977856, 0.602051, 0.241387},
2800 {0.979233, 0.607532, 0.238013},
2801 {0.980556, 0.613039, 0.234646},
2802 {0.981826, 0.618572, 0.231287},
2803 {0.983041, 0.624131, 0.227937},
2804 {0.984199, 0.629718, 0.224595},
2805 {0.985301, 0.635330, 0.221265},
2806 {0.986345, 0.640969, 0.217948},
2807 {0.987332, 0.646633, 0.214648},
2808 {0.988260, 0.652325, 0.211364},
2809 {0.989128, 0.658043, 0.208100},
2810 {0.989935, 0.663787, 0.204859},
2811 {0.990681, 0.669558, 0.201642},
2812 {0.991365, 0.675355, 0.198453},
2813 {0.991985, 0.681179, 0.195295},
2814 {0.992541, 0.687030, 0.192170},
2815 {0.993032, 0.692907, 0.189084},
2816 {0.993456, 0.698810, 0.186041},
2817 {0.993814, 0.704741, 0.183043},
2818 {0.994103, 0.710698, 0.180097},
2819 {0.994324, 0.716681, 0.177208},
2820 {0.994474, 0.722691, 0.174381},
2821 {0.994553, 0.728728, 0.171622},
2822 {0.994561, 0.734791, 0.168938},
2823 {0.994495, 0.740880, 0.166335},
2824 {0.994355, 0.746995, 0.163821},
2825 {0.994141, 0.753137, 0.161404},
2826 {0.993851, 0.759304, 0.159092},
2827 {0.993482, 0.765499, 0.156891},
2828 {0.993033, 0.771720, 0.154808},
2829 {0.992505, 0.777967, 0.152855},
2830 {0.991897, 0.784239, 0.151042},
2831 {0.991209, 0.790537, 0.149377},
2832 {0.990439, 0.796859, 0.147870},
2833 {0.989587, 0.803205, 0.146529},
2834 {0.988648, 0.809579, 0.145357},
2835 {0.987621, 0.815978, 0.144363},
2836 {0.986509, 0.822401, 0.143557},
2837 {0.985314, 0.828846, 0.142945},
2838 {0.984031, 0.835315, 0.142528},
2839 {0.982653, 0.841812, 0.142303},
2840 {0.981190, 0.848329, 0.142279},
2841 {0.979644, 0.854866, 0.142453},
2842 {0.977995, 0.861432, 0.142808},
2843 {0.976265, 0.868016, 0.143351},
2844 {0.974443, 0.874622, 0.144061},
2845 {0.972530, 0.881250, 0.144923},
2846 {0.970533, 0.887896, 0.145919},
2847 {0.968443, 0.894564, 0.147014},
2848 {0.966271, 0.901249, 0.148180},
2849 {0.964021, 0.907950, 0.149370},
2850 {0.961681, 0.914672, 0.150520},
2851 {0.959276, 0.921407, 0.151566},
2852 {0.956808, 0.928152, 0.152409},
2853 {0.954287, 0.934908, 0.152921},
2854 {0.951726, 0.941671, 0.152925},
2855 {0.949151, 0.948435, 0.152178},
2856 {0.946602, 0.955190, 0.150328},
2857 {0.944152, 0.961916, 0.146861},
2858 {0.941896, 0.968590, 0.140956},
2859 {0.940015, 0.975158, 0.131326},
2860 };
2861 // clang-format on
2862
2863 return interp(data, N);
2864}
2865
2873{
2874 // clang-format off
2876 {0.267004, 0.004874, 0.329415},
2877 {0.268510, 0.009605, 0.335427},
2878 {0.269944, 0.014625, 0.341379},
2879 {0.271305, 0.019942, 0.347269},
2880 {0.272594, 0.025563, 0.353093},
2881 {0.273809, 0.031497, 0.358853},
2882 {0.274952, 0.037752, 0.364543},
2883 {0.276022, 0.044167, 0.370164},
2884 {0.277018, 0.050344, 0.375715},
2885 {0.277941, 0.056324, 0.381191},
2886 {0.278791, 0.062145, 0.386592},
2887 {0.279566, 0.067836, 0.391917},
2888 {0.280267, 0.073417, 0.397163},
2889 {0.280894, 0.078907, 0.402329},
2890 {0.281446, 0.084320, 0.407414},
2891 {0.281924, 0.089666, 0.412415},
2892 {0.282327, 0.094955, 0.417331},
2893 {0.282656, 0.100196, 0.422160},
2894 {0.282910, 0.105393, 0.426902},
2895 {0.283091, 0.110553, 0.431554},
2896 {0.283197, 0.115680, 0.436115},
2897 {0.283229, 0.120777, 0.440584},
2898 {0.283187, 0.125848, 0.444960},
2899 {0.283072, 0.130895, 0.449241},
2900 {0.282884, 0.135920, 0.453427},
2901 {0.282623, 0.140926, 0.457517},
2902 {0.282290, 0.145912, 0.461510},
2903 {0.281887, 0.150881, 0.465405},
2904 {0.281412, 0.155834, 0.469201},
2905 {0.280868, 0.160771, 0.472899},
2906 {0.280255, 0.165693, 0.476498},
2907 {0.279574, 0.170599, 0.479997},
2908 {0.278826, 0.175490, 0.483397},
2909 {0.278012, 0.180367, 0.486697},
2910 {0.277134, 0.185228, 0.489898},
2911 {0.276194, 0.190074, 0.493001},
2912 {0.275191, 0.194905, 0.496005},
2913 {0.274128, 0.199721, 0.498911},
2914 {0.273006, 0.204520, 0.501721},
2915 {0.271828, 0.209303, 0.504434},
2916 {0.270595, 0.214069, 0.507052},
2917 {0.269308, 0.218818, 0.509577},
2918 {0.267968, 0.223549, 0.512008},
2919 {0.266580, 0.228262, 0.514349},
2920 {0.265145, 0.232956, 0.516599},
2921 {0.263663, 0.237631, 0.518762},
2922 {0.262138, 0.242286, 0.520837},
2923 {0.260571, 0.246922, 0.522828},
2924 {0.258965, 0.251537, 0.524736},
2925 {0.257322, 0.256130, 0.526563},
2926 {0.255645, 0.260703, 0.528312},
2927 {0.253935, 0.265254, 0.529983},
2928 {0.252194, 0.269783, 0.531579},
2929 {0.250425, 0.274290, 0.533103},
2930 {0.248629, 0.278775, 0.534556},
2931 {0.246811, 0.283237, 0.535941},
2932 {0.244972, 0.287675, 0.537260},
2933 {0.243113, 0.292092, 0.538516},
2934 {0.241237, 0.296485, 0.539709},
2935 {0.239346, 0.300855, 0.540844},
2936 {0.237441, 0.305202, 0.541921},
2937 {0.235526, 0.309527, 0.542944},
2938 {0.233603, 0.313828, 0.543914},
2939 {0.231674, 0.318106, 0.544834},
2940 {0.229739, 0.322361, 0.545706},
2941 {0.227802, 0.326594, 0.546532},
2942 {0.225863, 0.330805, 0.547314},
2943 {0.223925, 0.334994, 0.548053},
2944 {0.221989, 0.339161, 0.548752},
2945 {0.220057, 0.343307, 0.549413},
2946 {0.218130, 0.347432, 0.550038},
2947 {0.216210, 0.351535, 0.550627},
2948 {0.214298, 0.355619, 0.551184},
2949 {0.212395, 0.359683, 0.551710},
2950 {0.210503, 0.363727, 0.552206},
2951 {0.208623, 0.367752, 0.552675},
2952 {0.206756, 0.371758, 0.553117},
2953 {0.204903, 0.375746, 0.553533},
2954 {0.203063, 0.379716, 0.553925},
2955 {0.201239, 0.383670, 0.554294},
2956 {0.199430, 0.387607, 0.554642},
2957 {0.197636, 0.391528, 0.554969},
2958 {0.195860, 0.395433, 0.555276},
2959 {0.194100, 0.399323, 0.555565},
2960 {0.192357, 0.403199, 0.555836},
2961 {0.190631, 0.407061, 0.556089},
2962 {0.188923, 0.410910, 0.556326},
2963 {0.187231, 0.414746, 0.556547},
2964 {0.185556, 0.418570, 0.556753},
2965 {0.183898, 0.422383, 0.556944},
2966 {0.182256, 0.426184, 0.557120},
2967 {0.180629, 0.429975, 0.557282},
2968 {0.179019, 0.433756, 0.557430},
2969 {0.177423, 0.437527, 0.557565},
2970 {0.175841, 0.441290, 0.557685},
2971 {0.174274, 0.445044, 0.557792},
2972 {0.172719, 0.448791, 0.557885},
2973 {0.171176, 0.452530, 0.557965},
2974 {0.169646, 0.456262, 0.558030},
2975 {0.168126, 0.459988, 0.558082},
2976 {0.166617, 0.463708, 0.558119},
2977 {0.165117, 0.467423, 0.558141},
2978 {0.163625, 0.471133, 0.558148},
2979 {0.162142, 0.474838, 0.558140},
2980 {0.160665, 0.478540, 0.558115},
2981 {0.159194, 0.482237, 0.558073},
2982 {0.157729, 0.485932, 0.558013},
2983 {0.156270, 0.489624, 0.557936},
2984 {0.154815, 0.493313, 0.557840},
2985 {0.153364, 0.497000, 0.557724},
2986 {0.151918, 0.500685, 0.557587},
2987 {0.150476, 0.504369, 0.557430},
2988 {0.149039, 0.508051, 0.557250},
2989 {0.147607, 0.511733, 0.557049},
2990 {0.146180, 0.515413, 0.556823},
2991 {0.144759, 0.519093, 0.556572},
2992 {0.143343, 0.522773, 0.556295},
2993 {0.141935, 0.526453, 0.555991},
2994 {0.140536, 0.530132, 0.555659},
2995 {0.139147, 0.533812, 0.555298},
2996 {0.137770, 0.537492, 0.554906},
2997 {0.136408, 0.541173, 0.554483},
2998 {0.135066, 0.544853, 0.554029},
2999 {0.133743, 0.548535, 0.553541},
3000 {0.132444, 0.552216, 0.553018},
3001 {0.131172, 0.555899, 0.552459},
3002 {0.129933, 0.559582, 0.551864},
3003 {0.128729, 0.563265, 0.551229},
3004 {0.127568, 0.566949, 0.550556},
3005 {0.126453, 0.570633, 0.549841},
3006 {0.125394, 0.574318, 0.549086},
3007 {0.124395, 0.578002, 0.548287},
3008 {0.123463, 0.581687, 0.547445},
3009 {0.122606, 0.585371, 0.546557},
3010 {0.121831, 0.589055, 0.545623},
3011 {0.121148, 0.592739, 0.544641},
3012 {0.120565, 0.596422, 0.543611},
3013 {0.120092, 0.600104, 0.542530},
3014 {0.119738, 0.603785, 0.541400},
3015 {0.119512, 0.607464, 0.540218},
3016 {0.119423, 0.611141, 0.538982},
3017 {0.119483, 0.614817, 0.537692},
3018 {0.119699, 0.618490, 0.536347},
3019 {0.120081, 0.622161, 0.534946},
3020 {0.120638, 0.625828, 0.533488},
3021 {0.121380, 0.629492, 0.531973},
3022 {0.122312, 0.633153, 0.530398},
3023 {0.123444, 0.636809, 0.528763},
3024 {0.124780, 0.640461, 0.527068},
3025 {0.126326, 0.644107, 0.525311},
3026 {0.128087, 0.647749, 0.523491},
3027 {0.130067, 0.651384, 0.521608},
3028 {0.132268, 0.655014, 0.519661},
3029 {0.134692, 0.658636, 0.517649},
3030 {0.137339, 0.662252, 0.515571},
3031 {0.140210, 0.665859, 0.513427},
3032 {0.143303, 0.669459, 0.511215},
3033 {0.146616, 0.673050, 0.508936},
3034 {0.150148, 0.676631, 0.506589},
3035 {0.153894, 0.680203, 0.504172},
3036 {0.157851, 0.683765, 0.501686},
3037 {0.162016, 0.687316, 0.499129},
3038 {0.166383, 0.690856, 0.496502},
3039 {0.170948, 0.694384, 0.493803},
3040 {0.175707, 0.697900, 0.491033},
3041 {0.180653, 0.701402, 0.488189},
3042 {0.185783, 0.704891, 0.485273},
3043 {0.191090, 0.708366, 0.482284},
3044 {0.196571, 0.711827, 0.479221},
3045 {0.202219, 0.715272, 0.476084},
3046 {0.208030, 0.718701, 0.472873},
3047 {0.214000, 0.722114, 0.469588},
3048 {0.220124, 0.725509, 0.466226},
3049 {0.226397, 0.728888, 0.462789},
3050 {0.232815, 0.732247, 0.459277},
3051 {0.239374, 0.735588, 0.455688},
3052 {0.246070, 0.738910, 0.452024},
3053 {0.252899, 0.742211, 0.448284},
3054 {0.259857, 0.745492, 0.444467},
3055 {0.266941, 0.748751, 0.440573},
3056 {0.274149, 0.751988, 0.436601},
3057 {0.281477, 0.755203, 0.432552},
3058 {0.288921, 0.758394, 0.428426},
3059 {0.296479, 0.761561, 0.424223},
3060 {0.304148, 0.764704, 0.419943},
3061 {0.311925, 0.767822, 0.415586},
3062 {0.319809, 0.770914, 0.411152},
3063 {0.327796, 0.773980, 0.406640},
3064 {0.335885, 0.777018, 0.402049},
3065 {0.344074, 0.780029, 0.397381},
3066 {0.352360, 0.783011, 0.392636},
3067 {0.360741, 0.785964, 0.387814},
3068 {0.369214, 0.788888, 0.382914},
3069 {0.377779, 0.791781, 0.377939},
3070 {0.386433, 0.794644, 0.372886},
3071 {0.395174, 0.797475, 0.367757},
3072 {0.404001, 0.800275, 0.362552},
3073 {0.412913, 0.803041, 0.357269},
3074 {0.421908, 0.805774, 0.351910},
3075 {0.430983, 0.808473, 0.346476},
3076 {0.440137, 0.811138, 0.340967},
3077 {0.449368, 0.813768, 0.335384},
3078 {0.458674, 0.816363, 0.329727},
3079 {0.468053, 0.818921, 0.323998},
3080 {0.477504, 0.821444, 0.318195},
3081 {0.487026, 0.823929, 0.312321},
3082 {0.496615, 0.826376, 0.306377},
3083 {0.506271, 0.828786, 0.300362},
3084 {0.515992, 0.831158, 0.294279},
3085 {0.525776, 0.833491, 0.288127},
3086 {0.535621, 0.835785, 0.281908},
3087 {0.545524, 0.838039, 0.275626},
3088 {0.555484, 0.840254, 0.269281},
3089 {0.565498, 0.842430, 0.262877},
3090 {0.575563, 0.844566, 0.256415},
3091 {0.585678, 0.846661, 0.249897},
3092 {0.595839, 0.848717, 0.243329},
3093 {0.606045, 0.850733, 0.236712},
3094 {0.616293, 0.852709, 0.230052},
3095 {0.626579, 0.854645, 0.223353},
3096 {0.636902, 0.856542, 0.216620},
3097 {0.647257, 0.858400, 0.209861},
3098 {0.657642, 0.860219, 0.203082},
3099 {0.668054, 0.861999, 0.196293},
3100 {0.678489, 0.863742, 0.189503},
3101 {0.688944, 0.865448, 0.182725},
3102 {0.699415, 0.867117, 0.175971},
3103 {0.709898, 0.868751, 0.169257},
3104 {0.720391, 0.870350, 0.162603},
3105 {0.730889, 0.871916, 0.156029},
3106 {0.741388, 0.873449, 0.149561},
3107 {0.751884, 0.874951, 0.143228},
3108 {0.762373, 0.876424, 0.137064},
3109 {0.772852, 0.877868, 0.131109},
3110 {0.783315, 0.879285, 0.125405},
3111 {0.793760, 0.880678, 0.120005},
3112 {0.804182, 0.882046, 0.114965},
3113 {0.814576, 0.883393, 0.110347},
3114 {0.824940, 0.884720, 0.106217},
3115 {0.835270, 0.886029, 0.102646},
3116 {0.845561, 0.887322, 0.099702},
3117 {0.855810, 0.888601, 0.097452},
3118 {0.866013, 0.889868, 0.095953},
3119 {0.876168, 0.891125, 0.095250},
3120 {0.886271, 0.892374, 0.095374},
3121 {0.896320, 0.893616, 0.096335},
3122 {0.906311, 0.894855, 0.098125},
3123 {0.916242, 0.896091, 0.100717},
3124 {0.926106, 0.897330, 0.104071},
3125 {0.935904, 0.898570, 0.108131},
3126 {0.945636, 0.899815, 0.112838},
3127 {0.955300, 0.901065, 0.118128},
3128 {0.964894, 0.902323, 0.123941},
3129 {0.974417, 0.903590, 0.130215},
3130 {0.983868, 0.904867, 0.136897},
3131 {0.993248, 0.906157, 0.143936},
3132 };
3133 // clang-format on
3134
3135 return interp(data, N);
3136}
3137
3145{
3146 // clang-format off
3148 {0.0, 0.0, 0.3},
3149 {0.0, 0.0, 1.0},
3150 {1.0, 1.0, 1.0},
3151 {1.0, 0.0, 0.0},
3152 {0.5, 0.0, 0.0},
3153 };
3154 // clang-format on
3155
3156 return interp(data, N);
3157}
3158
3166{
3167 array_type::tensor<double, 2> data = {{255, 255, 255}};
3168 return interp(data / 255.0, N);
3169}
3170
3178{
3179 array_type::tensor<double, 2> data = {{0.5, 0.5, 0.5}};
3180 return interp(data, N);
3181}
3182
3190{
3191 array_type::tensor<double, 2> data = {{0, 0, 0}};
3192 return interp(data / 255.0, N);
3193}
3194
3202{
3203 array_type::tensor<double, 2> data = {{255, 0, 0}};
3204 return interp(data / 255.0, N);
3205}
3206
3214{
3215 array_type::tensor<double, 2> data = {{0, 0, 255}};
3216 return interp(data / 255.0, N);
3217}
3218
3226{
3227 array_type::tensor<double, 2> data = {{247, 49, 49}};
3228 return interp(data / 255.0, N);
3229}
3230
3238{
3239 array_type::tensor<double, 2> data = {{16, 16, 115}};
3240 return interp(data / 255.0, N);
3241}
3242
3250{
3251 array_type::tensor<double, 2> data = {{0, 102, 204}};
3252 return interp(data / 255.0, N);
3253}
3254
3262{
3263 array_type::tensor<double, 2> data = {{0, 162, 222}};
3264 return interp(data / 255.0, N);
3265}
3266
3274{
3275 array_type::tensor<double, 2> data = {{251, 185, 130}};
3276 return interp(data / 255.0, N);
3277}
3278
3286{
3287 array_type::tensor<double, 2> data = {{0, 181, 190}};
3288 return interp(data / 255.0, N);
3289}
3290
3298{
3299 array_type::tensor<double, 2> data = {{192, 79, 23}};
3300 return interp(data / 255.0, N);
3301}
3302
3310{
3311 array_type::tensor<double, 2> data = {{0, 179, 184}};
3312 return interp(data / 255.0, N);
3313}
3314
3322{
3323 array_type::tensor<double, 2> data = {{71, 57, 146}};
3324 return interp(data / 255.0, N);
3325}
3326
3334{
3335 array_type::tensor<double, 2> data = {{182, 50, 28}};
3336 return interp(data / 255.0, N);
3337}
3338
3346{
3347 array_type::tensor<double, 2> data = {{121, 37, 0}};
3348 return interp(data / 255.0, N);
3349}
3350
3358{
3359 array_type::tensor<double, 2> data = {{247, 146, 29}};
3360 return interp(data / 255.0, N);
3361}
3362
3370{
3371 array_type::tensor<double, 2> data = {{116, 114, 154}};
3372 return interp(data / 255.0, N);
3373}
3374
3382{
3383 array_type::tensor<double, 2> data = {{242, 130, 180}};
3384 return interp(data / 255.0, N);
3385}
3386
3394{
3395 array_type::tensor<double, 2> data = {{0, 162, 227}};
3396 return interp(data / 255.0, N);
3397}
3398
3406{
3407 array_type::tensor<double, 2> data = {{65, 176, 228}};
3408 return interp(data / 255.0, N);
3409}
3410
3418{
3419 array_type::tensor<double, 2> data = {{0, 174, 239}};
3420 return interp(data / 255.0, N);
3421}
3422
3430{
3431 array_type::tensor<double, 2> data = {{253, 188, 66}};
3432 return interp(data / 255.0, N);
3433}
3434
3442{
3443 array_type::tensor<double, 2> data = {{164, 83, 138}};
3444 return interp(data / 255.0, N);
3445}
3446
3454{
3455 array_type::tensor<double, 2> data = {{0, 169, 157}};
3456 return interp(data / 255.0, N);
3457}
3458
3466{
3467 array_type::tensor<double, 2> data = {{0, 155, 85}};
3468 return interp(data / 255.0, N);
3469}
3470
3478{
3479 array_type::tensor<double, 2> data = {{140, 54, 140}};
3480 return interp(data / 255.0, N);
3481}
3482
3490{
3491 array_type::tensor<double, 2> data = {{255, 223, 66}};
3492 return interp(data / 255.0, N);
3493}
3494
3502{
3503 array_type::tensor<double, 2> data = {{148, 150, 152}};
3504 return interp(data / 255.0, N);
3505}
3506
3514{
3515 array_type::tensor<double, 2> data = {{0, 166, 79}};
3516 return interp(data / 255.0, N);
3517}
3518
3526{
3527 array_type::tensor<double, 2> data = {{223, 230, 116}};
3528 return interp(data / 255.0, N);
3529}
3530
3538{
3539 array_type::tensor<double, 2> data = {{0, 169, 154}};
3540 return interp(data / 255.0, N);
3541}
3542
3550{
3551 array_type::tensor<double, 2> data = {{244, 158, 196}};
3552 return interp(data / 255.0, N);
3553}
3554
3562{
3563 array_type::tensor<double, 2> data = {{141, 199, 62}};
3564 return interp(data / 255.0, N);
3565}
3566
3574{
3575 array_type::tensor<double, 2> data = {{236, 0, 140}};
3576 return interp(data / 255.0, N);
3577}
3578
3586{
3587 array_type::tensor<double, 2> data = {{169, 52, 31}};
3588 return interp(data / 255.0, N);
3589}
3590
3598{
3599 array_type::tensor<double, 2> data = {{175, 50, 53}};
3600 return interp(data / 255.0, N);
3601}
3602
3610{
3611 array_type::tensor<double, 2> data = {{248, 158, 123}};
3612 return interp(data / 255.0, N);
3613}
3614
3622{
3623 array_type::tensor<double, 2> data = {{0, 103, 149}};
3624 return interp(data / 255.0, N);
3625}
3626
3634{
3635 array_type::tensor<double, 2> data = {{169, 60, 147}};
3636 return interp(data / 255.0, N);
3637}
3638
3646{
3647 array_type::tensor<double, 2> data = {{0, 110, 184}};
3648 return interp(data / 255.0, N);
3649}
3650
3658{
3659 array_type::tensor<double, 2> data = {{60, 128, 49}};
3660 return interp(data / 255.0, N);
3661}
3662
3670{
3671 array_type::tensor<double, 2> data = {{245, 129, 55}};
3672 return interp(data / 255.0, N);
3673}
3674
3682{
3683 array_type::tensor<double, 2> data = {{237, 19, 90}};
3684 return interp(data / 255.0, N);
3685}
3686
3694{
3695 array_type::tensor<double, 2> data = {{175, 114, 176}};
3696 return interp(data / 255.0, N);
3697}
3698
3706{
3707 array_type::tensor<double, 2> data = {{247, 150, 90}};
3708 return interp(data / 255.0, N);
3709}
3710
3718{
3719 array_type::tensor<double, 2> data = {{121, 119, 184}};
3720 return interp(data / 255.0, N);
3721}
3722
3730{
3731 array_type::tensor<double, 2> data = {{0, 139, 114}};
3732 return interp(data / 255.0, N);
3733}
3734
3742{
3743 array_type::tensor<double, 2> data = {{146, 38, 143}};
3744 return interp(data / 255.0, N);
3745}
3746
3754{
3755 array_type::tensor<double, 2> data = {{0, 176, 240}};
3756 return interp(data / 255.0, N);
3757}
3758
3766{
3767 array_type::tensor<double, 2> data = {{153, 71, 155}};
3768 return interp(data / 255.0, N);
3769}
3770
3778{
3779 array_type::tensor<double, 2> data = {{151, 64, 6}};
3780 return interp(data / 255.0, N);
3781}
3782
3790{
3791 array_type::tensor<double, 2> data = {{242, 96, 53}};
3792 return interp(data / 255.0, N);
3793}
3794
3802{
3803 array_type::tensor<double, 2> data = {{161, 36, 107}};
3804 return interp(data / 255.0, N);
3805}
3806
3814{
3815 array_type::tensor<double, 2> data = {{239, 85, 159}};
3816 return interp(data / 255.0, N);
3817}
3818
3826{
3827 array_type::tensor<double, 2> data = {{0, 113, 188}};
3828 return interp(data / 255.0, N);
3829}
3830
3838{
3839 array_type::tensor<double, 2> data = {{97, 63, 153}};
3840 return interp(data / 255.0, N);
3841}
3842
3850{
3851 array_type::tensor<double, 2> data = {{237, 1, 125}};
3852 return interp(data / 255.0, N);
3853}
3854
3862{
3863 array_type::tensor<double, 2> data = {{246, 146, 137}};
3864 return interp(data / 255.0, N);
3865}
3866
3874{
3875 array_type::tensor<double, 2> data = {{63, 188, 157}};
3876 return interp(data / 255.0, N);
3877}
3878
3886{
3887 array_type::tensor<double, 2> data = {{103, 24, 0}};
3888 return interp(data / 255.0, N);
3889}
3890
3898{
3899 array_type::tensor<double, 2> data = {{70, 197, 221}};
3900 return interp(data / 255.0, N);
3901}
3902
3910{
3911 array_type::tensor<double, 2> data = {{198, 220, 103}};
3912 return interp(data / 255.0, N);
3913}
3914
3922{
3923 array_type::tensor<double, 2> data = {{218, 157, 118}};
3924 return interp(data / 255.0, N);
3925}
3926
3934{
3935 array_type::tensor<double, 2> data = {{0, 174, 179}};
3936 return interp(data / 255.0, N);
3937}
3938
3946{
3947 array_type::tensor<double, 2> data = {{216, 131, 183}};
3948 return interp(data / 255.0, N);
3949}
3950
3958{
3959 array_type::tensor<double, 2> data = {{0, 180, 206}};
3960 return interp(data / 255.0, N);
3961}
3962
3970{
3971 array_type::tensor<double, 2> data = {{88, 66, 155}};
3972 return interp(data / 255.0, N);
3973}
3974
3982{
3983 array_type::tensor<double, 2> data = {{239, 88, 160}};
3984 return interp(data / 255.0, N);
3985}
3986
3994{
3995 array_type::tensor<double, 2> data = {{238, 41, 103}};
3996 return interp(data / 255.0, N);
3997}
3998
4006{
4007 array_type::tensor<double, 2> data = {{255, 242, 0}};
4008 return interp(data / 255.0, N);
4009}
4010
4018{
4019 array_type::tensor<double, 2> data = {{152, 204, 112}};
4020 return interp(data / 255.0, N);
4021}
4022
4030{
4031 array_type::tensor<double, 2> data = {{250, 162, 26}};
4032 return interp(data / 255.0, N);
4033}
4034
4042{
4043 return xt::flip(Accent(N), 0);
4044}
4045
4053{
4054 return xt::flip(Dark2(N), 0);
4055}
4056
4064{
4065 return xt::flip(Paired(N), 0);
4066}
4067
4075{
4076 return xt::flip(Spectral(N), 0);
4077}
4078
4086{
4087 return xt::flip(Pastel1(N), 0);
4088}
4089
4097{
4098 return xt::flip(Pastel2(N), 0);
4099}
4100
4108{
4109 return xt::flip(Set1(N), 0);
4110}
4111
4119{
4120 return xt::flip(Set2(N), 0);
4121}
4122
4130{
4131 return xt::flip(Set3(N), 0);
4132}
4133
4141{
4142 return xt::flip(Blues(N), 0);
4143}
4144
4152{
4153 return xt::flip(Greens(N), 0);
4154}
4155
4163{
4164 return xt::flip(Greys(N), 0);
4165}
4166
4174{
4175 return xt::flip(Oranges(N), 0);
4176}
4177
4185{
4186 return xt::flip(Purples(N), 0);
4187}
4188
4196{
4197 return xt::flip(Reds(N), 0);
4198}
4199
4207{
4208 return xt::flip(BuPu(N), 0);
4209}
4210
4218{
4219 return xt::flip(GnBu(N), 0);
4220}
4221
4229{
4230 return xt::flip(PuBu(N), 0);
4231}
4232
4240{
4241 return xt::flip(PuBuGn(N), 0);
4242}
4243
4251{
4252 return xt::flip(PuRd(N), 0);
4253}
4254
4262{
4263 return xt::flip(RdPu(N), 0);
4264}
4265
4273{
4274 return xt::flip(OrRd(N), 0);
4275}
4276
4284{
4285 return xt::flip(RdOrYl(N), 0);
4286}
4287
4295{
4296 return xt::flip(YlGn(N), 0);
4297}
4298
4306{
4307 return xt::flip(YlGnBu(N), 0);
4308}
4309
4317{
4318 return xt::flip(YlOrRd(N), 0);
4319}
4320
4328{
4329 return xt::flip(BrBG(N), 0);
4330}
4331
4339{
4340 return xt::flip(PuOr(N), 0);
4341}
4342
4350{
4351 return xt::flip(RdBu(N), 0);
4352}
4353
4361{
4362 return xt::flip(RdGy(N), 0);
4363}
4364
4372{
4373 return xt::flip(RdYlBu(N), 0);
4374}
4375
4383{
4384 return xt::flip(RdYlGn(N), 0);
4385}
4386
4394{
4395 return xt::flip(PiYG(N), 0);
4396}
4397
4405{
4406 return xt::flip(PRGn(N), 0);
4407}
4408
4416{
4417 return xt::flip(spring(N), 0);
4418}
4419
4427{
4428 return xt::flip(summer(N), 0);
4429}
4430
4438{
4439 return xt::flip(autumn(N), 0);
4440}
4441
4449{
4450 return xt::flip(winter(N), 0);
4451}
4452
4460{
4461 return xt::flip(bone(N), 0);
4462}
4463
4471{
4472 return xt::flip(cool(N), 0);
4473}
4474
4482{
4483 return xt::flip(hot(N), 0);
4484}
4485
4493{
4494 return xt::flip(copper(N), 0);
4495}
4496
4504{
4505 return xt::flip(hsv(N), 0);
4506}
4507
4515{
4516 return xt::flip(nipy_spectral(N), 0);
4517}
4518
4526{
4527 return xt::flip(jet(N), 0);
4528}
4529
4537{
4538 return xt::flip(terrain(N), 0);
4539}
4540
4548{
4549 return xt::flip(seismic(N), 0);
4550}
4551
4559{
4560 return xt::flip(afmhot(N), 0);
4561}
4562
4570{
4571 return xt::flip(magma(N), 0);
4572}
4573
4581{
4582 return xt::flip(inferno(N), 0);
4583}
4584
4592{
4593 return xt::flip(plasma(N), 0);
4594}
4595
4603{
4604 return xt::flip(viridis(N), 0);
4605}
4606
4614inline array_type::tensor<double, 2> colormap(const std::string& cmap, size_t N = 256)
4615{
4616 if (cmap == "Accent") {
4617 return Accent(N);
4618 }
4619 if (cmap == "Dark2") {
4620 return Dark2(N);
4621 }
4622 if (cmap == "Paired") {
4623 return Paired(N);
4624 }
4625 if (cmap == "Spectral") {
4626 return Spectral(N);
4627 }
4628 if (cmap == "Pastel1") {
4629 return Pastel1(N);
4630 }
4631 if (cmap == "Pastel2") {
4632 return Pastel2(N);
4633 }
4634 if (cmap == "Set1") {
4635 return Set1(N);
4636 }
4637 if (cmap == "Set2") {
4638 return Set2(N);
4639 }
4640 if (cmap == "Set3") {
4641 return Set3(N);
4642 }
4643 if (cmap == "Blues") {
4644 return Blues(N);
4645 }
4646 if (cmap == "Greens") {
4647 return Greens(N);
4648 }
4649 if (cmap == "Greys") {
4650 return Greys(N);
4651 }
4652 if (cmap == "Oranges") {
4653 return Oranges(N);
4654 }
4655 if (cmap == "Purples") {
4656 return Purples(N);
4657 }
4658 if (cmap == "Reds") {
4659 return Reds(N);
4660 }
4661 if (cmap == "BuPu") {
4662 return BuPu(N);
4663 }
4664 if (cmap == "GnBu") {
4665 return GnBu(N);
4666 }
4667 if (cmap == "PuBu") {
4668 return PuBu(N);
4669 }
4670 if (cmap == "PuBuGn") {
4671 return PuBuGn(N);
4672 }
4673 if (cmap == "PuRd") {
4674 return PuRd(N);
4675 }
4676 if (cmap == "RdPu") {
4677 return RdPu(N);
4678 }
4679 if (cmap == "OrRd") {
4680 return OrRd(N);
4681 }
4682 if (cmap == "RdOrYl") {
4683 return RdOrYl(N);
4684 }
4685 if (cmap == "YlGn") {
4686 return YlGn(N);
4687 }
4688 if (cmap == "YlGnBu") {
4689 return YlGnBu(N);
4690 }
4691 if (cmap == "YlOrRd") {
4692 return YlOrRd(N);
4693 }
4694 if (cmap == "BrBG") {
4695 return BrBG(N);
4696 }
4697 if (cmap == "PuOr") {
4698 return PuOr(N);
4699 }
4700 if (cmap == "RdBu") {
4701 return RdBu(N);
4702 }
4703 if (cmap == "RdGy") {
4704 return RdGy(N);
4705 }
4706 if (cmap == "RdYlBu") {
4707 return RdYlBu(N);
4708 }
4709 if (cmap == "RdYlGn") {
4710 return RdYlGn(N);
4711 }
4712 if (cmap == "PiYG") {
4713 return PiYG(N);
4714 }
4715 if (cmap == "PRGn") {
4716 return PRGn(N);
4717 }
4718 if (cmap == "spring") {
4719 return spring(N);
4720 }
4721 if (cmap == "summer") {
4722 return summer(N);
4723 }
4724 if (cmap == "autumn") {
4725 return autumn(N);
4726 }
4727 if (cmap == "winter") {
4728 return winter(N);
4729 }
4730 if (cmap == "bone") {
4731 return bone(N);
4732 }
4733 if (cmap == "cool") {
4734 return cool(N);
4735 }
4736 if (cmap == "hot") {
4737 return hot(N);
4738 }
4739 if (cmap == "copper") {
4740 return copper(N);
4741 }
4742 if (cmap == "hsv") {
4743 return hsv(N);
4744 }
4745 if (cmap == "nipy_spectral") {
4746 return nipy_spectral(N);
4747 }
4748 if (cmap == "jet") {
4749 return jet(N);
4750 }
4751 if (cmap == "terrain") {
4752 return terrain(N);
4753 }
4754 if (cmap == "seismic") {
4755 return seismic(N);
4756 }
4757 if (cmap == "afmhot") {
4758 return afmhot(N);
4759 }
4760 if (cmap == "magma") {
4761 return magma(N);
4762 }
4763 if (cmap == "inferno") {
4764 return inferno(N);
4765 }
4766 if (cmap == "plasma") {
4767 return plasma(N);
4768 }
4769 if (cmap == "viridis") {
4770 return viridis(N);
4771 }
4772 if (cmap == "Accent_r") {
4773 return Accent_r(N);
4774 }
4775 if (cmap == "Dark2_r") {
4776 return Dark2_r(N);
4777 }
4778 if (cmap == "Paired_r") {
4779 return Paired_r(N);
4780 }
4781 if (cmap == "Spectral_r") {
4782 return Spectral_r(N);
4783 }
4784 if (cmap == "Pastel1_r") {
4785 return Pastel1_r(N);
4786 }
4787 if (cmap == "Pastel2_r") {
4788 return Pastel2_r(N);
4789 }
4790 if (cmap == "Set1_r") {
4791 return Set1_r(N);
4792 }
4793 if (cmap == "Set2_r") {
4794 return Set2_r(N);
4795 }
4796 if (cmap == "Set3_r") {
4797 return Set3_r(N);
4798 }
4799 if (cmap == "Blues_r") {
4800 return Blues_r(N);
4801 }
4802 if (cmap == "Greens_r") {
4803 return Greens_r(N);
4804 }
4805 if (cmap == "Greys_r") {
4806 return Greys_r(N);
4807 }
4808 if (cmap == "Oranges_r") {
4809 return Oranges_r(N);
4810 }
4811 if (cmap == "Purples_r") {
4812 return Purples_r(N);
4813 }
4814 if (cmap == "Reds_r") {
4815 return Reds_r(N);
4816 }
4817 if (cmap == "BuPu_r") {
4818 return BuPu_r(N);
4819 }
4820 if (cmap == "GnBu_r") {
4821 return GnBu_r(N);
4822 }
4823 if (cmap == "PuBu_r") {
4824 return PuBu_r(N);
4825 }
4826 if (cmap == "PuBuGn_r") {
4827 return PuBuGn_r(N);
4828 }
4829 if (cmap == "PuRd_r") {
4830 return PuRd_r(N);
4831 }
4832 if (cmap == "RdPu_r") {
4833 return RdPu_r(N);
4834 }
4835 if (cmap == "OrRd_r") {
4836 return OrRd_r(N);
4837 }
4838 if (cmap == "RdOrYl_r") {
4839 return RdOrYl_r(N);
4840 }
4841 if (cmap == "YlGn_r") {
4842 return YlGn_r(N);
4843 }
4844 if (cmap == "YlGnBu_r") {
4845 return YlGnBu_r(N);
4846 }
4847 if (cmap == "YlOrRd_r") {
4848 return YlOrRd_r(N);
4849 }
4850 if (cmap == "BrBG_r") {
4851 return BrBG_r(N);
4852 }
4853 if (cmap == "PuOr_r") {
4854 return PuOr_r(N);
4855 }
4856 if (cmap == "RdBu_r") {
4857 return RdBu_r(N);
4858 }
4859 if (cmap == "RdGy_r") {
4860 return RdGy_r(N);
4861 }
4862 if (cmap == "RdYlBu_r") {
4863 return RdYlBu_r(N);
4864 }
4865 if (cmap == "RdYlGn_r") {
4866 return RdYlGn_r(N);
4867 }
4868 if (cmap == "PiYG_r") {
4869 return PiYG_r(N);
4870 }
4871 if (cmap == "PRGn_r") {
4872 return PRGn_r(N);
4873 }
4874 if (cmap == "spring_r") {
4875 return spring_r(N);
4876 }
4877 if (cmap == "summer_r") {
4878 return summer_r(N);
4879 }
4880 if (cmap == "autumn_r") {
4881 return autumn_r(N);
4882 }
4883 if (cmap == "winter_r") {
4884 return winter_r(N);
4885 }
4886 if (cmap == "bone_r") {
4887 return bone_r(N);
4888 }
4889 if (cmap == "cool_r") {
4890 return cool_r(N);
4891 }
4892 if (cmap == "hot_r") {
4893 return hot_r(N);
4894 }
4895 if (cmap == "copper_r") {
4896 return copper_r(N);
4897 }
4898 if (cmap == "hsv_r") {
4899 return hsv_r(N);
4900 }
4901 if (cmap == "nipy_spectral_r") {
4902 return nipy_spectral_r(N);
4903 }
4904 if (cmap == "jet_r") {
4905 return jet_r(N);
4906 }
4907 if (cmap == "terrain_r") {
4908 return terrain_r(N);
4909 }
4910 if (cmap == "seismic_r") {
4911 return seismic_r(N);
4912 }
4913 if (cmap == "afmhot_r") {
4914 return afmhot_r(N);
4915 }
4916 if (cmap == "magma_r") {
4917 return magma_r(N);
4918 }
4919 if (cmap == "inferno_r") {
4920 return inferno_r(N);
4921 }
4922 if (cmap == "plasma_r") {
4923 return plasma_r(N);
4924 }
4925 if (cmap == "viridis_r") {
4926 return viridis_r(N);
4927 }
4928 if (cmap == "White") {
4929 return White(N);
4930 }
4931 if (cmap == "Grey") {
4932 return Grey(N);
4933 }
4934 if (cmap == "Black") {
4935 return Black(N);
4936 }
4937 if (cmap == "Red") {
4938 return Red(N);
4939 }
4940 if (cmap == "Blue") {
4941 return Blue(N);
4942 }
4943 if (cmap == "tuewarmred") {
4944 return tuewarmred(N);
4945 }
4946 if (cmap == "tuedarkblue") {
4947 return tuedarkblue(N);
4948 }
4949 if (cmap == "tueblue") {
4950 return tueblue(N);
4951 }
4952 if (cmap == "tuelightblue") {
4953 return tuelightblue(N);
4954 }
4955 if (cmap == "Apricot") {
4956 return Apricot(N);
4957 }
4958 if (cmap == "Aquamarine") {
4959 return Aquamarine(N);
4960 }
4961 if (cmap == "Bittersweet") {
4962 return Bittersweet(N);
4963 }
4964 if (cmap == "BlueGreen") {
4965 return BlueGreen(N);
4966 }
4967 if (cmap == "BlueViolet") {
4968 return BlueViolet(N);
4969 }
4970 if (cmap == "BrickRed") {
4971 return BrickRed(N);
4972 }
4973 if (cmap == "Brown") {
4974 return Brown(N);
4975 }
4976 if (cmap == "BurntOrange") {
4977 return BurntOrange(N);
4978 }
4979 if (cmap == "CadetBlue") {
4980 return CadetBlue(N);
4981 }
4982 if (cmap == "CarnationPink") {
4983 return CarnationPink(N);
4984 }
4985 if (cmap == "Cerulean") {
4986 return Cerulean(N);
4987 }
4988 if (cmap == "CornflowerBlue") {
4989 return CornflowerBlue(N);
4990 }
4991 if (cmap == "Cyan") {
4992 return Cyan(N);
4993 }
4994 if (cmap == "Dandelion") {
4995 return Dandelion(N);
4996 }
4997 if (cmap == "DarkOrchid") {
4998 return DarkOrchid(N);
4999 }
5000 if (cmap == "Emerald") {
5001 return Emerald(N);
5002 }
5003 if (cmap == "ForestGreen") {
5004 return ForestGreen(N);
5005 }
5006 if (cmap == "Fuchsia") {
5007 return Fuchsia(N);
5008 }
5009 if (cmap == "Goldenrod") {
5010 return Goldenrod(N);
5011 }
5012 if (cmap == "Gray") {
5013 return Gray(N);
5014 }
5015 if (cmap == "Green") {
5016 return Green(N);
5017 }
5018 if (cmap == "GreenYellow") {
5019 return GreenYellow(N);
5020 }
5021 if (cmap == "JungleGreen") {
5022 return JungleGreen(N);
5023 }
5024 if (cmap == "Lavender") {
5025 return Lavender(N);
5026 }
5027 if (cmap == "LimeGreen") {
5028 return LimeGreen(N);
5029 }
5030 if (cmap == "Magenta") {
5031 return Magenta(N);
5032 }
5033 if (cmap == "Mahogany") {
5034 return Mahogany(N);
5035 }
5036 if (cmap == "Maroon") {
5037 return Maroon(N);
5038 }
5039 if (cmap == "Melon") {
5040 return Melon(N);
5041 }
5042 if (cmap == "MidnightBlue") {
5043 return MidnightBlue(N);
5044 }
5045 if (cmap == "Mulberry") {
5046 return Mulberry(N);
5047 }
5048 if (cmap == "NavyBlue") {
5049 return NavyBlue(N);
5050 }
5051 if (cmap == "OliveGreen") {
5052 return OliveGreen(N);
5053 }
5054 if (cmap == "Orange") {
5055 return Orange(N);
5056 }
5057 if (cmap == "OrangeRed") {
5058 return OrangeRed(N);
5059 }
5060 if (cmap == "Orchid") {
5061 return Orchid(N);
5062 }
5063 if (cmap == "Peach") {
5064 return Peach(N);
5065 }
5066 if (cmap == "Periwinkle") {
5067 return Periwinkle(N);
5068 }
5069 if (cmap == "PineGreen") {
5070 return PineGreen(N);
5071 }
5072 if (cmap == "Plum") {
5073 return Plum(N);
5074 }
5075 if (cmap == "ProcessBlue") {
5076 return ProcessBlue(N);
5077 }
5078 if (cmap == "Purple") {
5079 return Purple(N);
5080 }
5081 if (cmap == "RawSienna") {
5082 return RawSienna(N);
5083 }
5084 if (cmap == "RedOrange") {
5085 return RedOrange(N);
5086 }
5087 if (cmap == "RedViolet") {
5088 return RedViolet(N);
5089 }
5090 if (cmap == "Rhodamine") {
5091 return Rhodamine(N);
5092 }
5093 if (cmap == "RoyalBlue") {
5094 return RoyalBlue(N);
5095 }
5096 if (cmap == "RoyalPurple") {
5097 return RoyalPurple(N);
5098 }
5099 if (cmap == "RubineRed") {
5100 return RubineRed(N);
5101 }
5102 if (cmap == "Salmon") {
5103 return Salmon(N);
5104 }
5105 if (cmap == "SeaGreen") {
5106 return SeaGreen(N);
5107 }
5108 if (cmap == "Sepia") {
5109 return Sepia(N);
5110 }
5111 if (cmap == "SkyBlue") {
5112 return SkyBlue(N);
5113 }
5114 if (cmap == "SpringGreen") {
5115 return SpringGreen(N);
5116 }
5117 if (cmap == "Tan") {
5118 return Tan(N);
5119 }
5120 if (cmap == "TealBlue") {
5121 return TealBlue(N);
5122 }
5123 if (cmap == "Thistle") {
5124 return Thistle(N);
5125 }
5126 if (cmap == "Turquoise") {
5127 return Turquoise(N);
5128 }
5129 if (cmap == "Violet") {
5130 return Violet(N);
5131 }
5132 if (cmap == "VioletRed") {
5133 return VioletRed(N);
5134 }
5135 if (cmap == "WildStrawberry") {
5136 return WildStrawberry(N);
5137 }
5138 if (cmap == "Yellow") {
5139 return Yellow(N);
5140 }
5141 if (cmap == "YellowGreen") {
5142 return YellowGreen(N);
5143 }
5144 if (cmap == "YellowOrange") {
5145 return YellowOrange(N);
5146 }
5147
5148 throw std::runtime_error("Colormap not recognized");
5149}
5150
5157{
5159 {0, 0, 0}, // 0 , Black (SYSTEM) , #000000, hsl(0,0%,0%)
5160 {128, 0, 0}, // 1 , Maroon (SYSTEM), #800000, hsl(0,100%,25%)
5161 {0, 128, 0}, // 2 , Green (SYSTEM) , #008000, hsl(120,100%,25%)
5162 {128, 128, 0}, // 3 , Olive (SYSTEM) , #808000, hsl(60,100%,25%)
5163 {0, 0, 128}, // 4 , Navy (SYSTEM) , #000080, hsl(240,100%,25%)
5164 {128, 0, 128}, // 5 , Purple (SYSTEM), #800080, hsl(300,100%,25%)
5165 {0, 128, 128}, // 6 , Teal (SYSTEM) , #008080, hsl(180,100%,25%)
5166 {192, 192, 192}, // 7 , Silver (SYSTEM), #c0c0c0, hsl(0,0%,75%)
5167 {128, 128, 128}, // 8 , Grey (SYSTEM) , #808080, hsl(0,0%,50%)
5168 {255, 0, 0}, // 9 , Red (SYSTEM) , #ff0000, hsl(0,100%,50%)
5169 {0, 255, 0}, // 10 , Lime (SYSTEM) , #00ff00, hsl(120,100%,50%)
5170 {255, 255, 0}, // 11 , Yellow (SYSTEM), #ffff00, hsl(60,100%,50%)
5171 {0, 0, 255}, // 12 , Blue (SYSTEM) , #0000ff, hsl(240,100%,50%)
5172 {255, 0, 255}, // 13 , Fuchsia (SYSTEM,) #ff00ff, hsl(300,100%,50%)
5173 {0, 255, 255}, // 14 , Aqua (SYSTEM) , #00ffff, hsl(180,100%,50%)
5174 {255, 255, 255}, // 15 , White (SYSTEM) , #ffffff, hsl(0,0%,100%)
5175 {0, 0, 0}, // 16 , Grey0 , #000000, hsl(0,0%,0%)
5176 {0, 0, 95}, // 17 , NavyBlue , #00005f, hsl(240,100%,18%)
5177 {0, 0, 135}, // 18 , DarkBlue , #000087, hsl(240,100%,26%)
5178 {0, 0, 175}, // 19 , Blue3 , #0000af, hsl(240,100%,34%)
5179 {0, 0, 215}, // 20 , Blue3 , #0000d7, hsl(240,100%,42%)
5180 {0, 0, 255}, // 21 , Blue1 , #0000ff, hsl(240,100%,50%)
5181 {0, 95, 0}, // 22 , DarkGreen , #005f00, hsl(120,100%,18%)
5182 {0, 95, 95}, // 23 , DeepSkyBlue4 , #005f5f, hsl(180,100%,18%)
5183 {0, 95, 135}, // 24 , DeepSkyBlue4 , #005f87, hsl(97,100%,26%)
5184 {0, 95, 175}, // 25 , DeepSkyBlue4 , #005faf, hsl(07,100%,34%)
5185 {0, 95, 215}, // 26 , DodgerBlue3 , #005fd7, hsl(13,100%,42%)
5186 {0, 95, 255}, // 27 , DodgerBlue2 , #005fff, hsl(17,100%,50%)
5187 {0, 135, 0}, // 28 , Green4 , #008700, hsl(120,100%,26%)
5188 {0, 135, 95}, // 29 , SpringGreen4 , #00875f, hsl(62,100%,26%)
5189 {0, 135, 135}, // 30 , Turquoise4 , #008787, hsl(180,100%,26%)
5190 {0, 135, 175}, // 31 , DeepSkyBlue3 , #0087af, hsl(93,100%,34%)
5191 {0, 135, 215}, // 32 , DeepSkyBlue3 , #0087d7, hsl(02,100%,42%)
5192 {0, 135, 255}, // 33 , DodgerBlue1 , #0087ff, hsl(08,100%,50%)
5193 {0, 175, 0}, // 34 , Green3 , #00af00, hsl(120,100%,34%)
5194 {0, 175, 95}, // 35 , SpringGreen3 , #00af5f, hsl(52,100%,34%)
5195 {0, 175, 135}, // 36 , DarkCyan , #00af87, hsl(66,100%,34%)
5196 {0, 175, 175}, // 37 , LightSeaGreen , #00afaf, hsl(180,100%,34%)
5197 {0, 175, 215}, // 38 , DeepSkyBlue2 , #00afd7, hsl(91,100%,42%)
5198 {0, 175, 255}, // 39 , DeepSkyBlue1 , #00afff, hsl(98,100%,50%)
5199 {0, 215, 0}, // 40 , Green3 , #00d700, hsl(120,100%,42%)
5200 {0, 215, 95}, // 41 , SpringGreen3 , #00d75f, hsl(46,100%,42%)
5201 {0, 215, 135}, // 42 , SpringGreen2 , #00d787, hsl(57,100%,42%)
5202 {0, 215, 175}, // 43 , Cyan3 , #00d7af, hsl(68,100%,42%)
5203 {0, 215, 215}, // 44 , DarkTurquoise , #00d7d7, hsl(180,100%,42%)
5204 {0, 215, 255}, // 45 , Turquoise2 , #00d7ff, hsl(89,100%,50%)
5205 {0, 255, 0}, // 46 , Green1 , #00ff00, hsl(120,100%,50%)
5206 {0, 255, 95}, // 47 , SpringGreen2 , #00ff5f, hsl(42,100%,50%)
5207 {0, 255, 135}, // 48 , SpringGreen1 , #00ff87, hsl(51,100%,50%)
5208 {0, 255, 175}, // 49 , MediumSpringGre,en#00ffaf, hsl(61,100%,50%)
5209 {0, 255, 215}, // 50 , Cyan2 , #00ffd7, hsl(70,100%,50%)
5210 {0, 255, 255}, // 51 , Cyan1 , #00ffff, hsl(180,100%,50%)
5211 {95, 0, 0}, // 52 , DarkRed , #5f0000, hsl(0,100%,18%)
5212 {95, 0, 95}, // 53 , DeepPink4 , #5f005f, hsl(300,100%,18%)
5213 {95, 0, 135}, // 54 , Purple4 , #5f0087, hsl(82,100%,26%)
5214 {95, 0, 175}, // 55 , Purple4 , #5f00af, hsl(72,100%,34%)
5215 {95, 0, 215}, // 56 , Purple3 , #5f00d7, hsl(66,100%,42%)
5216 {95, 0, 255}, // 57 , BlueViolet , #5f00ff, hsl(62,100%,50%)
5217 {95, 95, 0}, // 58 , Orange4 , #5f5f00, hsl(60,100%,18%)
5218 {95, 95, 95}, // 59 , Grey37 , #5f5f5f, hsl(0,0%,37%)
5219 {95, 95, 135}, // 60 , MediumPurple4 , #5f5f87, hsl(240,17%,45%)
5220 {95, 95, 175}, // 61 , SlateBlue3 , #5f5faf, hsl(240,33%,52%)
5221 {95, 95, 215}, // 62 , SlateBlue3 , #5f5fd7, hsl(240,60%,60%)
5222 {95, 95, 255}, // 63 , RoyalBlue1 , #5f5fff, hsl(240,100%,68%)
5223 {95, 135, 0}, // 64 , Chartreuse4 , #5f8700, hsl(7,100%,26%)
5224 {95, 135, 95}, // 65 , DarkSeaGreen4 , #5f875f, hsl(120,17%,45%)
5225 {95, 135, 135}, // 66 , PaleTurquoise4 , #5f8787, hsl(180,17%,45%)
5226 {95, 135, 175}, // 67 , SteelBlue , #5f87af, hsl(210,33%,52%)
5227 {95, 135, 215}, // 68 , SteelBlue3 , #5f87d7, hsl(220,60%,60%)
5228 {95, 135, 255}, // 69 , CornflowerBlue , #5f87ff, hsl(225,100%,68%)
5229 {95, 175, 0}, // 70 , Chartreuse3 , #5faf00, hsl(7,100%,34%)
5230 {95, 175, 95}, // 71 , DarkSeaGreen4 , #5faf5f, hsl(120,33%,52%)
5231 {95, 175, 135}, // 72 , CadetBlue , #5faf87, hsl(150,33%,52%)
5232 {95, 175, 175}, // 73 , CadetBlue , #5fafaf, hsl(180,33%,52%)
5233 {95, 175, 215}, // 74 , SkyBlue3 , #5fafd7, hsl(200,60%,60%)
5234 {95, 175, 255}, // 75 , SteelBlue1 , #5fafff, hsl(210,100%,68%)
5235 {95, 215, 0}, // 76 , Chartreuse3 , #5fd700, hsl(3,100%,42%)
5236 {95, 215, 95}, // 77 , PaleGreen3 , #5fd75f, hsl(120,60%,60%)
5237 {95, 215, 135}, // 78 , SeaGreen3 , #5fd787, hsl(140,60%,60%)
5238 {95, 215, 175}, // 79 , Aquamarine3 , #5fd7af, hsl(160,60%,60%)
5239 {95, 215, 215}, // 80 , MediumTurquoise, #5fd7d7, hsl(180,60%,60%)
5240 {95, 215, 255}, // 81 , SteelBlue1 , #5fd7ff, hsl(195,100%,68%)
5241 {95, 255, 0}, // 82 , Chartreuse2 , #5fff00, hsl(7,100%,50%)
5242 {95, 255, 95}, // 83 , SeaGreen2 , #5fff5f, hsl(120,100%,68%)
5243 {95, 255, 135}, // 84 , SeaGreen1 , #5fff87, hsl(135,100%,68%)
5244 {95, 255, 175}, // 85 , SeaGreen1 , #5fffaf, hsl(150,100%,68%)
5245 {95, 255, 215}, // 86 , Aquamarine1 , #5fffd7, hsl(165,100%,68%)
5246 {95, 255, 255}, // 87 , DarkSlateGray2 , #5fffff, hsl(180,100%,68%)
5247 {135, 0, 0}, // 88 , DarkRed , #870000, hsl(0,100%,26%)
5248 {135, 0, 95}, // 89 , DeepPink4 , #87005f, hsl(17,100%,26%)
5249 {135, 0, 135}, // 90 , DarkMagenta , #870087, hsl(300,100%,26%)
5250 {135, 0, 175}, // 91 , DarkMagenta , #8700af, hsl(86,100%,34%)
5251 {135, 0, 215}, // 92 , DarkViolet , #8700d7, hsl(77,100%,42%)
5252 {135, 0, 255}, // 93 , Purple , #8700ff, hsl(71,100%,50%)
5253 {135, 95, 0}, // 94 , Orange4 , #875f00, hsl(2,100%,26%)
5254 {135, 95, 95}, // 95 , LightPink4 , #875f5f, hsl(0,17%,45%)
5255 {135, 95, 135}, // 96 , Plum4 , #875f87, hsl(300,17%,45%)
5256 {135, 95, 175}, // 97 , MediumPurple3 , #875faf, hsl(270,33%,52%)
5257 {135, 95, 215}, // 98 , MediumPurple3 , #875fd7, hsl(260,60%,60%)
5258 {135, 95, 255}, // 99 , SlateBlue1 , #875fff, hsl(255,100%,68%)
5259 {135, 135, 0}, // 100, Yellow4 , #878700, hsl(60,100%,26%)
5260 {135, 135, 95}, // 101, Wheat4 , #87875f, hsl(60,17%,45%)
5261 {135, 135, 135}, // 102, Grey53 , #878787, hsl(0,0%,52%)
5262 {135, 135, 175}, // 103, LightSlateGrey , #8787af, hsl(240,20%,60%)
5263 {135, 135, 215}, // 104, MediumPurple , #8787d7, hsl(240,50%,68%)
5264 {135, 135, 255}, // 105, LightSlateBlue , #8787ff, hsl(240,100%,76%)
5265 {135, 175, 0}, // 106, Yellow4 , #87af00, hsl(3,100%,34%)
5266 {135, 175, 95}, // 107, DarkOliveGreen3, #87af5f, hsl(90,33%,52%)
5267 {135, 175, 135}, // 108, DarkSeaGreen , #87af87, hsl(120,20%,60%)
5268 {135, 175, 175}, // 109, LightSkyBlue3 , #87afaf, hsl(180,20%,60%)
5269 {135, 175, 215}, // 110, LightSkyBlue3 , #87afd7, hsl(210,50%,68%)
5270 {135, 175, 255}, // 111, SkyBlue2 , #87afff, hsl(220,100%,76%)
5271 {135, 215, 0}, // 112, Chartreuse2 , #87d700, hsl(2,100%,42%)
5272 {135, 215, 95}, // 113, DarkOliveGreen3, #87d75f, hsl(100,60%,60%)
5273 {135, 215, 135}, // 114, PaleGreen3 , #87d787, hsl(120,50%,68%)
5274 {135, 215, 175}, // 115, DarkSeaGreen3 , #87d7af, hsl(150,50%,68%)
5275 {135, 215, 215}, // 116, DarkSlateGray3 , #87d7d7, hsl(180,50%,68%)
5276 {135, 215, 255}, // 117, SkyBlue1 , #87d7ff, hsl(200,100%,76%)
5277 {135, 255, 0}, // 118, Chartreuse1 , #87ff00, hsl(8,100%,50%)
5278 {135, 255, 95}, // 119, LightGreen , #87ff5f, hsl(105,100%,68%)
5279 {135, 255, 135}, // 120, LightGreen , #87ff87, hsl(120,100%,76%)
5280 {135, 255, 175}, // 121, PaleGreen1 , #87ffaf, hsl(140,100%,76%)
5281 {135, 255, 215}, // 122, Aquamarine1 , #87ffd7, hsl(160,100%,76%)
5282 {135, 255, 255}, // 123, DarkSlateGray1 , #87ffff, hsl(180,100%,76%)
5283 {175, 0, 0}, // 124, Red3 , #af0000, hsl(0,100%,34%)
5284 {175, 0, 95}, // 125, DeepPink4 , #af005f, hsl(27,100%,34%)
5285 {175, 0, 135}, // 126, MediumVioletRed, #af0087, hsl(13,100%,34%)
5286 {175, 0, 175}, // 127, Magenta3 , #af00af, hsl(300,100%,34%)
5287 {175, 0, 215}, // 128, DarkViolet , #af00d7, hsl(88,100%,42%)
5288 {175, 0, 255}, // 129, Purple , #af00ff, hsl(81,100%,50%)
5289 {175, 95, 0}, // 130, DarkOrange3 , #af5f00, hsl(2,100%,34%)
5290 {175, 95, 95}, // 131, IndianRed , #af5f5f, hsl(0,33%,52%)
5291 {175, 95, 135}, // 132, HotPink3 , #af5f87, hsl(330,33%,52%)
5292 {175, 95, 175}, // 133, MediumOrchid3 , #af5faf, hsl(300,33%,52%)
5293 {175, 95, 215}, // 134, MediumOrchid , #af5fd7, hsl(280,60%,60%)
5294 {175, 95, 255}, // 135, MediumPurple2 , #af5fff, hsl(270,100%,68%)
5295 {175, 135, 0}, // 136, DarkGoldenrod , #af8700, hsl(6,100%,34%)
5296 {175, 135, 95}, // 137, LightSalmon3 , #af875f, hsl(30,33%,52%)
5297 {175, 135, 135}, // 138, RosyBrown , #af8787, hsl(0,20%,60%)
5298 {175, 135, 175}, // 139, Grey63 , #af87af, hsl(300,20%,60%)
5299 {175, 135, 215}, // 140, MediumPurple2 , #af87d7, hsl(270,50%,68%)
5300 {175, 135, 255}, // 141, MediumPurple1 , #af87ff, hsl(260,100%,76%)
5301 {175, 175, 0}, // 142, Gold3 , #afaf00, hsl(60,100%,34%)
5302 {175, 175, 95}, // 143, DarkKhaki , #afaf5f, hsl(60,33%,52%)
5303 {175, 175, 135}, // 144, NavajoWhite3 , #afaf87, hsl(60,20%,60%)
5304 {175, 175, 175}, // 145, Grey69 , #afafaf, hsl(0,0%,68%)
5305 {175, 175, 215}, // 146, LightSteelBlue3, #afafd7, hsl(240,33%,76%)
5306 {175, 175, 255}, // 147, LightSteelBlue , #afafff, hsl(240,100%,84%)
5307 {175, 215, 0}, // 148, Yellow3 , #afd700, hsl(1,100%,42%)
5308 {175, 215, 95}, // 149, DarkOliveGreen3, #afd75f, hsl(80,60%,60%)
5309 {175, 215, 135}, // 150, DarkSeaGreen3 , #afd787, hsl(90,50%,68%)
5310 {175, 215, 175}, // 151, DarkSeaGreen2 , #afd7af, hsl(120,33%,76%)
5311 {175, 215, 215}, // 152, LightCyan3 , #afd7d7, hsl(180,33%,76%)
5312 {175, 215, 255}, // 153, LightSkyBlue1 , #afd7ff, hsl(210,100%,84%)
5313 {175, 255, 0}, // 154, GreenYellow , #afff00, hsl(8,100%,50%)
5314 {175, 255, 95}, // 155, DarkOliveGreen2, #afff5f, hsl(90,100%,68%)
5315 {175, 255, 135}, // 156, PaleGreen1 , #afff87, hsl(100,100%,76%)
5316 {175, 255, 175}, // 157, DarkSeaGreen2 , #afffaf, hsl(120,100%,84%)
5317 {175, 255, 215}, // 158, DarkSeaGreen1 , #afffd7, hsl(150,100%,84%)
5318 {175, 255, 255}, // 159, PaleTurquoise1 , #afffff, hsl(180,100%,84%)
5319 {215, 0, 0}, // 160, Red3 , #d70000, hsl(0,100%,42%)
5320 {215, 0, 95}, // 161, DeepPink3 , #d7005f, hsl(33,100%,42%)
5321 {215, 0, 135}, // 162, DeepPink3 , #d70087, hsl(22,100%,42%)
5322 {215, 0, 175}, // 163, Magenta3 , #d700af, hsl(11,100%,42%)
5323 {215, 0, 215}, // 164, Magenta3 , #d700d7, hsl(300,100%,42%)
5324 {215, 0, 255}, // 165, Magenta2 , #d700ff, hsl(90,100%,50%)
5325 {215, 95, 0}, // 166, DarkOrange3 , #d75f00, hsl(6,100%,42%)
5326 {215, 95, 95}, // 167, IndianRed , #d75f5f, hsl(0,60%,60%)
5327 {215, 95, 135}, // 168, HotPink3 , #d75f87, hsl(340,60%,60%)
5328 {215, 95, 175}, // 169, HotPink2 , #d75faf, hsl(320,60%,60%)
5329 {215, 95, 215}, // 170, Orchid , #d75fd7, hsl(300,60%,60%)
5330 {215, 95, 255}, // 171, MediumOrchid1 , #d75fff, hsl(285,100%,68%)
5331 {215, 135, 0}, // 172, Orange3 , #d78700, hsl(7,100%,42%)
5332 {215, 135, 95}, // 173, LightSalmon3 , #d7875f, hsl(20,60%,60%)
5333 {215, 135, 135}, // 174, LightPink3 , #d78787, hsl(0,50%,68%)
5334 {215, 135, 175}, // 175, Pink3 , #d787af, hsl(330,50%,68%)
5335 {215, 135, 215}, // 176, Plum3 , #d787d7, hsl(300,50%,68%)
5336 {215, 135, 255}, // 177, Violet , #d787ff, hsl(280,100%,76%)
5337 {215, 175, 0}, // 178, Gold3 , #d7af00, hsl(8,100%,42%)
5338 {215, 175, 95}, // 179, LightGoldenrod3, #d7af5f, hsl(40,60%,60%)
5339 {215, 175, 135}, // 180, Tan , #d7af87, hsl(30,50%,68%)
5340 {215, 175, 175}, // 181, MistyRose3 , #d7afaf, hsl(0,33%,76%)
5341 {215, 175, 215}, // 182, Thistle3 , #d7afd7, hsl(300,33%,76%)
5342 {215, 175, 255}, // 183, Plum2 , #d7afff, hsl(270,100%,84%)
5343 {215, 215, 0}, // 184, Yellow3 , #d7d700, hsl(60,100%,42%)
5344 {215, 215, 95}, // 185, Khaki3 , #d7d75f, hsl(60,60%,60%)
5345 {215, 215, 135}, // 186, LightGoldenrod2, #d7d787, hsl(60,50%,68%)
5346 {215, 215, 175}, // 187, LightYellow3 , #d7d7af, hsl(60,33%,76%)
5347 {215, 215, 215}, // 188, Grey84 , #d7d7d7, hsl(0,0%,84%)
5348 {215, 215, 255}, // 189, LightSteelBlue1, #d7d7ff, hsl(240,100%,92%)
5349 {215, 255, 0}, // 190, Yellow2 , #d7ff00, hsl(9,100%,50%)
5350 {215, 255, 95}, // 191, DarkOliveGreen1, #d7ff5f, hsl(75,100%,68%)
5351 {215, 255, 135}, // 192, DarkOliveGreen1, #d7ff87, hsl(80,100%,76%)
5352 {215, 255, 175}, // 193, DarkSeaGreen1 , #d7ffaf, hsl(90,100%,84%)
5353 {215, 255, 215}, // 194, Honeydew2 , #d7ffd7, hsl(120,100%,92%)
5354 {215, 255, 255}, // 195, LightCyan1 , #d7ffff, hsl(180,100%,92%)
5355 {255, 0, 0}, // 196, Red1 , #ff0000, hsl(0,100%,50%)
5356 {255, 0, 95}, // 197, DeepPink2 , #ff005f, hsl(37,100%,50%)
5357 {255, 0, 135}, // 198, DeepPink1 , #ff0087, hsl(28,100%,50%)
5358 {255, 0, 175}, // 199, DeepPink1 , #ff00af, hsl(18,100%,50%)
5359 {255, 0, 215}, // 200, Magenta2 , #ff00d7, hsl(09,100%,50%)
5360 {255, 0, 255}, // 201, Magenta1 , #ff00ff, hsl(300,100%,50%)
5361 {255, 95, 0}, // 202, OrangeRed1 , #ff5f00, hsl(2,100%,50%)
5362 {255, 95, 95}, // 203, IndianRed1 , #ff5f5f, hsl(0,100%,68%)
5363 {255, 95, 135}, // 204, IndianRed1 , #ff5f87, hsl(345,100%,68%)
5364 {255, 95, 175}, // 205, HotPink , #ff5faf, hsl(330,100%,68%)
5365 {255, 95, 215}, // 206, HotPink , #ff5fd7, hsl(315,100%,68%)
5366 {255, 95, 255}, // 207, MediumOrchid1 , #ff5fff, hsl(300,100%,68%)
5367 {255, 135, 0}, // 208, DarkOrange , #ff8700, hsl(1,100%,50%)
5368 {255, 135, 95}, // 209, Salmon1 , #ff875f, hsl(15,100%,68%)
5369 {255, 135, 135}, // 210, LightCoral , #ff8787, hsl(0,100%,76%)
5370 {255, 135, 175}, // 211, PaleVioletRed1 , #ff87af, hsl(340,100%,76%)
5371 {255, 135, 215}, // 212, Orchid2 , #ff87d7, hsl(320,100%,76%)
5372 {255, 135, 255}, // 213, Orchid1 , #ff87ff, hsl(300,100%,76%)
5373 {255, 175, 0}, // 214, Orange1 , #ffaf00, hsl(1,100%,50%)
5374 {255, 175, 95}, // 215, SandyBrown , #ffaf5f, hsl(30,100%,68%)
5375 {255, 175, 135}, // 216, LightSalmon1 , #ffaf87, hsl(20,100%,76%)
5376 {255, 175, 175}, // 217, LightPink1 , #ffafaf, hsl(0,100%,84%)
5377 {255, 175, 215}, // 218, Pink1 , #ffafd7, hsl(330,100%,84%)
5378 {255, 175, 255}, // 219, Plum1 , #ffafff, hsl(300,100%,84%)
5379 {255, 215, 0}, // 220, Gold1 , #ffd700, hsl(0,100%,50%)
5380 {255, 215, 95}, // 221, LightGoldenrod2, #ffd75f, hsl(45,100%,68%)
5381 {255, 215, 135}, // 222, LightGoldenrod2, #ffd787, hsl(40,100%,76%)
5382 {255, 215, 175}, // 223, NavajoWhite1 , #ffd7af, hsl(30,100%,84%)
5383 {255, 215, 215}, // 224, MistyRose1 , #ffd7d7, hsl(0,100%,92%)
5384 {255, 215, 255}, // 225, Thistle1 , #ffd7ff, hsl(300,100%,92%)
5385 {255, 255, 0}, // 226, Yellow1 , #ffff00, hsl(60,100%,50%)
5386 {255, 255, 95}, // 227, LightGoldenrod1, #ffff5f, hsl(60,100%,68%)
5387 {255, 255, 135}, // 228, Khaki1 , #ffff87, hsl(60,100%,76%)
5388 {255, 255, 175}, // 229, Wheat1 , #ffffaf, hsl(60,100%,84%)
5389 {255, 255, 215}, // 230, Cornsilk1 , #ffffd7, hsl(60,100%,92%)
5390 {255, 255, 255}, // 231, Grey100 , #ffffff, hsl(0,0%,100%)
5391 {8, 8, 8}, // 232, Grey3 , #080808, hsl(0,0%,3%)
5392 {18, 18, 18}, // 233, Grey7 , #121212, hsl(0,0%,7%)
5393 {28, 28, 28}, // 234, Grey11 , #1c1c1c, hsl(0,0%,10%)
5394 {38, 38, 38}, // 235, Grey15 , #262626, hsl(0,0%,14%)
5395 {48, 48, 48}, // 236, Grey19 , #303030, hsl(0,0%,18%)
5396 {58, 58, 58}, // 237, Grey23 , #3a3a3a, hsl(0,0%,22%)
5397 {68, 68, 68}, // 238, Grey27 , #444444, hsl(0,0%,26%)
5398 {78, 78, 78}, // 239, Grey30 , #4e4e4e, hsl(0,0%,30%)
5399 {88, 88, 88}, // 240, Grey35 , #585858, hsl(0,0%,34%)
5400 {98, 98, 98}, // 241, Grey39 , #626262, hsl(0,0%,37%)
5401 {108, 108, 108}, // 242, Grey42 , #6c6c6c, hsl(0,0%,40%)
5402 {118, 118, 118}, // 243, Grey46 , #767676, hsl(0,0%,46%)
5403 {128, 128, 128}, // 244, Grey50 , #808080, hsl(0,0%,50%)
5404 {138, 138, 138}, // 245, Grey54 , #8a8a8a, hsl(0,0%,54%)
5405 {148, 148, 148}, // 246, Grey58 , #949494, hsl(0,0%,58%)
5406 {158, 158, 158}, // 247, Grey62 , #9e9e9e, hsl(0,0%,61%)
5407 {168, 168, 168}, // 248, Grey66 , #a8a8a8, hsl(0,0%,65%)
5408 {178, 178, 178}, // 249, Grey70 , #b2b2b2, hsl(0,0%,69%)
5409 {188, 188, 188}, // 250, Grey74 , #bcbcbc, hsl(0,0%,73%)
5410 {198, 198, 198}, // 251, Grey78 , #c6c6c6, hsl(0,0%,77%)
5411 {208, 208, 208}, // 252, Grey82 , #d0d0d0, hsl(0,0%,81%)
5412 {218, 218, 218}, // 253, Grey85 , #dadada, hsl(0,0%,85%)
5413 {228, 228, 228}, // 254, Grey89 , #e4e4e4, hsl(0,0%,89%)
5414 {238, 238, 238}, // 255, Grey93 , #eeeeee, hsl(0,0%,93%)
5415 };
5416
5417 return data / 255.0;
5418}
5419
5426{
5428 {247, 49, 49}, // 0: warm red
5429 {214, 0, 74}, // 1: red
5430 {214, 0, 123}, // 2: pink
5431 {173, 32, 173}, // 3: dark pink
5432 {16, 16, 115}, // 4: dark blue
5433 {0, 102, 204}, // 5: blue
5434 {0, 162, 222}, // 6: light blue
5435 {255, 154, 0}, // 7: orange
5436 {255, 221, 0}, // 8: yellow
5437 {206, 223, 0}, // 9: lemon
5438 {132, 210, 0}, // 10: lime
5439 {0, 172, 130}, // 11: green
5440 {0, 146, 181}, // 12: cornflower blue
5441 };
5442
5443 return data / 255.0;
5444}
5445
5452{
5453 return xt::flip(xterm(), 0);
5454}
5455
5462{
5463 return xt::flip(tue(), 0);
5464}
5465
5472inline array_type::tensor<double, 2> colorcycle(const std::string& cmap)
5473{
5474 if (cmap == "xterm") {
5475 return xterm();
5476 }
5477
5478 if (cmap == "tue") {
5479 return tue();
5480 }
5481
5482 if (cmap == "xterm_r") {
5483 return xterm_r();
5484 }
5485
5486 if (cmap == "tue_r") {
5487 return tue_r();
5488 }
5489
5490 throw std::runtime_error("Color-cycle not recognized");
5491}
5492
5502
5503namespace detail {
5504
5505double euclidean_metric(double R1, double G1, double B1, double R2, double G2, double B2)
5506{
5507 return std::pow(R1 - R2, 2.0) + std::pow(G1 - G2, 2.0) + std::pow(B1 - B2, 2.0);
5508}
5509
5510// https://stackoverflow.com/a/1847112/2646505
5511double fast_perceptual_metric(double R1, double G1, double B1, double R2, double G2, double B2)
5512{
5513 return 0.3 * std::pow(R1 - R2, 2.0) + 0.59 * std::pow(G1 - G2, 2.0) +
5514 0.11 * std::pow(B1 - B2, 2.0);
5515}
5516
5517// https://en.wikipedia.org/wiki/Color_difference
5518double perceptual_metric(double R1, double G1, double B1, double R2, double G2, double B2)
5519{
5520 double r_ = (R1 + R2) / 2.0;
5521 double DR = (R1 - R2);
5522 double DG = (G1 - G2);
5523 double DB = (B1 - B2);
5524
5525 return 2 * DR * DR + 4 * DG * DG + 3 * DB * DB + ((r_ * (DR * DR - DB * DB)));
5526}
5527
5528} // namespace detail
5529
5541 metric distance_metric = euclidean
5542)
5543{
5544 array_type::tensor<size_t, 1> idx = xt::empty<size_t>({A.shape(0)});
5545 array_type::tensor<double, 1> d = xt::empty<double>({B.shape(0)});
5546
5547 auto fmetric = detail::euclidean_metric;
5548
5549 if (distance_metric == metric::fast_perceptual) {
5550 fmetric = detail::fast_perceptual_metric;
5551 }
5552
5553 if (distance_metric == metric::perceptual) {
5554 fmetric = detail::perceptual_metric;
5555 }
5556
5557 for (size_t i = 0; i < A.shape(0); ++i) {
5558 for (size_t j = 0; j < B.shape(0); ++j) {
5559 d(j) = fmetric(A(i, 0), A(i, 1), A(i, 2), B(j, 0), B(j, 1), B(j, 2));
5560 }
5561 idx(i) = xt::argmin(d)(0);
5562 }
5563
5564 return idx;
5565}
5566
5567} // namespace cppcolormap
5568
5569#endif
array_type::tensor< double, 2 > Set3_r(size_t N=12)
Inverse of cppcolormap::Set3.
array_type::tensor< double, 2 > viridis_r(size_t N=256)
Inverse of cppcolormap::viridis.
array_type::tensor< double, 2 > Oranges(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > terrain(size_t N=6)
matplotlib colormap, from fraction.
array_type::tensor< double, 2 > seismic_r(size_t N=6)
Inverse of cppcolormap::seismic.
array_type::tensor< double, 2 > RedOrange(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Paired_r(size_t N=12)
Inverse of cppcolormap::Paired.
array_type::tensor< double, 2 > plasma(size_t N=256)
matplotlib colormap.
array_type::tensor< double, 2 > RdPu(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > Set2_r(size_t N=8)
Inverse of cppcolormap::Set2.
array_type::tensor< double, 2 > YlGn(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > Set1_r(size_t N=9)
Inverse of cppcolormap::Set1.
array_type::tensor< double, 2 > plasma_r(size_t N=256)
Inverse of cppcolormap::plasma.
array_type::tensor< double, 2 > afmhot(size_t N=256)
GNU plot colormap.
array_type::tensor< double, 2 > viridis(size_t N=256)
matplotlib colormap.
array_type::tensor< double, 2 > RedViolet(size_t N=1)
dvips color.
array_type::tensor< double, 2 > JungleGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Blues_r(size_t N=9)
Inverse of cppcolormap::Blues.
array_type::tensor< double, 2 > PuOr(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > Orchid(size_t N=1)
dvips color.
array_type::tensor< double, 2 > PiYG(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > Periwinkle(size_t N=1)
dvips color.
std::string version()
Return version string.
array_type::tensor< double, 2 > Set1(size_t N=9)
Qualitative colormap.
array_type::tensor< double, 2 > Cyan(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Greens_r(size_t N=9)
Inverse of cppcolormap::Greens.
array_type::tensor< double, 2 > SeaGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > RdYlBu(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > RdYlGn_r(size_t N=11)
Inverse of cppcolormap::RdYlGn.
array_type::tensor< double, 2 > colormap(const std::string &cmap, size_t N=256)
Get colormap specified as string.
array_type::tensor< double, 2 > PineGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Dandelion(size_t N=1)
dvips color.
array_type::tensor< double, 2 > BrickRed(size_t N=1)
dvips color.
array_type::tensor< double, 2 > RdGy(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > Oranges_r(size_t N=9)
Inverse of cppcolormap::Oranges.
array_type::tensor< double, 2 > Dark2(size_t N=8)
Qualitative colormap.
array_type::tensor< double, 2 > RdYlGn(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > Mulberry(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Paired(size_t N=12)
Qualitative colormap.
array_type::tensor< double, 2 > OrRd(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > Sepia(size_t N=1)
dvips color.
array_type::tensor< double, 2 > bone_r(size_t N=256)
Inverse of cppcolormap::bone.
array_type::tensor< double, 2 > YlGn_r(size_t N=9)
Inverse of cppcolormap::YlGn.
array_type::tensor< double, 2 > Green(size_t N=1)
dvips color.
array_type::tensor< double, 2 > nipy_spectral_r(size_t N=256)
Inverse of cppcolormap::nipy_spectral.
array_type::tensor< double, 2 > RubineRed(size_t N=1)
dvips color.
array_type::tensor< double, 2 > winter_r(size_t N=256)
Inverse of cppcolormap::winter.
array_type::tensor< double, 2 > OliveGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > inferno(size_t N=256)
matplotlib colormap.
array_type::tensor< double, 2 > RoyalBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Aquamarine(size_t N=1)
dvips color.
array_type::tensor< size_t, 1 > match(const array_type::tensor< double, 2 > &A, const array_type::tensor< double, 2 > &B, metric distance_metric=euclidean)
Match colors.
array_type::tensor< double, 2 > PuRd(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > Cerulean(size_t N=1)
dvips color.
auto as_colors(const E &data, const C &colors, S vmin, S vmax)
Convert data to colors using a colormap.
array_type::tensor< double, 2 > RdOrYl(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > hsv_r(size_t N=256)
Inverse of cppcolormap::hsv.
array_type::tensor< double, 2 > Mahogany(size_t N=1)
dvips color.
array_type::tensor< double, 2 > spring(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > PuOr_r(size_t N=11)
Inverse of cppcolormap::PuOr.
array_type::tensor< double, 2 > summer_r(size_t N=256)
Inverse of cppcolormap::summer.
array_type::tensor< double, 2 > NavyBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > RdBu(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > MidnightBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Reds_r(size_t N=9)
Inverse of cppcolormap::Reds.
array_type::tensor< double, 2 > Goldenrod(size_t N=1)
dvips color.
array_type::tensor< double, 2 > colorcycle(const std::string &cmap)
Get color-cycle specified as string.
array_type::tensor< double, 2 > BlueGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > YellowOrange(size_t N=1)
dvips color.
array_type::tensor< double, 2 > YlOrRd_r(size_t N=9)
Inverse of cppcolormap::YlOrRd.
array_type::tensor< double, 2 > VioletRed(size_t N=1)
dvips color.
array_type::tensor< double, 2 > xterm_r()
Inverse of cppcolormap::xterm.
array_type::tensor< double, 2 > Orange(size_t N=1)
dvips color.
array_type::tensor< double, 2 > nipy_spectral(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > magma(size_t N=256)
matplotlib colormap.
array_type::tensor< double, 2 > GnBu_r(size_t N=9)
Inverse of cppcolormap::GnBu.
array_type::tensor< double, 2 > Accent(size_t N=8)
Qualitative colormap.
array_type::tensor< double, 2 > hot(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > ForestGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > OrangeRed(size_t N=1)
dvips color.
array_type::tensor< double, 2 > RoyalPurple(size_t N=1)
dvips color.
array_type::tensor< double, 2 > RawSienna(size_t N=1)
dvips color.
array_type::tensor< double, 2 > YlGnBu(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > GreenYellow(size_t N=1)
dvips color.
array_type::tensor< double, 2 > GnBu(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > YlGnBu_r(size_t N=9)
Inverse of cppcolormap::YlGnBu.
array_type::tensor< double, 2 > tue_r()
Inverse of cppcolormap::tue.
array_type::tensor< double, 2 > xterm()
xterm color-cyle.
array_type::tensor< double, 2 > PuRd_r(size_t N=9)
Inverse of cppcolormap::PuRd.
#define CPPCOLORMAP_VERSION
Current version.
Definition cppcolormap.h:70
array_type::tensor< double, 2 > CornflowerBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > seismic(size_t N=5)
matplotlib colormap.
array_type::tensor< double, 2 > DarkOrchid(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Pastel1(size_t N=9)
Qualitative colormap.
array_type::tensor< double, 2 > jet(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > PRGn(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > Emerald(size_t N=1)
dvips color.
array_type::tensor< double, 2 > copper(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > Red(size_t N=1)
Monotone colormap.
array_type::tensor< double, 2 > SkyBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > PuBu(size_t N=9)
Sequential colormap.
#define CPPCOLORMAP_ASSERT(expr)
All assertions are implementation as:
Definition cppcolormap.h:46
array_type::tensor< double, 2 > Lavender(size_t N=1)
dvips color.
array_type::tensor< double, 2 > ProcessBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > CadetBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Reds(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > winter(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > BlueViolet(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Pastel1_r(size_t N=9)
Inverse of cppcolormap::Pastel1.
array_type::tensor< double, 2 > bone(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > Dark2_r(size_t N=8)
Inverse of cppcolormap::Dark2.
array_type::tensor< double, 2 > RdOrYl_r(size_t N=9)
Inverse of cppcolormap::RdOrYl.
array_type::tensor< double, 2 > tuelightblue(size_t N=1)
Eindhoven University of Technology.
array_type::tensor< double, 2 > autumn_r(size_t N=256)
Inverse of cppcolormap::autumn.
array_type::tensor< double, 2 > Peach(size_t N=1)
dvips color.
array_type::tensor< double, 2 > YellowGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Greys_r(size_t N=2)
Inverse of cppcolormap::Greys.
array_type::tensor< double, 2 > Blue(size_t N=1)
Monotone colormap.
array_type::tensor< double, 2 > BuPu_r(size_t N=9)
Inverse of cppcolormap::BuPu.
metric
Algorithm to use for color matching.
@ fast_perceptual
Fast best perception algorithm.
@ perceptual
Best perception algorithm. See: https://en.wikipedia.org/wiki/Color_difference.
@ euclidean
Euclidean norm.
array_type::tensor< double, 2 > Pastel2_r(size_t N=8)
Inverse of cppcolormap::Pastel2.
array_type::tensor< double, 2 > Black(size_t N=1)
Monotone colormap.
array_type::tensor< double, 2 > tueblue(size_t N=1)
Eindhoven University of Technology.
array_type::tensor< double, 2 > BuPu(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > PRGn_r(size_t N=11)
Inverse of cppcolormap::PRGn.
array_type::tensor< double, 2 > Blues(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > White(size_t N=1)
Monotone colormap.
array_type::tensor< double, 2 > inferno_r(size_t N=256)
Inverse of cppcolormap::inferno.
array_type::tensor< double, 2 > Yellow(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Turquoise(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Bittersweet(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Gray(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Purples(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > LimeGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > summer(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > Fuchsia(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Purple(size_t N=1)
dvips color.
array_type::tensor< double, 2 > jet_r(size_t N=256)
Inverse of cppcolormap::jet.
array_type::tensor< double, 2 > Plum(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Apricot(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Salmon(size_t N=1)
dvips color.
array_type::tensor< double, 2 > RdGy_r(size_t N=11)
Inverse of cppcolormap::RdGy.
array_type::tensor< double, 2 > terrain_r(size_t N=5)
Inverse of cppcolormap::terrain.
R interp(const T &arg, size_t N)
Interpolate the individual colours.
array_type::tensor< double, 2 > Spectral_r(size_t N=11)
Inverse of cppcolormap::Spectral.
array_type::tensor< double, 2 > BrBG(size_t N=11)
Diverging colormap.
array_type::tensor< double, 2 > Thistle(size_t N=1)
dvips color.
array_type::tensor< double, 2 > hot_r(size_t N=256)
Inverse of cppcolormap::hot.
array_type::tensor< double, 2 > cool_r(size_t N=256)
Inverse of cppcolormap::cool.
array_type::tensor< double, 2 > RdBu_r(size_t N=11)
Inverse of cppcolormap::RdBu.
array_type::tensor< double, 2 > PuBuGn(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > Melon(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Magenta(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Maroon(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Pastel2(size_t N=8)
Qualitative colormap.
array_type::tensor< double, 2 > TealBlue(size_t N=1)
dvips color.
array_type::tensor< double, 2 > PuBu_r(size_t N=9)
Inverse of cppcolormap::PuBu.
array_type::tensor< double, 2 > copper_r(size_t N=256)
Inverse of cppcolormap::copper.
array_type::tensor< double, 2 > Spectral(size_t N=11)
Qualitative colormap.
array_type::tensor< double, 2 > Violet(size_t N=1)
dvips color.
array_type::tensor< double, 2 > PuBuGn_r(size_t N=9)
Inverse of cppcolormap::PuBuGn.
array_type::tensor< double, 2 > SpringGreen(size_t N=1)
dvips color.
array_type::tensor< double, 2 > WildStrawberry(size_t N=1)
dvips color.
array_type::tensor< double, 2 > magma_r(size_t N=256)
Inverse of cppcolormap::magma.
array_type::tensor< double, 2 > OrRd_r(size_t N=9)
Inverse of cppcolormap::OrRd.
array_type::tensor< double, 2 > Greys(size_t N=2)
Sequential colormap.
array_type::tensor< double, 2 > afmhot_r(size_t N=256)
Inverse of cppcolormap::afmhot.
array_type::tensor< double, 2 > BrBG_r(size_t N=11)
Inverse of cppcolormap::BrBG.
array_type::tensor< double, 2 > RdYlBu_r(size_t N=11)
Inverse of cppcolormap::RdYlBu.
array_type::tensor< double, 2 > tuewarmred(size_t N=1)
Eindhoven University of Technology.
array_type::tensor< double, 2 > Tan(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Rhodamine(size_t N=1)
dvips color.
array_type::tensor< double, 2 > tuedarkblue(size_t N=1)
Eindhoven University of Technology.
array_type::tensor< double, 2 > Greens(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > Purples_r(size_t N=9)
Inverse of cppcolormap::Purples.
array_type::tensor< double, 2 > Set2(size_t N=8)
Qualitative colormap.
array_type::tensor< double, 2 > cool(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > hsv(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > RdPu_r(size_t N=9)
Inverse of cppcolormap::RdPu.
array_type::tensor< double, 2 > Brown(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Set3(size_t N=12)
Qualitative colormap.
array_type::tensor< double, 2 > Accent_r(size_t N=8)
Inverse of cppcolormap::Accent.
array_type::tensor< double, 2 > CarnationPink(size_t N=1)
dvips color.
array_type::tensor< double, 2 > Grey(size_t N=1)
Monotone colormap.
array_type::tensor< double, 2 > BurntOrange(size_t N=1)
dvips color.
array_type::tensor< double, 2 > YlOrRd(size_t N=9)
Sequential colormap.
array_type::tensor< double, 2 > tue()
Eindhoven University of Technology color-cyle.
array_type::tensor< double, 2 > PiYG_r(size_t N=11)
Inverse of cppcolormap::PiYG.
std::vector< std::string > version_dependencies()
Return versions of this library and of all of its dependencies.
array_type::tensor< double, 2 > autumn(size_t N=256)
matplotlib colormap, from anchor.
array_type::tensor< double, 2 > spring_r(size_t N=256)
Inverse of cppcolormap::spring.
xt::xtensor< T, N > tensor
Fixed (static) rank array.