femagtools 1.8.19__py3-none-any.whl → 1.8.20__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.
femagtools/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  """
4
4
  __title__ = 'femagtools'
5
- __version__ = '1.8.19'
5
+ __version__ = '1.8.20'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2025 Gamma Technology'
femagtools/dxfsl/area.py CHANGED
@@ -105,6 +105,12 @@ class Area(object):
105
105
  def elements(self):
106
106
  return self.area
107
107
 
108
+ def is_element_in_area(self, el):
109
+ for e in self.elements():
110
+ if el.has_same_nodes(e):
111
+ return True
112
+ return False
113
+
108
114
  def copy_of_elements(self):
109
115
  return [e.clone() for e in self.elements() if e]
110
116
 
@@ -1863,6 +1869,11 @@ class Area(object):
1863
1869
  nodes = [n for n in self.virtual_nodes(parts=4)]
1864
1870
  return area_size(nodes)
1865
1871
 
1872
+ def get_area_size(self):
1873
+ if self.surface == 0.0:
1874
+ self.surface = self.area_size()
1875
+ return self.surface
1876
+
1866
1877
  def set_surface(self, mirrored):
1867
1878
  self.surface = self.area_size()
1868
1879
  if self.close_to_endangle and mirrored:
@@ -229,7 +229,7 @@ def build_machine_rotor(machine, inner, mindist, plt, EESM=False, single=False):
229
229
  else:
230
230
  rebuild = machine_temp.create_mirror_lines_outside_magnets()
231
231
  if rebuild:
232
- machine_temp.geom.create_list_of_areas(delete=True)
232
+ machine_temp.rebuild_subregions(EESM, single=single)
233
233
 
234
234
  if machine_temp.create_auxiliary_lines():
235
235
  logger.debug("Auxiliary Lines created: rebuild subregions")
@@ -311,6 +311,9 @@ def build_machine_stator(machine, inner, mindist, plt, EESM=False, single=False)
311
311
  plt, machine_temp.geom,
312
312
  title="Stator Winding Slice after Rebuild")
313
313
 
314
+ if machine_temp.remove_tiny_air_areas():
315
+ machine_temp.rebuild_subregions(EESM, single=single)
316
+
314
317
  if machine_temp.create_auxiliary_lines():
315
318
  machine_temp.rebuild_subregions(EESM, single=single)
316
319
  plot_geom(False, # for developer
@@ -1039,7 +1042,7 @@ def create_femag_parameters(m_inner, m_outer, nodedist=1):
1039
1042
  alfa_pole = geom_poles.get_alfa()
1040
1043
 
1041
1044
  params['tot_num_slot'] = num_slots
1042
- params['slot_area'] = slot_area
1045
+ params['slot_area'] = float(slot_area)
1043
1046
  params['num_sl_gen'] = num_sl_gen
1044
1047
  params['num_poles'] = num_poles
1045
1048
  params['nodedist'] = nodedist
@@ -246,6 +246,37 @@ class FslRenderer(object):
246
246
  'outer_da_end = {}'.format(
247
247
  geom.dist_end_min_corner())
248
248
  ]
249
+ if inner:
250
+ r = np.linalg.norm(geom.start_corners[0])
251
+ if not np.isclose(geom.min_radius, r, rtol=1e-3):
252
+ slice = 1 if machine.is_mirrored() else 2
253
+ self.content += [
254
+ '-- create air layer inside',
255
+ 'x0, y0 = {}, {}'.format(
256
+ geom.start_min_corner(0),
257
+ geom.start_min_corner(1)),
258
+ 'hair = 1.0',
259
+ 'parts = {}'.format(machine.get_num_parts()),
260
+ 'rmin = {}'.format(geom.min_radius),
261
+ 'r1 = rmin - hair',
262
+ 'r, phi = c2pr(x0, y0)',
263
+ 'x1, y1 = pr2c(r1, phi)',
264
+ 'x2, y2 = pr2c(r1, {}*math.pi/parts)'.format(slice),
265
+ 'x3, y3 = pr2c(r, {}*math.pi/parts)'.format(slice),
266
+ 'nc_line(x0, y0, x1, y1, 0)',
267
+ 'nc_circle_m(x1, y1, x2, y2, 0.0, 0.0, 0)',
268
+ 'nc_line(x2, y2, x3, y3, 0)',
269
+ 'x0, y0 = pr2c(rmin - hair/2, math.pi/parts/2)',
270
+ 'create_mesh_se(x0, y0)',
271
+ '\n']
272
+ else:
273
+ self.content += [
274
+ 'parts = {}'.format(machine.get_num_parts()),
275
+ 'x0, y0 = {}, {}'.format(
276
+ geom.start_min_corner(0),
277
+ geom.start_min_corner(1)),
278
+ 'r1, phi = c2pr(x0, y0)']
279
+
249
280
  if self.mtype == 'PMSM':
250
281
  self.content += [
251
282
  'xmag = {}',
@@ -327,7 +358,7 @@ class FslRenderer(object):
327
358
  self.content.append(
328
359
  'x0_shaft, y0_shaft = x0, y0')
329
360
 
330
- self.content.append("create_mesh(x0, y0)\n")
361
+ self.content.append("create_mesh()\n")
331
362
 
332
363
  txt = ["if x0_iron_yoke > 0.0 then",
333
364
  " if mcvkey_yoke ~= 'dummy' then",
@@ -390,22 +421,24 @@ class FslRenderer(object):
390
421
  # angle after mirroring
391
422
  self.content.append('alfa = {}\n'.format(geom.get_alfa()))
392
423
 
393
- self.content += ['-- rotate',
394
- 'x1, y1 = {}, {}'.format(
395
- geom.start_corners[0][0],
396
- geom.start_corners[0][1])] # min xy1
397
424
  if outer:
398
- self.content.append('x2, y2 = pr2c(r1, 0.0)')
425
+ self.content += ['-- rotate',
426
+ 'x1, y1 = {}, {}'.format(
427
+ geom.start_corners[0][0],
428
+ geom.start_corners[0][1]), # min xy1
429
+ 'x2, y2 = pr2c(r1, 0.0)']
399
430
  else:
400
- self.content.append('x2, y2 = {}, {}'.format(
401
- geom.start_corners[1][0],
402
- geom.start_corners[1][1])) # max xy1
431
+ self.content += ['-- rotate',
432
+ 'x1, y1 = pr2c(r1, 0.0)',
433
+ 'x2, y2 = {}, {}'.format(
434
+ geom.start_corners[1][0],
435
+ geom.start_corners[1][1])] # min xy1
403
436
 
404
437
  if geom.is_mirrored():
405
438
  self.content.append('x3, y3 = pr2c(x2, alfa)')
406
439
  self.content.append('x4, y4 = pr2c(x1, alfa)')
407
440
  elif outer:
408
- self.content += ['x3, y3 = pr2c(r1, 2*math.pi/parts+phi)',
441
+ self.content += ['x3, y3 = pr2c(r1, 2*math.pi/parts)',
409
442
  'x4, y4 = {}, {}'.format(
410
443
  geom.end_corners[0][0],
411
444
  geom.end_corners[0][1])] # min xy4
@@ -413,10 +446,7 @@ class FslRenderer(object):
413
446
  self.content += ['x3, y3 = {}, {}'.format(
414
447
  geom.end_corners[-1][0],
415
448
  geom.end_corners[-1][1]), # min xy3
416
- 'x4, y4 = {}, {}'.format(
417
- geom.end_corners[0][0],
418
- geom.end_corners[0][1]), # min xy4
419
- 'def_bcond_vpo(x4, y4, x1, y1)']
449
+ 'x4, y4 = pr2c(r1, 2*math.pi/parts)']
420
450
 
421
451
  self.content.append('if parts_gen > 1 then')
422
452
  if geom.corners_dont_match():
femagtools/dxfsl/geom.py CHANGED
@@ -4803,6 +4803,52 @@ class Geometry(object):
4803
4803
  return
4804
4804
  logger.warning("WARNING: airgap connecting nodes do not aline")
4805
4805
 
4806
+ def remove_area(self, area):
4807
+ logger.debug("Remove Area %s", area.identifier())
4808
+ touching_areas = [(a.surface, a) for a in self.list_of_areas()
4809
+ if a.id != area.id and a.is_touching(area)]
4810
+ if not touching_areas:
4811
+ self.remove_edges(area.area)
4812
+ return
4813
+ touching_areas.sort(reverse=True)
4814
+ sz, touching_a = touching_areas[0]
4815
+ for e in area.area:
4816
+ if touching_a.is_element_in_area(e):
4817
+ self.remove_edge(e)
4818
+
4819
+ def remove_tiny_air_areas(self):
4820
+ logger.debug("remove_tiny_air_areas()")
4821
+ air_areas = [a for a in self.list_of_areas() if a.is_air()]
4822
+ if not air_areas:
4823
+ return False
4824
+
4825
+ def is_in_touch(air, area_list):
4826
+ for a in area_list:
4827
+ if air.is_touching(a):
4828
+ return True
4829
+ if air.is_inside(a, self):
4830
+ return True
4831
+ return False
4832
+
4833
+ areas = [a for a in self.list_of_areas() if a.is_winding() or a.is_magnet()]
4834
+ if not areas:
4835
+ return False
4836
+
4837
+ tiny_areas = [a for a in air_areas if not is_in_touch(a, areas)]
4838
+ geom_surface = self.area_size()
4839
+ angle_areas = [a for a in tiny_areas
4840
+ if (a.close_to_startangle or a.close_to_endangle)]
4841
+ #inside_areas = [a for a in tiny_areas
4842
+ # if not (a.close_to_startangle or a.close_to_endangle) and \
4843
+ # a.get_area_size() < geom_surface / 200]
4844
+ tiny_areas = angle_areas
4845
+ if not tiny_areas:
4846
+ return False
4847
+
4848
+ for a in tiny_areas:
4849
+ self.remove_area(a)
4850
+ return True
4851
+
4806
4852
  def print_nodes(self):
4807
4853
  print("=== List of Nodes ({}) ===".format(self.number_of_nodes()))
4808
4854
  for n in self.g.nodes():
@@ -1590,3 +1590,9 @@ class Machine(object):
1590
1590
  self.geom.check_airgap_connecting_nodes(m_outer.geom,
1591
1591
  self.startangle,
1592
1592
  self.endangle)
1593
+
1594
+ def remove_tiny_air_areas(self):
1595
+ if not self.geom.remove_tiny_air_areas():
1596
+ return False
1597
+ self.repair_hull()
1598
+ return True
femagtools/dxfsl/shape.py CHANGED
@@ -90,6 +90,13 @@ class Shape(object):
90
90
  self.n2 = n1
91
91
  self.n1 = n2
92
92
 
93
+ def has_same_nodes(self, e):
94
+ if points_are_close(e.n1, self.n1):
95
+ return points_are_close(e.n2, self.n2)
96
+ if points_are_close(e.n1, self.n2):
97
+ return points_are_close(e.n2, self.n1)
98
+ return False
99
+
93
100
  """an abstract geometry with 2 points"""
94
101
 
95
102
  def start(self):
femagtools/femag.py CHANGED
@@ -424,7 +424,7 @@ class BaseFemag(object):
424
424
  return sorted(pathlib.Path(self.workdir).glob('*.PROT'),
425
425
  key=lambda x: x.stat().st_mtime, reverse=True)[0].stem
426
426
 
427
- def readResult(self, machine, simulation, bch=None):
427
+ def readResult(self, simulation, bch=None, machine=None):
428
428
  if simulation:
429
429
  if simulation['calculationMode'] == "fieldcalc":
430
430
  nc = self.read_nc()
@@ -656,7 +656,7 @@ class Femag(BaseFemag):
656
656
  pass
657
657
 
658
658
  if simulation:
659
- return self.readResult(machine, simulation)
659
+ return self.readResult(machine=machine, simulation=simulation)
660
660
 
661
661
  return {'status': 'ok', 'message': self.modelname,
662
662
  'model': self.model.props()}
@@ -1196,6 +1196,6 @@ class ZmqFemag(BaseFemag):
1196
1196
  if r['status'] == 'ok':
1197
1197
  bch = femagtools.bch.Reader()
1198
1198
  bch.read(content.decode('latin1'))
1199
- bch = self.readResult(simulation, bch)
1199
+ bch = self.readResult(simulation=simulation, bch=bch)
1200
1200
  return bch
1201
1201
  raise FemagError(r['message'])
femagtools/machine/pm.py CHANGED
@@ -181,9 +181,10 @@ class PmRelMachine(object):
181
181
  if np.abs(torque) < 1e-2:
182
182
  return (0, 0)
183
183
  if np.isscalar(iqd0):
184
- i0 = self.io
184
+ i0 = list(self.io)
185
185
  if torque<0:
186
186
  i0[0] = -i0[0]
187
+ i0 = tuple(i0)
187
188
  else:
188
189
  i0 = iqd0
189
190
  if with_mtpa:
femagtools/model.py CHANGED
@@ -477,8 +477,14 @@ class MachineModel(Model):
477
477
  model = {k: getattr(self, k) for k in keys if hasattr(self, k)}
478
478
  if hasattr(self, 'stator'):
479
479
  model['stator'] = {k: self.stator[k]
480
- for k in ('num_slots', 'num_slots_gen', 'slot_area')
480
+ for k in ('num_slots',
481
+ 'num_slots_gen',
482
+ 'slot_area')
481
483
  if k in self.stator}
484
+
485
+ for k in model:
486
+ if isinstance(model[k], np.float64):
487
+ model[k] = float(model[k])
482
488
  return model
483
489
 
484
490
  class FeaModel(Model):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: femagtools
3
- Version: 1.8.19
3
+ Version: 1.8.20
4
4
  Summary: Python API for FEMAG
5
5
  Author-email: Ronald Tanner <tar@semafor.ch>, Dapu Zhang <dzhang@gtisoft.com>, Beat Holm <hob@semafor.ch>, Günther Amsler <amg@semafor.ch>, Nicolas Mauchle <mau@semafor.ch>
6
6
  License: Copyright (c) 2016-2023, Semafor Informatik & Energie AG, Basel
@@ -1,4 +1,4 @@
1
- femagtools/__init__.py,sha256=k1SL4nzTdLCU7dFO7Qd0V59z23xi1pUBL0lTp770Lho,1601
1
+ femagtools/__init__.py,sha256=bCLfOKIpmKd6x8ccuF_zYExBdtyrg2j_xa34nsA9ArE,1601
2
2
  femagtools/airgap.py,sha256=ROm4uhZjYiO0CxmFnpgiaNY9x3khlO8LBLmp5Yh5RLk,1973
3
3
  femagtools/amazon.py,sha256=O1ICuv21XDAJi1qK1Sigs2TdS6hDZP19OzvmE2t76wU,12069
4
4
  femagtools/amela.py,sha256=2q-Xsj6i6nQ3iKheBR1vQ4FulJfF1i-L8w3a3U8GYWo,4362
@@ -15,7 +15,7 @@ femagtools/dakotaout.py,sha256=6nn0PXsB40mPKiQLenqAtHy0KXCO7kvqqQ-aD2JhQvw,5573
15
15
  femagtools/docker.py,sha256=XDVmLBB0z4sZZpcrx7Wbm84xl4ksj7aqn5-ZOPxdxm4,7460
16
16
  femagtools/ecloss.py,sha256=3qwfb_9qpWw99asUDcQgdbP51VGXp4MlLQZDhywWHEk,35051
17
17
  femagtools/erg.py,sha256=IXKq76P9qLt_ssNOP78v8Qizk3J2Zg80yaKDSjzwoJE,1224
18
- femagtools/femag.py,sha256=v85KRdG-TAqGXl7QdHZnas8umAovl7gkHfucWfA4BeE,45576
18
+ femagtools/femag.py,sha256=YutGjroQ4X7kC9WZ1w6pDdqTqKH0oxvgTvZk93sZep8,45615
19
19
  femagtools/forcedens.py,sha256=7NNv75Vg9vQ_fy8W4kM2rlSO970zaSmeurhPmdAxsOU,8485
20
20
  femagtools/fsl.py,sha256=JSalCD21wyYnlwwXeZjUfTca80RnYezrLvDcewlUH-Q,37976
21
21
  femagtools/getset.py,sha256=yJ6Em35DeWK7WNZW0qjjS5s7LUkVh5mbgxF59HHm5FM,3017
@@ -32,7 +32,7 @@ femagtools/losscoeffs.py,sha256=7B29VdEsmv8HSP749X3QBb_E-XN6Z9dvNleKiRLWaMI,7721
32
32
  femagtools/magnet.py,sha256=Nuk060bT4Wa3lX74HdefqTTtUxLaERDSBYTTpbi6KP4,1093
33
33
  femagtools/mcv.py,sha256=ICXXbF5KGUsi91HktYuxzKcII-i96aBXkJzNtwkLy1Q,48740
34
34
  femagtools/me.py,sha256=z6RJkvSbgMmorCQTxKvq44uIYKh82uYYExjkNePJCmE,1813
35
- femagtools/model.py,sha256=dk9x-iqRzgOTdTCeU_ynUZGb1bt4FvU1ZGMPXytMbUg,17965
35
+ femagtools/model.py,sha256=aVnrOKtNzfNBS4JA7PMFLAXW10oJkdmBWMw4Na4gBCM,18164
36
36
  femagtools/moproblem.py,sha256=kOP8pRdD8YXz28_M2WKnFgl3eeJ7tqg49ohoazsmUOg,2825
37
37
  femagtools/multiproc.py,sha256=XSYe18kZOaY6C_9gH_neWR0H3S8q2l8dda3dbXlNb54,9265
38
38
  femagtools/mxw2msh.py,sha256=CIIqAvfs8U-A0OfuOAoDaqNSmoMSHSI_tW1CPFRCP5E,2151
@@ -52,29 +52,29 @@ femagtools/vtu.py,sha256=Sf83dHIfCKY2km-MIUHKKoj-JKN4PDX7kkPLZXyIYY4,10723
52
52
  femagtools/windings.py,sha256=eGRoDbi9yruiWHqZysamBLPJefw8IQX3Lq4KpG4oIKo,28216
53
53
  femagtools/zmq.py,sha256=62x5VRk0TMNER0-EZ8E28IdLKzsttlbxy1U_3wocNLc,9618
54
54
  femagtools/dxfsl/__init__.py,sha256=MywcCdpKPKs4qJBJJgeDsikJFJ2P48dbTuNk303f5pM,76
55
- femagtools/dxfsl/area.py,sha256=ccRBlD3IeZOW5oiu23ROhtfnpx1LpjQ_E7MbV_HoArU,70646
55
+ femagtools/dxfsl/area.py,sha256=d3964MOcaOGaXZi2iTirMQvuzGxJXiaMV_IncHyJzww,70939
56
56
  femagtools/dxfsl/areabuilder.py,sha256=H416_u2796F8nJwqa6EI2gCw-5Ay7cCpRRz3_39u42k,37916
57
57
  femagtools/dxfsl/concat.py,sha256=F6scwesxyOmfmKQ5kGspNCxA71Yz6QgxFL7lTj3hsaI,13385
58
58
  femagtools/dxfsl/conv.py,sha256=rAG_r2twWtcZyLKe8L8gYcC-n-JMG-dK1iMmd9yviTQ,12237
59
- femagtools/dxfsl/converter.py,sha256=LCzKF9dAKywJcjCPCavSM2jxilyO6R_kDMdctF4KRJE,41695
59
+ femagtools/dxfsl/converter.py,sha256=SQjqcRE-6z4jkiexCmYgeUjt5Jr3xcjvXn292kos-ic,41810
60
60
  femagtools/dxfsl/corner.py,sha256=-XPBcnEau-2-SRHLYzlBqCQGaFfgm_DH2qR1mSaFoAs,1311
61
61
  femagtools/dxfsl/dumprenderer.py,sha256=n4AvInjvGIaC2iKZtQaYXXDyJVSQ3uEOFOLD4-xfKRY,1861
62
62
  femagtools/dxfsl/dxfparser.py,sha256=kyXG0kZfNyOgn96MqBgP8RhOQhppfB5NbyRNNybs1C0,13451
63
63
  femagtools/dxfsl/femparser.py,sha256=O8940Q1Mz8MKng6W8M3s9KfTvhDLJ56tfQWtZEW3xMM,2134
64
- femagtools/dxfsl/fslrenderer.py,sha256=L8qymxhrxDvNg9LLwAQgDXM1EU3yA1L3BoYpkenECEs,28005
64
+ femagtools/dxfsl/fslrenderer.py,sha256=YXxiHGb061A-1T9yKz8u66C5WVy-clDx8xjY1tSvn1U,29433
65
65
  femagtools/dxfsl/functions.py,sha256=1RFT2YPR_rTJSKtTqIoO8Z-s_kXKIp95zed83SM0gZg,12784
66
- femagtools/dxfsl/geom.py,sha256=d-HU4yV6j9RA8PeIvesMDvXBc4xIrKXphmBI2e3_QxA,186927
66
+ femagtools/dxfsl/geom.py,sha256=-TgzaDDbXMBbZXrjEQymYal33BM6hRgkz4sPzMQ054I,188631
67
67
  femagtools/dxfsl/journal.py,sha256=r4z52av3k95MjwzypgUJpj8sSAeQoJsS81Uqs1IBLVw,4265
68
- femagtools/dxfsl/machine.py,sha256=wtUqLAmq4Imd6uoPwrhZ5h0MCku3Mihrpqx7QycFYng,63062
68
+ femagtools/dxfsl/machine.py,sha256=YiH2fAguyM6yuCi__LfeTHZDpspNI8W85YwcKp2sX2M,63222
69
69
  femagtools/dxfsl/plotrenderer.py,sha256=q2cORuxJEf1Ws6oCY9c0gF6N3kDrcI6WOz3u5Vl6R_c,13823
70
- femagtools/dxfsl/shape.py,sha256=uQqbgXIA2_KP2XRdhCfVfGWjcjwzhJ5t9RhiqR9R98c,61668
70
+ femagtools/dxfsl/shape.py,sha256=tWZelgHUns92JGtKPi6oGaQV53inqYvEVgN-CcN8BAk,61913
71
71
  femagtools/dxfsl/svgparser.py,sha256=RY2TU9MK6gOaNmI6w6RNqcw7H9YGmK-NUwvdylKBcsE,3763
72
72
  femagtools/dxfsl/symmetry.py,sha256=bGDSZhs6VOS-gp4C9eW0tjyMMec4BVFVZ0NpGXV3H0U,44660
73
73
  femagtools/machine/__init__.py,sha256=RjJdy1J_9-_FEvdqdBtIjGjqF93NRzDfU5VS-z_6ARI,7557
74
74
  femagtools/machine/afpm.py,sha256=_Ei1FMuoC1GiI0z90qnyuxNrefkmeRdtDZKm20glzNY,40711
75
75
  femagtools/machine/effloss.py,sha256=jNgo9OGOnLRoZ6Mw2Lf8xOpAQWOBxX5HH4F-WzPOW0A,17687
76
76
  femagtools/machine/im.py,sha256=5wYjsEQIiKR62M2M0rA8zmybWQDVjpoazXJPRKyQOvM,40331
77
- femagtools/machine/pm.py,sha256=fKKNsnUQkO9_zz3-SC9u9OCjw3hw7Lj4FImB4ZlHrWQ,71040
77
+ femagtools/machine/pm.py,sha256=TgfB0ULvVgtkBMDXFRRYyNPuAJCCjQjv61WaSKHXYBU,71077
78
78
  femagtools/machine/sizing.py,sha256=QO-k-UALmSPFNf8ajJPDnzKtlbkiAhX1DqWCRLr-H9k,32306
79
79
  femagtools/machine/sm.py,sha256=SwidHYI-BEGiZQMm9rYTnIuqJN121RgIQ9QetYl3fic,41066
80
80
  femagtools/machine/utils.py,sha256=HRM9UHY0UwuBWyK2dAfwlPuvMkXYBVqHlmEsUIdSNJk,21694
@@ -173,7 +173,7 @@ femagtools/templates/stator_msh.mako,sha256=Neze1ielMCk7TrARyhOra91fFQVT8Phsgk2O
173
173
  femagtools/templates/therm-dynamic.mako,sha256=pEz7jrUpopK1-RqgulNnrkSaCZDjfLelsVo6cBqmpac,3142
174
174
  femagtools/templates/therm_static.mako,sha256=ulevp4AP-kZ1_qdScPMaX9tLqvvP0t9lFflWTXgUxaE,1310
175
175
  femagtools/templates/torq_calc.mako,sha256=PH2IXg9ysi0w8N_8YB0IsE3rRj2VE2AYkGortQxFGfQ,2424
176
- femagtools-1.8.19.dist-info/licenses/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
176
+ femagtools-1.8.20.dist-info/licenses/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
177
177
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
178
  tests/test_afpm.py,sha256=ge5CXnVQ7E5gVViTI9hQOC0hHetBci18pY9prbUCAqU,16849
179
179
  tests/test_airgap_induction.py,sha256=cmpy1og59oWEyCO4oF_zDuc1DUwCbdeebNL1ujpZza4,1065
@@ -223,8 +223,8 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
223
  tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
224
224
  tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
225
225
  tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
226
- femagtools-1.8.19.dist-info/METADATA,sha256=t50AFbbiCAWPpTQ6fp1FO25ZkCOY1QJMUtN-WX2Lyu0,6221
227
- femagtools-1.8.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
228
- femagtools-1.8.19.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
229
- femagtools-1.8.19.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
230
- femagtools-1.8.19.dist-info/RECORD,,
226
+ femagtools-1.8.20.dist-info/METADATA,sha256=Tn87cA-UKUyfH6_2UVkI55GTLT1LfBNmof1kiHnvCbs,6221
227
+ femagtools-1.8.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
228
+ femagtools-1.8.20.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
229
+ femagtools-1.8.20.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
230
+ femagtools-1.8.20.dist-info/RECORD,,