emerge 1.0.7__py3-none-any.whl → 1.1.1__py3-none-any.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 emerge might be problematic. Click here for more details.

Files changed (33) hide show
  1. emerge/__init__.py +15 -3
  2. emerge/_emerge/const.py +2 -1
  3. emerge/_emerge/elements/ned2_interp.py +122 -42
  4. emerge/_emerge/geo/__init__.py +1 -1
  5. emerge/_emerge/geo/operations.py +20 -0
  6. emerge/_emerge/geo/pcb.py +162 -71
  7. emerge/_emerge/geo/shapes.py +12 -7
  8. emerge/_emerge/geo/step.py +177 -41
  9. emerge/_emerge/geometry.py +189 -27
  10. emerge/_emerge/logsettings.py +26 -2
  11. emerge/_emerge/material.py +2 -0
  12. emerge/_emerge/mesh3d.py +6 -8
  13. emerge/_emerge/mesher.py +67 -11
  14. emerge/_emerge/mth/common_functions.py +1 -1
  15. emerge/_emerge/mth/optimized.py +2 -2
  16. emerge/_emerge/physics/microwave/adaptive_mesh.py +549 -116
  17. emerge/_emerge/physics/microwave/assembly/assembler.py +9 -1
  18. emerge/_emerge/physics/microwave/microwave_3d.py +133 -83
  19. emerge/_emerge/physics/microwave/microwave_bc.py +158 -8
  20. emerge/_emerge/physics/microwave/microwave_data.py +94 -5
  21. emerge/_emerge/plot/pyvista/display.py +36 -23
  22. emerge/_emerge/selection.py +17 -2
  23. emerge/_emerge/settings.py +124 -6
  24. emerge/_emerge/simmodel.py +273 -150
  25. emerge/_emerge/simstate.py +106 -0
  26. emerge/_emerge/simulation_data.py +11 -23
  27. emerge/_emerge/solve_interfaces/cudss_interface.py +20 -1
  28. emerge/_emerge/solver.py +4 -4
  29. {emerge-1.0.7.dist-info → emerge-1.1.1.dist-info}/METADATA +7 -3
  30. {emerge-1.0.7.dist-info → emerge-1.1.1.dist-info}/RECORD +33 -32
  31. {emerge-1.0.7.dist-info → emerge-1.1.1.dist-info}/WHEEL +0 -0
  32. {emerge-1.0.7.dist-info → emerge-1.1.1.dist-info}/entry_points.txt +0 -0
  33. {emerge-1.0.7.dist-info → emerge-1.1.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,106 @@
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
+
19
+ from .mesh3d import Mesh3D
20
+ from .geometry import GeoObject, _GeometryManager, _GEOMANAGER
21
+ from .dataset import SimulationDataset
22
+ from loguru import logger
23
+
24
+ from typing import Any
25
+
26
+
27
+ class SimState:
28
+
29
+ def __init__(self):
30
+ self.mesh: Mesh3D = Mesh3D()
31
+ self.geos: list[GeoObject] = []
32
+ self.data: SimulationDataset = SimulationDataset()
33
+ self.params: dict[str, float] = dict()
34
+ self._stashed: SimulationDataset | None = None
35
+ self.manager: _GeometryManager = _GEOMANAGER
36
+
37
+ @property
38
+ def current_geo_state(self) -> list[GeoObject]:
39
+ return self.manager.all_geometries()
40
+
41
+ def reset_geostate(self, modelname: str) -> None:
42
+ _GEOMANAGER.reset(modelname)
43
+ self.clear_mesh()
44
+
45
+ def init(self, modelname: str) -> None:
46
+ self.mesh = Mesh3D()
47
+ self.geos = []
48
+ self.reset_geostate(modelname)
49
+ self.init_data()
50
+
51
+ def stash(self) -> None:
52
+ self._stashed = self.data
53
+ self.data = SimulationDataset()
54
+
55
+ def set_parameters(self, parameters: dict[str, float]) -> None:
56
+ self.params = parameters
57
+
58
+ def init_data(self) -> None:
59
+ self.data.sim.new(**self.params)
60
+
61
+ def reload(self) -> SimulationDataset:
62
+ old = self._stashed
63
+ self.data = self._stashed
64
+ self._stashed = None
65
+ return old
66
+
67
+ def reset_mesh(self) -> None:
68
+ self.mesh = Mesh3D()
69
+
70
+ def set_mesh(self, mesh: Mesh3D) -> None:
71
+ self.mesh = mesh
72
+
73
+ def set_geos(self, geos: list[GeoObject]) -> None:
74
+ self.geos = geos
75
+ _GEOMANAGER.set_geometries(geos)
76
+
77
+ def clear_mesh(self) -> None:
78
+ self.mesh = Mesh3D()
79
+
80
+ def store_geometry_data(self) -> None:
81
+ """Saves the current geometry state to the simulatin dataset
82
+ """
83
+ logger.trace('Storing geometries in data.sim')
84
+ self.geos = self.current_geo_state
85
+ self.data.sim['geos'] = self.geos
86
+ self.data.sim['mesh'] = self.mesh
87
+
88
+ def get_dataset(self) -> dict[str, Any]:
89
+ return dict(simdata=self.data, mesh=self.mesh)
90
+
91
+ def load_dataset(self, dataset: dict[str, Any]):
92
+ self.data = dataset['simdata']
93
+ self.mesh = dataset['mesh']
94
+
95
+ def activate(self, _indx: int | None = None, **variables):
96
+ """Searches for the permutaions of parameter sweep variables and sets the current geometry to the provided set."""
97
+ if _indx is not None:
98
+ dataset = self.data.sim.index(_indx)
99
+ else:
100
+ dataset = self.data.sim.find(**variables)
101
+
102
+ variables = ', '.join([f'{key}={value}' for key,value in dataset.vars.items()])
103
+ logger.info(f'Activated entry with variables: {variables}')
104
+ self.set_mesh(dataset['mesh'])
105
+ self.set_geos(dataset['geos'])
106
+ return self
@@ -131,8 +131,8 @@ def generate_ndim(
131
131
 
132
132
  class DataEntry:
133
133
 
134
- def __init__(self, vars: dict[str, float]):
135
- self.vars: dict[str, float] = vars
134
+ def __init__(self, variables: dict[str, float]):
135
+ self.vars: dict[str, float] = variables
136
136
  self.data: dict[str, Any] = dict()
137
137
 
138
138
  def print(self) -> None:
@@ -172,25 +172,23 @@ class DataContainer:
172
172
  """The DataContainer class is a generalized class to store data for a set of parameter sweeps"""
173
173
  def __init__(self):
174
174
  self.entries: list[DataEntry] = []
175
- self.stock: DataEntry = DataEntry({})
176
175
 
177
176
 
178
177
  def print(self) -> None:
179
178
  """ Print an overview of all data in the DataContainer"""
180
- self.stock.print()
181
179
  for entry in self.entries:
182
180
  entry.print()
183
181
 
184
- def new(self, **vars: float) -> DataEntry:
182
+ def new(self, **variables: float) -> DataEntry:
185
183
  """Create a new entry in the DataContainer for the given value setting"""
186
- entry = DataEntry(vars)
184
+ entry = DataEntry(variables)
187
185
  self.entries.append(entry)
188
186
  return entry
189
187
 
190
188
  def iterate(self) -> Generator[tuple[dict[str, float], dict[str, Any]], None, None]:
191
189
  for entry in self.entries:
192
190
  yield entry.vars, entry.data
193
-
191
+
194
192
  @property
195
193
  def first(self) -> DataEntry:
196
194
  """Returns the first added entry"""
@@ -201,14 +199,6 @@ class DataContainer:
201
199
  """Returns the last added entry"""
202
200
  return self.entries[-1]
203
201
 
204
- @property
205
- def default(self) -> DataEntry:
206
- """Returns the default DataEntry which is either the last from the parameter sweep or the general one in case of no parameter sweep."""
207
- if not self.entries:
208
- return self.stock
209
- else:
210
- return self.last
211
-
212
202
  def index(self, index: int) -> DataEntry:
213
203
  """Returns the last added entry"""
214
204
  return self.entries[index]
@@ -226,11 +216,11 @@ class DataContainer:
226
216
 
227
217
  def __getitem__(self, key: str) -> DataEntry:
228
218
  """Returns the requested item from the default DataEntry"""
229
- return self.default[key]
219
+ return self.last[key]
230
220
 
231
221
  def __setitem__(self, key: str, value: Any) -> None:
232
222
  """Writes a value to the requested default DataEntry"""
233
- self.default[key] = value
223
+ self.last[key] = value
234
224
 
235
225
 
236
226
  class BaseDataset(Generic[T,M]):
@@ -298,12 +288,10 @@ class BaseDataset(Generic[T,M]):
298
288
  Returns:
299
289
  T: The physics dataset
300
290
  """
301
- index = next(
302
- i
303
- for i, var_map in enumerate(self._variables)
304
- if all(var_map.get(k) == v for k, v in variables.items())
305
- )
306
- return self.get_entry(index)
291
+ for i, var_map in enumerate(self._variables):
292
+ if all(var_map.get(k) == v for k,v in variables.items()):
293
+ return self.get_entry(i)
294
+
307
295
 
308
296
  def filter(self, **variables: float) -> list[T]:
309
297
  """Returns a list of all physics datasets that are valid for the given variable assignment
@@ -53,6 +53,21 @@ INDEX_BASE = cudss.IndexBase.ZERO
53
53
  def _c_pointer(arry) -> int:
54
54
  return int(arry.data.ptr)
55
55
 
56
+
57
+
58
+ ############################################################
59
+ # FUNCTIONS #
60
+ ############################################################
61
+
62
+ def is_complex_symmetric(A, rtol=1e-12, atol=0.0):
63
+ D = A-A.T
64
+ D.sum_duplicates()
65
+ if D.nnz == 0:
66
+ return True
67
+ max_diff = float(np.abs(D.data).max())
68
+ max_A = float(np.abs(A.data).max()) if A.nnz else 0.0
69
+ return (max_diff <= atol) if max_A == 0.0 else (max_diff <= atol + rtol * max_A)
70
+
56
71
  ############################################################
57
72
  # INTERFACE #
58
73
  ############################################################
@@ -152,6 +167,11 @@ class CuDSSInterface:
152
167
  """
153
168
  self.N = A.shape[0]
154
169
 
170
+ if is_complex_symmetric(A, rtol=1e-12, atol=1e-15):
171
+ self.MTYPE = cudss.MatrixType.SYMMETRIC
172
+ else:
173
+ self.MTYPE = cudss.MatrixType.GENERAL
174
+
155
175
  if np.iscomplexobj(A):
156
176
  self._COMP = True
157
177
  else:
@@ -186,7 +206,6 @@ class CuDSSInterface:
186
206
  """Updates the currently defined matrix data into the existing memory.ALG_AMD
187
207
  """
188
208
  cudss.matrix_set_values(self.A_cobj, _c_pointer(self._VAL))
189
-
190
209
 
191
210
  self.b_cobj = cudss.matrix_create_dn(self.N, 1, self.N, _c_pointer(self.b_cu),
192
211
  int(self.VTYPE), int(cudss.Layout.COL_MAJOR))
emerge/_emerge/solver.py CHANGED
@@ -209,7 +209,7 @@ def filter_real_modes(eigvals: np.ndarray, eigvecs: np.ndarray,
209
209
  filtered_vals = eigvals[mask]
210
210
  filtered_vecs = eigvecs[:, mask]
211
211
  k0vals = np.sqrt(sign*filtered_vals)
212
- order = np.argsort(np.abs(k0vals))# ascending distance
212
+ order = np.argsort(np.abs(k0vals)) # ascending distance
213
213
  filtered_vals = filtered_vals[order] # reorder eigenvalues
214
214
  filtered_vecs = filtered_vecs[:, order]
215
215
  return filtered_vals, filtered_vecs
@@ -805,7 +805,7 @@ class SmartARPACK_BMA(EigSolver):
805
805
  energies.append(energy)
806
806
 
807
807
  #Sort solutions on mode energy
808
- val, mode, energy = zip(*sorted(zip(tot_eigen_values,tot_eigen_modes,energies), key=lambda x: x[2], reverse=True))
808
+ val, mode, energy = zip(*sorted(zip(tot_eigen_values, tot_eigen_modes, energies), key=lambda x: x[2], reverse=True))
809
809
  eigen_values = np.array(val[:nmodes])
810
810
  eigen_modes = np.array(mode[:nmodes]).T
811
811
 
@@ -1282,7 +1282,7 @@ class SolveRoutine:
1282
1282
  NF = A.shape[0]
1283
1283
  NS = solve_ids.shape[0]
1284
1284
 
1285
- logger.debug(self.pre + f'Removing {NF-NS} prescribed DOFs ({NS} left)')
1285
+ logger.debug(self.pre + f' Removing {NF-NS} prescribed DOFs ({NS} left)')
1286
1286
 
1287
1287
  Asel = A[np.ix_(solve_ids, solve_ids)]
1288
1288
  Bsel = B[np.ix_(solve_ids, solve_ids)]
@@ -1325,7 +1325,7 @@ class SolveRoutine:
1325
1325
  NF = A.shape[0]
1326
1326
  NS = solve_ids.shape[0]
1327
1327
 
1328
- logger.debug(self.pre + f'Removing {NF-NS} prescribed DOFs ({NS} left)')
1328
+ logger.debug(self.pre + f' Removing {NF-NS} prescribed DOFs ({NS} left)')
1329
1329
 
1330
1330
  Asel = A[np.ix_(solve_ids, solve_ids)]
1331
1331
  Bsel = B[np.ix_(solve_ids, solve_ids)]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emerge
3
- Version: 1.0.7
3
+ Version: 1.1.1
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
@@ -18,8 +18,12 @@ Requires-Dist: pyvista>=0.45.2
18
18
  Requires-Dist: scipy>=1.14.0
19
19
  Provides-Extra: cudss
20
20
  Requires-Dist: cupy-cuda12x; extra == 'cudss'
21
- Requires-Dist: nvidia-cudss-cu12; extra == 'cudss'
22
- Requires-Dist: nvmath-python[cu12]; extra == 'cudss'
21
+ Requires-Dist: nvidia-cudss-cu12==0.5.0.16; extra == 'cudss'
22
+ Requires-Dist: nvmath-python[cu12]==0.5.0; extra == 'cudss'
23
+ Provides-Extra: cudss12
24
+ Requires-Dist: cupy-cuda12x; extra == 'cudss12'
25
+ Requires-Dist: nvidia-cudss-cu12==0.5.0.16; extra == 'cudss12'
26
+ Requires-Dist: nvmath-python[cu12]==0.5.0; extra == 'cudss12'
23
27
  Provides-Extra: dxf
24
28
  Requires-Dist: ezdxf; extra == 'dxf'
25
29
  Provides-Extra: umfpack
@@ -1,4 +1,4 @@
1
- emerge/__init__.py,sha256=xexiF7GihNOUHqPZ2KViJFFaNNfRyc6l3Qz1PzWO_5w,3162
1
+ emerge/__init__.py,sha256=3Z4-1rWSfV3s94VD3u2rtEq2N0OY7F9UWr4Rxjtv9dY,3495
2
2
  emerge/__main__.py,sha256=WVf16sfrOI910QWohrQDaChZdRifMNoS6VKzCT6f3ZA,92
3
3
  emerge/cli.py,sha256=NU1uhwuZ6i50680v3_I4kDZPTHqz74gOYK71UBhb8oE,666
4
4
  emerge/ext.py,sha256=IBoHH5PQFj5pYMfp6r-uMpNNgbSe8c0g9x8qjBzzVmU,223
@@ -8,63 +8,64 @@ emerge/pyvista.py,sha256=-Ht2YcZYsh8-dici5ZPNAWwsis6uz5wNj8n8mxv5fog,42
8
8
  emerge/_emerge/__init__.py,sha256=aidfiILy33dt3VyiZ2mgtA87mq-WQ5pXItZUE5wR5ws,703
9
9
  emerge/_emerge/bc.py,sha256=ngKXwIPDfeghpctS6XLeNNtSJ6m1giHP6J25SVQ_w8g,8380
10
10
  emerge/_emerge/cacherun.py,sha256=owo-Dz2QGqPKZjBY8s-a5yJuUo0pUQKjX4mscz8KDE0,2717
11
- emerge/_emerge/const.py,sha256=PTZZTSDOP5NsZ8XnJrKTY2P0tPUhmutBJ1yrm-t7xsI,129
11
+ emerge/_emerge/const.py,sha256=cuN2OmXS-OdsgEf4kRVeaAJ7VWcYLhVRX7uzy6n4owk,140
12
12
  emerge/_emerge/coord.py,sha256=BKvyrcnHY-_bgHqysnByy5k9_DK4VVfr9KKkRaawG2E,4371
13
13
  emerge/_emerge/cs.py,sha256=gULfov6s0jODOdQkH6NmGBbG5wvny1-bJU8fdAlpCHo,19730
14
14
  emerge/_emerge/dataset.py,sha256=UcSAJ_siLrOjNBBWRWsS3GUZUpayp63EM6pP6ClwKDI,1534
15
15
  emerge/_emerge/emerge_update.py,sha256=0G91xr7k7Me5gOlk3pXbKWe-6ALXtoCJ5syTa1Y5Bhw,2042
16
16
  emerge/_emerge/geo2d.py,sha256=e_HkX1GQ2iYrdO0zeEgzVOzfGyU1WGJyjeGBAobOttE,3323
17
- emerge/_emerge/geometry.py,sha256=9WnZt2xtF4HEJfdPyT41i_q8gRMZRrG0C9PILaz1PvA,25523
17
+ emerge/_emerge/geometry.py,sha256=3iiHotkQ-Uj34vp0jsV_I0-vNikkXdNuLsnHiKekP8M,31463
18
18
  emerge/_emerge/howto.py,sha256=c4UxUNpA1tygr3OoR-LH-h0UZv-Tf9K8tpCiAU18BKE,8173
19
- emerge/_emerge/logsettings.py,sha256=OpsH_1dQAdZry_as8y0OQt4yKP_AMFfQG2d5Nz5yywg,4789
20
- emerge/_emerge/material.py,sha256=furDHD4rwkYCOjnh0GLz-Utjl5Z_NxDv0zWrk23Pygc,17459
21
- emerge/_emerge/mesh3d.py,sha256=zPKOo1whf6yBpJxfEt89p3LXO4k1j7LSSMAGCDSK318,36946
22
- emerge/_emerge/mesher.py,sha256=Ozks6t0LbdWEfDuh_06Hmm9nZz8vQLJl2FsYA7wzMMo,16854
19
+ emerge/_emerge/logsettings.py,sha256=S4aUkO2vhcssmYQIGOq0VkazMEX4TYJlCt0FZ74Mc8Y,5574
20
+ emerge/_emerge/material.py,sha256=0Z4ZqNDw4QwFu1GBgAbj2Rn6Wiq0a8NJ9t8CKr-BGZ4,17477
21
+ emerge/_emerge/mesh3d.py,sha256=hHxb_TTRBZQKs8XMYuHf_wNo7UWjZZypjs2LxmuTgWM,37198
22
+ emerge/_emerge/mesher.py,sha256=Z5uftutzC_Cun3_JqDLc3kPAjTxOMG6d5cgRJaDE_C8,19012
23
23
  emerge/_emerge/periodic.py,sha256=dUuWqjlDR8mHtQR3ecINP2FFjJJ0cKg0blOVZ0PCcAo,12087
24
24
  emerge/_emerge/plot.py,sha256=cf1I9mj7EIUJcq8vmANlUkqoV6QqVaJaP-zlC-T9E18,8041
25
- emerge/_emerge/selection.py,sha256=ltT8ubMFG3-sFrAh7K7iAgSoBt3r25B02ShzMlOGSXQ,21527
26
- emerge/_emerge/settings.py,sha256=wZFMzQSnMEEJptatu--67El1L0I_YEv9S8QjqI69bfs,265
27
- emerge/_emerge/simmodel.py,sha256=Iu971xxJ5ggeB-KkrtxmGyV_-zHQN76z8_w1nSwpWJY,29371
28
- emerge/_emerge/simulation_data.py,sha256=23o-xbm6Q6s9sYisyK9u1GTmuaXRl0WDGQwzPO7lkr0,15115
29
- emerge/_emerge/solver.py,sha256=3P-pcDWEpCEVnT2iFRRzC1hdYGUaz-xRzE68G3xvF1Q,52988
25
+ emerge/_emerge/selection.py,sha256=bE7qHk08RryqHwsdqw2ABQviIsDjL0RmwpxT1NF9pr8,21899
26
+ emerge/_emerge/settings.py,sha256=4Mlo3T6UVGzhTB838833_dwvXYLGKNIEHQ4fr9hxHd8,5335
27
+ emerge/_emerge/simmodel.py,sha256=bKAiL0q6hdiHYqmxlPTS9AiJiTg0RopbnJx1Of3Y8FM,35250
28
+ emerge/_emerge/simstate.py,sha256=n_iOz3L9lZ0oD4CBb8cdHXOoaoyx96kcsFKwSQWVxlk,3630
29
+ emerge/_emerge/simulation_data.py,sha256=W8wTSTqGNZIwnpBuk08I7e4GEXXAbnfoYEWHnhzHvyM,14723
30
+ emerge/_emerge/solver.py,sha256=ID387uKRYYZaEHOAwMCwt0esmdhmOn7VhH-2KD8tjtc,52993
30
31
  emerge/_emerge/system.py,sha256=p4HNz7d_LMRNE9Gk75vVdFecDH2iN_groAM9u-yQTpk,1618
31
32
  emerge/_emerge/elements/__init__.py,sha256=I3n9aic6lJW-oGeqTEZ-Fpxvyl2i-WqsHdnrM3v1oB8,799
32
33
  emerge/_emerge/elements/femdata.py,sha256=ZSB7dICyU3GOWbxpuowBc-Khh2mpXa02ZfMkHwdDol4,8377
33
34
  emerge/_emerge/elements/index_interp.py,sha256=X7WcXKC9Qg7UABvLbAktda7InRkOhm7qOU-Wnefflp4,3381
34
- emerge/_emerge/elements/ned2_interp.py,sha256=BGRdJGXCcDdqMBf3pOvc_-m-vngRI1VvE5MUsqqf9Cw,27981
35
+ emerge/_emerge/elements/ned2_interp.py,sha256=vb311CDFl9QIYorwXzxaAWLM9nCKQHI7LKalH3ggbMk,30649
35
36
  emerge/_emerge/elements/nedelec2.py,sha256=OssFCnPp7wkMBcUISGvTgT94jayfGOmX0x-RctIYSuI,6645
36
37
  emerge/_emerge/elements/nedleg2.py,sha256=1SA6AvnbChhU2iodS1PVMUdbSn9wF2XKam12WTBDtsw,9049
37
- emerge/_emerge/geo/__init__.py,sha256=yTeuT4Oexrsdkr7MxRLeTHEY5iP4IHsWeCvit57fK5g,1161
38
+ emerge/_emerge/geo/__init__.py,sha256=-VkOxYgJT2dwudq5DMD-fZTxXVoh94Vd-CtroP8q3uY,1170
38
39
  emerge/_emerge/geo/horn.py,sha256=tI-w-O0Fm_siMaVhKpZ_k5URLfZkqcbEpURX94fhKDs,4645
39
40
  emerge/_emerge/geo/modeler.py,sha256=_PMz3lFSa7FmJHWdY-4U1Sqbed-Egy85S_AdjlCldC4,15572
40
- emerge/_emerge/geo/operations.py,sha256=WYWfOXWrT0voeKW9U26g-PhQfqJl3ovRQ8uDQXUr7Nc,12459
41
- emerge/_emerge/geo/pcb.py,sha256=oRx9CnFFzhnDNtwxnw2rcm_CtN1h2y3-0jXOaBqGZ_E,57544
41
+ emerge/_emerge/geo/operations.py,sha256=7ZBM8uKGZmg_FvP766bf5q3xTZP1n3nCf3yDQjJV7uo,13137
42
+ emerge/_emerge/geo/pcb.py,sha256=TE60mJvfpYTm17E9WrzNeAZlsSAIUYJlfb80NGRSFEk,61913
42
43
  emerge/_emerge/geo/pmlbox.py,sha256=gaIG_AoZNQnIyJ8C7x64U-Hw5dsmllWMiZDAH4iRoM0,8784
43
44
  emerge/_emerge/geo/polybased.py,sha256=D_Ef4anrwV2RArEFrvWppZ_c7oN_Hm5h7ltMi2U3v2o,32891
44
- emerge/_emerge/geo/shapes.py,sha256=bLZM8ey05yvpKGgZS_DXFDaTQRP5kpsc7Xgp6Xaxc_Q,26903
45
- emerge/_emerge/geo/step.py,sha256=XcAiEN8W4umNmZdYmrGHX_aJUuiMgc6vgT-UIk8Gbqc,2689
45
+ emerge/_emerge/geo/shapes.py,sha256=YAigmKqgBF7oiHkLaGvLjA9RwUk1mOJf-RIrqRXtpY8,27089
46
+ emerge/_emerge/geo/step.py,sha256=q-TGT_VxouPuuPWSoxwEqpuCjVlEHQcBcIc290kjwI0,7185
46
47
  emerge/_emerge/geo/pcb_tools/calculator.py,sha256=VbMP2xC9i7OFwtqnnwfYgyJSEcJIjr2VIy_Ez1hYqlU,859
47
48
  emerge/_emerge/geo/pcb_tools/dxf.py,sha256=Xv7iP_bB0f2Y46sxZloa5KYGyj5dtApXoR-kgL7KHZA,11744
48
49
  emerge/_emerge/geo/pcb_tools/macro.py,sha256=0g-0anOFyxrEkFobiSu0cwWFRQ32xB8Az24mmwo0z6M,2992
49
50
  emerge/_emerge/mth/_cache_check.py,sha256=mD65yXXRoSaiTa8nky27Ne8p_s5aTC_RqmLre0x1mio,1563
50
- emerge/_emerge/mth/common_functions.py,sha256=oURfF-8p_0s1dKbUATc15dnKHFwvqWa6GC-JMW9UwnI,2061
51
+ emerge/_emerge/mth/common_functions.py,sha256=Ux8JWJXMyNiY1wCXyClf-seWg1PyERe9HjFXx2bsIzY,2060
51
52
  emerge/_emerge/mth/integrals.py,sha256=lL7KrHdyFGpboQyvf6W_4bZRZCrMbjd2e8GDHctL-B8,3572
52
- emerge/_emerge/mth/optimized.py,sha256=OzYfWphPnjmfMV4bAV0csi3YM0JWzVMPQI0vZvX25NU,19082
53
+ emerge/_emerge/mth/optimized.py,sha256=cm1AM9hKO4ReD3EySC5KAs6lO_o9iaTR4-ZXvUrVr8A,19082
53
54
  emerge/_emerge/mth/pairing.py,sha256=i8bBvTeMmzgF0JdiDNJiTXxx913x4f10777pzD6FJo0,3535
54
55
  emerge/_emerge/physics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
56
  emerge/_emerge/physics/microwave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
57
  emerge/_emerge/physics/microwave/adaptive_freq.py,sha256=aWhijhCVAbnuwkru-I1AaRdY20uyozf6OWRIh9r2ijg,9786
57
- emerge/_emerge/physics/microwave/adaptive_mesh.py,sha256=bcPPbWoTaMsLK1QCIL6an5WaIIeKddCPPs2u7vKfAEs,22089
58
- emerge/_emerge/physics/microwave/microwave_3d.py,sha256=OxZ3uJI1hhyGuUPV6ofWXCQfCu23URkyK2UJnpa9CLI,49141
59
- emerge/_emerge/physics/microwave/microwave_bc.py,sha256=70zrxTZG_i9n2vBQAU1FOtK2Ia_KMi3qQeC9MU5aDHo,44872
60
- emerge/_emerge/physics/microwave/microwave_data.py,sha256=eSWBrFmdYnOmCchf31jORwCriq2Ix1piGoGYHsvcF38,50551
58
+ emerge/_emerge/physics/microwave/adaptive_mesh.py,sha256=_fgXf5h8T3x97fNK5BGWM1vCl0RkKVtE5W_b8s1LRu8,37733
59
+ emerge/_emerge/physics/microwave/microwave_3d.py,sha256=Wpf8SSCmlDAxJq_1Xb2u-vm1sugam8qNqFtEW5Z5JKM,51871
60
+ emerge/_emerge/physics/microwave/microwave_bc.py,sha256=nJvoBHXoZLfrG5YEpku2_rEnW33VD40H54FYrZwcufQ,50701
61
+ emerge/_emerge/physics/microwave/microwave_data.py,sha256=ZynDIQH8plfMQCFLxqUKETOLJXV9nfgDo-paRMVR2Jk,53846
61
62
  emerge/_emerge/physics/microwave/periodic.py,sha256=wYSUgLFVtCLqSG3EDKoCDRU93iPUzBdXzVRdHTRmbpI,3000
62
63
  emerge/_emerge/physics/microwave/port_functions.py,sha256=d-W1D-7P05MfXdOs7WlhPi_RqlSpC0HkYU6yl3GrxgE,2173
63
64
  emerge/_emerge/physics/microwave/sc.py,sha256=WZvoPhmHkfEv619RhmN09sXDBV0ryTqybwErA8Rc7lU,4735
64
65
  emerge/_emerge/physics/microwave/simjob.py,sha256=aCWCs7IXBfVBWWYhwyHvXSRHY3FOd3CK5ABcaFEsNnM,4927
65
66
  emerge/_emerge/physics/microwave/sparam.py,sha256=1SXGyr1UsrPnCIi4ffwobM4pzgkj50y4LrWCr_J5IRY,4946
66
67
  emerge/_emerge/physics/microwave/touchstone.py,sha256=pMcCOLWVqIKctcShcJxyaV-0rhRWXMSS1Jz14dVQEyY,5799
67
- emerge/_emerge/physics/microwave/assembly/assembler.py,sha256=ZRaf_5zSZ2U0D5DmuYKCiyyxjonJLQV5pYsUm6aChj0,23982
68
+ emerge/_emerge/physics/microwave/assembly/assembler.py,sha256=FQhPhdyR7xPyvwR_Gn42KCY2tV1eouqJolJJ9Z6z7C4,24234
68
69
  emerge/_emerge/physics/microwave/assembly/curlcurl.py,sha256=4CwMSUua8pvbp39gq2e3AxwVHOIVuPdr53qQM2BigQo,19688
69
70
  emerge/_emerge/physics/microwave/assembly/generalized_eigen.py,sha256=7jNU_hWd7q-ni53wmlhB5kmyJxp2xsx_WyBXZ6hPwo0,16907
70
71
  emerge/_emerge/physics/microwave/assembly/generalized_eigen_hb.py,sha256=tGf9EOzmp-dqtTodwYzcswuT_eLeZRtgdAZvgPz9QJo,17340
@@ -77,20 +78,20 @@ emerge/_emerge/plot/simple_plots.py,sha256=szIpmQmO8o6ubzB_E3zTJfEx16mJ3-OXrMYdD
77
78
  emerge/_emerge/plot/matplotlib/mpldisplay.py,sha256=e8V6EhGdCW7nRkSFvjHCcRO5uR-FcD0yHQ1nxPQCbp4,8674
78
79
  emerge/_emerge/plot/pyvista/__init__.py,sha256=CPclatEu6mFnJZzCQk09g6T6Fh20WTbiLAJGSwAnPXU,30
79
80
  emerge/_emerge/plot/pyvista/cmap_maker.py,sha256=_GVXYdtXpJwAO9O-Iekjzn6YcR0MVT8LNh12nqvF2IA,2498
80
- emerge/_emerge/plot/pyvista/display.py,sha256=nsiElERHYZPWX0uHwNoaocvfGtVTMsBdaO3hjTVDPvk,45429
81
+ emerge/_emerge/plot/pyvista/display.py,sha256=e-vqbaEEgf2UnUOWOpxqEjz4V3i1-cIyMOSiBpE0-WI,45911
81
82
  emerge/_emerge/plot/pyvista/display_settings.py,sha256=gV5hjRGEAl3oQeBPobas6b6JzYfMFrXIGtVSaeml4N0,1074
82
83
  emerge/_emerge/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
84
  emerge/_emerge/projects/_gen_base.txt,sha256=DqQz36PZg6v1ovQjHvPjd0t4AIbmikZdb9dmrNYsK3w,598
84
85
  emerge/_emerge/projects/_load_base.txt,sha256=bHsZ4okxa9uu8qP4UOxSAeIQzuwpRtN0i71rg8wuqMA,473
85
86
  emerge/_emerge/projects/generate_project.py,sha256=TNw-0SpLc82MBq0bd9hB_yqvBZCgmuPonCBsHTp91uk,1450
86
- emerge/_emerge/solve_interfaces/cudss_interface.py,sha256=Iszyy7RuuCa_FgfROEyTSSWbmR2LzMUkEcR8klzIKOQ,9915
87
+ emerge/_emerge/solve_interfaces/cudss_interface.py,sha256=D6GVQLgTzRw4ec2MkgNhsSWrkLYMhvqljCyE6qtNQ3o,10599
87
88
  emerge/_emerge/solve_interfaces/pardiso_interface.py,sha256=iVFxToMmIzhj3hcAP-O_MDHKz82ePFIHY1us11kzUBU,15305
88
89
  emerge/beta/dxf.py,sha256=Bw4lVk0TquOgCxTZV23BZN7PrgqxBrMZxbHV1waC5U0,50
89
90
  emerge/materials/__init__.py,sha256=Z9tu3m_nqj6F9I-FwoVoN0vCTYUlFesH3KxJ38wkZck,19
90
91
  emerge/materials/isola.py,sha256=kSDxHJZVn2CcanoUjlwRVKIPvadRbBybURTdIHWx728,18660
91
92
  emerge/materials/rogers.py,sha256=4u6ma_XQdXGKWE3WsFkaMTamCQNo9kTYSTU8S1gCAYU,3388
92
- emerge-1.0.7.dist-info/METADATA,sha256=tv3bFqll_HiWD6MDGr2K5tUC4Vy97vCO84EKQ2iGkQU,3400
93
- emerge-1.0.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
94
- emerge-1.0.7.dist-info/entry_points.txt,sha256=8rFvAXticpKg4OTC8JEvAksnduW72KIEskCGG9XnFf8,43
95
- emerge-1.0.7.dist-info/licenses/LICENSE,sha256=VOCXWddrjMN5j7TvnSAOh1Dx7jkugdwq9Lqhycf5inc,17852
96
- emerge-1.0.7.dist-info/RECORD,,
93
+ emerge-1.1.1.dist-info/METADATA,sha256=UazYGroEef4uawRCEKbPa3ZYKj0V81TzYdKf253VLfs,3614
94
+ emerge-1.1.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
95
+ emerge-1.1.1.dist-info/entry_points.txt,sha256=8rFvAXticpKg4OTC8JEvAksnduW72KIEskCGG9XnFf8,43
96
+ emerge-1.1.1.dist-info/licenses/LICENSE,sha256=VOCXWddrjMN5j7TvnSAOh1Dx7jkugdwq9Lqhycf5inc,17852
97
+ emerge-1.1.1.dist-info/RECORD,,
File without changes