emerge 0.5.3__tar.gz → 0.5.4__tar.gz

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 emerge might be problematic. Click here for more details.

Files changed (107) hide show
  1. {emerge-0.5.3 → emerge-0.5.4}/.bumpversion.toml +1 -1
  2. {emerge-0.5.3 → emerge-0.5.4}/LICENSE +39 -0
  3. {emerge-0.5.3 → emerge-0.5.4}/PKG-INFO +11 -8
  4. {emerge-0.5.3 → emerge-0.5.4}/README.md +10 -7
  5. {emerge-0.5.3 → emerge-0.5.4}/THIRD_PARTY_LICENSES.md +100 -2
  6. {emerge-0.5.3 → emerge-0.5.4}/emerge/__init__.py +2 -2
  7. emerge-0.5.4/emerge/_emerge/__init__.py +17 -0
  8. emerge-0.5.4/emerge/_emerge/_cache_check.py +46 -0
  9. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/logsettings.py +17 -0
  10. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/mesh3d.py +9 -9
  11. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/mth/pairing.py +1 -2
  12. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/periodic.py +1 -1
  13. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/selection.py +1 -1
  14. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/simmodel.py +0 -1
  15. {emerge-0.5.3 → emerge-0.5.4}/emerge/lib.py +53 -36
  16. {emerge-0.5.3 → emerge-0.5.4}/pyproject.toml +1 -1
  17. {emerge-0.5.3 → emerge-0.5.4}/uv.lock +1 -1
  18. emerge-0.5.3/emerge/_emerge/__init__.py +0 -42
  19. {emerge-0.5.3 → emerge-0.5.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {emerge-0.5.3 → emerge-0.5.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  21. {emerge-0.5.3 → emerge-0.5.4}/.gitignore +0 -0
  22. {emerge-0.5.3 → emerge-0.5.4}/.python-version +0 -0
  23. {emerge-0.5.3 → emerge-0.5.4}/UMFPACK_Install_windows.md +0 -0
  24. {emerge-0.5.3 → emerge-0.5.4}/UMFPACK_installer_windows.py +0 -0
  25. {emerge-0.5.3 → emerge-0.5.4}/emerge/__main__.py +0 -0
  26. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/bc.py +0 -0
  27. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/const.py +0 -0
  28. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/coord.py +0 -0
  29. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/cs.py +0 -0
  30. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/dataset.py +0 -0
  31. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/__init__.py +0 -0
  32. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/femdata.py +0 -0
  33. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/index_interp.py +0 -0
  34. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/legrange2.py +0 -0
  35. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/ned2_interp.py +0 -0
  36. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/nedelec2.py +0 -0
  37. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/elements/nedleg2.py +0 -0
  38. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/__init__.py +0 -0
  39. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/horn.py +0 -0
  40. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/modeler.py +0 -0
  41. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/operations.py +0 -0
  42. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/pcb.py +0 -0
  43. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/pcb_tools/calculator.py +0 -0
  44. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/pcb_tools/macro.py +0 -0
  45. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/pmlbox.py +0 -0
  46. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/polybased.py +0 -0
  47. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/shapes.py +0 -0
  48. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo/step.py +0 -0
  49. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geo2d.py +0 -0
  50. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/geometry.py +0 -0
  51. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/howto.py +0 -0
  52. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/material.py +0 -0
  53. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/mesher.py +0 -0
  54. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/mth/common_functions.py +0 -0
  55. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/mth/integrals.py +0 -0
  56. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/mth/optimized.py +0 -0
  57. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/__init__.py +0 -0
  58. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/__init__.py +0 -0
  59. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/adaptive_freq.py +0 -0
  60. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/assembly/assembler.py +0 -0
  61. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/assembly/curlcurl.py +0 -0
  62. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/assembly/generalized_eigen.py +0 -0
  63. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/assembly/periodicbc.py +0 -0
  64. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/assembly/robinbc.py +0 -0
  65. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/microwave_3d.py +0 -0
  66. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/microwave_bc.py +0 -0
  67. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/microwave_data.py +0 -0
  68. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/periodic.py +0 -0
  69. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/port_functions.py +0 -0
  70. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/sc.py +0 -0
  71. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/simjob.py +0 -0
  72. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/sparam.py +0 -0
  73. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/physics/microwave/touchstone.py +0 -0
  74. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/__init__.py +0 -0
  75. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/display.py +0 -0
  76. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/matplotlib/mpldisplay.py +0 -0
  77. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/pyvista/__init__.py +0 -0
  78. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/pyvista/display.py +0 -0
  79. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/pyvista/display_settings.py +0 -0
  80. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot/simple_plots.py +0 -0
  81. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/plot.py +0 -0
  82. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/projects/__init__.py +0 -0
  83. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/projects/_gen_base.txt +0 -0
  84. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/projects/_load_base.txt +0 -0
  85. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/projects/generate_project.py +0 -0
  86. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/simulation_data.py +0 -0
  87. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/solve_interfaces/cudss_interface.py +0 -0
  88. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/solve_interfaces/pardiso_interface.py +0 -0
  89. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/solver.py +0 -0
  90. {emerge-0.5.3 → emerge-0.5.4}/emerge/_emerge/system.py +0 -0
  91. {emerge-0.5.3 → emerge-0.5.4}/emerge/cli.py +0 -0
  92. {emerge-0.5.3 → emerge-0.5.4}/emerge/plot.py +0 -0
  93. {emerge-0.5.3 → emerge-0.5.4}/emerge/pyvista.py +0 -0
  94. {emerge-0.5.3 → emerge-0.5.4}/examples/demo10_sgh.py +0 -0
  95. {emerge-0.5.3 → emerge-0.5.4}/examples/demo11_lumped_element_filter.py +0 -0
  96. {emerge-0.5.3 → emerge-0.5.4}/examples/demo1_stepped_imp_filter.py +0 -0
  97. {emerge-0.5.3 → emerge-0.5.4}/examples/demo2_combline_filter.py +0 -0
  98. {emerge-0.5.3 → emerge-0.5.4}/examples/demo3_coupled_line_filter.py +0 -0
  99. {emerge-0.5.3 → emerge-0.5.4}/examples/demo3_patch_antenna.py +0 -0
  100. {emerge-0.5.3 → emerge-0.5.4}/examples/demo4_boundary_selection.py +0 -0
  101. {emerge-0.5.3 → emerge-0.5.4}/examples/demo5_revolve.py +0 -0
  102. {emerge-0.5.3 → emerge-0.5.4}/examples/demo6_striplines_with_vias.py +0 -0
  103. {emerge-0.5.3 → emerge-0.5.4}/examples/demo7_periodic_cells.py +0 -0
  104. {emerge-0.5.3 → emerge-0.5.4}/examples/demo8_waveguide_bpf_synthesis.py +0 -0
  105. {emerge-0.5.3 → emerge-0.5.4}/examples/demo9_dielectric_resonator.py +0 -0
  106. {emerge-0.5.3 → emerge-0.5.4}/src/__init__.py +0 -0
  107. {emerge-0.5.3 → emerge-0.5.4}/src/_img/logo.jpeg +0 -0
@@ -1,5 +1,5 @@
1
1
  [tool.bumpversion]
2
- current_version = "0.5.3"
2
+ current_version = "0.5.4"
3
3
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
4
4
  serialize = ["{major}.{minor}.{patch}"]
5
5
  search = "{current_version}"
@@ -1,3 +1,42 @@
1
+ ──────────────────────────────────────────────────────────────────────────────
2
+ PREAMBLE — Licence map and disclaimers (not part of the GNU GPL text)
3
+ ──────────────────────────────────────────────────────────────────────────────
4
+ This repository is distributed under two distinct licences:
5
+
6
+ • **Gmsh-derived components**
7
+ These files are licensed under the **GNU General Public License,
8
+ version 2 or (at your option) any later version (“GPL-2.0+”)**, together
9
+ with the original *Gmsh additional permission* that allows linking with
10
+ Netgen, METIS, OpenCASCADE and ParaView under their respective licences.
11
+ When you distribute binaries containing these components, the complete
12
+ corresponding source code must be offered under GPL-2.0+.
13
+
14
+ • **`lib.py` — materials-property database**
15
+ This single file is dedicated to the public domain under **CC0 1.0**.
16
+ You may copy, modify, merge, publish, distribute, sublicense and/or sell
17
+ copies of `lib.py` without restriction. The data it contains are
18
+ provided *“as is”* for informational purposes only; verify all critical
19
+ values independently.
20
+
21
+ DISCLAIMER OF WARRANTY
22
+ This software is provided **“as is,”** without any express or implied
23
+ warranty, including but not limited to merchantability, fitness for a
24
+ particular purpose and non-infringement. The authors shall not be liable for
25
+ any damages arising from the use or inability to use this software.
26
+
27
+ DATA ACCURACY NOTICE
28
+ Material-property data in `lib.py` may be incomplete, out of date or
29
+ unsuitable for engineering design. Always confirm crucial values from
30
+ independent, authoritative sources.
31
+
32
+ By using any part of this codebase you acknowledge and accept the terms
33
+ above.
34
+
35
+ ──────────────────────────────────────────────────────────────────────────────
36
+ The complete text of the **GNU General Public License, version 2**
37
+ (immediately followed by the original Gmsh additional permission) follows below.
38
+ ──────────────────────────────────────────────────────────────────────────────
39
+
1
40
  GNU GENERAL PUBLIC LICENSE
2
41
  Version 2, June 1991
3
42
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emerge
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: An open source EM FEM simulator in Python
5
5
  Project-URL: Homepage, https://github.com/FennisRobert/EMerge
6
6
  Project-URL: Issues, https://github.com/FennisRobert/EMerge/issues
@@ -39,19 +39,17 @@ You can now install the basic version of emerge from PyPi!
39
39
  ```
40
40
  pip install emerge
41
41
  ```
42
- If you want to install the library with PyPardiso on Intel machines, you can install the optional dependency with EMerge using:
43
- ```
44
- pip install emerge[pypardiso]
45
- ```
46
42
  On MacOS and Linux you can install it with the very fast UMFPACK through scikit-umfpack
47
43
 
48
44
  ```
49
45
  pip install emerge[scikit-umfpack]
50
46
  ```
51
- On linux and MacOS with intel or AMD chips you can also include both:
52
47
 
48
+ ### Experimental
49
+
50
+ If you have a new NVidia card you can try the first test implementation of the cuDSS solver. The dependencies can be installed through:
53
51
  ```
54
- pip install emerge[scikit-umfpack, pypardiso]
52
+ pip install emerge[cudss]
55
53
  ```
56
54
  The `scikit-umfpack` solver can be installed on Windows as well from binaries with conda. This is a bit more complicated and is described in the installation guide.
57
55
 
@@ -83,11 +81,16 @@ To run this FEM library you need the following libraries
83
81
  - matplotlib (for the matplotlib base display)
84
82
  - pyvista (for the PyVista base display)
85
83
  - numba-progress
84
+ - mkl (x86 devices only)
86
85
 
87
86
  Optional:
88
- - pypardiso
89
87
  - scikit-umfpack
88
+ - cudss
90
89
 
91
90
  ## NOTICE
92
91
 
93
92
  First time runs will be very slow because Numba needs to generate local C-compiled functions of the assembler and other mathematical functions. These compilations are chached so this should only take time once.
93
+
94
+ ## Third Party License Notice
95
+
96
+ “This package depends on Intel® Math Kernel Library (MKL), which is licensed separately under the Intel Simplified Software License (October 2022). Installing with pip will fetch the MKL wheel and prompt you to accept that licence.”
@@ -13,19 +13,17 @@ You can now install the basic version of emerge from PyPi!
13
13
  ```
14
14
  pip install emerge
15
15
  ```
16
- If you want to install the library with PyPardiso on Intel machines, you can install the optional dependency with EMerge using:
17
- ```
18
- pip install emerge[pypardiso]
19
- ```
20
16
  On MacOS and Linux you can install it with the very fast UMFPACK through scikit-umfpack
21
17
 
22
18
  ```
23
19
  pip install emerge[scikit-umfpack]
24
20
  ```
25
- On linux and MacOS with intel or AMD chips you can also include both:
26
21
 
22
+ ### Experimental
23
+
24
+ If you have a new NVidia card you can try the first test implementation of the cuDSS solver. The dependencies can be installed through:
27
25
  ```
28
- pip install emerge[scikit-umfpack, pypardiso]
26
+ pip install emerge[cudss]
29
27
  ```
30
28
  The `scikit-umfpack` solver can be installed on Windows as well from binaries with conda. This is a bit more complicated and is described in the installation guide.
31
29
 
@@ -57,11 +55,16 @@ To run this FEM library you need the following libraries
57
55
  - matplotlib (for the matplotlib base display)
58
56
  - pyvista (for the PyVista base display)
59
57
  - numba-progress
58
+ - mkl (x86 devices only)
60
59
 
61
60
  Optional:
62
- - pypardiso
63
61
  - scikit-umfpack
62
+ - cudss
64
63
 
65
64
  ## NOTICE
66
65
 
67
66
  First time runs will be very slow because Numba needs to generate local C-compiled functions of the assembler and other mathematical functions. These compilations are chached so this should only take time once.
67
+
68
+ ## Third Party License Notice
69
+
70
+ “This package depends on Intel® Math Kernel Library (MKL), which is licensed separately under the Intel Simplified Software License (October 2022). Installing with pip will fetch the MKL wheel and prompt you to accept that licence.”
@@ -691,14 +691,14 @@ Agreement.
691
691
  Intel MKL is redistributable **only under Intel’s terms**; review them carefully
692
692
  if you ship binaries.
693
693
 
694
- **Link to full text:** <https://software.intel.com/content/www/us/en/develop/articles/intel-simplified-software-license.html>
694
+ **Link to full text:** <https://software.intel.com/sites/landingpage/pintool/intel-simplified-software-license.txt>
695
695
 
696
696
  ▼ **BEGIN LICENSE (Intel SSL)**
697
697
  Intel Simplified Software License (Version October 2022)
698
698
 
699
699
  PIN: Copyright (C) Intel Corporation
700
700
 
701
- Use and Redistribution. You may use and redistribute the software, which is provided in binary form only, (the Software), without modification, provided the following conditions are met:
701
+ Use and Redistribution. You may use and redistribute the software, which is provided in binary form only, (the Software), without modification, provided the following conditions are met:
702
702
 
703
703
  * Redistributions must reproduce the above copyright notice and these terms of use in the Software and in the documentation and/or other materials provided with the distribution.
704
704
  * Neither the name of Intel nor the names of its suppliers may be used to endorse or promote products derived from this Software without specific prior written permission.
@@ -735,5 +735,103 @@ THE UNITED NATIONS CONVENTION ON CONTRACTS FOR THE INTERNATIONAL SALE OF GOODS (
735
735
 
736
736
  ---
737
737
 
738
+ ## 6. Apache License 2.0 (“Permissive”)
739
+
740
+ | Package | Version (optional) |
741
+ |---------|--------------------|
742
+ | **nvmath-python[cu12]** | *any* |
743
+
744
+ `nvmath-python[cu12]` is redistributable under the Apache License 2.0.
745
+
746
+ **Link to full text:** <https://www.apache.org/licenses/LICENSE-2.0>
747
+
748
+ ▼ **BEGIN LICENSE (Apache-2.0)**
749
+
750
+ -------------------------------------------------------------------------------
751
+ Copyright & License Notice
752
+ -------------------------------------------------------------------------------
753
+
754
+ Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
755
+
756
+ Licensed under the Apache License, Version 2.0 (the "License");
757
+ you may not use this file except in compliance with the License.
758
+ You may obtain a copy of the License at
759
+
760
+ http://www.apache.org/licenses/LICENSE-2.0
761
+
762
+ Unless required by applicable law or agreed to in writing, software
763
+ distributed under the License is distributed on an "AS IS" BASIS,
764
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
765
+ implied. See the License for the specific language governing
766
+ permissions and limitations under the License.
767
+
768
+ ▲ **END LICENSE (Apache-2.0)**
769
+
770
+ ---
771
+
772
+ ## 7. MIT License (“Permissive”)
773
+
774
+ | Package | Version (optional) |
775
+ |---------|--------------------|
776
+ | **cupy-cuda12x** | *any* |
777
+
778
+ `cupy-cuda12x` is redistributable under the MIT License.
779
+
780
+ **Link to full text:** <https://opensource.org/licenses/MIT>
781
+
782
+ ▼ **BEGIN LICENSE (MIT)**
783
+
784
+ Copyright (c) 2015 Preferred Infrastructure, Inc.
785
+ Copyright (c) 2015 Preferred Networks, Inc.
786
+
787
+ Permission is hereby granted, free of charge, to any person obtaining a copy
788
+ of this software and associated documentation files (the "Software"), to deal
789
+ in the Software without restriction, including without limitation the rights
790
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
791
+ copies of the Software, and to permit persons to whom the Software is
792
+ furnished to do so, subject to the following conditions:
793
+
794
+ The above copyright notice and this permission notice shall be included in
795
+ all copies or substantial portions of the Software.
796
+
797
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
798
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
799
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
800
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
801
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
802
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
803
+ THE SOFTWARE.
804
+
805
+ ▲ **END LICENSE (MIT)**
806
+
807
+ ---
808
+
809
+ ## 8. NVIDIA cuDSS SDK License (“Proprietary”)
810
+
811
+ | Package | Version (optional) |
812
+ |---------|--------------------|
813
+ | **nvidia-cudss-cu12** | *any* |
814
+
815
+ `nvidia-cudss-cu12` is provided under NVIDIA’s proprietary cuDSS SDK licence.
816
+ End-users will be prompted to accept this EULA when `pip` downloads the wheel.
817
+
818
+ **Link to full text:** <https://docs.nvidia.com/cuda/cudss/license.html>
819
+
820
+ ▼ **BEGIN LICENSE (NVIDIA cuDSS)**
821
+
822
+ -------------------------------------------------------------------------------
823
+ Copyright & License Notice
824
+ -------------------------------------------------------------------------------
825
+
826
+ Copyright © 2023-2025, NVIDIA Corporation & Affiliates. ALL RIGHTS RESERVED.
827
+
828
+ Licensed under the **“License Agreement for NVIDIA Math Libraries
829
+ Software Development Kits” (v. February 10 2022)**.
830
+
831
+ **Link to full text:** <https://docs.nvidia.com/cuda/cudss/license.html>
832
+ d
833
+ ▲ **END LICENSE (NVIDIA cuDSS)**
834
+
835
+ ---
738
836
 
739
837
  *Last updated: 2025-08-06*
@@ -1,5 +1,5 @@
1
1
  """A Python based FEM solver.
2
- Copyright (C) 2025 name of Robert Fennis
2
+ Copyright (C) 2025 Robert Fennis
3
3
 
4
4
  This program is free software; you can redistribute it and/or
5
5
  modify it under the terms of the GNU General Public License
@@ -36,7 +36,7 @@ os.environ["NUMEXPR_NUM_THREADS"] = NTHREADS
36
36
  ############################################################
37
37
  # IMPORT MODULES #
38
38
  ############################################################
39
-
39
+ from ._emerge import _cache_check
40
40
  from ._emerge.logsettings import LOG_CONTROLLER
41
41
  from loguru import logger
42
42
 
@@ -0,0 +1,17 @@
1
+ # """A Python based FEM solver.
2
+ # Copyright (C) 2025 Robert Fennis
3
+
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU General Public License
6
+ # as published by the Free Software Foundation; either version 2
7
+ # of the License, or (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, see
16
+ # <https://www.gnu.org/licenses/>.
17
+
@@ -0,0 +1,46 @@
1
+ # EMerge is an open source Python based FEM EM simulation module.
2
+ # Copyright (C) 2025 Robert Fennis.
3
+
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU General Public License
6
+ # as published by the Free Software Foundation; either version 2
7
+ # of the License, or (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, see
16
+ # <https://www.gnu.org/licenses/>.
17
+
18
+ from numba.core import event, types
19
+ from numba import njit
20
+
21
+ _COMPILE_MESSAGE = """
22
+ [ EMERGE ]
23
+ ⚠ Numba is compiling optimized code; this may take a few minutes.
24
+ • Additional functions may be compiled on-the-fly.
25
+ • Compilation happens only once—subsequent runs load from cache.
26
+ Please wait…"""
27
+
28
+ @njit(cache=True)
29
+ def _donothing(a):
30
+ return a
31
+
32
+ class Notify(event.Listener):
33
+ def on_start(self, ev):
34
+ f = ev.data['dispatcher']
35
+ sig = ev.data['args']
36
+ if f is _donothing: # limit to the function you care about
37
+ sig = ev.data['args']
38
+ print(_COMPILE_MESSAGE)
39
+
40
+ def on_end(self, ev): # unused here
41
+ pass
42
+
43
+
44
+ # install listener only for this block:
45
+ with event.install_listener("numba:compile", Notify()):
46
+ _donothing(0)
@@ -1,3 +1,20 @@
1
+ # EMerge is an open source Python based FEM EM simulation module.
2
+ # Copyright (C) 2025 Robert Fennis.
3
+
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU General Public License
6
+ # as published by the Free Software Foundation; either version 2
7
+ # of the License, or (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, see
16
+ # <https://www.gnu.org/licenses/>.
17
+
1
18
  from loguru import logger
2
19
  import sys
3
20
  from typing import Literal
@@ -455,15 +455,11 @@ class Mesh3D(Mesh):
455
455
  Returns:
456
456
  tuple[dict[int, int], np.ndarray, np.ndarray]: The node index mapping and the node index arrays
457
457
  """
458
-
459
- def gen_key(coord, mult):
460
- return tuple([int(round(c*mult)) for c in coord])
461
458
 
462
- ftag_to_node = dict()
463
- face_dimtags = gmsh.model.get_entities(2)
464
-
465
459
  node_ids_1 = []
466
460
  node_ids_2 = []
461
+
462
+ face_dimtags = gmsh.model.get_entities(2)
467
463
 
468
464
  for d,t in face_dimtags:
469
465
  domain_tag, f_tags, node_tags = gmsh.model.mesh.get_elements(2, t)
@@ -472,19 +468,23 @@ class Mesh3D(Mesh):
472
468
  node_ids_1.extend(node_tags)
473
469
  if t in bc.face2.tags:
474
470
  node_ids_2.extend(node_tags)
475
- ftag_to_node[t] = node_tags
471
+
472
+
473
+ node_ids_1 = sorted(list(set(node_ids_1)))
474
+ node_ids_2 = sorted(list(set(node_ids_2)))
476
475
 
477
476
  all_node_ids = np.unique(np.array(node_ids_1 + node_ids_2))
478
477
  dsmin = shortest_distance(self.nodes[:,all_node_ids])
479
478
 
480
- node_ids_1_arry = np.sort(np.unique(np.array(node_ids_1)))
481
- node_ids_2_arry = np.sort(np.unique(np.array(node_ids_2)))
479
+ node_ids_1_arry = np.array(node_ids_1)
480
+ node_ids_2_arry = np.array(node_ids_2)
482
481
  dv = np.array(bc.dv)
483
482
 
484
483
  nodemap = pair_coordinates(self.nodes, node_ids_1_arry, node_ids_2_arry, dv, dsmin/2)
485
484
  node_ids_2_unsorted = [nodemap[i] for i in sorted(node_ids_1)]
486
485
  node_ids_2_sorted = sorted(node_ids_2_unsorted)
487
486
  conv_map = {i1: i2 for i1, i2 in zip(node_ids_2_unsorted, node_ids_2_sorted)}
487
+
488
488
  return conv_map, np.array(node_ids_2_unsorted), np.array(node_ids_2_sorted)
489
489
 
490
490
 
@@ -47,7 +47,6 @@ def link_coords(coords: np.ndarray, ids1: np.ndarray, ids2: np.ndarray, disp: np
47
47
  for i1 in range(N):
48
48
  ictr = 0
49
49
  c1 = coords[:,ids1[i1]]
50
-
51
50
  for i2 in range(id_start, N):
52
51
  if available[i2] == 0:
53
52
  continue
@@ -91,7 +90,7 @@ def pair_coordinates(coords: np.ndarray, ids1: np.ndarray, ids2: np.ndarray, dis
91
90
  ids2_c_sorted = sorted(ids2, key= lambda x: tuple(coords[:,x]-disp))
92
91
 
93
92
  mapping = link_coords(coords, np.array(ids1_c_sorted), np.array(ids2_c_sorted), disp, dsmax)
94
-
93
+
95
94
  mapping = {i: j for i,j in zip(mapping[0,:], mapping[1,:])}
96
95
 
97
96
  return mapping
@@ -31,7 +31,7 @@ def _pair_selection(f1: Selection, f2: Selection, translation: tuple[float, floa
31
31
  f2s = []
32
32
  for t1, c1 in zip(f1.tags, c1s):
33
33
  for t2, c2 in zip(f2.tags, c2s):
34
- if np.linalg.norm((c1 + ds)-c2) < 1e-6:
34
+ if np.linalg.norm((c1 + ds)-c2) < 1e-8:
35
35
  f1s.append(Selection([t1,]))
36
36
  f2s.append(Selection([t2,]))
37
37
  return f1s, f2s
@@ -536,7 +536,7 @@ class Selector:
536
536
  nx: float,
537
537
  ny: float,
538
538
  nz: float,
539
- tolerance: float = 1e-6) -> FaceSelection:
539
+ tolerance: float = 1e-8) -> FaceSelection:
540
540
  """Returns a FaceSelection for all faces that lie in a provided infinite plane
541
541
  specified by an origin plus a plane normal vector.
542
542
 
@@ -384,7 +384,6 @@ class Simulation3D:
384
384
  logger.error('GMSH Mesh error detected.')
385
385
  print(_GMSH_ERROR_TEXT)
386
386
  raise
387
-
388
387
  self.mesh.update(self.mesher._get_periodic_bcs())
389
388
  self.mesh.exterior_face_tags = self.mesher.domain_boundary_face_tags
390
389
  gmsh.model.occ.synchronize()
@@ -1,15 +1,28 @@
1
+ """
2
+ ╔══════════════════════════════════════════════════════════════════════╗
3
+ ║ library.py – Material-property database ║
4
+ ║ ║
5
+ ║ This file is released under CC0 1.0 – Public-Domain Dedication. ║
6
+ ║ You may use, copy, modify, and distribute it without restriction. ║
7
+ ║ ║
8
+ ║ All OTHER files in this repository are proprietary. See LICENSE ║
9
+ ║ at the project root for full terms, conditions, and disclaimers. ║
10
+ ║ ║
11
+ ║ DISCLAIMER: Data herein are provided “as is”, with no warranties. ║
12
+ ║ Verify critical values independently before use. ║
13
+ ╚══════════════════════════════════════════════════════════════════════╝
14
+ """
1
15
  from ._emerge.material import Material, AIR, COPPER
2
16
  from ._emerge.const import C0, Z0, PI, EPS0, MU0
3
17
 
4
18
  EISO: float = (Z0/(2*PI))**0.5
5
19
  EOMNI = (3*Z0/(4*PI))**0.5
6
20
 
7
-
8
- ### MATERIALS
21
+ ##MATERIALS
9
22
  VACUUM = Material(color="#2d8cd5", opacity=0.05)
10
23
 
11
24
  ############################################################
12
- # METALS #
25
+ # METALS #
13
26
  ############################################################
14
27
 
15
28
  GREY = "#bfbfbf"
@@ -39,22 +52,22 @@ MET_ZIRCONIUM = Material(cond=2.44e7, color=GREY, opacity=0.5)
39
52
 
40
53
 
41
54
  ############################################################
42
- # SEMICONDUCTORS #
55
+ # SEMICONDUCTORS #
43
56
  ############################################################
44
57
 
45
- SEMI_SILICON = Material(er=11.7, tand=0.005, color="#b4b4b4", opacity=0.5) # Crystalline Si
46
- SEMI_SILICON_N = Material(er=7.5, tand=0.0003, color="#a0a0a0", opacity=0.5) # Silicon Nitride (Si₃N₄)
47
- SEMI_SILICON_OXIDE = Material(er=3.9, tand=0.0001, color="#e0e0e0", opacity=0.5) # Silicon Dioxide (SiO₂)
58
+ SEMI_SILICON = Material(er=11.7, tand=0.005, color="#b4b4b4", opacity=0.5) # Crystalline Si
59
+ SEMI_SILICON_N = Material(er=7.5, tand=0.0003, color="#a0a0a0", opacity=0.5) # Silicon Nitride (Si₃N₄)
60
+ SEMI_SILICON_OXIDE = Material(er=3.9, tand=0.0001, color="#e0e0e0", opacity=0.5) # Silicon Dioxide (SiO₂)
48
61
  SEMI_GERMANIUM = Material(er=16.0, tand=0.001, color="#787878", opacity=0.5)
49
- SEMI_GAAS = Material(er=13.1, tand=0.0016, color="#aa8888", opacity=0.5) # Gallium Arsenide
50
- SEMI_GA_N = Material(er=8.9, tand=0.002, color="#8888cc", opacity=0.5) # Gallium Nitride
51
- SEMI_INP = Material(er=12.5, tand=0.0015, color="#cc99aa", opacity=0.5) # Indium Phosphide
52
- SEMI_ALN = Material(er=8.6, tand=0.0003, color="#ccccee", opacity=0.5) # Aluminum Nitride
53
- SEMI_AL2O3 = Material(er=9.8, tand=0.0002, color="#eaeaea", opacity=0.5) # Alumina
62
+ SEMI_GAAS = Material(er=13.1, tand=0.0016, color="#aa8888", opacity=0.5) # Gallium Arsenide
63
+ SEMI_GA_N = Material(er=8.9, tand=0.002, color="#8888cc", opacity=0.5) # Gallium Nitride
64
+ SEMI_INP = Material(er=12.5, tand=0.0015, color="#cc99aa", opacity=0.5) # Indium Phosphide
65
+ SEMI_ALN = Material(er=8.6, tand=0.0003, color="#ccccee", opacity=0.5) # Aluminum Nitride
66
+ SEMI_AL2O3 = Material(er=9.8, tand=0.0002, color="#eaeaea", opacity=0.5) # Alumina
54
67
  SEMI_SAPPHIRE = Material(er=9.4, tand=0.0001, color="#ddddff", opacity=0.5)
55
- SEMI_DIAMOND = Material(er=5.5, tand=0.00005, color="#cceeff", opacity=0.5) # Synthetic CVD diamond
56
- SEMI_HBN = Material(er=4.0, tand=0.0001, color="#eeeeff", opacity=0.5) # Hexagonal Boron Nitride
57
- SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity=0.5) # Silicon Oxynitride (SiOxNy)
68
+ SEMI_DIAMOND = Material(er=5.5, tand=0.00005, color="#cceeff", opacity=0.5) # Synthetic CVD diamond
69
+ SEMI_HBN = Material(er=4.0, tand=0.0001, color="#eeeeff", opacity=0.5) # Hexagonal Boron Nitride
70
+ SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity=0.5) # Silicon Oxynitride (SiOxNy)
58
71
 
59
72
  ############################################################
60
73
  # LIQUIDS #
@@ -63,13 +76,17 @@ SEMI_SIOXNY = Material(er=5.0, tand=0.002, color="#ddddee", opacity
63
76
  LIQ_WATER = Material(er=80.1, cond=0.0, color="#0080ff", opacity=0.3)
64
77
  LIQ_FERRITE = Material(er=12.0, ur=2000, tand=0.02, color="#994d4d", opacity=0.3)
65
78
 
66
-
67
79
  ############################################################
68
80
  # DIELECTRICS #
69
81
  ############################################################
70
- DIEL_PTFE = Material(er=2.1, tand=0.0002, color="#21912b", opacity=0.3)
71
- DIEL_POLYIMIDE = Material(er=3.4, tand=0.02, color="#b8b8b8")
72
- DIEL_CERAMIC = Material(er=6.0, tand=0.001, color="#efead1")
82
+
83
+ # TRADEMARKS: All product names (e.g. “DUROID”) are the property of their
84
+ # respective owners. Use of them here does not imply any affiliation with or
85
+ # endorsement by those owners.
86
+
87
+ DIEL_PTFE = Material(er=2.1, tand=0.0002, color="#21912b", opacity=0.3)
88
+ DIEL_POLYIMIDE = Material(er=3.4, tand=0.02, color="#b8b8b8")
89
+ DIEL_CERAMIC = Material(er=6.0, tand=0.001, color="#efead1")
73
90
  DIEL_AD10 = Material(er=10.2, tand=0.0078, color="#21912b", opacity=0.3)
74
91
  DIEL_AD1000 = Material(er=10.2, tand=0.0023, color="#21912b", opacity=0.3)
75
92
  DIEL_AD250 = Material(er=2.5, tand=0.0018, color="#21912b", opacity=0.3)
@@ -259,12 +276,12 @@ DIEL_XT_Duroid_8100 = Material(er=3.54, tand=0.0049, color="#21912b", opacity=0.
259
276
  DIEL_XT_Duroid_81000_004IN_Thick = Material(er=3.32, tand=0.0038, color="#21912b", opacity=0.3)
260
277
 
261
278
  # Legacy FR Materials
262
- DIEL_FR1 = Material(er=4.8, tand=0.025, color="#3c9747", opacity=0.3) # Paper + phenolic resin
263
- DIEL_FR2 = Material(er=4.8, tand=0.02, color="#3c9747", opacity=0.3) # Paper + phenolic resin
264
- DIEL_FR3 = Material(er=4.5, tand=0.02, color="#2b7a4b", opacity=0.3) # Paper + epoxy resin
265
- DIEL_FR4 = Material(er=4.4, tand=0.015, color="#1e8449", opacity=0.3) # Woven glass + epoxy resin (industry standard)
266
- DIEL_FR5 = Material(er=4.2, tand=0.012, color="#156e38", opacity=0.3) # Woven glass + high-temp epoxy resin
267
- DIEL_FR6 = Material(er=5.2, tand=0.030, color="#145a32", opacity=0.3) # Paper + unknown resin, poor thermal performance
279
+ DIEL_FR1 = Material(er=4.8, tand=0.025, color="#3c9747", opacity=0.3) # Paper + phenolic resin
280
+ DIEL_FR2 = Material(er=4.8, tand=0.02, color="#3c9747", opacity=0.3) # Paper + phenolic resin
281
+ DIEL_FR3 = Material(er=4.5, tand=0.02, color="#2b7a4b", opacity=0.3) # Paper + epoxy resin
282
+ DIEL_FR4 = Material(er=4.4, tand=0.015, color="#1e8449", opacity=0.3) # Woven glass + epoxy resin (industry standard)
283
+ DIEL_FR5 = Material(er=4.2, tand=0.012, color="#156e38", opacity=0.3) # Woven glass + high-temp epoxy resin
284
+ DIEL_FR6 = Material(er=5.2, tand=0.030, color="#145a32", opacity=0.3) # Paper + unknown resin, poor thermal performance
268
285
 
269
286
  # Magnetic Materials
270
287
  MU_METAL = Material(cond=1.0e6, ur=200000, color="#666680", opacity=0.3)
@@ -274,16 +291,16 @@ MU_METAL = Material(cond=1.0e6, ur=200000, color="#666680", opacity=0.3)
274
291
  # FOAMS #
275
292
  ############################################################
276
293
 
277
- FOAM_ROHACELL_31 = Material(er=1.05, tand=0.0005, color="#f0e1a1", opacity=0.15) # PMI-based structural foam
278
- FOAM_ROHACELL_51 = Material(er=1.07, tand=0.0006, color="#f0dea0", opacity=0.15) # denser version
294
+ FOAM_ROHACELL_31 = Material(er=1.05, tand=0.0005, color="#f0e1a1", opacity=0.15) # PMI-based structural foam
295
+ FOAM_ROHACELL_51 = Material(er=1.07, tand=0.0006, color="#f0dea0", opacity=0.15) # denser version
279
296
  FOAM_ROHACELL_71 = Material(er=1.10, tand=0.0007, color="#e5d199", opacity=0.15)
280
- FOAM_PEI = Material(er=1.15, tand=0.0035, color="#e0b56f", opacity=0.15) # polyetherimide-based foam
281
- FOAM_PMI = Material(er=1.10, tand=0.0008, color="#d9c690", opacity=0.15) # polymethacrylimide
297
+ FOAM_PEI = Material(er=1.15, tand=0.0035, color="#e0b56f", opacity=0.15) # polyetherimide-based foam
298
+ FOAM_PMI = Material(er=1.10, tand=0.0008, color="#d9c690", opacity=0.15) # polymethacrylimide
282
299
  FOAM_PVC = Material(er=1.20, tand=0.0040, color="#cccccc", opacity=0.15)
283
- FOAM_EPS = Material(er=1.03, tand=0.0050, color="#f7f7f7", opacity=0.15) # expanded polystyrene
284
- FOAM_XPS = Material(er=1.05, tand=0.0030, color="#e0e0e0", opacity=0.15) # extruded polystyrene
285
- FOAM_PU = Material(er=1.10, tand=0.0080, color="#d0d0d0", opacity=0.15) # polyurethane foam
286
- FOAM_GLAS = Material(er=3.10, tand=0.0050, color="#888888", opacity=0.15) # cellular glass, denser
287
- FOAM_AIREX_C70 = Material(er=1.10, tand=0.0010, color="#f7e7a3", opacity=0.15) # PET closed cell
288
- FOAM_AIREX_T92 = Material(er=1.10, tand=0.0020, color="#f6d08a", opacity=0.15) # higher strength PET
289
- FOAM_PVC_CORECELL = Material(er=1.56, tand=0.0025, color="#aaaaaa", opacity=0.15) # structural core PVC
300
+ FOAM_EPS = Material(er=1.03, tand=0.0050, color="#f7f7f7", opacity=0.15) # expanded polystyrene
301
+ FOAM_XPS = Material(er=1.05, tand=0.0030, color="#e0e0e0", opacity=0.15) # extruded polystyrene
302
+ FOAM_PU = Material(er=1.10, tand=0.0080, color="#d0d0d0", opacity=0.15) # polyurethane foam
303
+ FOAM_GLAS = Material(er=3.10, tand=0.0050, color="#888888", opacity=0.15) # cellular glass, denser
304
+ FOAM_AIREX_C70 = Material(er=1.10, tand=0.0010, color="#f7e7a3", opacity=0.15) # PET closed cell
305
+ FOAM_AIREX_T92 = Material(er=1.10, tand=0.0020, color="#f6d08a", opacity=0.15) # higher strength PET
306
+ FOAM_PVC_CORECELL = Material(er=1.56, tand=0.0025, color="#aaaaaa", opacity=0.15) # structural core PVC
@@ -3,7 +3,7 @@ allow-direct-references = true
3
3
 
4
4
  [project]
5
5
  name = "emerge"
6
- version = "0.5.3"
6
+ version = "0.5.4"
7
7
  description = "An open source EM FEM simulator in Python"
8
8
  readme = "README.md"
9
9
  requires-python = ">=3.10, <4.0"
@@ -236,7 +236,7 @@ wheels = [
236
236
 
237
237
  [[package]]
238
238
  name = "emerge"
239
- version = "0.5.3"
239
+ version = "0.5.4"
240
240
  source = { editable = "." }
241
241
  dependencies = [
242
242
  { name = "gmsh" },
@@ -1,42 +0,0 @@
1
- # """A Python based FEM solver.
2
- # Copyright (C) 2025 name of Robert Fennis
3
-
4
- # This program is free software; you can redistribute it and/or
5
- # modify it under the terms of the GNU General Public License
6
- # as published by the Free Software Foundation; either version 2
7
- # of the License, or (at your option) any later version.
8
-
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
-
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; if not, see
16
- # <https://www.gnu.org/licenses/>.
17
-
18
- # """
19
- # import os
20
-
21
- # os.environ["OMP_NUM_THREADS"] = "1"
22
- # os.environ["MKL_NUM_THREADS"] = "1"
23
- # os.environ["OPENBLAS_NUM_THREADS"] = "1"
24
-
25
- # from loguru import logger
26
- # from .logsettings import logger_format
27
- # import sys
28
-
29
- # logger.remove()
30
- # logger.add(sys.stderr, format=logger_format)
31
-
32
- # logger.debug('Importing modules')
33
- # from _emerge.simmodel import Simulation3D
34
- # from _emerge.material import Material, FR4, AIR, VACUUM, COPPER
35
- # import bc
36
- # from _emerge.solver import superlu_info, SolverBicgstab, SolverGMRES, SolveRoutine, ReverseCuthillMckee, Sorter, SolverPardiso, SolverUMFPACK
37
- # from _emerge.cs import CoordinateSystem, Plane, Axis, XAX, YAX, ZAX, XYPLANE, XZPLANE, YZPLANE, YXPLANE, ZXPLANE, ZYPLANE
38
- # from _emerge.coord import Line
39
- # import geo
40
- # from _emerge.selection import Selection, FaceSelection, DomainSelection, EdgeSelection
41
- # from _emerge.mth.common_functions import norm
42
- # logger.debug('Importing complete!')
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes