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.
- netgen/include/analytic_integrals.hpp +10 -0
- netgen/include/arnoldi.hpp +55 -0
- netgen/include/bandmatrix.hpp +334 -0
- netgen/include/basematrix.hpp +957 -0
- netgen/include/basevector.hpp +1268 -0
- netgen/include/bdbequations.hpp +2805 -0
- netgen/include/bdbintegrator.hpp +1660 -0
- netgen/include/bem_diffops.hpp +475 -0
- netgen/include/bessel.hpp +1064 -0
- netgen/include/bilinearform.hpp +963 -0
- netgen/include/bla.hpp +29 -0
- netgen/include/blockalloc.hpp +95 -0
- netgen/include/blockjacobi.hpp +328 -0
- netgen/include/bspline.hpp +116 -0
- netgen/include/calcinverse.hpp +141 -0
- netgen/include/cg.hpp +368 -0
- netgen/include/chebyshev.hpp +44 -0
- netgen/include/cholesky.hpp +720 -0
- netgen/include/clapack.h +7254 -0
- netgen/include/code_generation.hpp +296 -0
- netgen/include/coefficient.hpp +2033 -0
- netgen/include/coefficient_impl.hpp +19 -0
- netgen/include/coefficient_stdmath.hpp +167 -0
- netgen/include/commutingAMG.hpp +106 -0
- netgen/include/comp.hpp +79 -0
- netgen/include/compatibility.hpp +41 -0
- netgen/include/complex_wrapper.hpp +73 -0
- netgen/include/compressedfespace.hpp +110 -0
- netgen/include/contact.hpp +235 -0
- netgen/include/diagonalmatrix.hpp +154 -0
- netgen/include/differentialoperator.hpp +276 -0
- netgen/include/diffop.hpp +1286 -0
- netgen/include/diffop_impl.hpp +328 -0
- netgen/include/diffopwithfactor.hpp +123 -0
- netgen/include/discontinuous.hpp +84 -0
- netgen/include/dump.hpp +949 -0
- netgen/include/ectypes.hpp +121 -0
- netgen/include/eigen.hpp +60 -0
- netgen/include/eigensystem.hpp +18 -0
- netgen/include/elasticity_equations.hpp +595 -0
- netgen/include/elementbyelement.hpp +195 -0
- netgen/include/elementtopology.hpp +1760 -0
- netgen/include/elementtransformation.hpp +339 -0
- netgen/include/evalfunc.hpp +405 -0
- netgen/include/expr.hpp +1686 -0
- netgen/include/facetfe.hpp +175 -0
- netgen/include/facetfespace.hpp +180 -0
- netgen/include/facethofe.hpp +111 -0
- netgen/include/facetsurffespace.hpp +112 -0
- netgen/include/fe_interfaces.hpp +32 -0
- netgen/include/fem.hpp +87 -0
- netgen/include/fesconvert.hpp +14 -0
- netgen/include/fespace.hpp +1449 -0
- netgen/include/finiteelement.hpp +286 -0
- netgen/include/globalinterfacespace.hpp +77 -0
- netgen/include/globalspace.hpp +115 -0
- netgen/include/gridfunction.hpp +525 -0
- netgen/include/h1amg.hpp +124 -0
- netgen/include/h1hofe.hpp +188 -0
- netgen/include/h1hofe_impl.hpp +1262 -0
- netgen/include/h1hofefo.hpp +148 -0
- netgen/include/h1hofefo_impl.hpp +185 -0
- netgen/include/h1hofespace.hpp +167 -0
- netgen/include/h1lofe.hpp +1240 -0
- netgen/include/h1lumping.hpp +41 -0
- netgen/include/hcurl_equations.hpp +1381 -0
- netgen/include/hcurlcurlfe.hpp +2241 -0
- netgen/include/hcurlcurlfespace.hpp +78 -0
- netgen/include/hcurlfe.hpp +259 -0
- netgen/include/hcurlfe_utils.hpp +107 -0
- netgen/include/hcurlhdiv_dshape.hpp +857 -0
- netgen/include/hcurlhdivfes.hpp +308 -0
- netgen/include/hcurlhofe.hpp +175 -0
- netgen/include/hcurlhofe_impl.hpp +1871 -0
- netgen/include/hcurlhofespace.hpp +193 -0
- netgen/include/hcurllofe.hpp +1146 -0
- netgen/include/hdiv_equations.hpp +880 -0
- netgen/include/hdivdivfe.hpp +2923 -0
- netgen/include/hdivdivsurfacespace.hpp +76 -0
- netgen/include/hdivfe.hpp +206 -0
- netgen/include/hdivfe_utils.hpp +717 -0
- netgen/include/hdivfes.hpp +75 -0
- netgen/include/hdivhofe.hpp +447 -0
- netgen/include/hdivhofe_impl.hpp +1107 -0
- netgen/include/hdivhofefo.hpp +229 -0
- netgen/include/hdivhofespace.hpp +177 -0
- netgen/include/hdivhosurfacefespace.hpp +106 -0
- netgen/include/hdivlofe.hpp +773 -0
- netgen/include/hidden.hpp +74 -0
- netgen/include/householder.hpp +181 -0
- netgen/include/hypre_ams_precond.hpp +123 -0
- netgen/include/hypre_precond.hpp +73 -0
- netgen/include/integrator.hpp +2012 -0
- netgen/include/integratorcf.hpp +253 -0
- netgen/include/interpolate.hpp +49 -0
- netgen/include/intrule.hpp +2542 -0
- netgen/include/intrules_SauterSchwab.hpp +25 -0
- netgen/include/irspace.hpp +49 -0
- netgen/include/jacobi.hpp +153 -0
- netgen/include/kernels.hpp +762 -0
- netgen/include/l2hofe.hpp +194 -0
- netgen/include/l2hofe_impl.hpp +564 -0
- netgen/include/l2hofefo.hpp +542 -0
- netgen/include/l2hofespace.hpp +344 -0
- netgen/include/la.hpp +38 -0
- netgen/include/linearform.hpp +266 -0
- netgen/include/matrix.hpp +2140 -0
- netgen/include/memusage.hpp +41 -0
- netgen/include/meshaccess.hpp +1359 -0
- netgen/include/mgpre.hpp +204 -0
- netgen/include/mp_coefficient.hpp +145 -0
- netgen/include/mptools.hpp +2281 -0
- netgen/include/multigrid.hpp +42 -0
- netgen/include/multivector.hpp +447 -0
- netgen/include/mumpsinverse.hpp +187 -0
- netgen/include/mycomplex.hpp +361 -0
- netgen/include/ng_lapack.hpp +1661 -0
- netgen/include/ngblas.hpp +1232 -0
- netgen/include/ngs_defines.hpp +30 -0
- netgen/include/ngs_stdcpp_include.hpp +106 -0
- netgen/include/ngs_utils.hpp +121 -0
- netgen/include/ngsobject.hpp +1019 -0
- netgen/include/ngsstream.hpp +113 -0
- netgen/include/ngstd.hpp +72 -0
- netgen/include/nodalhofe.hpp +96 -0
- netgen/include/nodalhofe_impl.hpp +141 -0
- netgen/include/normalfacetfe.hpp +223 -0
- netgen/include/normalfacetfespace.hpp +98 -0
- netgen/include/normalfacetsurfacefespace.hpp +84 -0
- netgen/include/order.hpp +251 -0
- netgen/include/parallel_matrices.hpp +222 -0
- netgen/include/paralleldofs.hpp +340 -0
- netgen/include/parallelngs.hpp +23 -0
- netgen/include/parallelvector.hpp +269 -0
- netgen/include/pardisoinverse.hpp +200 -0
- netgen/include/periodic.hpp +129 -0
- netgen/include/plateaufespace.hpp +25 -0
- netgen/include/pml.hpp +275 -0
- netgen/include/pmltrafo.hpp +631 -0
- netgen/include/postproc.hpp +142 -0
- netgen/include/potentialtools.hpp +22 -0
- netgen/include/precomp.hpp +60 -0
- netgen/include/preconditioner.hpp +602 -0
- netgen/include/prolongation.hpp +377 -0
- netgen/include/python_comp.hpp +107 -0
- netgen/include/python_fem.hpp +89 -0
- netgen/include/python_linalg.hpp +58 -0
- netgen/include/python_ngstd.hpp +386 -0
- netgen/include/recursive_pol.hpp +4896 -0
- netgen/include/recursive_pol_tet.hpp +395 -0
- netgen/include/recursive_pol_trig.hpp +492 -0
- netgen/include/reorderedfespace.hpp +81 -0
- netgen/include/sample_sort.hpp +105 -0
- netgen/include/scalarfe.hpp +335 -0
- netgen/include/shapefunction_utils.hpp +113 -0
- netgen/include/simd_complex.hpp +329 -0
- netgen/include/smoother.hpp +253 -0
- netgen/include/solve.hpp +89 -0
- netgen/include/sparsecholesky.hpp +313 -0
- netgen/include/sparsematrix.hpp +1038 -0
- netgen/include/sparsematrix_dyn.hpp +90 -0
- netgen/include/sparsematrix_impl.hpp +1013 -0
- netgen/include/special_matrix.hpp +463 -0
- netgen/include/specialelement.hpp +125 -0
- netgen/include/statushandler.hpp +33 -0
- netgen/include/stringops.hpp +12 -0
- netgen/include/superluinverse.hpp +136 -0
- netgen/include/symbolicintegrator.hpp +850 -0
- netgen/include/symmetricmatrix.hpp +144 -0
- netgen/include/tangentialfacetfe.hpp +224 -0
- netgen/include/tangentialfacetfespace.hpp +91 -0
- netgen/include/tensor.hpp +522 -0
- netgen/include/tensorcoefficient.hpp +446 -0
- netgen/include/tensorproductintegrator.hpp +113 -0
- netgen/include/thcurlfe.hpp +128 -0
- netgen/include/thcurlfe_impl.hpp +380 -0
- netgen/include/thdivfe.hpp +80 -0
- netgen/include/thdivfe_impl.hpp +492 -0
- netgen/include/tpdiffop.hpp +461 -0
- netgen/include/tpfes.hpp +133 -0
- netgen/include/tpintrule.hpp +224 -0
- netgen/include/triangular.hpp +465 -0
- netgen/include/tscalarfe.hpp +245 -0
- netgen/include/tscalarfe_impl.hpp +1029 -0
- netgen/include/umfpackinverse.hpp +148 -0
- netgen/include/vector.hpp +1273 -0
- netgen/include/voxelcoefficientfunction.hpp +41 -0
- netgen/include/vtkoutput.hpp +198 -0
- netgen/include/vvector.hpp +208 -0
- netgen/include/webgui.hpp +92 -0
- netgen/libngbla.dylib +0 -0
- netgen/libngcomp.dylib +0 -0
- netgen/libngfem.dylib +0 -0
- netgen/libngla.dylib +0 -0
- netgen/libngsbem.dylib +0 -0
- netgen/libngsolve.dylib +0 -0
- netgen/libngstd.dylib +0 -0
- ngsolve/TensorProductTools.py +210 -0
- ngsolve/__console.py +94 -0
- ngsolve/__expr.py +181 -0
- ngsolve/__init__.py +148 -0
- ngsolve/__init__.pyi +233 -0
- ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve/bla.pyi +1153 -0
- ngsolve/bvp.py +78 -0
- ngsolve/bvp.pyi +32 -0
- ngsolve/cmake/NGSolveConfig.cmake +102 -0
- ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
- ngsolve/cmake/ngsolve-targets.cmake +163 -0
- ngsolve/comp/__init__.pyi +5449 -0
- ngsolve/comp/pml.pyi +89 -0
- ngsolve/config/__init__.py +1 -0
- ngsolve/config/__init__.pyi +43 -0
- ngsolve/config/__main__.py +4 -0
- ngsolve/config/config.py +60 -0
- ngsolve/config/config.pyi +45 -0
- ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve/demos/__init__.py +0 -0
- ngsolve/demos/howto/__init__.py +0 -0
- ngsolve/demos/howto/hhj.py +44 -0
- ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve/demos/howto/mixed.py +30 -0
- ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve/demos/howto/pickling.py +26 -0
- ngsolve/demos/howto/pml.py +31 -0
- ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve/demos/intro/__init__.py +0 -0
- ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve/demos/intro/poisson.py +41 -0
- ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve/directsolvers.py +26 -0
- ngsolve/directsolvers.pyi +15 -0
- ngsolve/eigenvalues.py +364 -0
- ngsolve/eigenvalues.pyi +30 -0
- ngsolve/fem.pyi +1647 -0
- ngsolve/internal.py +89 -0
- ngsolve/krylovspace.py +1013 -0
- ngsolve/krylovspace.pyi +298 -0
- ngsolve/la.pyi +1230 -0
- ngsolve/meshes.py +748 -0
- ngsolve/ngs2petsc.py +310 -0
- ngsolve/ngscxx.py +42 -0
- ngsolve/ngslib.so +0 -0
- ngsolve/ngstd.pyi +59 -0
- ngsolve/nonlinearsolvers.py +203 -0
- ngsolve/nonlinearsolvers.pyi +95 -0
- ngsolve/preconditioners.py +11 -0
- ngsolve/preconditioners.pyi +7 -0
- ngsolve/solve.pyi +109 -0
- ngsolve/solve_implementation.py +168 -0
- ngsolve/solve_implementation.pyi +42 -0
- ngsolve/solvers.py +7 -0
- ngsolve/solvers.pyi +14 -0
- ngsolve/timestepping.py +185 -0
- ngsolve/timestepping.pyi +28 -0
- ngsolve/timing.py +108 -0
- ngsolve/timing.pyi +54 -0
- ngsolve/utils.py +167 -0
- ngsolve/utils.pyi +273 -0
- ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
- 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___
|