emerge 1.1.0__py3-none-any.whl → 1.2.0__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.

@@ -317,12 +317,14 @@ class Simulation:
317
317
 
318
318
  def check_version(self, target_version: str, *, log: bool = False) -> None:
319
319
  """
320
- Ensure the script targets an EMerge version compatible with the current runtime.
320
+ Ensure the script targets an EMerge major.minor compatible with the current runtime.
321
+
322
+ Only major.minor is enforced. Patch differences are ignored.
321
323
 
322
324
  Parameters
323
325
  ----------
324
326
  target_version : str
325
- The EMerge version this script was written for (e.g. "1.4.0").
327
+ The EMerge version this script was written for (e.g. "1.4.0" or "1.4").
326
328
  log : bool, optional
327
329
  If True and a `logger` is available, emit a single WARNING with the same
328
330
  message as the exception. Defaults to False.
@@ -330,40 +332,50 @@ class Simulation:
330
332
  Raises
331
333
  ------
332
334
  VersionError
333
- If the script's target version differs from the running EMerge version.
335
+ If the script's target major.minor differs from the running EMerge major.minor.
334
336
  """
335
337
  try:
336
338
  from packaging.version import Version as _V
337
- v_script = _V(target_version)
338
- v_runtime = _V(__version__)
339
- newer = v_script > v_runtime
340
- older = v_script < v_runtime
339
+ def _mm(v: str):
340
+ pv = _V(v)
341
+ return (pv.major, pv.minor)
342
+ script_mm = _mm(target_version)
343
+ runtime_mm = _mm(__version__)
344
+ newer = script_mm > runtime_mm
345
+ older = script_mm < runtime_mm
341
346
  except Exception:
342
- def _parse(v: str):
347
+ def _parse_mm(v: str):
348
+ parts = v.split(".")
343
349
  try:
344
- return tuple(int(p) for p in v.split("."))
350
+ major = int(parts[0])
351
+ minor = int(parts[1]) if len(parts) > 1 else 0
352
+ return (major, minor)
345
353
  except Exception:
346
- # Last-resort: compare as strings to avoid crashing the check itself
347
- return tuple(v.split("."))
348
- v_script = _parse(target_version)
349
- v_runtime = _parse(__version__)
350
- newer = v_script > v_runtime
351
- older = v_script < v_runtime
354
+ # Fallback: compare as strings to avoid crashing the check itself
355
+ major = parts[0] if parts else "0"
356
+ minor = parts[1] if len(parts) > 1 else "0"
357
+ return (str(major), str(minor))
358
+ script_mm = _parse_mm(target_version)
359
+ runtime_mm = _parse_mm(__version__)
360
+ newer = script_mm > runtime_mm
361
+ older = script_mm < runtime_mm
352
362
 
353
363
  if not newer and not older:
354
- return # exact match
364
+ return # major.minor match
355
365
 
356
366
  if newer:
357
367
  msg = (
358
- f"Script targets EMerge {target_version}, but runtime is {__version__}. "
359
- "The script may rely on features added after your installed version. "
368
+ f"Script targets EMerge {target_version} (major.minor {script_mm[0]}.{script_mm[1]}), "
369
+ f"but runtime is {__version__} (major.minor {runtime_mm[0]}.{runtime_mm[1]}). "
370
+ "The script may rely on features added after your installed major.minor. "
360
371
  "Recommended: upgrade EMerge (`pip install --upgrade emerge`). "
361
372
  "If you know the script is compatible, you may remove this check."
362
373
  )
363
374
  else: # older
364
375
  msg = (
365
- f"Script targets EMerge {target_version}, but runtime is {__version__}. "
366
- "APIs may have changed since the targeted version. "
376
+ f"Script targets EMerge {target_version} (major.minor {script_mm[0]}.{script_mm[1]}), "
377
+ f"but runtime is {__version__} (major.minor {runtime_mm[0]}.{runtime_mm[1]}). "
378
+ "APIs may have changed since the targeted major.minor. "
367
379
  "Recommended: update the script for the current EMerge, or run a matching older release. "
368
380
  "If you know the script is compatible, you may remove this check."
369
381
  )
