femagtools 1.6.1__py3-none-any.whl → 1.6.2__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 +1 -1
- femagtools/bch.py +2 -2
- femagtools/dxfsl/functions.py +49 -2
- femagtools/dxfsl/machine.py +21 -8
- femagtools/isa7.py +14 -5
- femagtools/machine/__init__.py +1 -1
- femagtools/machine/effloss.py +1 -1
- femagtools/machine/pm.py +9 -2
- {femagtools-1.6.1.dist-info → femagtools-1.6.2.dist-info}/METADATA +1 -1
- {femagtools-1.6.1.dist-info → femagtools-1.6.2.dist-info}/RECORD +14 -14
- {femagtools-1.6.1.dist-info → femagtools-1.6.2.dist-info}/LICENSE +0 -0
- {femagtools-1.6.1.dist-info → femagtools-1.6.2.dist-info}/WHEEL +0 -0
- {femagtools-1.6.1.dist-info → femagtools-1.6.2.dist-info}/entry_points.txt +0 -0
- {femagtools-1.6.1.dist-info → femagtools-1.6.2.dist-info}/top_level.txt +0 -0
femagtools/__init__.py
CHANGED
femagtools/bch.py
CHANGED
@@ -284,7 +284,7 @@ class Reader:
|
|
284
284
|
nue = np.arange(0, 5*n).tolist()
|
285
285
|
order, tq = np.array(
|
286
286
|
[(n, b)
|
287
|
-
for n, b in zip(nue, f['nue'])]).T
|
287
|
+
for n, b in zip(nue, f['nue']) if b > 1e-15 and 2*n % poles == 0]).T
|
288
288
|
self.torque_fft = [
|
289
289
|
{'order': order.tolist(),
|
290
290
|
'torque': tq.tolist()}]
|
@@ -1028,7 +1028,7 @@ class Reader:
|
|
1028
1028
|
e.g. : idList[-450, -350, -250, -150, -50, 0]
|
1029
1029
|
idList[-500, -400, -300, -200, -100, 0, 0]
|
1030
1030
|
'''
|
1031
|
-
diff = np.
|
1031
|
+
diff = np.floor(np.abs(np.diff(idList)))
|
1032
1032
|
if idList[-1] == 0 and len(idList) > 2 and \
|
1033
1033
|
not np.all(diff == diff[0]):
|
1034
1034
|
idList = idList[:-1]
|
femagtools/dxfsl/functions.py
CHANGED
@@ -11,6 +11,7 @@ from __future__ import print_function
|
|
11
11
|
import logging
|
12
12
|
import numpy as np
|
13
13
|
import copy
|
14
|
+
import time
|
14
15
|
|
15
16
|
logger = logging.getLogger('femagtools.functions')
|
16
17
|
|
@@ -112,9 +113,11 @@ def round_point(p, n):
|
|
112
113
|
return (round(p[0], n), round(p[1], n))
|
113
114
|
|
114
115
|
|
115
|
-
def line_m(p1, p2):
|
116
|
+
def line_m(p1, p2, none_val=None, dec=0):
|
116
117
|
if np.isclose(p2[0]-p1[0], 0.0):
|
117
|
-
return
|
118
|
+
return none_val
|
119
|
+
if dec > 0:
|
120
|
+
return round((p2[1]-p1[1]) / (p2[0]-p1[0]), dec)
|
118
121
|
return (p2[1]-p1[1]) / (p2[0]-p1[0])
|
119
122
|
|
120
123
|
|
@@ -241,6 +244,14 @@ def points_are_close(p1, p2, rtol=1e-05, atol=1e-08):
|
|
241
244
|
np.isclose(p1[1], p2[1], rtol, atol))
|
242
245
|
|
243
246
|
|
247
|
+
def point_greater_equal(p1, p2, rtol=1e-05, atol=1e-08):
|
248
|
+
if not (p1 and p2):
|
249
|
+
return False
|
250
|
+
if np.isclose(p1[0], p2[0], rtol, atol): # x equal
|
251
|
+
return greater_equal(p1[1], p2[1], rtol, atol) # y >= equal
|
252
|
+
return greater_equal(p1[0], p2[0], rtol, atol) # x >= equal
|
253
|
+
|
254
|
+
|
244
255
|
def nodes_are_equal(n1, n2):
|
245
256
|
if not (n1 and n2):
|
246
257
|
return False
|
@@ -275,6 +286,14 @@ def normalise_angle(alpha):
|
|
275
286
|
return alpha
|
276
287
|
|
277
288
|
|
289
|
+
def positive_angle(alpha):
|
290
|
+
""" returns a positive value for angle alpha
|
291
|
+
"""
|
292
|
+
while alpha < 0.0:
|
293
|
+
alpha += 2*np.pi
|
294
|
+
return alpha
|
295
|
+
|
296
|
+
|
278
297
|
def is_same_angle(angle1, angle2, atol=0.001):
|
279
298
|
""" returns true if angles are equal
|
280
299
|
"""
|
@@ -404,3 +423,31 @@ def points_on_arc(center, radius, startangle, endangle, parts=8):
|
|
404
423
|
for alpha in angles_on_arc(start, end, parts=parts):
|
405
424
|
yield (center[0] + radius * np.cos(alpha),
|
406
425
|
center[1] + radius * np.sin(alpha))
|
426
|
+
|
427
|
+
|
428
|
+
class Timer(object):
|
429
|
+
def __init__(self, start_it=False):
|
430
|
+
self.starttime = None
|
431
|
+
if start_it:
|
432
|
+
self.start()
|
433
|
+
|
434
|
+
def __str__(self):
|
435
|
+
if self.starttime is None:
|
436
|
+
return "Timer is not running"
|
437
|
+
stop = time.perf_counter()
|
438
|
+
return "Timer is already running for %0.4f seconds" % (stop - self.starttime)
|
439
|
+
|
440
|
+
def start(self):
|
441
|
+
if self.starttime is not None:
|
442
|
+
logger.error("Timer is already on")
|
443
|
+
self.starttime = time.perf_counter()
|
444
|
+
|
445
|
+
def stop(self, fmt=None):
|
446
|
+
if self.starttime is None:
|
447
|
+
logger.error("Timer is not running")
|
448
|
+
stop = time.perf_counter()
|
449
|
+
sec = stop - self.starttime
|
450
|
+
self.starttime = None
|
451
|
+
if fmt:
|
452
|
+
logger.info(fmt, sec)
|
453
|
+
return sec
|
femagtools/dxfsl/machine.py
CHANGED
@@ -271,10 +271,18 @@ class Machine(object):
|
|
271
271
|
def undo_mirror(self):
|
272
272
|
assert(self.is_mirrored())
|
273
273
|
assert(self.previous_machine)
|
274
|
-
self.
|
274
|
+
self.previous_machine.clear_mirror()
|
275
|
+
self.previous_machine.set_alfa_and_corners()
|
275
276
|
self.previous_machine.set_kind(self.geom.kind)
|
276
277
|
return self.previous_machine
|
277
278
|
|
279
|
+
def clear_mirror(self):
|
280
|
+
self.mirror_orig_geom = None
|
281
|
+
self.mirror_geom = None
|
282
|
+
self.mirror_startangle = 0.0
|
283
|
+
self.mirror_endangle = 0.0
|
284
|
+
self.geom.mirror_corners = []
|
285
|
+
|
278
286
|
def rotate_to(self, new_startangle):
|
279
287
|
if np.isclose(new_startangle, self.startangle):
|
280
288
|
return
|
@@ -328,9 +336,12 @@ class Machine(object):
|
|
328
336
|
|
329
337
|
if len(self.airgaps) > 0:
|
330
338
|
airgap_candidates = []
|
339
|
+
prv_radius = 0
|
331
340
|
for g in self.airgaps:
|
332
341
|
gap_radius = round((g[0]+g[1])/2.0, 6)
|
333
342
|
gap_dist = g[1] - g[0]
|
343
|
+
prv_dist = g[0] - prv_radius
|
344
|
+
prv_radius = g[1]
|
334
345
|
circle = Circle(Element(center=self.center,
|
335
346
|
radius=gap_radius))
|
336
347
|
ok, borders = self.geom.is_airgap(self.center,
|
@@ -341,12 +352,10 @@ class Machine(object):
|
|
341
352
|
if not ok:
|
342
353
|
logger.error("FATAL: No Airgap with radius {}".
|
343
354
|
format(gap_radius))
|
344
|
-
print("FATAL: No Airgap with radius {}".
|
345
|
-
format(gap_radius))
|
346
355
|
self.geom.airgaps.append(circle)
|
347
356
|
return True # bad exit
|
348
357
|
|
349
|
-
airgap_candidates.append((borders, circle, gap_dist))
|
358
|
+
airgap_candidates.append((borders, circle, gap_dist, prv_dist))
|
350
359
|
self.geom.airgaps.append(circle)
|
351
360
|
|
352
361
|
if correct_airgap > 0.0:
|
@@ -379,7 +388,7 @@ class Machine(object):
|
|
379
388
|
logger.debug("end airgap: radius=%s", self.airgap_radius)
|
380
389
|
return False # correct airgap set
|
381
390
|
|
382
|
-
gaps = [c for b, c, d in airgap_candidates if b == 0]
|
391
|
+
gaps = [c for b, c, d, prv_d in airgap_candidates if b == 0]
|
383
392
|
|
384
393
|
if len(gaps) == 1: # one candidate without border intersection
|
385
394
|
self.airgap_radius = gaps[0].radius
|
@@ -407,7 +416,7 @@ class Machine(object):
|
|
407
416
|
dist = 999
|
408
417
|
circle = None
|
409
418
|
pos_list = []
|
410
|
-
for b, c, d in airgap_candidates:
|
419
|
+
for b, c, d, prv_d in airgap_candidates:
|
411
420
|
if get_one:
|
412
421
|
logger.info(" --- {} (width={})".format(c.radius, d))
|
413
422
|
else:
|
@@ -419,10 +428,14 @@ class Machine(object):
|
|
419
428
|
inner_pc = (c.radius - self.geom.min_radius) / \
|
420
429
|
(self.geom.max_radius - self.geom.min_radius)
|
421
430
|
pos = np.abs(inner_pc * 100 - 50)
|
422
|
-
logger.debug("Abstand Mitte = {}
|
431
|
+
logger.debug("Abstand Mitte in % = {}".format(pos))
|
432
|
+
prv_dist_percent = int(round(prv_d / self.geom.max_radius, 2) * 100)
|
433
|
+
logger.debug("Abstand Vorheriger abs=%s in prz=%s (%s)",
|
434
|
+
prv_d, prv_dist_percent, self.geom.max_radius)
|
423
435
|
if pos < 20:
|
424
436
|
pos_list.append([pos, d, c])
|
425
|
-
|
437
|
+
elif prv_dist_percent <= 1:
|
438
|
+
pos_list.append([prv_dist_percent, d, c])
|
426
439
|
if get_one:
|
427
440
|
if pos_list:
|
428
441
|
dist_list = [[d, c] for pos, d, c in pos_list]
|
femagtools/isa7.py
CHANGED
@@ -868,9 +868,17 @@ class Isa7(object):
|
|
868
868
|
except AttributeError:
|
869
869
|
pass
|
870
870
|
|
871
|
-
try:
|
872
|
-
|
873
|
-
|
871
|
+
try:
|
872
|
+
flx_fac = 1000
|
873
|
+
if isinstance(reader.el_fe_induction_1, list):
|
874
|
+
pass
|
875
|
+
else:
|
876
|
+
if reader.el_fe_induction_1.dtype == 'int16':
|
877
|
+
flx_fac = 1000
|
878
|
+
else:
|
879
|
+
flx_fac = 1
|
880
|
+
el_fe_ind = [np.array(reader.el_fe_induction_1).T/flx_fac,
|
881
|
+
np.array(reader.el_fe_induction_2).T/flx_fac]
|
874
882
|
eddy_cu_vpot = np.array(reader.eddy_cu_vpot).T/1000
|
875
883
|
if len(el_fe_ind[0].shape) == 4:
|
876
884
|
pdim = self.pos_el_fe_induction.shape[0]
|
@@ -891,8 +899,9 @@ class Isa7(object):
|
|
891
899
|
n += 1
|
892
900
|
if n > 0:
|
893
901
|
shape.append(n)
|
894
|
-
|
895
|
-
|
902
|
+
|
903
|
+
el_fe_ind = [np.array([[reader.el_fe_induction_1[0][0][:shape[0]]]]).T/flx_fac,
|
904
|
+
np.array([[reader.el_fe_induction_2[0][0][:shape[0]]]]).T/flx_fac]
|
896
905
|
eddy_cu_vpot = np.array([[reader.eddy_cu_vpot[0][0][:shape[0]]]]).T/1000
|
897
906
|
|
898
907
|
self.el_fe_induction_1 = el_fe_ind[0]
|
femagtools/machine/__init__.py
CHANGED
@@ -33,7 +33,7 @@ def create_from_eecpars(temp, eecpars, lfe=1, wdg=1):
|
|
33
33
|
rlfe = lfe
|
34
34
|
rwdg = wdg
|
35
35
|
opts = {k: eecpars[k] for k in ('zeta1', 'gam', 'kh', 'kpfe',
|
36
|
-
'kfric_b') if k in eecpars}
|
36
|
+
'kfric_b', 'kpmag') if k in eecpars}
|
37
37
|
try:
|
38
38
|
opts['rotor_mass'] = rlfe*eecpars['rotor_mass']
|
39
39
|
except KeyError:
|
femagtools/machine/effloss.py
CHANGED
@@ -309,7 +309,7 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
309
309
|
if isinstance(m, (PmRelMachine, SynchronousMachine)):
|
310
310
|
plfe1 = m.kpfe*m.iqd_plfe1(*iqd, f1)
|
311
311
|
plfe2 = m.kpfe*m.iqd_plfe2(iqd[0], iqd[1], f1)
|
312
|
-
plmag = m.iqd_plmag(iqd[0], iqd[1], f1)
|
312
|
+
plmag = m.kpmag*m.iqd_plmag(iqd[0], iqd[1], f1)
|
313
313
|
plcu1 = m.iqd_plcu1(iqd[0], iqd[1], 2*np.pi*f1)
|
314
314
|
plcu2 = m.iqd_plcu2(*iqd)
|
315
315
|
tfric = m.tfric
|
femagtools/machine/pm.py
CHANGED
@@ -203,7 +203,7 @@ class PmRelMachine(object):
|
|
203
203
|
if n > 1e-3:
|
204
204
|
f1 = self.p*n
|
205
205
|
plfe = self.kpfe * (self.iqd_plfe1(iq, id, f1) + self.iqd_plfe2(iq, id, f1))
|
206
|
-
pmag = self.iqd_plmag(iq, id, f1)
|
206
|
+
pmag = self.kpmag * self.iqd_plmag(iq, id, f1)
|
207
207
|
return (plfe + pmag + self.pfric(n))/(2*np.pi*n)
|
208
208
|
return 0
|
209
209
|
|
@@ -1261,7 +1261,14 @@ class PmRelMachineLdq(PmRelMachine):
|
|
1261
1261
|
return self.betai1_plfe2(*betai1(iq, id), f1)
|
1262
1262
|
|
1263
1263
|
def betai1_plmag(self, beta, i1, f1):
|
1264
|
-
|
1264
|
+
r = self._losses['magnet'](beta, i1)*(f1/self.fo)**2
|
1265
|
+
try:
|
1266
|
+
idx = np.argwhere(r < 0)
|
1267
|
+
if len(idx.squeeze()):
|
1268
|
+
r[idx.squeeze()] = 0.0
|
1269
|
+
except:
|
1270
|
+
pass
|
1271
|
+
return r
|
1265
1272
|
|
1266
1273
|
def iqd_plmag(self, iq, id, f1):
|
1267
1274
|
return self.betai1_plmag(*betai1(iq, id), f1)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: femagtools
|
3
|
-
Version: 1.6.
|
3
|
+
Version: 1.6.2
|
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,9 +1,9 @@
|
|
1
|
-
femagtools/__init__.py,sha256=
|
1
|
+
femagtools/__init__.py,sha256=UUpTqpPxTE9-KNmWFDhqdB2Sy56sR68HZdRSYl0X3BA,1615
|
2
2
|
femagtools/airgap.py,sha256=ZCIZTYf6BbuNYx68y9fUDBQo3taN8RuGl8q-jJ7ygiA,1577
|
3
3
|
femagtools/amazon.py,sha256=O1ICuv21XDAJi1qK1Sigs2TdS6hDZP19OzvmE2t76wU,12069
|
4
4
|
femagtools/amela.py,sha256=pHjfXzpANI-7oz8MtrqNcyDZ6PxVM91vCJuvYhHy1rk,13891
|
5
5
|
femagtools/asm.py,sha256=CiL0KWaF4P7O6-VwmGLdva_icwmPrPiI-TFQ19XYTKk,7660
|
6
|
-
femagtools/bch.py,sha256=
|
6
|
+
femagtools/bch.py,sha256=lw90KDHoC2NNHLYBupUXrJQRt-8yDeV-7usH4ZwkFJk,71680
|
7
7
|
femagtools/bchxml.py,sha256=KrRjAdrUPZXmiWvonu9HhpG_NvImMBpiXWTL4iSr4kE,3142
|
8
8
|
femagtools/condor.py,sha256=J8z9iBdvrGu3I1eFNoyKV8AXzRoTEPGLSak6cXUQxAM,10766
|
9
9
|
femagtools/conductor.py,sha256=rXO7c7Qh_s7JpgILmLd4IbG64vP6Eh143YF9u25Mdwg,1076
|
@@ -23,7 +23,7 @@ femagtools/gmsh.py,sha256=IKhNiviIBji4cMxAhxaYXNqBRMNAPSKsBGdnGyxkyQw,3903
|
|
23
23
|
femagtools/google.py,sha256=ugRyHY1zBjHR4aNfbA7GeF-ZU_NgleuVTZaWpi_XLT4,17144
|
24
24
|
femagtools/grid.py,sha256=s7LfKKLm2H4-cza2kSEANq6vwxq10Su3TJl3kHShHRA,1561
|
25
25
|
femagtools/hxy.py,sha256=PkiZ_-CRhtvtpkmLAP8iMtwvzh7CjKGGcAbOhFb4Nls,6275
|
26
|
-
femagtools/isa7.py,sha256=
|
26
|
+
femagtools/isa7.py,sha256=cUZx9fpxZgkw2G-cnveR-X-_lWP7Z1Q88MCysLl9MFI,58336
|
27
27
|
femagtools/jhb.py,sha256=stJxkmzHpfUIBVcFw7jWbV5KN9_EFqzOCgacyhUqWvM,1779
|
28
28
|
femagtools/job.py,sha256=dOatzr10nIda76CjVRSS0SfEWC8_BAw0kowli523qbY,11320
|
29
29
|
femagtools/losscoeffs.py,sha256=dlSYDS13RqpPHLdv_EPWIA9liwhqjbxUiN7t7GFPZhw,5397
|
@@ -53,16 +53,16 @@ femagtools/dxfsl/converter.py,sha256=6BCwlVp0PiSZ4Wj-YDgl7ynWNN2SBuwxw5VnNQ55Y9w
|
|
53
53
|
femagtools/dxfsl/corner.py,sha256=UI1MLlVmiTBURywsOnXnXV7eBABoENc6ortkW_3GYH8,1266
|
54
54
|
femagtools/dxfsl/dumprenderer.py,sha256=n4AvInjvGIaC2iKZtQaYXXDyJVSQ3uEOFOLD4-xfKRY,1861
|
55
55
|
femagtools/dxfsl/fslrenderer.py,sha256=C4oonLPzKb_9IKvpm-fMvbhQZqtP_7xWG5bzpq8P1CY,23377
|
56
|
-
femagtools/dxfsl/functions.py,sha256=
|
56
|
+
femagtools/dxfsl/functions.py,sha256=5G1MSAVaC4NOpQ_YBZ1SHPsmnvbQsnmg3rLjN3d5mBs,11463
|
57
57
|
femagtools/dxfsl/geom.py,sha256=bAZtk_GIO7anaBeZKZhWHGyt9L-t_F1YglCgRc0oU48,163051
|
58
|
-
femagtools/dxfsl/machine.py,sha256=
|
58
|
+
femagtools/dxfsl/machine.py,sha256=ftqLiwCyrzekUSvAOVD9AIM4hrPrIpId7PhLKwvSpWs,42158
|
59
59
|
femagtools/dxfsl/plotrenderer.py,sha256=dIOM8p3UNTlqypxuPcLCegOaK19j3-ahelZ8hneLJ6k,12710
|
60
60
|
femagtools/dxfsl/shape.py,sha256=4onAfXaVUWxC9C2WXVLYi3UH6w2lhUHxuLjdFgQOqks,48302
|
61
|
-
femagtools/machine/__init__.py,sha256=
|
61
|
+
femagtools/machine/__init__.py,sha256=U8W65K7jr7jDdC1KnJh0WjYd8DFaLnIFVvlh-TKcV94,7174
|
62
62
|
femagtools/machine/afpm.py,sha256=hNyDFRLGmCuWRPZl_u1ztJ4pA-Y_mxLaVvg3UJkzRuE,24766
|
63
|
-
femagtools/machine/effloss.py,sha256=
|
63
|
+
femagtools/machine/effloss.py,sha256=I8s2Fog6klhgcRYw3448qfGvzaQ0AQUJXFdNoeDyhfE,13138
|
64
64
|
femagtools/machine/im.py,sha256=ScIOLrlc4CPLYFNx2MmJqkpmbky_HXxFGZbMWUNGBrk,37881
|
65
|
-
femagtools/machine/pm.py,sha256=
|
65
|
+
femagtools/machine/pm.py,sha256=R8RWzQrMI_fNaUU7ruHnQxg3-Lubh1vp-6EG6z5QbRk,56229
|
66
66
|
femagtools/machine/sizing.py,sha256=aN_OahewjTTBHnpRNfLh1AGFhqnoeZVuMBeb_3MCIVI,23096
|
67
67
|
femagtools/machine/sm.py,sha256=pkik913kU41PPiUpwDy_6BEKfCIhvY6FEp-fbU2Lqew,34320
|
68
68
|
femagtools/machine/utils.py,sha256=g9q4j9KxUWdb_iUOUQDuaAwwJx8XM0kZMpgnwsNz8hU,18616
|
@@ -200,9 +200,9 @@ tests/moo/__init__.py,sha256=l8HD-AY8EwxOoo_VrG3HgEZb2MaHypvnhKCVSkR-DTA,808
|
|
200
200
|
tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
|
201
201
|
tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
|
202
202
|
tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
|
203
|
-
femagtools-1.6.
|
204
|
-
femagtools-1.6.
|
205
|
-
femagtools-1.6.
|
206
|
-
femagtools-1.6.
|
207
|
-
femagtools-1.6.
|
208
|
-
femagtools-1.6.
|
203
|
+
femagtools-1.6.2.dist-info/LICENSE,sha256=V5OED7AzEaOtvbfgNheKOSUeNtijvKQuo84FtSJNkJU,1316
|
204
|
+
femagtools-1.6.2.dist-info/METADATA,sha256=_Fn2D61D0C-a96X_49iBhYauUSoeaM6AAR28-QDL1is,5685
|
205
|
+
femagtools-1.6.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
206
|
+
femagtools-1.6.2.dist-info/entry_points.txt,sha256=UXpu6KnrykN89sCUaFAIIzn_dYwuxizUS0GcPdoekro,195
|
207
|
+
femagtools-1.6.2.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
|
208
|
+
femagtools-1.6.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|