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,296 @@
|
|
|
1
|
+
#ifndef FILE_NGS_CODE_GENERATION___
|
|
2
|
+
#define FILE_NGS_CODE_GENERATION___
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: code_generation.hpp */
|
|
6
|
+
/* Author: Matthias Hochsteger */
|
|
7
|
+
/* Date: 13. Apr. 2016 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include <filesystem>
|
|
11
|
+
#include <map>
|
|
12
|
+
#include <variant>
|
|
13
|
+
|
|
14
|
+
#include <core/ngcore.hpp>
|
|
15
|
+
|
|
16
|
+
namespace ngfem
|
|
17
|
+
{
|
|
18
|
+
using namespace ngbla;
|
|
19
|
+
|
|
20
|
+
NGS_DLL_HEADER extern bool code_uses_tensors;
|
|
21
|
+
|
|
22
|
+
template <typename T>
|
|
23
|
+
inline string ToLiteral(const T & val)
|
|
24
|
+
{
|
|
25
|
+
stringstream ss;
|
|
26
|
+
#if (defined __cpp_hex_float) && (__cpp_hex_float <= __cplusplus)
|
|
27
|
+
ss << std::hexfloat;
|
|
28
|
+
ss << val;
|
|
29
|
+
ss << " /* (" << std::setprecision(16) << std::scientific;
|
|
30
|
+
ss << val << ") */";
|
|
31
|
+
#else
|
|
32
|
+
ss << std::setprecision(16) << std::scientific;
|
|
33
|
+
ss << val;
|
|
34
|
+
#endif
|
|
35
|
+
return ss.str();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
template<>
|
|
39
|
+
inline string ToLiteral (const int &val)
|
|
40
|
+
{
|
|
41
|
+
stringstream ss;
|
|
42
|
+
ss << val;
|
|
43
|
+
return ss.str();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
struct Code
|
|
48
|
+
{
|
|
49
|
+
string top;
|
|
50
|
+
string header;
|
|
51
|
+
string body;
|
|
52
|
+
|
|
53
|
+
string res_type;
|
|
54
|
+
bool is_simd;
|
|
55
|
+
int deriv;
|
|
56
|
+
std::vector<string> link_flags;
|
|
57
|
+
|
|
58
|
+
string pointer;
|
|
59
|
+
|
|
60
|
+
NGS_DLL_HEADER string AddPointer(const void *p );
|
|
61
|
+
|
|
62
|
+
void AddLinkFlag(string flag);
|
|
63
|
+
|
|
64
|
+
static atomic<unsigned> id_counter;
|
|
65
|
+
static string Map( string code, std::map<string,string> variables ) {
|
|
66
|
+
for ( auto mapping : variables ) {
|
|
67
|
+
string oldStr = '{'+mapping.first+'}';
|
|
68
|
+
string newStr = mapping.second;
|
|
69
|
+
size_t pos = 0;
|
|
70
|
+
while((pos = code.find(oldStr, pos)) != std::string::npos){
|
|
71
|
+
code.replace(pos, oldStr.length(), newStr);
|
|
72
|
+
pos += newStr.length();
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return code;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
[[deprecated("use Declare(i,dims,iscomplex) instead")]]
|
|
80
|
+
void Declare (string type, int i, FlatArray<int> dims);
|
|
81
|
+
void Declare (int i, FlatArray<int> dims, bool iscomplex);
|
|
82
|
+
string GetType (bool iscomplex) const;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
struct CodeExpr
|
|
86
|
+
{
|
|
87
|
+
string code;
|
|
88
|
+
CodeExpr( string acode="" ) : code(acode) {;}
|
|
89
|
+
string S() const { return code; }
|
|
90
|
+
|
|
91
|
+
string Op(char c) { return code.size() ? string(" ") + c + ' ' : ""; }
|
|
92
|
+
|
|
93
|
+
CodeExpr operator +(CodeExpr other) { return CodeExpr(string("(") + S()+Op('+')+other.S() + ')'); }
|
|
94
|
+
CodeExpr operator -(CodeExpr other) { return CodeExpr(string("(") + S()+Op('-')+other.S() + ')'); }
|
|
95
|
+
CodeExpr operator *(CodeExpr other) { return CodeExpr(string("(") + S()+Op('*')+other.S() + ')'); }
|
|
96
|
+
CodeExpr operator /(CodeExpr other) { return CodeExpr(string("(") + S()+Op('/')+other.S() + ')'); }
|
|
97
|
+
void operator +=(CodeExpr other) { code = "(" + S()+Op('+')+other.S() + ')'; }
|
|
98
|
+
void operator -=(CodeExpr other) { code = "(" + S()+Op('-')+other.S() + ')'; }
|
|
99
|
+
void operator *=(CodeExpr other) { code = "(" + S()+Op('*')+other.S() + ')'; }
|
|
100
|
+
void operator /=(CodeExpr other) { code = "(" + S()+Op('/')+other.S() + ')'; }
|
|
101
|
+
|
|
102
|
+
operator string () { return code; }
|
|
103
|
+
CodeExpr operator ()(int i) { return CodeExpr( S() + '(' + ToLiteral(i) + ')' ); }
|
|
104
|
+
CodeExpr operator ()(int i, int j) { return CodeExpr( S() + '(' + ToLiteral(i) + ',' + ToLiteral(j) + ')' ); }
|
|
105
|
+
CodeExpr Func(string s) { return CodeExpr( s + "(" + S() + ")" ); }
|
|
106
|
+
CodeExpr Call(string s, string args="") { return CodeExpr( S()+'.'+ s + "(" + args + ")"); }
|
|
107
|
+
string Assign (CodeExpr other, bool declare = true)
|
|
108
|
+
{
|
|
109
|
+
string result;
|
|
110
|
+
if(declare)
|
|
111
|
+
result += "auto ";
|
|
112
|
+
result += S()+" = "+other.S() + ";\n";
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
string Declare(string type = "auto")
|
|
117
|
+
{
|
|
118
|
+
return type + " " + code + ";\n";
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
template<typename TVal>
|
|
122
|
+
string Declare(string type, TVal value )
|
|
123
|
+
{
|
|
124
|
+
return type + " " + code + "("+ToLiteral(value)+");\n";
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
inline CodeExpr Var(double val)
|
|
129
|
+
{
|
|
130
|
+
return ToLiteral(val);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
inline CodeExpr Var(Complex val)
|
|
134
|
+
{
|
|
135
|
+
return "Complex"+ToLiteral(val);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/*
|
|
139
|
+
inline CodeExpr Var(string name, int i, int j=0, int k=0)
|
|
140
|
+
{
|
|
141
|
+
return CodeExpr(name + '_' + ToLiteral(i) + '_' + ToLiteral(j) + '_' + ToLiteral(k));
|
|
142
|
+
}
|
|
143
|
+
*/
|
|
144
|
+
inline CodeExpr Var(string name, int i)
|
|
145
|
+
{
|
|
146
|
+
/*
|
|
147
|
+
if (code_uses_tensors)
|
|
148
|
+
return CodeExpr(name + '_' + ToLiteral(i) + "()");
|
|
149
|
+
else
|
|
150
|
+
*/
|
|
151
|
+
return CodeExpr(name + '_' + ToLiteral(i));
|
|
152
|
+
}
|
|
153
|
+
inline CodeExpr Var(string name, int i, int j)
|
|
154
|
+
{
|
|
155
|
+
/*
|
|
156
|
+
if (code_uses_tensors)
|
|
157
|
+
return CodeExpr(name + '_' + ToLiteral(i) + '(' + ToLiteral(j) + ')');
|
|
158
|
+
else
|
|
159
|
+
*/
|
|
160
|
+
return CodeExpr(name + '_' + ToLiteral(i) + '_' + ToLiteral(j));
|
|
161
|
+
}
|
|
162
|
+
inline CodeExpr Var(string name, int i, int j, int k)
|
|
163
|
+
{
|
|
164
|
+
/*
|
|
165
|
+
if (code_uses_tensors)
|
|
166
|
+
return CodeExpr(name + '_' + ToLiteral(i) + '(' + ToLiteral(j) + ',' + ToLiteral(k) + ')');
|
|
167
|
+
else
|
|
168
|
+
*/
|
|
169
|
+
return CodeExpr(name + '_' + ToLiteral(i) + '_' + ToLiteral(j) + '_' + ToLiteral(k));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// linear index of tensor of dimensions dims
|
|
173
|
+
inline CodeExpr Var(string name, int i, int index, FlatArray<int> dims)
|
|
174
|
+
{
|
|
175
|
+
ArrayMem<int,8> ind(dims.Size());
|
|
176
|
+
for (int j = dims.Size()-1; j >= 0; j--)
|
|
177
|
+
{
|
|
178
|
+
ind[j] = index % dims[j];
|
|
179
|
+
index /= dims[j];
|
|
180
|
+
}
|
|
181
|
+
/*
|
|
182
|
+
if (code_uses_tensors)
|
|
183
|
+
{
|
|
184
|
+
string str = name + '_' + ToLiteral(i) + "(";
|
|
185
|
+
for (int j = 0; j < ind.Size(); j++)
|
|
186
|
+
{
|
|
187
|
+
if (j > 0) str += ',';
|
|
188
|
+
str += ToLiteral(ind[j]);
|
|
189
|
+
}
|
|
190
|
+
str += ")";
|
|
191
|
+
return CodeExpr(str);
|
|
192
|
+
}
|
|
193
|
+
else
|
|
194
|
+
*/
|
|
195
|
+
{
|
|
196
|
+
string str = name + '_' + ToLiteral(i);
|
|
197
|
+
for (int j = 0; j < ind.Size(); j++)
|
|
198
|
+
str += '_' + ToLiteral(ind[j]);
|
|
199
|
+
return CodeExpr(str);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
/*
|
|
206
|
+
inline CodeExpr Var(int i, int j=0, int k=0)
|
|
207
|
+
{
|
|
208
|
+
return CodeExpr("var_" + ToLiteral(i) + '_' + ToLiteral(j) + '_' + ToLiteral(k));
|
|
209
|
+
}
|
|
210
|
+
*/
|
|
211
|
+
inline CodeExpr Var(int i)
|
|
212
|
+
{
|
|
213
|
+
if (code_uses_tensors)
|
|
214
|
+
return CodeExpr("var_" + ToLiteral(i) + "()");
|
|
215
|
+
else
|
|
216
|
+
return CodeExpr("var_" + ToLiteral(i));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
inline CodeExpr Var(int i, int j)
|
|
220
|
+
{
|
|
221
|
+
if (code_uses_tensors)
|
|
222
|
+
return CodeExpr("var_" + ToLiteral(i) + '(' + ToLiteral(j) + ')');
|
|
223
|
+
else
|
|
224
|
+
return CodeExpr("var_" + ToLiteral(i) + '_' + ToLiteral(j));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
inline CodeExpr Var(int i, int j, int k)
|
|
228
|
+
{
|
|
229
|
+
if (code_uses_tensors)
|
|
230
|
+
return CodeExpr("var_" + ToLiteral(i) + '(' + ToLiteral(j) + ',' + ToLiteral(k) + ')');
|
|
231
|
+
else
|
|
232
|
+
return CodeExpr("var_" + ToLiteral(i) + '_' + ToLiteral(j) + '_' + ToLiteral(k));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// linear index of tensor of dimensions dims
|
|
236
|
+
inline CodeExpr Var(int i, int index, FlatArray<int> dims)
|
|
237
|
+
{
|
|
238
|
+
ArrayMem<int,8> ind(dims.Size());
|
|
239
|
+
for (int j = dims.Size()-1; j >= 0; j--)
|
|
240
|
+
{
|
|
241
|
+
ind[j] = index % dims[j];
|
|
242
|
+
index /= dims[j];
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (code_uses_tensors)
|
|
246
|
+
{
|
|
247
|
+
string str = "var_" + ToLiteral(i) + "(";
|
|
248
|
+
for (int j = 0; j < ind.Size(); j++)
|
|
249
|
+
{
|
|
250
|
+
if (j > 0) str += ',';
|
|
251
|
+
str += ToLiteral(ind[j]);
|
|
252
|
+
}
|
|
253
|
+
str += ")";
|
|
254
|
+
return CodeExpr(str);
|
|
255
|
+
}
|
|
256
|
+
else
|
|
257
|
+
{
|
|
258
|
+
string str = "var_" + ToLiteral(i);
|
|
259
|
+
for (int j = 0; j < ind.Size(); j++)
|
|
260
|
+
str += '_' + ToLiteral(ind[j]);
|
|
261
|
+
return CodeExpr(str);
|
|
262
|
+
}
|
|
263
|
+
// return CodeExpr("var_" + ToLiteral(i) + '_' + ToLiteral(j) + '_' + ToLiteral(k));
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
inline void GetIndex( FlatArray<int> dims, int i, int &iout, int &jout )
|
|
268
|
+
{
|
|
269
|
+
iout = jout = 0;
|
|
270
|
+
switch(dims.Size())
|
|
271
|
+
{
|
|
272
|
+
case 0:
|
|
273
|
+
break;
|
|
274
|
+
case 1:
|
|
275
|
+
iout = i;
|
|
276
|
+
break;
|
|
277
|
+
case 2:
|
|
278
|
+
{
|
|
279
|
+
int d1 = dims[1];
|
|
280
|
+
iout = i/d1;
|
|
281
|
+
jout = i%d1;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
default:
|
|
285
|
+
throw Exception("GetIndex: too many dimensions!");
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
std::filesystem::path CreateTempDir();
|
|
290
|
+
unique_ptr<SharedLibrary> CompileCode(const std::vector<std::variant<filesystem::path, string>> &codes, const std::vector<string> &link_flags, bool keep_files = false );
|
|
291
|
+
namespace detail {
|
|
292
|
+
string GenerateL2ElementCode(int order);
|
|
293
|
+
}
|
|
294
|
+
using detail::GenerateL2ElementCode;
|
|
295
|
+
}
|
|
296
|
+
#endif // FILE_NGS_CODE_GENERATION___
|