@@ -458,7 +470,8 @@ class Simulation:
458
470
  plot_mesh: bool = False,
459
471
  volume_mesh: bool = True,
460
472
  opacity: float | None = None,
461
- labels: bool = False) -> None:
473
+ labels: bool = False,
474
+ face_labels: bool = False) -> None:
462
475
  """View the current geometry in either the BaseDisplay object (PVDisplay only) or
463
476
  the GMSH viewer.
464
477
 
@@ -476,8 +489,13 @@ class Simulation:
476
489
  return
477
490
  for geo in self.state.current_geo_state:
478
491
  self.display.add_object(geo, mesh=plot_mesh, opacity=opacity, volume_mesh=volume_mesh, label=labels)
492
+
493
+ if face_labels and geo.dim==3:
494
+ for face_name in geo._face_pointers.keys():
495
+ self.display.add_object(geo.face(face_name), color='yellow', opacity=0.1, label=face_name)
479
496
  if selections:
480
- [self.display.add_object(sel, color='red', opacity=0.6, label=labels) for sel in selections]
497
+ [self.display.add_object(sel, color='red', opacity=0.6, label=sel.name) for sel in selections]
498
+
481
499
  self.display.show()
482
500
 
483
501
  return None
@@ -688,15 +706,13 @@ class SimulationBeta(Simulation):
688
706
 
689
707
 
690
708
  def __post_init__(self):
691
-
692
- self.mesher.set_algorithm(Algorithm3D.HXT)
693
- logger.debug('Setting mesh algorithm to HXT')
709
+ pass
710
+ #self.mesher.set_algorithm(Algorithm3D.HXT)
711
+ #logger.debug('Setting mesh algorithm to HXT')
694
712
 
695
713
 
696
714
  def _reset_mesh(self):
697
- #gmsh.clear()
698
715
  gmsh.model.mesh.clear()
699
-
700
716
  self.mw.reset(_reset_bc = False)
701
717
  self.state.reset_mesh()
702
718
 
@@ -706,10 +722,11 @@ class SimulationBeta(Simulation):
706
722
  convergence: float = 0.02,
707
723
  magnitude_convergence: float = 2.0,
708
724
  phase_convergence: float = 180,
709
- refinement_ratio: float = 0.9,
710
- growth_rate: float = 3,
725
+ refinement_ratio: float = 0.6,
726
+ growth_rate: float = 2,
711
727
  minimum_refinement_percentage: float = 20.0,
712
- error_field_inclusion_percentage: float = 5.0,
728
+ error_field_inclusion_percentage: float = 60.0,
729
+ minimum_steps: int = 1,
713
730
  frequency: float = None,
714
731
  show_mesh: bool = False) -> SimulationDataset:
715
732
  """ A beta-version of adaptive mesh refinement.
@@ -729,6 +746,7 @@ class SimulationBeta(Simulation):
729
746
  growth_rate (float, optional): The mesh size growth rate. Defaults to 3.0.
730
747
  minimum_refinement_percentage (float, optional): The minimum mesh size increase . Defaults to 15.0.
731
748
  error_field_inclusion_percentage (float, optional): A percentage of tet elements to be included for refinement. Defaults to 5.0.
749
+ minimum_steps (int, optional): The minimum number of adaptive steps to execute. Defaults to 1.
732
750
  frequency (float, optional): The refinement frequency. Defaults to None.
733
751
  show_mesh (bool, optional): If the intermediate meshes should be shown (freezes simulation). Defaults to False
734
752
 
