ngsolve 6.2.2501.post47.dev1__cp312-cp312-macosx_10_15_universal2.whl → 6.2.2501.post55.dev1__cp312-cp312-macosx_10_15_universal2.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ngsolve might be problematic. Click here for more details.

Files changed (285) hide show
  1. netgen/include/arnoldi.hpp +55 -0
  2. netgen/include/bandmatrix.hpp +334 -0
  3. netgen/include/basematrix.hpp +957 -0
  4. netgen/include/basevector.hpp +1268 -0
  5. netgen/include/bdbequations.hpp +2752 -0
  6. netgen/include/bdbintegrator.hpp +1660 -0
  7. netgen/include/bessel.hpp +1064 -0
  8. netgen/include/bilinearform.hpp +963 -0
  9. netgen/include/bla.hpp +29 -0
  10. netgen/include/blockalloc.hpp +95 -0
  11. netgen/include/blockjacobi.hpp +316 -0
  12. netgen/include/bspline.hpp +114 -0
  13. netgen/include/calcinverse.hpp +141 -0
  14. netgen/include/cg.hpp +368 -0
  15. netgen/include/chebyshev.hpp +44 -0
  16. netgen/include/cholesky.hpp +720 -0
  17. netgen/include/clapack.h +7254 -0
  18. netgen/include/code_generation.hpp +296 -0
  19. netgen/include/coefficient.hpp +2033 -0
  20. netgen/include/coefficient_impl.hpp +19 -0
  21. netgen/include/coefficient_stdmath.hpp +167 -0
  22. netgen/include/commutingAMG.hpp +106 -0
  23. netgen/include/comp.hpp +79 -0
  24. netgen/include/compatibility.hpp +41 -0
  25. netgen/include/complex_wrapper.hpp +73 -0
  26. netgen/include/compressedfespace.hpp +110 -0
  27. netgen/include/contact.hpp +231 -0
  28. netgen/include/diagonalmatrix.hpp +154 -0
  29. netgen/include/differentialoperator.hpp +276 -0
  30. netgen/include/diffop.hpp +1286 -0
  31. netgen/include/diffop_impl.hpp +326 -0
  32. netgen/include/discontinuous.hpp +84 -0
  33. netgen/include/dump.hpp +949 -0
  34. netgen/include/eigen.hpp +60 -0
  35. netgen/include/eigensystem.hpp +18 -0
  36. netgen/include/elasticity_equations.hpp +595 -0
  37. netgen/include/elementbyelement.hpp +195 -0
  38. netgen/include/elementtopology.hpp +1760 -0
  39. netgen/include/elementtransformation.hpp +339 -0
  40. netgen/include/evalfunc.hpp +405 -0
  41. netgen/include/expr.hpp +1655 -0
  42. netgen/include/facetfe.hpp +175 -0
  43. netgen/include/facetfespace.hpp +178 -0
  44. netgen/include/facethofe.hpp +111 -0
  45. netgen/include/facetsurffespace.hpp +112 -0
  46. netgen/include/fe_interfaces.hpp +32 -0
  47. netgen/include/fem.hpp +87 -0
  48. netgen/include/fesconvert.hpp +14 -0
  49. netgen/include/fespace.hpp +1445 -0
  50. netgen/include/finiteelement.hpp +286 -0
  51. netgen/include/globalinterfacespace.hpp +77 -0
  52. netgen/include/globalspace.hpp +115 -0
  53. netgen/include/gridfunction.hpp +525 -0
  54. netgen/include/h1amg.hpp +41 -0
  55. netgen/include/h1hofe.hpp +188 -0
  56. netgen/include/h1hofe_impl.hpp +1262 -0
  57. netgen/include/h1hofefo.hpp +148 -0
  58. netgen/include/h1hofefo_impl.hpp +185 -0
  59. netgen/include/h1hofespace.hpp +167 -0
  60. netgen/include/h1lofe.hpp +1237 -0
  61. netgen/include/h1lumping.hpp +35 -0
  62. netgen/include/hcurl_equations.hpp +1352 -0
  63. netgen/include/hcurlcurlfe.hpp +2221 -0
  64. netgen/include/hcurlcurlfespace.hpp +78 -0
  65. netgen/include/hcurlfe.hpp +259 -0
  66. netgen/include/hcurlfe_utils.hpp +107 -0
  67. netgen/include/hcurlhdiv_dshape.hpp +857 -0
  68. netgen/include/hcurlhdivfes.hpp +308 -0
  69. netgen/include/hcurlhofe.hpp +175 -0
  70. netgen/include/hcurlhofe_impl.hpp +1871 -0
  71. netgen/include/hcurlhofespace.hpp +193 -0
  72. netgen/include/hcurllofe.hpp +1146 -0
  73. netgen/include/hdiv_equations.hpp +865 -0
  74. netgen/include/hdivdivfe.hpp +2923 -0
  75. netgen/include/hdivdivsurfacespace.hpp +76 -0
  76. netgen/include/hdivfe.hpp +206 -0
  77. netgen/include/hdivfe_utils.hpp +716 -0
  78. netgen/include/hdivfes.hpp +75 -0
  79. netgen/include/hdivhofe.hpp +447 -0
  80. netgen/include/hdivhofe_impl.hpp +1107 -0
  81. netgen/include/hdivhofefo.hpp +229 -0
  82. netgen/include/hdivhofespace.hpp +175 -0
  83. netgen/include/hdivhosurfacefespace.hpp +106 -0
  84. netgen/include/hdivlofe.hpp +773 -0
  85. netgen/include/hidden.hpp +74 -0
  86. netgen/include/householder.hpp +181 -0
  87. netgen/include/hypre_ams_precond.hpp +123 -0
  88. netgen/include/hypre_precond.hpp +73 -0
  89. netgen/include/integrator.hpp +2024 -0
  90. netgen/include/integratorcf.hpp +253 -0
  91. netgen/include/interpolate.hpp +49 -0
  92. netgen/include/intrule.hpp +2541 -0
  93. netgen/include/irspace.hpp +49 -0
  94. netgen/include/jacobi.hpp +136 -0
  95. netgen/include/l2hofe.hpp +193 -0
  96. netgen/include/l2hofe_impl.hpp +564 -0
  97. netgen/include/l2hofefo.hpp +542 -0
  98. netgen/include/l2hofespace.hpp +344 -0
  99. netgen/include/la.hpp +38 -0
  100. netgen/include/linearform.hpp +266 -0
  101. netgen/include/matrix.hpp +2140 -0
  102. netgen/include/memusage.hpp +41 -0
  103. netgen/include/meshaccess.hpp +1358 -0
  104. netgen/include/mgpre.hpp +204 -0
  105. netgen/include/mptools.hpp +2187 -0
  106. netgen/include/multigrid.hpp +42 -0
  107. netgen/include/multivector.hpp +447 -0
  108. netgen/include/mumpsinverse.hpp +187 -0
  109. netgen/include/mycomplex.hpp +361 -0
  110. netgen/include/ng_lapack.hpp +1661 -0
  111. netgen/include/ngblas.hpp +1109 -0
  112. netgen/include/ngs_defines.hpp +30 -0
  113. netgen/include/ngs_stdcpp_include.hpp +106 -0
  114. netgen/include/ngs_utils.hpp +121 -0
  115. netgen/include/ngsobject.hpp +1019 -0
  116. netgen/include/ngsstream.hpp +113 -0
  117. netgen/include/ngstd.hpp +72 -0
  118. netgen/include/nodalhofe.hpp +96 -0
  119. netgen/include/nodalhofe_impl.hpp +141 -0
  120. netgen/include/normalfacetfe.hpp +223 -0
  121. netgen/include/normalfacetfespace.hpp +98 -0
  122. netgen/include/normalfacetsurfacefespace.hpp +84 -0
  123. netgen/include/order.hpp +251 -0
  124. netgen/include/parallel_matrices.hpp +222 -0
  125. netgen/include/paralleldofs.hpp +340 -0
  126. netgen/include/parallelngs.hpp +23 -0
  127. netgen/include/parallelvector.hpp +269 -0
  128. netgen/include/pardisoinverse.hpp +200 -0
  129. netgen/include/periodic.hpp +125 -0
  130. netgen/include/plateaufespace.hpp +25 -0
  131. netgen/include/pml.hpp +275 -0
  132. netgen/include/pmltrafo.hpp +631 -0
  133. netgen/include/postproc.hpp +142 -0
  134. netgen/include/precomp.hpp +60 -0
  135. netgen/include/preconditioner.hpp +602 -0
  136. netgen/include/prolongation.hpp +235 -0
  137. netgen/include/python_comp.hpp +107 -0
  138. netgen/include/python_fem.hpp +89 -0
  139. netgen/include/python_linalg.hpp +58 -0
  140. netgen/include/python_ngstd.hpp +385 -0
  141. netgen/include/recursive_pol.hpp +4844 -0
  142. netgen/include/recursive_pol_tet.hpp +395 -0
  143. netgen/include/recursive_pol_trig.hpp +492 -0
  144. netgen/include/reorderedfespace.hpp +81 -0
  145. netgen/include/sample_sort.hpp +105 -0
  146. netgen/include/scalarfe.hpp +335 -0
  147. netgen/include/shapefunction_utils.hpp +113 -0
  148. netgen/include/simd_complex.hpp +284 -0
  149. netgen/include/smoother.hpp +253 -0
  150. netgen/include/solve.hpp +89 -0
  151. netgen/include/sparsecholesky.hpp +313 -0
  152. netgen/include/sparsematrix.hpp +1038 -0
  153. netgen/include/sparsematrix_dyn.hpp +91 -0
  154. netgen/include/sparsematrix_impl.hpp +920 -0
  155. netgen/include/special_matrix.hpp +461 -0
  156. netgen/include/specialelement.hpp +125 -0
  157. netgen/include/statushandler.hpp +33 -0
  158. netgen/include/stringops.hpp +12 -0
  159. netgen/include/superluinverse.hpp +136 -0
  160. netgen/include/symbolicintegrator.hpp +849 -0
  161. netgen/include/symmetricmatrix.hpp +144 -0
  162. netgen/include/tangentialfacetfe.hpp +224 -0
  163. netgen/include/tangentialfacetfespace.hpp +106 -0
  164. netgen/include/tensor.hpp +522 -0
  165. netgen/include/tensorcoefficient.hpp +446 -0
  166. netgen/include/tensorproductintegrator.hpp +113 -0
  167. netgen/include/thcurlfe.hpp +128 -0
  168. netgen/include/thcurlfe_impl.hpp +380 -0
  169. netgen/include/thdivfe.hpp +80 -0
  170. netgen/include/thdivfe_impl.hpp +426 -0
  171. netgen/include/tpdiffop.hpp +461 -0
  172. netgen/include/tpfes.hpp +133 -0
  173. netgen/include/tpintrule.hpp +224 -0
  174. netgen/include/triangular.hpp +465 -0
  175. netgen/include/tscalarfe.hpp +245 -0
  176. netgen/include/tscalarfe_impl.hpp +1029 -0
  177. netgen/include/umfpackinverse.hpp +148 -0
  178. netgen/include/vector.hpp +1219 -0
  179. netgen/include/voxelcoefficientfunction.hpp +41 -0
  180. netgen/include/vtkoutput.hpp +198 -0
  181. netgen/include/vvector.hpp +208 -0
  182. netgen/include/webgui.hpp +92 -0
  183. netgen/libngbla.dylib +0 -0
  184. netgen/libngcomp.dylib +0 -0
  185. netgen/libngfem.dylib +0 -0
  186. netgen/libngla.dylib +0 -0
  187. netgen/libngsolve.dylib +0 -0
  188. netgen/libngstd.dylib +0 -0
  189. ngsolve/__init__.pyi +231 -0
  190. ngsolve/bla.pyi +1139 -0
  191. ngsolve/bvp.pyi +32 -0
  192. ngsolve/cmake/NGSolveConfig.cmake +102 -0
  193. ngsolve/cmake/ngsolve-targets-release.cmake +69 -0
  194. ngsolve/cmake/ngsolve-targets.cmake +163 -0
  195. ngsolve/comp/__init__.pyi +5382 -0
  196. ngsolve/comp/pml.pyi +89 -0
  197. ngsolve/config/__init__.py +1 -0
  198. ngsolve/config/__init__.pyi +43 -0
  199. ngsolve/config/__main__.py +4 -0
  200. ngsolve/config/config.py +60 -0
  201. ngsolve/config/config.pyi +45 -0
  202. ngsolve/demos/TensorProduct/__init__.py +0 -0
  203. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  204. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  205. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  206. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  207. ngsolve/demos/__init__.py +0 -0
  208. ngsolve/demos/howto/__init__.py +0 -0
  209. ngsolve/demos/howto/hhj.py +44 -0
  210. ngsolve/demos/howto/hybrid_dg.py +53 -0
  211. ngsolve/demos/howto/mixed.py +30 -0
  212. ngsolve/demos/howto/nonlin.py +29 -0
  213. ngsolve/demos/howto/pickling.py +26 -0
  214. ngsolve/demos/howto/pml.py +31 -0
  215. ngsolve/demos/howto/taskmanager.py +20 -0
  216. ngsolve/demos/howto/tdnns.py +47 -0
  217. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  218. ngsolve/demos/howto/timeDG.py +38 -0
  219. ngsolve/demos/howto/timeDGlap.py +42 -0
  220. ngsolve/demos/howto/timeDGwave.py +61 -0
  221. ngsolve/demos/intro/__init__.py +0 -0
  222. ngsolve/demos/intro/adaptive.py +123 -0
  223. ngsolve/demos/intro/cmagnet.py +62 -0
  224. ngsolve/demos/intro/elasticity.py +76 -0
  225. ngsolve/demos/intro/navierstokes.py +74 -0
  226. ngsolve/demos/intro/poisson.ipynb +170 -0
  227. ngsolve/demos/intro/poisson.py +41 -0
  228. ngsolve/demos/mpi/__init__.py +0 -0
  229. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  230. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  231. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  232. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  233. ngsolve/directsolvers.pyi +15 -0
  234. ngsolve/eigenvalues.pyi +30 -0
  235. ngsolve/fem.pyi +1707 -0
  236. ngsolve/krylovspace.pyi +301 -0
  237. ngsolve/la.pyi +1218 -0
  238. ngsolve/ngslib.so +0 -0
  239. ngsolve/ngstd.pyi +58 -0
  240. ngsolve/nonlinearsolvers.pyi +97 -0
  241. ngsolve/preconditioners.pyi +6 -0
  242. ngsolve/solve.pyi +108 -0
  243. ngsolve/solvers.pyi +14 -0
  244. ngsolve/timestepping.pyi +27 -0
  245. ngsolve/timing.pyi +54 -0
  246. ngsolve/utils.pyi +279 -0
  247. ngsolve-6.2.2501.post55.dev1.data/data/Netgen.icns +0 -0
  248. ngsolve-6.2.2501.post55.dev1.data/data/bin/ngscxx +17 -0
  249. ngsolve-6.2.2501.post55.dev1.data/data/bin/ngsld +13 -0
  250. ngsolve-6.2.2501.post55.dev1.data/data/bin/ngsolve.tcl +648 -0
  251. ngsolve-6.2.2501.post55.dev1.data/data/bin/ngspy +2 -0
  252. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/beam.geo +17 -0
  253. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/beam.vol +240 -0
  254. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/chip.in2d +41 -0
  255. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/chip.vol +614 -0
  256. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coil.geo +12 -0
  257. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coil.vol +2560 -0
  258. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coilshield.geo +24 -0
  259. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coilshield.vol +3179 -0
  260. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/cube.geo +19 -0
  261. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/cube.vol +1832 -0
  262. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  263. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  264. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d1_square.pde +43 -0
  265. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d2_chip.pde +35 -0
  266. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  267. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d4_cube.pde +46 -0
  268. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d5_beam.pde +74 -0
  269. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d6_shaft.pde +73 -0
  270. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d7_coil.pde +50 -0
  271. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  272. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  273. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  274. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/doubleglazing.vol +737 -0
  275. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  276. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/shaft.geo +73 -0
  277. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/shaft.vol +4291 -0
  278. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/square.in2d +17 -0
  279. ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/square.vol +149 -0
  280. {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/METADATA +2 -2
  281. ngsolve-6.2.2501.post55.dev1.dist-info/RECORD +304 -0
  282. ngsolve-6.2.2501.post47.dev1.dist-info/RECORD +0 -25
  283. {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/LICENSE +0 -0
  284. {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/WHEEL +0 -0
  285. {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,385 @@
1
+ #ifndef PYTHON_NGSTD_HPP___
2
+ #define PYTHON_NGSTD_HPP___
3
+ #ifdef NGS_PYTHON
4
+
5
+ #ifdef __clang__
6
+ #pragma clang diagnostic push
7
+ // #pragma clang diagnostic ignored "-W#pragma-messages"
8
+ #pragma clang diagnostic ignored "-Wunused-local-typedefs"
9
+ #pragma clang diagnostic ignored "-Wparentheses-equality"
10
+ #pragma clang diagnostic ignored "-Wunused-value"
11
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
12
+ #endif
13
+
14
+ #include <pybind11/pybind11.h>
15
+ #include <pybind11/eval.h>
16
+ #include <pybind11/operators.h>
17
+ #include <pybind11/complex.h>
18
+ #include <pybind11/stl.h>
19
+ #include<pybind11/numpy.h>
20
+
21
+ #ifdef __clang__
22
+ #pragma clang diagnostic pop
23
+ #endif
24
+
25
+ #include <core/python_ngcore.hpp>
26
+ #include <ngstd.hpp>
27
+ #include <thread>
28
+ #include <iostream>
29
+
30
+ namespace py = pybind11;
31
+ using namespace pybind11::literals;
32
+
33
+ using std::string;
34
+ using std::cout;
35
+ using std::endl;
36
+
37
+ namespace ngstd {
38
+ extern bool have_numpy;
39
+
40
+ template<typename TClass, typename TFunc, typename... T>
41
+ TClass & PyDefVectorized(TClass & cls, const char * name, TFunc && f, T && ... args )
42
+ {
43
+ if(have_numpy)
44
+ cls.def(name, py::vectorize(std::forward<TFunc>(f)), std::forward<T>(args)...);
45
+ else
46
+ cls.def(name, std::forward<TFunc>(f), std::forward<T>(args)...);
47
+ return cls;
48
+ }
49
+
50
+ template<typename T, typename TOffset>
51
+ auto getNumpyFieldDescriptor(const char *name, TOffset offset) {
52
+ return py::detail::field_descriptor {
53
+ name, static_cast<py::ssize_t>(offset), sizeof(T),
54
+ py::format_descriptor<T>::format(),
55
+ py::detail::npy_format_descriptor<T>::dtype()
56
+ };
57
+ }
58
+ }
59
+
60
+ using namespace ngstd;
61
+
62
+ namespace pybind11 {
63
+ template <typename T>
64
+ struct extract
65
+ {
66
+ py::handle obj;
67
+ extract( py::handle aobj ) : obj(aobj) {}
68
+
69
+ bool check() {
70
+ try
71
+ {
72
+ obj.cast<T>();
73
+ }
74
+ catch(const std::runtime_error &e)
75
+ {
76
+ return false;
77
+ }
78
+ return true;
79
+ }
80
+
81
+ T operator()() { return obj.cast<T>(); }
82
+ };
83
+ }
84
+
85
+ struct DummyArgument {};
86
+
87
+ class PythonEnvironment
88
+ {
89
+ public:
90
+
91
+ PythonEnvironment () { ; }
92
+
93
+ virtual ~PythonEnvironment() { }
94
+
95
+ auto operator[] ( const char *s )
96
+ {
97
+ return py::module::import("__main__").attr(s);
98
+ }
99
+
100
+ virtual void exec(const string s)
101
+ {
102
+ try{
103
+ PyRun_SimpleString(s.c_str());
104
+ }
105
+ catch (py::error_already_set const &e) {
106
+ cout << "caught python error: " << e.what() << endl;
107
+ PyErr_Print();
108
+ }
109
+ }
110
+
111
+ virtual void exec_file(const string fstr) {
112
+ string output;
113
+ ifstream file;
114
+ file.open(fstr.c_str());
115
+ if (file.is_open())
116
+ {
117
+ while (!file.eof())
118
+ {
119
+ std::string line;
120
+ std::getline(file, line);
121
+ output += line.append("\n");
122
+ }
123
+ }
124
+ file.close();
125
+ exec(output);
126
+ }
127
+ };
128
+
129
+
130
+
131
+ typedef py::gil_scoped_acquire AcquireGIL;
132
+ typedef py::gil_scoped_release ReleaseGIL;
133
+
134
+
135
+ inline void InitSlice( const py::slice &inds, size_t len, size_t &start, size_t &step, size_t &n ) {
136
+ size_t stop;
137
+ if (!inds.compute(len, &start, &stop, &step, &n))
138
+ throw py::error_already_set();
139
+ }
140
+
141
+ template<typename T>
142
+ py::array_t<T> MoveToNumpyArray( Array<T> &a )
143
+ {
144
+ if(a.Size()) {
145
+ py::capsule free_when_done(&a[0], [](void *f) {
146
+ delete [] reinterpret_cast<T *>(f);
147
+ });
148
+ a.NothingToDelete();
149
+ return py::array_t<T>(a.Size(), &a[0], free_when_done);
150
+ }
151
+ else
152
+ return py::array_t<T>(0, nullptr);
153
+ }
154
+
155
+
156
+ template<typename ... Args>
157
+ inline py::object PyRange(Args ... i)
158
+ {
159
+ constexpr size_t n = sizeof...(Args);
160
+ static_assert(n>=1 && n<=3, "Wrong number of arguments");
161
+ return py::module::import("__main__").attr("__builtins__").attr("range")(i...);
162
+ }
163
+
164
+ inline py::object PyRange(IntRange i)
165
+ {
166
+ return PyRange(i.First(), i.Next());
167
+ }
168
+
169
+ //////////////////////////////////////////////////////////////////////
170
+ template <typename T, typename TCLASS = py::class_<T> >
171
+ void PyDefToString( py::module &m, TCLASS &c )
172
+ {
173
+ c.def("__str__", &ToString<T>);
174
+ c.def("__repr__", &ToString<T>);
175
+ }
176
+
177
+ /*
178
+ template <typename T>
179
+ class cl_NonElement
180
+ {
181
+ public:
182
+ static T Val() { return 0; }
183
+ };
184
+
185
+ template <typename T>
186
+ inline T NonElement() { return cl_NonElement<T>::Val(); }
187
+ */
188
+
189
+ //////////////////////////////////////////////////////////////////////
190
+ // read-only bracket operator
191
+ template< typename T, typename TELEM, typename TCLASS = py::class_<T>>
192
+ void PyDefROBracketOperator( py::module &m, TCLASS &c )
193
+ {
194
+ auto Get = [](T& self, int i) {
195
+ if (i < 0) i += self.Size();
196
+ if( i<self.Size() && i>=0 )
197
+ return self[i];
198
+ throw py::index_error();
199
+ return TELEM();
200
+ };
201
+ c.def("__getitem__", Get,py::arg("pos"), "Return value at given position");
202
+ c.def("Get", Get, py::arg("pos"), "Return value at given position");
203
+ }
204
+
205
+ // read-write bracket operator
206
+ template< typename T, typename TELEM, typename TCLASS = py::class_<T>>
207
+ void PyDefBracketOperator( py::module &m, TCLASS &c )
208
+ {
209
+ PyDefROBracketOperator<T, TELEM>(m, c);
210
+ auto Set = [](T& self, int i, TELEM val) {
211
+ if (i < 0) i += self.Size();
212
+ if( i<self.Size() && i>=0 )
213
+ self[i] = val;
214
+ else
215
+ throw py::index_error();
216
+ };
217
+ c.def("__setitem__", Set, py::arg("pos"), py::arg("value"), "Set value at given position");
218
+ c.def("Set", Set, py::arg("pos"), py::arg("value"), "Set value at given position");
219
+ }
220
+
221
+
222
+ //////////////////////////////////////////////////////////////////////
223
+ // Export len, bracket operator and iterator protocol at once
224
+ template <typename T, typename TELEM = double, typename TCLASS = py::class_<T> >
225
+ void PyDefVector( py::module &m, TCLASS &c )
226
+ {
227
+ c.def("__len__", []( T& v) { return v.Size();}, "Return length of the array" );
228
+ c.def("__iter__", [] (T &v)
229
+ { return py::make_iterator(v.begin(), v.end()); },
230
+ py::keep_alive<0,1>()
231
+ );
232
+ PyDefBracketOperator<T, TELEM>(m,c);
233
+ }
234
+
235
+
236
+ //////////////////////////////////////////////////////////////////
237
+ // SymbolTable - template
238
+
239
+ template <typename T>
240
+ class PyRef
241
+ {
242
+ const T & ref;
243
+ public:
244
+ PyRef (const T & aref) : ref(aref) { ; }
245
+ const T & Cast () const { return ref; }
246
+ };
247
+
248
+ template <typename T>
249
+ inline ostream & operator<< (ostream & ost, PyRef<T> ref)
250
+ {
251
+ ost << (ref.Cast());
252
+ return ost;
253
+ }
254
+
255
+ template<typename T> struct PyTraits { };
256
+ template<> struct PyTraits<double> {typedef py::float_ type;};
257
+ template<> struct PyTraits<string> {typedef py::str type;};
258
+ template<> struct PyTraits<bool> {typedef py::bool_ type;};
259
+ template<> struct PyTraits<int> {typedef py::int_ type;};
260
+
261
+ template <typename T>
262
+ Table<T> makeCTable (py::list obj)
263
+ {
264
+ size_t n = py::len(obj);
265
+ Array<int> entrysize(n);
266
+
267
+ for (size_t i = 0; i < n; i++)
268
+ entrysize[i] = py::len(obj[i]);
269
+
270
+ Table<T> tab(entrysize);
271
+ for (size_t i = 0; i < n; i++)
272
+ {
273
+ const py::object & obji = obj[i];
274
+ tab[i] = makeCArray<T> (obji);
275
+ }
276
+ return tab;
277
+ }
278
+
279
+ template <typename T>
280
+ py::tuple MakePyTuple (const BaseArrayObject<T> & ao)
281
+ {
282
+ size_t s = ao.Size();
283
+ py::tuple tup(s);
284
+ for (size_t i = 0; i < s; i++)
285
+ tup[i] = ao[i];
286
+ return tup;
287
+ }
288
+
289
+ template <typename T>
290
+ py::list MakePyList (const BaseArrayObject<T> & ao)
291
+ {
292
+ size_t s = ao.Size();
293
+ py::list l;
294
+ for (size_t i = 0; i < s; i++)
295
+ l.append (ao[i]);
296
+ return l;
297
+ }
298
+
299
+
300
+
301
+
302
+ template<typename T>
303
+ struct PyNameTraits<SymbolTable<T>> {
304
+ static string GetName() { return string("SymbolTable_") + GetPyName<T>(); }
305
+ };
306
+
307
+ template<typename T>
308
+ struct PyNameTraits<PyRef<T>> {
309
+ static string GetName() { return string("Ref_") + GetPyName<T>(); }
310
+ };
311
+
312
+ template <typename T, typename PY_T = T>
313
+ void PyExportSymbolTable (py::module &m)
314
+ {
315
+ typedef SymbolTable<T> ST;
316
+
317
+ string name = GetPyName<ST>();
318
+ py::class_<ST>(m, name.c_str())
319
+ .def("__str__", &ToString<ST>)
320
+ .def("__len__", &ST::Size)
321
+ .def("__contains__", &ST::Used)
322
+ .def("GetName", [](ST & self, int i) { return string(self.GetName(i)); })
323
+ .def("__getitem__", [](ST & self, string name) -> PY_T
324
+ {
325
+ if (!self.Used(name)) throw py::index_error();
326
+ return self[name];
327
+ }, py::arg("name"))
328
+ .def("__getitem__", [](ST & self, int i) -> PY_T
329
+ {
330
+ if (i < 0 || i >= self.Size()) throw py::index_error();
331
+ return self[i];
332
+ }, py::arg("pos"))
333
+ ;
334
+ }
335
+
336
+
337
+ // conversion not possible for shared_ptr<double>, so we have a special treatment:
338
+ template <> inline void PyExportSymbolTable<shared_ptr<double>, shared_ptr<double>> (py::module &m)
339
+ {
340
+ typedef SymbolTable<shared_ptr<double>> ST;
341
+
342
+ string name = GetPyName<ST>();
343
+ py::class_<ST>(m, name.c_str())
344
+ .def("__str__", &ToString<ST>)
345
+ .def("__len__", &ST::Size)
346
+ .def("__contains__", &ST::Used)
347
+ .def("GetName", [](ST & self, int i) { return string(self.GetName(i)); }, py::arg("pos"))
348
+ .def("__getitem__", [](ST & self, string name)
349
+ {
350
+ if (!self.Used(name)) throw py::index_error();
351
+ return *self[name];
352
+ }, py::arg("name"))
353
+ .def("__getitem__", [](ST & self, int i)
354
+ {
355
+ if (i < 0 || i >= self.Size()) throw py::index_error();
356
+ return *self[i];
357
+ }, py::arg("pos"))
358
+ ;
359
+ }
360
+
361
+ // replace docu links with plain text for help function
362
+ NGS_DLL_HEADER const char* docu_string(const char* str);
363
+
364
+ PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
365
+
366
+ namespace ngstd
367
+ {
368
+ // MemoryView for pickling without copying
369
+ // doesn't provide memory management, it has to be done from the outside!
370
+ class MemoryView
371
+ {
372
+ private:
373
+ void* ptr;
374
+ size_t size;
375
+
376
+ public:
377
+ MemoryView(void* aptr, size_t asize) : ptr(aptr), size(asize) { ; }
378
+
379
+ size_t Size() const { return size; }
380
+ void* Ptr() const { return ptr; }
381
+ };
382
+ }
383
+
384
+ #endif // NGS_PYTHON
385
+ #endif // PYTHON_NGSTD_HPP___