|
23 | 23 | "https://gitter.im/QuantStack/Lobby"
|
24 | 24 | ]
|
25 | 25 | },
|
26 |
| - { |
27 |
| - "cell_type": "code", |
28 |
| - "execution_count": 1, |
29 |
| - "metadata": { |
30 |
| - "slideshow": { |
31 |
| - "slide_type": "skip" |
32 |
| - } |
33 |
| - }, |
34 |
| - "outputs": [], |
35 |
| - "source": [ |
36 |
| - "#include <xtensor-io/ximage.hpp>\n", |
37 |
| - "#include <xtensor/xtensor.hpp>\n", |
38 |
| - "#include <xwidgets/ximage.hpp>\n", |
39 |
| - "#include <xtensor/xinfo.hpp>\n", |
40 |
| - "\n", |
41 |
| - "std::vector<char> read_file(const char* filename)\n", |
42 |
| - "{\n", |
43 |
| - " std::basic_ifstream<char> file(filename, std::ios::binary);\n", |
44 |
| - " return std::vector<char>((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());\n", |
45 |
| - "}" |
46 |
| - ] |
47 |
| - }, |
48 |
| - { |
49 |
| - "cell_type": "code", |
50 |
| - "execution_count": 2, |
51 |
| - "metadata": { |
52 |
| - "slideshow": { |
53 |
| - "slide_type": "skip" |
54 |
| - } |
55 |
| - }, |
56 |
| - "outputs": [], |
57 |
| - "source": [ |
58 |
| - "template <class E>\n", |
59 |
| - "std::vector<char> to_png_buffer(const xt::xexpression<E>& e)\n", |
60 |
| - "{\n", |
61 |
| - " const char* temp_filename = \"/tmp/xio_image.png\";\n", |
62 |
| - " xt::dump_image(temp_filename, e);\n", |
63 |
| - " return read_file(temp_filename);\n", |
64 |
| - "}" |
65 |
| - ] |
66 |
| - }, |
67 |
| - { |
68 |
| - "cell_type": "code", |
69 |
| - "execution_count": 3, |
70 |
| - "metadata": { |
71 |
| - "slideshow": { |
72 |
| - "slide_type": "skip" |
73 |
| - } |
74 |
| - }, |
75 |
| - "outputs": [], |
76 |
| - "source": [ |
77 |
| - "template <class E>\n", |
78 |
| - "auto display(const E& e)\n", |
79 |
| - "{\n", |
80 |
| - " xw::image ls_image;\n", |
81 |
| - " ls_image.value = to_png_buffer(e);\n", |
82 |
| - " return ls_image;\n", |
83 |
| - "}" |
84 |
| - ] |
85 |
| - }, |
86 |
| - { |
87 |
| - "cell_type": "code", |
88 |
| - "execution_count": 4, |
89 |
| - "metadata": { |
90 |
| - "slideshow": { |
91 |
| - "slide_type": "skip" |
92 |
| - } |
93 |
| - }, |
94 |
| - "outputs": [], |
95 |
| - "source": [ |
96 |
| - "template <std::ptrdiff_t I, class T, class Tuple>\n", |
97 |
| - "struct tuple_idx_of_impl;\n", |
98 |
| - "\n", |
99 |
| - "template <std::ptrdiff_t I, class T>\n", |
100 |
| - "struct tuple_idx_of_impl<I, T, std::tuple<>>\n", |
101 |
| - "{\n", |
102 |
| - " static constexpr std::ptrdiff_t value = -1;\n", |
103 |
| - "};\n", |
104 |
| - "\n", |
105 |
| - "template <std::ptrdiff_t I, class T, class... Types>\n", |
106 |
| - "struct tuple_idx_of_impl<I, T, std::tuple<T, Types...>>\n", |
107 |
| - "{\n", |
108 |
| - " static constexpr std::ptrdiff_t value = I;\n", |
109 |
| - "};\n", |
110 |
| - "\n", |
111 |
| - "template <std::ptrdiff_t I, class T, class U, class... Types>\n", |
112 |
| - "struct tuple_idx_of_impl<I, T, std::tuple<U, Types...>>\n", |
113 |
| - "{\n", |
114 |
| - " static constexpr std::ptrdiff_t value = tuple_idx_of_impl<I + 1, T, std::tuple<Types...>>::value;\n", |
115 |
| - "};\n", |
116 |
| - "\n", |
117 |
| - "template <class T, class Tuple>\n", |
118 |
| - "struct tuple_idx_of\n", |
119 |
| - " : std::integral_constant<std::ptrdiff_t, tuple_idx_of_impl<0, T, Tuple>::value>\n", |
120 |
| - "{\n", |
121 |
| - "};\n", |
122 |
| - "\n", |
123 |
| - "template <class R, class T, class L, std::ptrdiff_t I>\n", |
124 |
| - "void safe_extract(R& target, const T& args, L&& extractor, std::integral_constant<std::ptrdiff_t, I>)\n", |
125 |
| - "{\n", |
126 |
| - " target = extractor(std::get<I>(args));\n", |
127 |
| - "}\n", |
128 |
| - "\n", |
129 |
| - "template <class R, class T, class L>\n", |
130 |
| - "void safe_extract(R& target, const T& args, L&&, std::integral_constant<std::ptrdiff_t, -1>)\n", |
131 |
| - "{\n", |
132 |
| - "}\n", |
133 |
| - "\n", |
134 |
| - "template <class S, class R, class T, class L>\n", |
135 |
| - "constexpr void extract(R& target, const T& args, L&& extractor)\n", |
136 |
| - "{\n", |
137 |
| - " safe_extract(target, args, std::forward<L>(extractor), tuple_idx_of<S, T>{});\n", |
138 |
| - "}" |
139 |
| - ] |
140 |
| - }, |
141 | 26 | {
|
142 | 27 | "cell_type": "markdown",
|
143 | 28 | "metadata": {
|
|
241 | 126 | }
|
242 | 127 | },
|
243 | 128 | "source": [
|
244 |
| - "" |
| 129 | + "" |
245 | 130 | ]
|
246 | 131 | },
|
247 | 132 | {
|
|
252 | 137 | }
|
253 | 138 | },
|
254 | 139 | "source": [
|
255 |
| - "" |
| 140 | + "" |
256 | 141 | ]
|
257 | 142 | },
|
258 | 143 | {
|
|
263 | 148 | }
|
264 | 149 | },
|
265 | 150 | "source": [
|
266 |
| - "<img src=\"images/xeus-cling.svg\" width=\"400px\"></img>\n", |
| 151 | + "<img src=\"images/xeus-cling.png\" width=\"400px\"></img>\n", |
267 | 152 | "\n",
|
268 | 153 | "- xeus + cling\n",
|
269 | 154 | "- cling: clang based C++ interpreter from the CERN\n",
|
|
643 | 528 | "cell_type": "markdown",
|
644 | 529 | "metadata": {},
|
645 | 530 | "source": [
|
646 |
| - "" |
| 531 | + "" |
647 | 532 | ]
|
648 | 533 | },
|
649 | 534 | {
|
|
669 | 554 | }
|
670 | 555 | },
|
671 | 556 | "source": [
|
672 |
| - "<img src=\"images/xtensor.svg\" width=\"500px\" />\n", |
| 557 | + "<img src=\"images/xtensor.png\" width=\"500px\" />\n", |
673 | 558 | "\n",
|
674 | 559 | "- n-dimensional array computing library\n",
|
675 | 560 | "- Support for lazy computation, broadcasting \n",
|
|
1022 | 907 | "std::cout << a * brcast << std::endl;"
|
1023 | 908 | ]
|
1024 | 909 | },
|
| 910 | + { |
| 911 | + "cell_type": "code", |
| 912 | + "execution_count": 1, |
| 913 | + "metadata": { |
| 914 | + "slideshow": { |
| 915 | + "slide_type": "skip" |
| 916 | + } |
| 917 | + }, |
| 918 | + "outputs": [], |
| 919 | + "source": [ |
| 920 | + "#include <xtensor-io/ximage.hpp>\n", |
| 921 | + "#include <xtensor/xtensor.hpp>\n", |
| 922 | + "#include <xwidgets/ximage.hpp>\n", |
| 923 | + "#include <xtensor/xinfo.hpp>\n", |
| 924 | + "\n", |
| 925 | + "std::vector<char> read_file(const char* filename)\n", |
| 926 | + "{\n", |
| 927 | + " std::basic_ifstream<char> file(filename, std::ios::binary);\n", |
| 928 | + " return std::vector<char>((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());\n", |
| 929 | + "}" |
| 930 | + ] |
| 931 | + }, |
| 932 | + { |
| 933 | + "cell_type": "code", |
| 934 | + "execution_count": 2, |
| 935 | + "metadata": { |
| 936 | + "slideshow": { |
| 937 | + "slide_type": "skip" |
| 938 | + } |
| 939 | + }, |
| 940 | + "outputs": [], |
| 941 | + "source": [ |
| 942 | + "template <class E>\n", |
| 943 | + "std::vector<char> to_png_buffer(const xt::xexpression<E>& e)\n", |
| 944 | + "{\n", |
| 945 | + " const char* temp_filename = \"/tmp/xio_image.png\";\n", |
| 946 | + " xt::dump_image(temp_filename, e);\n", |
| 947 | + " return read_file(temp_filename);\n", |
| 948 | + "}" |
| 949 | + ] |
| 950 | + }, |
| 951 | + { |
| 952 | + "cell_type": "code", |
| 953 | + "execution_count": 3, |
| 954 | + "metadata": { |
| 955 | + "slideshow": { |
| 956 | + "slide_type": "skip" |
| 957 | + } |
| 958 | + }, |
| 959 | + "outputs": [], |
| 960 | + "source": [ |
| 961 | + "template <class E>\n", |
| 962 | + "auto display(const E& e)\n", |
| 963 | + "{\n", |
| 964 | + " xw::image ls_image;\n", |
| 965 | + " ls_image.value = to_png_buffer(e);\n", |
| 966 | + " return ls_image;\n", |
| 967 | + "}" |
| 968 | + ] |
| 969 | + }, |
1025 | 970 | {
|
1026 | 971 | "cell_type": "code",
|
1027 | 972 | "execution_count": 41,
|
|
1801 | 1746 | "}"
|
1802 | 1747 | ]
|
1803 | 1748 | },
|
| 1749 | + { |
| 1750 | + "cell_type": "code", |
| 1751 | + "execution_count": 4, |
| 1752 | + "metadata": { |
| 1753 | + "slideshow": { |
| 1754 | + "slide_type": "skip" |
| 1755 | + } |
| 1756 | + }, |
| 1757 | + "outputs": [], |
| 1758 | + "source": [ |
| 1759 | + "template <std::ptrdiff_t I, class T, class Tuple>\n", |
| 1760 | + "struct tuple_idx_of_impl;\n", |
| 1761 | + "\n", |
| 1762 | + "template <std::ptrdiff_t I, class T>\n", |
| 1763 | + "struct tuple_idx_of_impl<I, T, std::tuple<>>\n", |
| 1764 | + "{\n", |
| 1765 | + " static constexpr std::ptrdiff_t value = -1;\n", |
| 1766 | + "};\n", |
| 1767 | + "\n", |
| 1768 | + "template <std::ptrdiff_t I, class T, class... Types>\n", |
| 1769 | + "struct tuple_idx_of_impl<I, T, std::tuple<T, Types...>>\n", |
| 1770 | + "{\n", |
| 1771 | + " static constexpr std::ptrdiff_t value = I;\n", |
| 1772 | + "};\n", |
| 1773 | + "\n", |
| 1774 | + "template <std::ptrdiff_t I, class T, class U, class... Types>\n", |
| 1775 | + "struct tuple_idx_of_impl<I, T, std::tuple<U, Types...>>\n", |
| 1776 | + "{\n", |
| 1777 | + " static constexpr std::ptrdiff_t value = tuple_idx_of_impl<I + 1, T, std::tuple<Types...>>::value;\n", |
| 1778 | + "};\n", |
| 1779 | + "\n", |
| 1780 | + "template <class T, class Tuple>\n", |
| 1781 | + "struct tuple_idx_of\n", |
| 1782 | + " : std::integral_constant<std::ptrdiff_t, tuple_idx_of_impl<0, T, Tuple>::value>\n", |
| 1783 | + "{\n", |
| 1784 | + "};\n", |
| 1785 | + "\n", |
| 1786 | + "template <class R, class T, class L, std::ptrdiff_t I>\n", |
| 1787 | + "void safe_extract(R& target, const T& args, L&& extractor, std::integral_constant<std::ptrdiff_t, I>)\n", |
| 1788 | + "{\n", |
| 1789 | + " target = extractor(std::get<I>(args));\n", |
| 1790 | + "}\n", |
| 1791 | + "\n", |
| 1792 | + "template <class R, class T, class L>\n", |
| 1793 | + "void safe_extract(R& target, const T& args, L&&, std::integral_constant<std::ptrdiff_t, -1>)\n", |
| 1794 | + "{\n", |
| 1795 | + "}\n", |
| 1796 | + "\n", |
| 1797 | + "template <class S, class R, class T, class L>\n", |
| 1798 | + "constexpr void extract(R& target, const T& args, L&& extractor)\n", |
| 1799 | + "{\n", |
| 1800 | + " safe_extract(target, args, std::forward<L>(extractor), tuple_idx_of<S, T>{});\n", |
| 1801 | + "}" |
| 1802 | + ] |
| 1803 | + }, |
1804 | 1804 | {
|
1805 | 1805 | "cell_type": "code",
|
1806 | 1806 | "execution_count": 64,
|
|
2135 | 2135 | }
|
2136 | 2136 | },
|
2137 | 2137 | "source": [
|
2138 |
| - "<img src=\"images/jupyter_connection.svg\" width=\"80%\" />" |
| 2138 | + "<img src=\"images/jupyter_connection.png\" width=\"80%\" />" |
2139 | 2139 | ]
|
2140 | 2140 | },
|
2141 | 2141 | {
|
|
0 commit comments