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,522 @@
|
|
|
1
|
+
#include <bla.hpp>
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
// example use of tensors:
|
|
9
|
+
|
|
10
|
+
int main ()
|
|
11
|
+
{
|
|
12
|
+
Tensor<3> tensor(3,3,3);
|
|
13
|
+
Tensor<3> tensor2(3,3,3);
|
|
14
|
+
|
|
15
|
+
Matrix<> mat(3,3);
|
|
16
|
+
mat = 0;
|
|
17
|
+
for (int i = 0; i < mat.Height(); i++)
|
|
18
|
+
mat(i,i) = i+1;
|
|
19
|
+
|
|
20
|
+
cout << "mat = " << endl << mat << endl;
|
|
21
|
+
|
|
22
|
+
tensor = 1.0;
|
|
23
|
+
|
|
24
|
+
for (int j = 0; j < 3; j++)
|
|
25
|
+
tensor2(j,STAR,STAR) = j * mat * tensor(STAR,STAR,j);
|
|
26
|
+
|
|
27
|
+
cout << "tensor2 = " << endl << tensor2 << endl;
|
|
28
|
+
|
|
29
|
+
cout << "sub = " << endl << tensor2(STAR,STAR,0) << endl;
|
|
30
|
+
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
namespace ngbla
|
|
38
|
+
{
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
enum typestar { STAR };
|
|
42
|
+
|
|
43
|
+
template <int DIM, typename T = double, int DIMLIN = DIM> class FlatTensor;
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
template <int DIM, typename T, int LINDIM>
|
|
49
|
+
INLINE auto LargerTensor (FlatTensor<DIM,T,LINDIM> tensor, size_t as, size_t ad)
|
|
50
|
+
// -> FlatTensor<DIM+1,T,LINDIM>
|
|
51
|
+
{
|
|
52
|
+
return FlatTensor<DIM+1,T,LINDIM> (as, ad, tensor);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
template <typename T, int LINDIM>
|
|
57
|
+
INLINE auto LargerTensor (FlatTensor<0,T,LINDIM> tensor, int as, int ad)
|
|
58
|
+
-> SliceVector<T>
|
|
59
|
+
{
|
|
60
|
+
return SliceVector<T> (as, ad, tensor.Data());
|
|
61
|
+
}
|
|
62
|
+
*/
|
|
63
|
+
template <typename T>
|
|
64
|
+
INLINE auto LargerTensor (FlatTensor<0,T,0> tensor, size_t as, size_t ad)
|
|
65
|
+
// -> SliceVector<T>
|
|
66
|
+
{
|
|
67
|
+
return SliceVector<T> (as, ad, tensor.Data());
|
|
68
|
+
}
|
|
69
|
+
template <typename T, int LINDIM>
|
|
70
|
+
INLINE auto LargerTensor (FlatTensor<0,T,LINDIM> tensor, size_t as, size_t ad)
|
|
71
|
+
// -> FlatVector<T>
|
|
72
|
+
{
|
|
73
|
+
return FlatVector<T> (as, tensor.Data());
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
template <typename T>
|
|
78
|
+
INLINE auto LargerTensor (SliceVector<T> vec, size_t as, size_t ad)
|
|
79
|
+
// -> DoubleSliceMatrix<T>
|
|
80
|
+
{
|
|
81
|
+
return DoubleSliceMatrix<T> (as, vec.Size(),
|
|
82
|
+
ad, vec.Dist(), vec.Data());
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
template <typename T>
|
|
86
|
+
INLINE auto LargerTensor (FlatVector<T> vec, int as, int ad)
|
|
87
|
+
// -> SliceMatrix<T>
|
|
88
|
+
{
|
|
89
|
+
return SliceMatrix<T> (as, vec.Size(),
|
|
90
|
+
ad, vec.Data());
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
template <typename T>
|
|
97
|
+
INLINE auto LargerTensor (DoubleSliceMatrix<T> mat, int as, int ad)
|
|
98
|
+
-> FlatTensor<3,T,0>
|
|
99
|
+
{
|
|
100
|
+
FlatTensor<2,T,0> tens (mat.Height(), mat.DistRow(),
|
|
101
|
+
FlatTensor<1,T> (mat.Width(),mat.DistCol(),
|
|
102
|
+
FlatTensor<0,T> (mat.Data())));
|
|
103
|
+
|
|
104
|
+
return LargerTensor (tens , as, ad);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
template <typename T>
|
|
108
|
+
INLINE auto LargerTensor (SliceMatrix<T> mat, int as, int ad)
|
|
109
|
+
-> FlatTensor<3,T,0>
|
|
110
|
+
{
|
|
111
|
+
FlatTensor<2,T,1> tens (mat.Height(), mat.Dist(),
|
|
112
|
+
FlatTensor<1,T,1> (mat.Width(),1,
|
|
113
|
+
FlatTensor<0,T,1> (mat.Data())));
|
|
114
|
+
|
|
115
|
+
return LargerTensor (tens , as, ad);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
template <int DIM, typename T, int LINDIM>
|
|
125
|
+
INLINE auto OffsetTensor (FlatTensor<DIM,T,LINDIM> tensor, int offset)
|
|
126
|
+
-> FlatTensor<DIM,T,((LINDIM<DIM)?LINDIM:DIM)>
|
|
127
|
+
{
|
|
128
|
+
tensor.Data() += offset;
|
|
129
|
+
return tensor;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
template <typename T>
|
|
133
|
+
INLINE auto OffsetTensor (SliceVector<T> vec, int offset)
|
|
134
|
+
//-> SliceVector<T>
|
|
135
|
+
{
|
|
136
|
+
return SliceVector<T> (vec.Size(), vec.Dist(), vec.Data()+offset);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
template <typename T>
|
|
140
|
+
INLINE auto OffsetTensor (FlatVector<T> vec, int offset)
|
|
141
|
+
// -> FlatVector<T>
|
|
142
|
+
{
|
|
143
|
+
return FlatVector<T> (vec.Size(), vec.Data()+offset);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
template <typename T>
|
|
147
|
+
INLINE auto OffsetTensor (DoubleSliceMatrix<T> mat, int offset)
|
|
148
|
+
// -> DoubleSliceMatrix<T>
|
|
149
|
+
{
|
|
150
|
+
return DoubleSliceMatrix<T> (mat.Height(),mat.Width(),
|
|
151
|
+
mat.DistRow(),mat.DistCol(),
|
|
152
|
+
mat.Data()+offset);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
template <typename T>
|
|
156
|
+
INLINE auto OffsetTensor (SliceMatrix<T> mat, int offset)
|
|
157
|
+
// -> SliceMatrix<T>
|
|
158
|
+
{
|
|
159
|
+
return SliceMatrix<T> (mat.Height(),mat.Width(),
|
|
160
|
+
mat.Dist(),
|
|
161
|
+
&mat(0,0)+offset);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
// a 0-tensor is treated as number:
|
|
166
|
+
template <typename T> auto ReduceTensor0 (T tensor) { return tensor; }
|
|
167
|
+
template <typename T, int DIMLIN> T & ReduceTensor0 (FlatTensor<0,T,DIMLIN> tensor) { return *tensor.Data(); }
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
template <int DIM, typename T, int DIMLIN>
|
|
171
|
+
class FlatTensor
|
|
172
|
+
{
|
|
173
|
+
size_t size;
|
|
174
|
+
size_t dist;
|
|
175
|
+
FlatTensor<DIM-1,T, DIMLIN> sub;
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
public:
|
|
179
|
+
FlatTensor () : size(0), dist(0) { ; }
|
|
180
|
+
|
|
181
|
+
template <typename ... ARG>
|
|
182
|
+
FlatTensor (size_t s, ARG ... args) : size(s), sub(args...)
|
|
183
|
+
{
|
|
184
|
+
dist = sub.GetSize()*sub.GetDist();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
template <typename ... ARG>
|
|
188
|
+
FlatTensor (LocalHeap & lh, ARG ... args)
|
|
189
|
+
: FlatTensor (args...)
|
|
190
|
+
{
|
|
191
|
+
size_t totsize = this->GetTotalSize();
|
|
192
|
+
// TODO: why this call instead of lh.Alloc<T> as in FlatMatrix?
|
|
193
|
+
this->Data() = new(lh) T[totsize];
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
template <typename ... ARG>
|
|
197
|
+
FlatTensor (T * data, ARG ... args)
|
|
198
|
+
: FlatTensor (args...)
|
|
199
|
+
{
|
|
200
|
+
this->Data() = data;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
FlatTensor (size_t as, size_t ad, FlatTensor<DIM-1,T> asub)
|
|
205
|
+
: size(as), dist(ad), sub(asub) { ; }
|
|
206
|
+
|
|
207
|
+
template <int DIMLIN2>
|
|
208
|
+
FlatTensor (FlatTensor<DIM,T,DIMLIN2> t2)
|
|
209
|
+
: size(t2.GetSize()), dist(t2.GetDist()), sub(t2.GetSubTensor())
|
|
210
|
+
{
|
|
211
|
+
static_assert(DIMLIN <= DIMLIN2, "illegal tensor copy");
|
|
212
|
+
;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
template <typename ... ARG>
|
|
217
|
+
auto braces (size_t i, ARG ... args) const
|
|
218
|
+
{
|
|
219
|
+
return OffsetTensor (sub.braces(args...), i*dist);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
template <typename ... ARG>
|
|
223
|
+
auto braces (typestar star, ARG ... args) const
|
|
224
|
+
{
|
|
225
|
+
return LargerTensor(sub.braces(args...), size, dist);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
template <typename ... ARG>
|
|
230
|
+
auto operator() (size_t i, ARG ... args) const
|
|
231
|
+
-> decltype (ReduceTensor0 (this->braces(i,args...)))
|
|
232
|
+
{
|
|
233
|
+
return ReduceTensor0 (braces(i,args...));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
template <typename ... ARG>
|
|
237
|
+
auto operator() (typestar star, ARG ... args) const
|
|
238
|
+
{
|
|
239
|
+
return braces(star,args...);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
FlatTensor operator= (double d)
|
|
244
|
+
{
|
|
245
|
+
for (size_t i = 0; i < size; i++)
|
|
246
|
+
GetSubTensor(i) = d;
|
|
247
|
+
return *this;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
size_t GetSize () const { return size; }
|
|
251
|
+
size_t GetDist () const { return dist; }
|
|
252
|
+
size_t GetTotalSize () const { return size*sub.GetTotalSize(); }
|
|
253
|
+
|
|
254
|
+
auto Shape() const { return std::tuple_cat(std::tuple<size_t>(size), sub.Shape()); }
|
|
255
|
+
|
|
256
|
+
auto GetSubTensor() const -> decltype(sub)
|
|
257
|
+
{ return sub; }
|
|
258
|
+
FlatTensor<DIM-1,T> GetSubTensor (size_t i) const
|
|
259
|
+
{
|
|
260
|
+
return OffsetTensor (sub, i*dist);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
T *& Data () { return sub.Data(); }
|
|
264
|
+
T * Data () const { return sub.Data(); }
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
template<typename ... ARG>
|
|
269
|
+
INLINE void SetSize (size_t s, ARG ... args) throw ()
|
|
270
|
+
{
|
|
271
|
+
size = s;
|
|
272
|
+
sub.SetSize(args...);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/// copy data and sub pointers
|
|
276
|
+
INLINE FlatTensor & Assign (const FlatTensor & m) throw()
|
|
277
|
+
{
|
|
278
|
+
sub.Assign(m.sub);
|
|
279
|
+
dist = m.dist;
|
|
280
|
+
size = m.size;
|
|
281
|
+
return *this;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/// set size, and assign mem
|
|
285
|
+
template<typename ... ARG>
|
|
286
|
+
INLINE void AssignMemory (LocalHeap & lh, size_t s, ARG ... args) throw ()
|
|
287
|
+
{
|
|
288
|
+
FlatTensor tmp{lh, s, args...};
|
|
289
|
+
Assign(tmp);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/// set size, and assign mem
|
|
293
|
+
template<typename ... ARG>
|
|
294
|
+
INLINE void AssignMemory (T * mem, size_t s, ARG ... args) throw()
|
|
295
|
+
{
|
|
296
|
+
FlatTensor tmp{mem, s, args...};
|
|
297
|
+
Assign(tmp);
|
|
298
|
+
// FlatTensor tmp{args...};
|
|
299
|
+
// this->Data() = mem;
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
template <typename T, int LINDIM>
|
|
306
|
+
class FlatTensor<0,T,LINDIM>
|
|
307
|
+
{
|
|
308
|
+
T * data;
|
|
309
|
+
public:
|
|
310
|
+
FlatTensor () { ; }
|
|
311
|
+
FlatTensor (T * adata) : data(adata) { ; }
|
|
312
|
+
template <int DIMLIN2>
|
|
313
|
+
FlatTensor (FlatTensor<0,T,DIMLIN2> t2)
|
|
314
|
+
: data(t2.Data()) { ; }
|
|
315
|
+
|
|
316
|
+
size_t GetSize () const { return 1; }
|
|
317
|
+
size_t GetDist () const { return 1; }
|
|
318
|
+
size_t GetTotalSize () const { return 1; }
|
|
319
|
+
T *& Data () { return data; }
|
|
320
|
+
T * Data () const { return data; }
|
|
321
|
+
FlatTensor<0,T,LINDIM> operator() () const { return FlatTensor<0,T,LINDIM> (data); }
|
|
322
|
+
FlatTensor<0,T,LINDIM> braces () const { return FlatTensor<0,T,LINDIM> (data); }
|
|
323
|
+
// const T & operator() () const { return *data; }
|
|
324
|
+
// T & operator() () { return *data; }
|
|
325
|
+
operator T () const { return *data; }
|
|
326
|
+
operator T& () { return *data; }
|
|
327
|
+
T & operator= (double d) { *data = d; return *data; }
|
|
328
|
+
T & operator-= (double d) { *data -= d; return *data; }
|
|
329
|
+
T & operator+= (double d) { *data += d; return *data; }
|
|
330
|
+
|
|
331
|
+
template<typename ... ARG>
|
|
332
|
+
INLINE void SetSize (ARG ... args) throw () { }
|
|
333
|
+
|
|
334
|
+
auto Shape() const { return std::tuple<>(); }
|
|
335
|
+
|
|
336
|
+
INLINE void Assign (const FlatTensor& m) throw ()
|
|
337
|
+
{
|
|
338
|
+
this->data = m.data;
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
template <int DIM, typename T = double>
|
|
355
|
+
class Tensor : public FlatTensor<DIM,T>
|
|
356
|
+
{
|
|
357
|
+
public:
|
|
358
|
+
Tensor (const Tensor&) = delete;
|
|
359
|
+
Tensor (Tensor&& t2)
|
|
360
|
+
: FlatTensor<DIM,T> (t2)
|
|
361
|
+
{
|
|
362
|
+
t2.Data() = nullptr;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
template <typename ... ARG>
|
|
366
|
+
Tensor (ARG ... args) : FlatTensor<DIM,T> (args...)
|
|
367
|
+
{
|
|
368
|
+
size_t totsize = this->GetTotalSize();
|
|
369
|
+
this->Data() = new T[totsize];
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
~Tensor()
|
|
373
|
+
{
|
|
374
|
+
delete [] this->Data();
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
FlatTensor<DIM,T> operator= (double d)
|
|
378
|
+
{
|
|
379
|
+
return FlatTensor<DIM,T>::operator=(d);
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
template <int DIM, typename T>
|
|
390
|
+
INLINE ostream & operator<< (ostream & ost, const FlatTensor<DIM,T> & tensor)
|
|
391
|
+
{
|
|
392
|
+
ost << "tensor, dim = " << tensor.GetSize()
|
|
393
|
+
<< ", dist = " << tensor.GetDist()
|
|
394
|
+
<< ", size = " << tensor.GetTotalSize() << endl;
|
|
395
|
+
|
|
396
|
+
for (size_t i = 0; i < tensor.GetSize(); i++)
|
|
397
|
+
{
|
|
398
|
+
ost << "subtensor " << i;
|
|
399
|
+
for (size_t j = 0; j < DIM-1; j++) ost << ",*";
|
|
400
|
+
ost << ":" << endl;
|
|
401
|
+
ost << tensor.GetSubTensor(i);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
return ost;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
template <typename T>
|
|
408
|
+
INLINE ostream & operator<< (ostream & ost, const FlatTensor<2,T> & tensor)
|
|
409
|
+
{
|
|
410
|
+
for (size_t i = 0; i < tensor.GetSize(); i++)
|
|
411
|
+
ost << tensor.GetSubTensor(i);
|
|
412
|
+
return ost;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
template <typename T>
|
|
416
|
+
INLINE ostream & operator<< (ostream & ost, const FlatTensor<1,T> & tensor)
|
|
417
|
+
{
|
|
418
|
+
for (size_t i = 0; i < tensor.GetSize(); i++)
|
|
419
|
+
ost << * (tensor.Data()+i*tensor.GetDist()) << " ";
|
|
420
|
+
return ost << endl;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
template <typename T>
|
|
425
|
+
INLINE ostream & operator<< (ostream & ost, const FlatTensor<0,T> & tensor)
|
|
426
|
+
{
|
|
427
|
+
return ost << *tensor.Data();
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
extern void ThrowTensorIndexError(size_t ind);
|
|
434
|
+
|
|
435
|
+
// a tensor with static shape
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
template <typename T, size_t ...SHAPE>
|
|
439
|
+
class Tens
|
|
440
|
+
{
|
|
441
|
+
template <size_t FIRST, size_t ...REST>
|
|
442
|
+
static constexpr size_t Prod ()
|
|
443
|
+
{
|
|
444
|
+
if constexpr (sizeof...(REST) == 0) return FIRST;
|
|
445
|
+
else return FIRST * Prod<REST...>();
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
template <typename TUPSHAPE, typename TUPIND>
|
|
449
|
+
static constexpr size_t CalcIndex(TUPSHAPE shape, TUPIND ind)
|
|
450
|
+
{
|
|
451
|
+
size_t i1 = 0;
|
|
452
|
+
constexpr size_t dim = tuple_size<TUPSHAPE>();
|
|
453
|
+
Iterate<dim> ([&](auto i)
|
|
454
|
+
{
|
|
455
|
+
i1 *= get<i> (shape);
|
|
456
|
+
i1 += get<i> (ind);
|
|
457
|
+
});
|
|
458
|
+
return i1;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
T data[Prod<SHAPE...>()];
|
|
462
|
+
public:
|
|
463
|
+
static constexpr size_t Size() { return Prod<SHAPE...>(); }
|
|
464
|
+
static constexpr size_t Order() { return sizeof...(SHAPE); }
|
|
465
|
+
|
|
466
|
+
static constexpr auto Shape() {
|
|
467
|
+
array<size_t, Order()> shape;
|
|
468
|
+
Iterate<Order()> ([&](auto I)
|
|
469
|
+
{
|
|
470
|
+
shape[I] = get<I> (tuple(SHAPE...));
|
|
471
|
+
});
|
|
472
|
+
return shape;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
auto AsVector() { return FlatVector<T> (Size(), data); }
|
|
476
|
+
|
|
477
|
+
template <typename ...IND>
|
|
478
|
+
T & operator() (IND... i)
|
|
479
|
+
{
|
|
480
|
+
size_t ind = CalcIndex(tuple(SHAPE...), tuple(i...));
|
|
481
|
+
// if (ind >= Size()) ThrowTensorIndexError(ind);
|
|
482
|
+
return data[ind];
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
template <typename ...IND>
|
|
486
|
+
const T & operator() (IND... i) const
|
|
487
|
+
{
|
|
488
|
+
size_t ind = CalcIndex(tuple(SHAPE...), tuple(i...));
|
|
489
|
+
// if (ind >= Size()) ThrowTensorIndexError(ind);
|
|
490
|
+
return data[ind];
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
T & operator[] (size_t i) { return data[i]; }
|
|
494
|
+
const T & operator[] (size_t i) const { return data[i]; }
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
template <typename T>
|
|
498
|
+
class Tens<T>
|
|
499
|
+
{
|
|
500
|
+
T data[1];
|
|
501
|
+
|
|
502
|
+
public:
|
|
503
|
+
static constexpr size_t Size() { return 1; }
|
|
504
|
+
static constexpr size_t Order() { return 0; }
|
|
505
|
+
|
|
506
|
+
static constexpr auto Shape() {
|
|
507
|
+
array<size_t, 0> shape;
|
|
508
|
+
return shape;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
auto AsVector() { return FlatVector<T> (Size(), data); }
|
|
512
|
+
|
|
513
|
+
T & operator() () { return data[0]; }
|
|
514
|
+
T & operator[] (size_t) { return data[0]; }
|
|
515
|
+
const T & operator() () const { return data[0]; }
|
|
516
|
+
const T & operator[] (size_t) const { return data[0]; }
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
}
|