@@ -737,7 +755,6 @@ class SimulationBeta(Simulation):
737
755
  """
738
756
  from .physics.microwave.adaptive_mesh import select_refinement_indices, reduce_point_set, compute_convergence
739
757
 
740
-
741
758
  max_freq = np.max(self.mw.frequencies)
742
759
 
743
760
  if frequency is not None:
@@ -752,18 +769,27 @@ class SimulationBeta(Simulation):
752
769
 
753
770
  self.state.stash()
754
771
 
772
+ # Coefficients for the refinement ratio calculation.
773
+ a0 = 0.26
774
+ c0 = 0.75
775
+ x0 = 12
776
+ q0 = (1-a0)*2/np.pi
777
+ b0 = np.tan((c0-a0)/q0)/x0
778
+ q0 = (0.8-a0)*2/np.pi
779
+
780
+
755
781
  for step in range(1,max_steps+1):
756
782
 
757
783
  self.data.sim.new(iter_step=step)
758
784
 
759
- data = self.mw._run_adaptive_mesh(step, max_freq)
785
+ data, solve_ids = self.mw._run_adaptive_mesh(step, max_freq)
760
786
 
761
787
  field = data.field[-1]
762
788
 
763
789
  Smat_new = data.scalar[-1].Sp
764
790
  S_matrices.append(Smat_new)
765
791
 
766
- if step > 1:
792
+ if step > minimum_steps:
767
793
  S0 = S_matrices[-2]
768
794
  S1 = S_matrices[-1]
769
795
  conv_complex, conv_mag, conv_phase = compute_convergence(S0, S1)
@@ -774,52 +800,88 @@ class SimulationBeta(Simulation):
774
800
  else:
775
801
  passed = 0
776
802
 
777
- if passed >= min_refined_passes:
778
- logger.info('Adaptive mesh refinement successfull')
803
+ if passed >= min_refined_passes and step > minimum_steps:
804
+ logger.info(f'Adaptive mesh refinement successfull with {self.mesh.n_tets} tetrahedra.')
779
805
  break
780
806
 
781
- error, lengths = field._solution_quality()
807
+ error, lengths = field._solution_quality(solve_ids)
782
808
 
783
809
  idx = select_refinement_indices(error, error_field_inclusion_percentage/100)
784
810
  idx = idx[::-1]
785
811
 
786
- self.mesher.add_refinement_points(self.mw.mesh.centers[:,idx], lengths[idx])
812
+ npts = idx.shape[0]
813
+ np_percentage = npts/self.mesh.n_tets * 100
814
+
815
+ refinement_ratio = (a0 + np.arctan(b0*np_percentage)*q0)
816
+
817
+ logger.info(f'Adding {npts} refinement points with a ratio: {refinement_ratio}')
818
+
819
+ # tet_nodes = defaultdict(lambda: 1000.)
820
+ # for itet in idx:
821
+ # for inode in self.mesh.tets[:,itet]:
822
+ # tet_nodes[inode] = min(tet_nodes[inode], lengths[itet])
823
+
824
+ # N = len(tet_nodes)
825
+ # coords = np.zeros((3,N), dtype=np.float64)
826
+ # sizes = np.zeros((N,), dtype=np.float64)
827
+ # for i, (index, size) in enumerate(tet_nodes.items()):
828
+ # coords[:,i] = self.mesh.nodes[:,index]
829
+ # sizes[i] = size
830
+
831
+ # self.mesher.add_refinement_points(coords, sizes, refinement_ratio*np.ones((N,)))
832
+
833
+ self.mesher.add_refinement_points(self.mw.mesh.centers[:,idx], lengths[idx], refinement_ratio*np.ones_like(lengths[idx]))
787
834
 
788
835
  logger.debug(f'Pass {step}: Adding {len(idx)} new refinement points.')
789
836
 
790
837
  new_ids = reduce_point_set(self.mesher._amr_coords, growth_rate, self.mesher._amr_sizes, refinement_ratio, 0.20)
791
838
 
792
- logger.debug(f'Pass {step}: Removing {self.mesher._amr_coords.shape[1] - len(new_ids)} points from {self.mesher._amr_coords.shape[1]} to {len(new_ids)}')
839
+ nremoved = self.mesher._amr_coords.shape[1] - len(new_ids)
840
+ if nremoved > 0:
841
+ logger.info(f'Cleanup of step {step}: Removing {nremoved} points.')
793
842
 
794
843
  self.mesher._amr_coords = self.mesher._amr_coords[:,new_ids]
795
844
  self.mesher._amr_sizes = self.mesher._amr_sizes[new_ids]
845
+ self.mesher._amr_ratios = self.mesher._amr_ratios[new_ids]
846
+ self.mesher._amr_new = self.mesher._amr_new[new_ids]
796
847
 
848
+ logger.debug(f'Initial refinement ratio: {refinement_ratio}')
797
849
 
850
+ over = False
851
+ under = False
852
+ throttle = 1.0
853
+
854
+ # Mesh refinement loop. Only escapes if the mesh refined a certain set percentage.
798
855
  while True:
799
856
 
800
- self._reset_mesh()
801
-
802
- logger.debug(f'Pass {step}: Adding {len(idx)} refinement points.')
803
-
804
- self.mesher.set_refinement_function(refinement_ratio, growth_rate, 1.0)
857
+ if over and under:
858
+ throttle *= 2
805
859
 
860
+ self._reset_mesh()
861
+ logger.debug(f'Pass {step}')
862
+ self.mesher.set_refinement_function(growth_rate, 2.0)
806
863
  self.generate_mesh(True)
807
-
808
864
  percentage = (self.mesh.n_tets/last_n_tets - 1) * 100
809
865
  logger.info(f'Pass {step}: New mesh has {self.mesh.n_tets} (+{percentage:.1f}%) tetrahedra.')
810
866
 
811
867
  if percentage < minimum_refinement_percentage:
868
+ F = (2*minimum_refinement_percentage-percentage)/(throttle*minimum_refinement_percentage)
812
869
  logger.debug('Not enough mesh refinement, decreasing mesh size constraint.')
813
- refinement_ratio = refinement_ratio * 0.9
870
+ refinement_ratio = self.mesher.refine_finer(F)
814
871
  logger.debug(f'New refinement ratio: {refinement_ratio}')
872
+ under=True
815
873
  continue
816
-
817
- if percentage > 2*minimum_refinement_percentage and refinement_ratio < 0.99:
874
+ if percentage > (minimum_refinement_percentage*2):
875
+ F = (percentage - minimum_refinement_percentage)/(throttle*minimum_refinement_percentage)
818
876
  logger.debug('Too much mesh refinement, decreasing mesh size constraint.')
819
- refinement_ratio = refinement_ratio ** (1-np.log(percentage/minimum_refinement_percentage)/4)
877
+ refinement_ratio = self.mesher.refine_coarser(F)
820
878
  logger.debug(f'New refinement ratio: {refinement_ratio}')
879
+ over=True
880
+ continue
821
881
 
822
-
882
+ over = False
883
+ under = False
884
+ throttle = 1.0
823
885
  last_n_tets = self.mesh.n_tets
824
886
  break
825
887
 
@@ -91,7 +91,7 @@ class CuDSSInterface:
91
91
  self._config = cudss.config_create()
92
92
  self._data = cudss.data_create(self._handle)
93
93
 
94
- self.MTYPE = cudss.MatrixType.SYMMETRIC
94
+ self.MTYPE = cudss.MatrixType.GENERAL
95
95
  self.MVIEW = cudss.MatrixViewType.FULL
96
96
  self.RALG = cudss.AlgType.ALG_DEFAULT
97
97
  self.VTYPE = CudaDataType.CUDA_R_64F
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
@@ -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)]
emerge/plot.py CHANGED
@@ -1 +1 @@
1
- from ._emerge.plot.simple_plots import smith, plot_sp, plot, plot_ff, plot_ff_polar
1
+ from ._emerge.plot.simple_plots import smith, plot_sp, plot, plot_ff, plot_ff_polar, plot_vswr
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emerge
3
- Version: 1.1.0
3
+ Version: 1.2.0
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
@@ -1,71 +1,71 @@
1
- emerge/__init__.py,sha256=Ctg9aiE6r8aoihr0uSluSZPwxJLRUuoaBOCAFDf2bMU,3494
1
+ emerge/__init__.py,sha256=rKWaHi7SzRqoL7Jdp-vdGWY3OeXc-0drfgAUfJPaS8A,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
5
5
  emerge/lib.py,sha256=VtlMP9yd1OSU_c3IQD75pZgO25Hf8fG6JyHf6IqRvcY,28642
6
- emerge/plot.py,sha256=AH2D9rKeWUXlSOlh-pUUfLt0oxVLcqF_piki-BmPEg0,83
6
+ emerge/plot.py,sha256=8yQpAgEZoaTR-2_aU2fF2jDM5YOJbRZ2stn9nP-Pcn8,94
7
7
  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=1b3CWhUoEVwQCtosLQmXU0aBBC9Cqsn_5kRcZIidzJY,25747
17
+ emerge/_emerge/geometry.py,sha256=3iiHotkQ-Uj34vp0jsV_I0-vNikkXdNuLsnHiKekP8M,31463
18
18
  emerge/_emerge/howto.py,sha256=c4UxUNpA1tygr3OoR-LH-h0UZv-Tf9K8tpCiAU18BKE,8173
19
19
  emerge/_emerge/logsettings.py,sha256=S4aUkO2vhcssmYQIGOq0VkazMEX4TYJlCt0FZ74Mc8Y,5574
20
- emerge/_emerge/material.py,sha256=furDHD4rwkYCOjnh0GLz-Utjl5Z_NxDv0zWrk23Pygc,17459
21
- emerge/_emerge/mesh3d.py,sha256=YWd9xF-zrsxb3OSzmAY9TpewmY_kpoNi212Dhao_HPQ,37212
22
- emerge/_emerge/mesher.py,sha256=Lxtiy2Y4ZBFtpiWFjCzs0XIhPCJsutAskmITCsnovCE,18146
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
25
+ emerge/_emerge/selection.py,sha256=bE7qHk08RryqHwsdqw2ABQviIsDjL0RmwpxT1NF9pr8,21899
26
26
  emerge/_emerge/settings.py,sha256=4Mlo3T6UVGzhTB838833_dwvXYLGKNIEHQ4fr9hxHd8,5335
27
- emerge/_emerge/simmodel.py,sha256=3VTNpveoZw2PFQjgs3oMG2kOhAPSuY87sy7AQXAqXH0,32984
27
+ emerge/_emerge/simmodel.py,sha256=QqAFHRolidk2PZhkJn3NLFvlU3opDNs5UVgnv68A0ZE,36086
28
28
  emerge/_emerge/simstate.py,sha256=n_iOz3L9lZ0oD4CBb8cdHXOoaoyx96kcsFKwSQWVxlk,3630
29
29
  emerge/_emerge/simulation_data.py,sha256=W8wTSTqGNZIwnpBuk08I7e4GEXXAbnfoYEWHnhzHvyM,14723
30
- emerge/_emerge/solver.py,sha256=uzKWM9UhmpFhgxsKrfVlpHHBO_HoxoHjtkJp9-CFoZg,52990
30
+ emerge/_emerge/solver.py,sha256=ID387uKRYYZaEHOAwMCwt0esmdhmOn7VhH-2KD8tjtc,52993
31
31
  emerge/_emerge/system.py,sha256=p4HNz7d_LMRNE9Gk75vVdFecDH2iN_groAM9u-yQTpk,1618
32
32
  emerge/_emerge/elements/__init__.py,sha256=I3n9aic6lJW-oGeqTEZ-Fpxvyl2i-WqsHdnrM3v1oB8,799
33
33
  emerge/_emerge/elements/femdata.py,sha256=ZSB7dICyU3GOWbxpuowBc-Khh2mpXa02ZfMkHwdDol4,8377
34
34
  emerge/_emerge/elements/index_interp.py,sha256=X7WcXKC9Qg7UABvLbAktda7InRkOhm7qOU-Wnefflp4,3381
35
- emerge/_emerge/elements/ned2_interp.py,sha256=BGRdJGXCcDdqMBf3pOvc_-m-vngRI1VvE5MUsqqf9Cw,27981
35
+ emerge/_emerge/elements/ned2_interp.py,sha256=vb311CDFl9QIYorwXzxaAWLM9nCKQHI7LKalH3ggbMk,30649
36
36
  emerge/_emerge/elements/nedelec2.py,sha256=OssFCnPp7wkMBcUISGvTgT94jayfGOmX0x-RctIYSuI,6645
37
37
  emerge/_emerge/elements/nedleg2.py,sha256=1SA6AvnbChhU2iodS1PVMUdbSn9wF2XKam12WTBDtsw,9049
38
- emerge/_emerge/geo/__init__.py,sha256=yTeuT4Oexrsdkr7MxRLeTHEY5iP4IHsWeCvit57fK5g,1161
38
+ emerge/_emerge/geo/__init__.py,sha256=-VkOxYgJT2dwudq5DMD-fZTxXVoh94Vd-CtroP8q3uY,1170
39
39
  emerge/_emerge/geo/horn.py,sha256=tI-w-O0Fm_siMaVhKpZ_k5URLfZkqcbEpURX94fhKDs,4645
40
40
  emerge/_emerge/geo/modeler.py,sha256=_PMz3lFSa7FmJHWdY-4U1Sqbed-Egy85S_AdjlCldC4,15572
41
- emerge/_emerge/geo/operations.py,sha256=WYWfOXWrT0voeKW9U26g-PhQfqJl3ovRQ8uDQXUr7Nc,12459
42
- emerge/_emerge/geo/pcb.py,sha256=kZQFx-LdFusnHtegWTs7b4YVnhGBdFlDCd90IP7kwD8,60392
41
+ emerge/_emerge/geo/operations.py,sha256=7ZBM8uKGZmg_FvP766bf5q3xTZP1n3nCf3yDQjJV7uo,13137
42
+ emerge/_emerge/geo/pcb.py,sha256=TE60mJvfpYTm17E9WrzNeAZlsSAIUYJlfb80NGRSFEk,61913
43
43
  emerge/_emerge/geo/pmlbox.py,sha256=gaIG_AoZNQnIyJ8C7x64U-Hw5dsmllWMiZDAH4iRoM0,8784
44
44
  emerge/_emerge/geo/polybased.py,sha256=D_Ef4anrwV2RArEFrvWppZ_c7oN_Hm5h7ltMi2U3v2o,32891
45
- emerge/_emerge/geo/shapes.py,sha256=k3WZeXZBkLzHaOShUsfyqWITHBNQfDEgqyemhLLgRRg,27080
46
- 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
47
47
  emerge/_emerge/geo/pcb_tools/calculator.py,sha256=VbMP2xC9i7OFwtqnnwfYgyJSEcJIjr2VIy_Ez1hYqlU,859
48
48
  emerge/_emerge/geo/pcb_tools/dxf.py,sha256=Xv7iP_bB0f2Y46sxZloa5KYGyj5dtApXoR-kgL7KHZA,11744
49
49
  emerge/_emerge/geo/pcb_tools/macro.py,sha256=0g-0anOFyxrEkFobiSu0cwWFRQ32xB8Az24mmwo0z6M,2992
50
50
  emerge/_emerge/mth/_cache_check.py,sha256=mD65yXXRoSaiTa8nky27Ne8p_s5aTC_RqmLre0x1mio,1563
51
- emerge/_emerge/mth/common_functions.py,sha256=oURfF-8p_0s1dKbUATc15dnKHFwvqWa6GC-JMW9UwnI,2061
51
+ emerge/_emerge/mth/common_functions.py,sha256=Ux8JWJXMyNiY1wCXyClf-seWg1PyERe9HjFXx2bsIzY,2060
52
52
  emerge/_emerge/mth/integrals.py,sha256=lL7KrHdyFGpboQyvf6W_4bZRZCrMbjd2e8GDHctL-B8,3572
53
- emerge/_emerge/mth/optimized.py,sha256=OzYfWphPnjmfMV4bAV0csi3YM0JWzVMPQI0vZvX25NU,19082
53
+ emerge/_emerge/mth/optimized.py,sha256=cm1AM9hKO4ReD3EySC5KAs6lO_o9iaTR4-ZXvUrVr8A,19082
54
54
  emerge/_emerge/mth/pairing.py,sha256=i8bBvTeMmzgF0JdiDNJiTXxx913x4f10777pzD6FJo0,3535
55
55
  emerge/_emerge/physics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  emerge/_emerge/physics/microwave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  emerge/_emerge/physics/microwave/adaptive_freq.py,sha256=aWhijhCVAbnuwkru-I1AaRdY20uyozf6OWRIh9r2ijg,9786
58
- emerge/_emerge/physics/microwave/adaptive_mesh.py,sha256=LrlDMaYIps0uPkTh5KUu1jHqxdqOfxxNLVw8UeqggUc,25190
59
- emerge/_emerge/physics/microwave/microwave_3d.py,sha256=N06nZQ0XMhSU1z5lKrR6irJmkAlurG9Gg7J_DFzWLsI,51838
60
- emerge/_emerge/physics/microwave/microwave_bc.py,sha256=hsz9LkO2UgiBGld79ovxgtnZ2vKQHcVfO6fU8rp3WDs,50696
61
- emerge/_emerge/physics/microwave/microwave_data.py,sha256=eSWBrFmdYnOmCchf31jORwCriq2Ix1piGoGYHsvcF38,50551
58
+ emerge/_emerge/physics/microwave/adaptive_mesh.py,sha256=kBPLGaTl0ARGoDtEPmmC9oh3dAuoGmIaPNzCcqDGsJo,38312
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=zG-iAH_Kk_z58Oe-lpSh-GTNv6IYmFEv52qkPMNMN9Y,53923
62
62
  emerge/_emerge/physics/microwave/periodic.py,sha256=wYSUgLFVtCLqSG3EDKoCDRU93iPUzBdXzVRdHTRmbpI,3000
63
63
  emerge/_emerge/physics/microwave/port_functions.py,sha256=d-W1D-7P05MfXdOs7WlhPi_RqlSpC0HkYU6yl3GrxgE,2173
64
64
  emerge/_emerge/physics/microwave/sc.py,sha256=WZvoPhmHkfEv619RhmN09sXDBV0ryTqybwErA8Rc7lU,4735
65
65
  emerge/_emerge/physics/microwave/simjob.py,sha256=aCWCs7IXBfVBWWYhwyHvXSRHY3FOd3CK5ABcaFEsNnM,4927
66
66
  emerge/_emerge/physics/microwave/sparam.py,sha256=1SXGyr1UsrPnCIi4ffwobM4pzgkj50y4LrWCr_J5IRY,4946
67
67
  emerge/_emerge/physics/microwave/touchstone.py,sha256=pMcCOLWVqIKctcShcJxyaV-0rhRWXMSS1Jz14dVQEyY,5799
68
- emerge/_emerge/physics/microwave/assembly/assembler.py,sha256=ZRaf_5zSZ2U0D5DmuYKCiyyxjonJLQV5pYsUm6aChj0,23982
68
+ emerge/_emerge/physics/microwave/assembly/assembler.py,sha256=FQhPhdyR7xPyvwR_Gn42KCY2tV1eouqJolJJ9Z6z7C4,24234
69
69
  emerge/_emerge/physics/microwave/assembly/curlcurl.py,sha256=4CwMSUua8pvbp39gq2e3AxwVHOIVuPdr53qQM2BigQo,19688
70
70
  emerge/_emerge/physics/microwave/assembly/generalized_eigen.py,sha256=7jNU_hWd7q-ni53wmlhB5kmyJxp2xsx_WyBXZ6hPwo0,16907
71
71
  emerge/_emerge/physics/microwave/assembly/generalized_eigen_hb.py,sha256=tGf9EOzmp-dqtTodwYzcswuT_eLeZRtgdAZvgPz9QJo,17340
@@ -74,24 +74,24 @@ emerge/_emerge/physics/microwave/assembly/robin_abc_order2.py,sha256=HRGe6ezRVfc
74
74
  emerge/_emerge/physics/microwave/assembly/robinbc.py,sha256=uaaxlw7Vh-6ni5Gaz07WzpUsRvZ0hAru9E2wnNPp_fY,17614
75
75
  emerge/_emerge/plot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  emerge/_emerge/plot/display.py,sha256=TQLlKb-LkaG5ZOSLfxp9KXPlZPRFTxNj1LhVQ-Lp1-s,18476
77
- emerge/_emerge/plot/simple_plots.py,sha256=szIpmQmO8o6ubzB_E3zTJfEx16mJ3-OXrMYdD_wjAcs,25256
77
+ emerge/_emerge/plot/simple_plots.py,sha256=OkZMESJdj9a9L9nmnI4AtnJc-si39422INcerHKXt9k,29784
78
78
  emerge/_emerge/plot/matplotlib/mpldisplay.py,sha256=e8V6EhGdCW7nRkSFvjHCcRO5uR-FcD0yHQ1nxPQCbp4,8674
79
79
  emerge/_emerge/plot/pyvista/__init__.py,sha256=CPclatEu6mFnJZzCQk09g6T6Fh20WTbiLAJGSwAnPXU,30
80
80
  emerge/_emerge/plot/pyvista/cmap_maker.py,sha256=_GVXYdtXpJwAO9O-Iekjzn6YcR0MVT8LNh12nqvF2IA,2498
81
- emerge/_emerge/plot/pyvista/display.py,sha256=PASOzQd_L0_uEbWcdN42draaXK_LpveW0cS6-1obtGk,45740
81
+ emerge/_emerge/plot/pyvista/display.py,sha256=Iz5JnZtcmH4voImUCNRVW6Y3LWKdQ96uIgwLFHun3vo,46411
82
82
  emerge/_emerge/plot/pyvista/display_settings.py,sha256=gV5hjRGEAl3oQeBPobas6b6JzYfMFrXIGtVSaeml4N0,1074
83
83
  emerge/_emerge/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
84
  emerge/_emerge/projects/_gen_base.txt,sha256=DqQz36PZg6v1ovQjHvPjd0t4AIbmikZdb9dmrNYsK3w,598
85
85
  emerge/_emerge/projects/_load_base.txt,sha256=bHsZ4okxa9uu8qP4UOxSAeIQzuwpRtN0i71rg8wuqMA,473
86
86
  emerge/_emerge/projects/generate_project.py,sha256=TNw-0SpLc82MBq0bd9hB_yqvBZCgmuPonCBsHTp91uk,1450
87
- emerge/_emerge/solve_interfaces/cudss_interface.py,sha256=D6GVQLgTzRw4ec2MkgNhsSWrkLYMhvqljCyE6qtNQ3o,10599
87
+ emerge/_emerge/solve_interfaces/cudss_interface.py,sha256=ETvbaFydZ-yMWJAFl7wzQM02fh0BL1qGY9YxQaRpdhc,10597
88
88
  emerge/_emerge/solve_interfaces/pardiso_interface.py,sha256=iVFxToMmIzhj3hcAP-O_MDHKz82ePFIHY1us11kzUBU,15305
89
89
  emerge/beta/dxf.py,sha256=Bw4lVk0TquOgCxTZV23BZN7PrgqxBrMZxbHV1waC5U0,50
90
90
  emerge/materials/__init__.py,sha256=Z9tu3m_nqj6F9I-FwoVoN0vCTYUlFesH3KxJ38wkZck,19
91
91
  emerge/materials/isola.py,sha256=kSDxHJZVn2CcanoUjlwRVKIPvadRbBybURTdIHWx728,18660
92
92
  emerge/materials/rogers.py,sha256=4u6ma_XQdXGKWE3WsFkaMTamCQNo9kTYSTU8S1gCAYU,3388
93
- emerge-1.1.0.dist-info/METADATA,sha256=o2joAvpVrU6n6s2UXT27dEata6nv95RlAiKsShieUh4,3614
94
- emerge-1.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
95
- emerge-1.1.0.dist-info/entry_points.txt,sha256=8rFvAXticpKg4OTC8JEvAksnduW72KIEskCGG9XnFf8,43
96
- emerge-1.1.0.dist-info/licenses/LICENSE,sha256=VOCXWddrjMN5j7TvnSAOh1Dx7jkugdwq9Lqhycf5inc,17852
97
- emerge-1.1.0.dist-info/RECORD,,
93
+ emerge-1.2.0.dist-info/METADATA,sha256=Er2aZJ0A9j8xxNyKnWwhouNSjSUjMJ_Te08kPIxXWaQ,3614
94
+ emerge-1.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
95
+ emerge-1.2.0.dist-info/entry_points.txt,sha256=8rFvAXticpKg4OTC8JEvAksnduW72KIEskCGG9XnFf8,43
96
+ emerge-1.2.0.dist-info/licenses/LICENSE,sha256=VOCXWddrjMN5j7TvnSAOh1Dx7jkugdwq9Lqhycf5inc,17852
97
+ emerge-1.2.0.dist-info/RECORD,,
File without changes