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