femagtools 1.4.3__tar.gz → 1.4.5__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.
Files changed (212) hide show
  1. {femagtools-1.4.3/src/femagtools.egg-info → femagtools-1.4.5}/PKG-INFO +17 -3
  2. {femagtools-1.4.3 → femagtools-1.4.5}/pyproject.toml +1 -1
  3. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/__init__.py +6 -13
  4. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/airgap.py +5 -8
  5. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/amazon.py +1 -8
  6. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/amela.py +83 -95
  7. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/asm.py +1 -5
  8. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/bch.py +7 -13
  9. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/bchxml.py +23 -14
  10. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dakota.py +7 -12
  11. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dakota_femag.py +1 -1
  12. femagtools-1.4.5/src/femagtools/dxfsl/__init__.py +8 -0
  13. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/area.py +23 -3
  14. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/converter.py +1 -6
  15. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/machine.py +1 -6
  16. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/ecloss.py +66 -69
  17. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/femag.py +15 -20
  18. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/fsl.py +21 -21
  19. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/google.py +3 -3
  20. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/isa7.py +11 -3
  21. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/losscoeffs.py +29 -1
  22. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/__init__.py +5 -9
  23. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/afpm.py +66 -56
  24. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/effloss.py +36 -31
  25. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/im.py +31 -38
  26. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/pm.py +21 -6
  27. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/sizing.py +62 -16
  28. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/sm.py +24 -21
  29. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/machine/utils.py +24 -23
  30. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/mcv.py +29 -34
  31. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/model.py +19 -20
  32. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/algorithm.py +4 -6
  33. femagtools-1.4.5/src/femagtools/mxw2msh.py +86 -0
  34. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/nc.py +3 -0
  35. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/opt.py +3 -3
  36. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/parstudy.py +3 -3
  37. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/__init__.py +8 -3
  38. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/fluxdens.py +3 -4
  39. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/forcedens.py +6 -5
  40. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/mcv.py +1 -0
  41. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/nc.py +5 -1
  42. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/wdg.py +11 -13
  43. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/afm_rotor.mako +4 -5
  44. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/afm_stator.mako +14 -10
  45. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/gen_winding.mako +20 -20
  46. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetSector.mako +52 -0
  47. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/mesh-airgap.mako +21 -1
  48. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/therm-static.mako +5 -4
  49. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/ts.py +9 -17
  50. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/vtu.py +51 -68
  51. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/windings.py +8 -12
  52. {femagtools-1.4.3 → femagtools-1.4.5/src/femagtools.egg-info}/PKG-INFO +17 -3
  53. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools.egg-info/SOURCES.txt +1 -0
  54. {femagtools-1.4.3/src/femagtools/dxfsl → femagtools-1.4.5/src/tests}/__init__.py +0 -0
  55. femagtools-1.4.5/src/tests/test_mcv.py +10 -0
  56. femagtools-1.4.3/src/femagtools/mxw2msh.py +0 -77
  57. femagtools-1.4.3/src/tests/__init__.py +0 -0
  58. {femagtools-1.4.3 → femagtools-1.4.5}/LICENSE +0 -0
  59. {femagtools-1.4.3 → femagtools-1.4.5}/MANIFEST.in +0 -0
  60. {femagtools-1.4.3 → femagtools-1.4.5}/README.md +0 -0
  61. {femagtools-1.4.3 → femagtools-1.4.5}/setup.cfg +0 -0
  62. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/condor.py +0 -0
  63. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/conductor.py +0 -0
  64. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/config.py +0 -0
  65. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/convert.py +0 -0
  66. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dakotaout.py +0 -0
  67. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/docker.py +0 -0
  68. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/conv.py +0 -0
  69. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/corner.py +0 -0
  70. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/dumprenderer.py +0 -0
  71. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/fslrenderer.py +0 -0
  72. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/functions.py +0 -0
  73. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/geom.py +0 -0
  74. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/plotrenderer.py +0 -0
  75. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/dxfsl/shape.py +0 -0
  76. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/erg.py +0 -0
  77. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/forcedens.py +0 -0
  78. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/getset.py +0 -0
  79. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/gmsh.py +0 -0
  80. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/grid.py +0 -0
  81. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/hxy.py +0 -0
  82. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/jhb.py +0 -0
  83. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/job.py +0 -0
  84. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/magnet.py +0 -0
  85. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/me.py +0 -0
  86. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/__init__.py +0 -0
  87. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/population.py +0 -0
  88. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/problem.py +0 -0
  89. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/test/AlgorithmTest.py +0 -0
  90. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/test/PopulationTest.py +0 -0
  91. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moo/test/ProblemTest.py +0 -0
  92. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/moproblem.py +0 -0
  93. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/multiproc.py +0 -0
  94. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/netlist.py +0 -0
  95. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/ntib.py +0 -0
  96. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/bch.py +0 -0
  97. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/char.py +0 -0
  98. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/plot/phasor.py +0 -0
  99. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/poc.py +0 -0
  100. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/FE-losses.mako +0 -0
  101. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/airgapinduc.mako +0 -0
  102. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/asyn_motor.mako +0 -0
  103. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/basic_modpar.mako +0 -0
  104. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/calc_field_ts.mako +0 -0
  105. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/calc_therm_field.mako +0 -0
  106. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/cogg_calc.mako +0 -0
  107. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/colorgrad.mako +0 -0
  108. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/com_motor_sim.mako +0 -0
  109. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/conduct-data.mako +0 -0
  110. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/connect_models.mako +0 -0
  111. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/cu_losses.mako +0 -0
  112. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/ec-rotorbar.mako +0 -0
  113. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/fe-contr.mako +0 -0
  114. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/fieldcalc.mako +0 -0
  115. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/inductances.mako +0 -0
  116. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/ld_lq_fast.mako +0 -0
  117. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/leak_dist_wind.mako +0 -0
  118. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/leak_evol_wind.mako +0 -0
  119. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/leak_tooth_wind.mako +0 -0
  120. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnet-data.mako +0 -0
  121. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetFC2.mako +0 -0
  122. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetIron.mako +0 -0
  123. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetIron2.mako +0 -0
  124. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetIron3.mako +0 -0
  125. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetIron4.mako +0 -0
  126. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetIron5.mako +0 -0
  127. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetIronV.mako +0 -0
  128. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetSectorLinear.mako +0 -0
  129. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetShell.mako +0 -0
  130. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/magnetShell2.mako +0 -0
  131. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/modal_analysis.mako +0 -0
  132. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/mult_cal_fast.mako +0 -0
  133. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/new_model.mako +0 -0
  134. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/noloadflux-rot.mako +0 -0
  135. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/noloadflux.mako +0 -0
  136. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/noloadfluxdc.mako +0 -0
  137. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/open.mako +0 -0
  138. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/plots.mako +0 -0
  139. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/pm_sym_f_cur.mako +0 -0
  140. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/pm_sym_fast.mako +0 -0
  141. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/pm_sym_loss.mako +0 -0
  142. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/psd_psq_fast.mako +0 -0
  143. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/ring.mako +0 -0
  144. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/rot_hsm.mako +0 -0
  145. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/rotorAsyn.mako +0 -0
  146. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/rotorKs2.mako +0 -0
  147. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/rotor_msh.mako +0 -0
  148. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/rotor_winding.mako +0 -0
  149. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/shortcircuit.mako +0 -0
  150. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/srm.mako +0 -0
  151. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/stator1.mako +0 -0
  152. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/stator2.mako +0 -0
  153. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/stator3Linear.mako +0 -0
  154. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/stator4.mako +0 -0
  155. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/statorBG.mako +0 -0
  156. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/statorRing.mako +0 -0
  157. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/statorRotor3.mako +0 -0
  158. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/stator_msh.mako +0 -0
  159. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/therm-dynamic.mako +0 -0
  160. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/templates/torq_calc.mako +0 -0
  161. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/tks.py +0 -0
  162. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/utils.py +0 -0
  163. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools/vbf.py +0 -0
  164. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools.egg-info/dependency_links.txt +0 -0
  165. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools.egg-info/entry_points.txt +0 -0
  166. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools.egg-info/requires.txt +0 -0
  167. {femagtools-1.4.3 → femagtools-1.4.5}/src/femagtools.egg-info/top_level.txt +0 -0
  168. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/engines/__init__.py +0 -0
  169. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/engines/test_amazon.py +0 -0
  170. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/engines/test_config.py +0 -0
  171. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/geom/__init__.py +0 -0
  172. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/geom/test_functions.py +0 -0
  173. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/geom/test_point_inside.py +0 -0
  174. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/moo/__init__.py +0 -0
  175. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/moo/test_algorithm.py +0 -0
  176. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/moo/test_population.py +0 -0
  177. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/moo/test_problem.py +0 -0
  178. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_afpm.py +0 -0
  179. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_airgap_induction.py +0 -0
  180. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_amela.py +0 -0
  181. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_asm.py +0 -0
  182. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_bchreader.py +0 -0
  183. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_conductor.py +0 -0
  184. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_convert.py +0 -0
  185. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_effloss.py +0 -0
  186. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_erg.py +0 -0
  187. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_femag.py +0 -0
  188. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_forcedens.py +0 -0
  189. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_fsl.py +0 -0
  190. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_im.py +0 -0
  191. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_isa7.py +0 -0
  192. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_jhb.py +0 -0
  193. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_job.py +0 -0
  194. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_losscoeffs.py +0 -0
  195. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_machine.py +0 -0
  196. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_magncurv.py +0 -0
  197. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_magnet.py +0 -0
  198. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_mcvreader.py +0 -0
  199. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_mcvwriter.py +0 -0
  200. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_me.py +0 -0
  201. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_model.py +0 -0
  202. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_nc.py +0 -0
  203. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_parident.py +0 -0
  204. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_parstudy.py +0 -0
  205. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_pocfile.py +0 -0
  206. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_sizing.py +0 -0
  207. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_sm.py +0 -0
  208. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_tksreader.py +0 -0
  209. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_ts.py +0 -0
  210. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_vbfreader.py +0 -0
  211. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_vtu.py +0 -0
  212. {femagtools-1.4.3 → femagtools-1.4.5}/src/tests/test_windings.py +0 -0
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: femagtools
3
- Version: 1.4.3
3
+ Version: 1.4.5
4
4
  Summary: Python API for FEMAG
5
- Author-email: Ronald Tanner <tar@semafor.ch>, Dapu Zhang <d.zhan@gtisoft.com>, Beat Holm <hob@semafor.ch>, Günther Amsler <amg@semafor.ch>, Nicolas Mauchle <mau@semafor.ch>
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
7
7
  All rights reserved.
8
8
 
@@ -35,13 +35,27 @@ Classifier: License :: OSI Approved :: BSD License
35
35
  Classifier: Topic :: Scientific/Engineering
36
36
  Requires-Python: >=3.7
37
37
  Description-Content-Type: text/markdown
38
+ License-File: LICENSE
39
+ Requires-Dist: numpy
40
+ Requires-Dist: scipy
41
+ Requires-Dist: mako
42
+ Requires-Dist: six
43
+ Requires-Dist: lmfit
44
+ Requires-Dist: netCDF4
38
45
  Provides-Extra: dxfsl
46
+ Requires-Dist: lxml; extra == "dxfsl"
47
+ Requires-Dist: dxfgrabber; extra == "dxfsl"
48
+ Requires-Dist: networkx; extra == "dxfsl"
39
49
  Provides-Extra: mplot
50
+ Requires-Dist: matplotlib; extra == "mplot"
40
51
  Provides-Extra: meshio
52
+ Requires-Dist: meshio; extra == "meshio"
41
53
  Provides-Extra: vtk
54
+ Requires-Dist: vtk; extra == "vtk"
42
55
  Provides-Extra: zmq
56
+ Requires-Dist: pyzmq; extra == "zmq"
43
57
  Provides-Extra: test
44
- License-File: LICENSE
58
+ Requires-Dist: pytest; extra == "test"
45
59
 
46
60
 
47
61
  # Introduction to Femagtools
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
  name = "femagtools"
7
7
  authors = [
8
8
  {name = "Ronald Tanner", email = "tar@semafor.ch"},
9
- {name = "Dapu Zhang", email = "d.zhan@gtisoft.com"},
9
+ {name = "Dapu Zhang", email = "dzhang@gtisoft.com"},
10
10
  {name = "Beat Holm", email = "hob@semafor.ch"},
11
11
  {name = "Günther Amsler", email = "amg@semafor.ch"},
12
12
  {name = "Nicolas Mauchle", email = "mau@semafor.ch"}
@@ -1,15 +1,8 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- femagtools
4
- ~~~~~~~~~~
5
-
6
- Python bindings for FEMAG
7
-
8
-
1
+ """Python API for FEMAG
9
2
 
10
3
  """
11
4
  __title__ = 'femagtools'
12
- __version__ = '1.4.3'
5
+ __version__ = '1.4.5'
13
6
  __author__ = 'Ronald Tanner'
14
7
  __license__ = 'BSD'
15
8
  __copyright__ = 'Copyright 2016-2022 SEMAFOR Informatik & Energie AG'
@@ -37,12 +30,12 @@ def create_fsl(machine,
37
30
  magnetmat=[],
38
31
  condMat=[],
39
32
  templatedirs=[]):
40
- """create FSL command list from model parameters
33
+ """create FSL command list from model and operating parameters
41
34
 
42
35
  Args:
43
- machine: dict with parameters
44
- operatuingConditions: dict with parameters
45
- magnetmat: list fo dict with parameters
36
+ machine: dict with parameters (model)
37
+ operatingConditions: dict with parameters (simulation)
38
+ magnetmat: list fo dict with parameters (magnet material)
46
39
  templatedir: additional template directory
47
40
  """
48
41
  model = MachineModel(machine)
@@ -1,10 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- femagtools.airgap
4
- ~~~~~~~~~~~~~~~~~
5
-
6
- Read airgap dat file
7
-
1
+ """Read and analyze airgap dat file
8
2
 
9
3
  """
10
4
  import numpy as np
@@ -14,7 +8,7 @@ from . import utils
14
8
  logger = logging.getLogger(__name__)
15
9
 
16
10
 
17
- def fft(pos, b, pmod=0):
11
+ def fft(pos: list, b: list, pmod=0) -> dict:
18
12
  """calculate fft spectrum of flux density and return samples,
19
13
  values, amplitude and phase of base harmonic
20
14
 
@@ -22,6 +16,9 @@ def fft(pos, b, pmod=0):
22
16
  pos: (list of floats) sample positions
23
17
  b: (list of floats) flux density values
24
18
  pmod: number of poles in model (ignored if 0)
19
+
20
+ Returns:
21
+ A dict containing the FFT values Bamp, phi0, nue, B_nue
25
22
  """
26
23
  r = utils.fft(pos, b, pmod)
27
24
  Bamp = r['a']
@@ -1,11 +1,4 @@
1
- """
2
- femagtools.amazon
3
- ~~~~~~~~~~~~~~~~~
4
-
5
- Running FEMAG on Amazon Cloud EC2
6
-
7
-
8
-
1
+ """running FEMAG on Amazon cloud EC2
9
2
 
10
3
  .. note: To use this engine you have to install the boto3 module from amazon
11
4
  """
@@ -1,8 +1,5 @@
1
- '''
2
- femagtools.amela
3
- ~~~~~~~~~~~~~~~~
1
+ '''Calculate Magnet Losses with AMELA
4
2
 
5
- Calculate Magnet Losses with AMELA
6
3
  '''
7
4
  import sys
8
5
  import json
@@ -18,8 +15,8 @@ import subprocess
18
15
  logger = logging.getLogger(__name__)
19
16
 
20
17
  def geometry_id(bndx, bndy):
21
- '''identify the magnet geometry'''
22
- # caculate magnet area
18
+ '''identify the magnet geometry'''
19
+ # caculate magnet area
23
20
  xy = 0
24
21
  yx = 0
25
22
  for i in range(len(bndy)):
@@ -32,21 +29,21 @@ def geometry_id(bndx, bndy):
32
29
  area = np.abs(yx-xy)*0.5
33
30
 
34
31
  x0, y0 = np.mean(bndx), np.mean(bndy)
35
- distances = []
36
- for i in range(len(bndx)):
37
- for j in range(len(bndy)):
32
+ distances = []
33
+ for i in range(len(bndx)):
34
+ for j in range(len(bndy)):
38
35
  dist = np.sqrt((bndx[i] - bndx[j])**2 + (bndy[i] - bndy[j])**2)
39
36
  distances.append([dist, bndx[i], bndx[j], bndy[i], bndy[j]])
40
-
37
+
41
38
  distances.sort(reverse=True)
42
39
  xe = [distances[0][2], distances[2][1], distances[0][1], distances[2][2]]
43
40
  ye = [distances[0][4], distances[2][3], distances[0][3], distances[2][4]]
44
41
 
45
- # dimension
42
+ # dimension
46
43
  dim = np.zeros((3, 5))
47
44
  x1, y1 = xe[0], ye[0]
48
45
 
49
- for i in range(3):
46
+ for i in range(3):
50
47
  x2, y2 = xe[i+1], ye[i+1]
51
48
  dim[i, 0] = np.sqrt((x2-x1)**2 + (y2-y1)**2)
52
49
  dim[i, 1:3] = [x1, x2]
@@ -55,79 +52,75 @@ def geometry_id(bndx, bndy):
55
52
  dim = dim[np.lexsort((dim[:, 2], dim[:, 1], dim[:, 0]))]
56
53
  dx12, dy12 = dim[1, 1] - dim[1, 2], dim[1, 3] - dim[1, 4]
57
54
  dx14, dy14 = dim[0, 1] - dim[0, 2], dim[0, 3] - dim[0, 4]
58
-
55
+
59
56
  alp1 = np.arctan2(dy12, dx12)
60
57
  alp2 = np.arctan2(dy14, dx14)
61
58
 
62
59
  if alp1 < 0: alp1 += 2*np.pi
63
60
  if alp2 < 0: alp2 += 2*np.pi
64
- if alp2 < alp1:
61
+ if alp2 < alp1:
65
62
  alp2 += np.pi
66
63
  alpha = (alp1 + (alp2 - np.pi/2))/2
67
- else:
64
+ else:
68
65
  alpha = (alp1 + (alp2 - np.pi/2))/2 + np.pi
69
-
66
+
70
67
  wm = dim[1, 0]
71
- hm = area/wm
68
+ hm = area/wm
72
69
 
73
- return dict(wm=wm,
74
- hm=hm,
75
- x0=x0,
70
+ return dict(wm=wm,
71
+ hm=hm,
72
+ x0=x0,
76
73
  y0=y0,
77
- area=area,
74
+ area=area,
78
75
  alpha=alpha)
79
76
 
80
77
  def tf(b1, b2, alpha):
81
78
  '''Tranformation Matrix'''
82
- T = np.array([[cos(alpha), sin(alpha)],
83
- [-sin(alpha), cos(alpha)]])
84
- if b1.ndim > 1:
79
+ T = np.array([[cos(alpha), sin(alpha)],
80
+ [-sin(alpha), cos(alpha)]])
81
+ if b1.ndim > 1:
85
82
  r = T.dot(((b1.ravel()), (b2.ravel())))
86
- return [r[0, :].reshape(*b1.shape),
83
+ return [r[0, :].reshape(*b1.shape),
87
84
  r[1, :].reshape(*b1.shape)]
88
- else:
85
+ else:
89
86
  return T.dot(((b1), (b2)))
90
87
 
91
- def transform_coord(geometry, xcp, ycp):
88
+ def transform_coord(geometry, xcp, ycp):
92
89
  '''transform from global coord to local coord'''
93
- # transformation
94
- elcp = tf(b1=np.array(xcp)-geometry['x0'],
95
- b2=np.array(ycp)-geometry['y0'],
90
+ # transformation
91
+ elcp = tf(b1=np.array(xcp)-geometry['x0'],
92
+ b2=np.array(ycp)-geometry['y0'],
96
93
  alpha=geometry['alpha'])
97
- return dict(excpl=elcp[0, :]+geometry['wm']/2,
98
- eycpl=elcp[1, :]+geometry['hm']/2,
99
- excp=np.array(xcp),
94
+ return dict(excpl=elcp[0, :]+geometry['wm']/2,
95
+ eycpl=elcp[1, :]+geometry['hm']/2,
96
+ excp=np.array(xcp),
100
97
  eycp=np.array(ycp))
101
98
 
102
- def transform_flux_denstiy(geometry, bx, by):
99
+ def transform_flux_denstiy(geometry, bx, by):
103
100
  '''transform the magnet flux density to local coordinate system'''
104
- # transformation
105
- bxy = tf(b1=bx,
106
- b2=by,
101
+ # transformation
102
+ bxy = tf(b1=bx,
103
+ b2=by,
107
104
  alpha=geometry['alpha'])
108
105
 
109
106
  # remove DC component
110
107
  bxf = np.mean(bxy[0].T - np.mean(bxy[0],axis=1).T,axis=1)
111
- byf = np.mean(bxy[1].T - np.mean(bxy[1],axis=1).T,axis=1)
112
-
108
+ byf = np.mean(bxy[1].T - np.mean(bxy[1],axis=1).T,axis=1)
109
+
113
110
  return dict(bxl=bxy[0],
114
111
  byl=bxy[1],
115
- bxf=bxf,
116
- byf=byf
112
+ bxf=bxf,
113
+ byf=byf
117
114
  )
118
115
 
119
116
  class Amela():
120
117
  '''Run Amela Calculation
121
- Parameters
122
- ----------
123
- workdir : str
124
- working directory of femag calculation
125
- (The directory that the nc file)
126
- amela_dir: str (optional)
127
- amela directory
128
- magnet_data : dict
129
- calculation control
130
- -- name must be provided
118
+
119
+ Args:
120
+ workdir : working directory of femag calculation
121
+ (The directory that includes the nc file)
122
+ amela_dir: str (optional) amela directory
123
+ magnet_data : calculation control name must be provided
131
124
  dict(name='test',
132
125
  -- the following parameters are optional
133
126
  mur=1.05,
@@ -135,18 +128,18 @@ class Amela():
135
128
  hm=3,
136
129
  wm=20,
137
130
  lm=30,
138
- speed=1000,
139
- nsegwid=0,
131
+ speed=1000,
132
+ nsegwid=0,
140
133
  nseglen=0)
141
134
  '''
142
135
 
143
- def __init__(self, workdir, magnet_data, amela_dir=None):
136
+ def __init__(self, workdir: str, magnet_data: dict, amela_dir=None):
144
137
 
145
138
  self.magn = magnet_data
146
139
  self.workdir = pathlib.Path(workdir)
147
- if amela_dir is not None:
140
+ if amela_dir is not None:
148
141
  self.amela_dir = pathlib.Path(amela_dir)
149
- else:
142
+ else:
150
143
  self.amela_dir = self.workdir
151
144
 
152
145
  self.jsonfile = []
@@ -154,7 +147,7 @@ class Amela():
154
147
  self.cmd = [str(self.amela_dir / 'AMELA.BAT')]
155
148
  else:
156
149
  self.cmd = [str(self.amela_dir / 'AMELA')]
157
- # default batch
150
+ # default batch
158
151
  self.cmd.append('--b')
159
152
  # append calc options
160
153
  if 'speed' in self.magn:
@@ -164,14 +157,15 @@ class Amela():
164
157
  if 'nseglen' in self.magn:
165
158
  self.cmd.append(f"--nseglen {self.magn['nseglen']}")
166
159
 
167
- def get_magnet_data(self, ibeta=None):
160
+ def get_magnet_data(self, ibeta=None) -> list:
168
161
  '''Extract magnet data from nc file
169
- Parameters
170
- ----------
171
- None
172
- Returns
173
- ----------
174
- pm_data: list of magnet data
162
+
163
+ Args:
164
+ ibeta: load case
165
+
166
+ Returns:
167
+ pm_data: list of magnet data
168
+
175
169
  '''
176
170
  nc_name = self.workdir / self.magn['name']
177
171
  r = femagtools.nc.read(nc_name)
@@ -194,7 +188,7 @@ class Amela():
194
188
  wm = []
195
189
  hm = []
196
190
  alpha = []
197
- x0 = []
191
+ x0 = []
198
192
  y0 = []
199
193
  geometry = []
200
194
  elcp = []
@@ -255,7 +249,7 @@ class Amela():
255
249
  poles = 0
256
250
  try:
257
251
  poles = r.num_poles
258
- except:
252
+ except AttributeError:
259
253
  pass
260
254
 
261
255
  # read mesh and flux density
@@ -279,7 +273,6 @@ class Amela():
279
273
  elcp.append(transform_coord(geometry[i], xcp[i], ycp[i]))
280
274
  bl.append(transform_flux_denstiy(geometry[i], bx[i][0], by[i][0]))
281
275
 
282
-
283
276
  if poles == 0:
284
277
  freq = self.magn.get('f', r.speed)
285
278
  time_vec = np.linspace(0, 1/freq, len(r.pos_el_fe_induction))
@@ -314,7 +307,7 @@ class Amela():
314
307
  bndy=[float(c) for c in bndy[i]],
315
308
  bl=bl[i],
316
309
  elcp=elcp[i],
317
- area=spel_area[i],
310
+ area=spel_area[i],
318
311
  spel_key=spel_key[i]))
319
312
  pm_data[i].update(pos)
320
313
 
@@ -340,7 +333,7 @@ class Amela():
340
333
  else:
341
334
  return [pm_data[0]]
342
335
 
343
- def get_magnet_data_all(self, num_op):
336
+ def get_magnet_data_all(self, num_op):
344
337
  '''get all magnet data for all loadcases'''
345
338
  pm_data = []
346
339
  for i in num_op:
@@ -348,15 +341,12 @@ class Amela():
348
341
  pm_data.append(pmd)
349
342
  return pm_data
350
343
 
351
- def export_json(self, pm_data):
344
+ def export_json(self, pm_data: list):
352
345
  '''Export magnet data to json files
353
- Parameters
354
- ----------
355
- pm_data: list of magnet data
356
- Returns
357
- ----------
358
- None
359
- ----------
346
+
347
+ Args:
348
+ pm_data: list of magnet data
349
+
360
350
  '''
361
351
  pm_dir = self.amela_dir / self.magn['name']
362
352
  pm_dir.mkdir(exist_ok=True)
@@ -370,15 +360,14 @@ class Amela():
370
360
  json.dump(i, f)
371
361
  logger.info('Exporting %s ...', i['name'])
372
362
 
373
- def read_loss(self, pm_data):
363
+ def read_loss(self, pm_data: dict) -> dict:
374
364
  '''Read magnet losses
375
- Parameters
376
- ----------
377
- pm_data : dict
378
- Returns
379
- ----------
380
- losses : dict
381
- ----------
365
+
366
+ Args:
367
+ pm_data : dict
368
+
369
+ Returns:
370
+ losses
382
371
  '''
383
372
  losses = {}
384
373
  for i in range(len(pm_data)):
@@ -387,27 +376,26 @@ class Amela():
387
376
  result_name = self.amela_dir / dirname
388
377
  with result_name.open() as f:
389
378
  data = np.loadtxt(f)
390
- total_loss = np.mean(data[0:-1, -1])
379
+ total_loss = np.mean(data[0:-1, -1])
391
380
  losses[pm_data[i]['name']] = {"loss_data":data, "total_loss": total_loss}
392
381
  logger.info("Magnet losses in superelement %s is %.3f W",
393
382
  pm_data[i]['name'].split('se')[-1], total_loss)
394
383
  return losses
395
384
 
396
- def __call__(self, ialh=False):
385
+ def __call__(self, ialh=False) -> dict:
397
386
  '''Run amela calculation
398
- Parameters
399
- ----------
400
- None
401
- Returns
402
- ----------
403
- losses : dict
404
- ----------
387
+
388
+ Args:
389
+ ialh: use method IALH if True else 3DI
390
+
391
+ Returns:
392
+ losses
405
393
  '''
406
394
  # get magnet data
407
395
  r = self.get_magnet_data()
408
396
  # export to json
409
397
  self.export_json(r)
410
- # run amela
398
+ # run amela
411
399
  calc_method = 'IALH' if ialh else '3DI'
412
400
  cmd = self.cmd + ['--calc', calc_method, self.magn['name'] + '/']
413
401
  log_file = self.amela_dir / 'amela.out'
@@ -1,9 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- """
3
- femagtools.asm
4
- ~~~~~~~~~~~~~~
5
-
6
- Reading ASM files
2
+ """ Read ASM files
7
3
 
8
4
  Slots Qr:
9
5
 
@@ -1,11 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- """
3
- femagtools.bch
4
- ~~~~~~~~~~~~~~
5
-
6
- Reading BCH/BATCH files
7
-
8
-
2
+ """read BCH/BATCH files
9
3
 
10
4
  """
11
5
  import sys
@@ -442,7 +436,7 @@ class Reader:
442
436
 
443
437
  def __read_current_angles(self, content):
444
438
  self.current_angles = []
445
- r = []
439
+ r = []
446
440
  extracting = False
447
441
  for l in content:
448
442
  rec = self.__findNums(l)
@@ -450,10 +444,10 @@ class Reader:
450
444
  self.current_angles.append(floatnan(rec[-1]))
451
445
  if l.strip().startswith('Optimization of angle'):
452
446
  extracting = True
453
- elif l.strip().startswith('Optimimal angle I'):
447
+ elif l.strip().startswith('Optimimal angle I'):
454
448
  break
455
- else:
456
- if extracting:
449
+ else:
450
+ if extracting:
457
451
  if l.strip() == '' or \
458
452
  l.strip().startswith('Angle [Degr'):
459
453
  pass
@@ -461,7 +455,7 @@ class Reader:
461
455
  tmp = l.split('\t')
462
456
  r.append([floatnan(k) for k in tmp])
463
457
  if len(r) > 1:
464
- self.torque_opt.append({'beta': [i[0] for i in r],
458
+ self.torque_opt.append({'beta': [i[0] for i in r],
465
459
  'torque': [i[1] for i in r]})
466
460
  return
467
461
 
@@ -1630,7 +1624,7 @@ class Reader:
1630
1624
 
1631
1625
  except:
1632
1626
  pass
1633
-
1627
+
1634
1628
  def get(self, name, r=None):
1635
1629
  """return value of key name
1636
1630
  name can be a list such as ['torque[1]', 'ripple']
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env python
2
- #
3
- # convert bch to xml
4
- #
5
- # Author: Ronald Tanner
6
- # 2016-10-20
7
- #
2
+ """convert bch to xml
3
+
4
+ """
8
5
  import sys
9
6
  import re
10
7
  import io
@@ -17,9 +14,15 @@ def usage():
17
14
  sys.exit(1)
18
15
 
19
16
 
20
- def list_to_xml(tag, l):
21
- '''
22
- Turn a list into XML
17
+ def list_to_xml(tag: str, l: list) -> el.Element:
18
+ '''convert a list into XML
19
+
20
+ Args:
21
+ tag: name of element
22
+ l: list of values
23
+
24
+ Returns:
25
+ xml element with tag and values
23
26
  '''
24
27
 
25
28
  if not isinstance(tag, str):
@@ -43,9 +46,15 @@ def list_to_xml(tag, l):
43
46
  return elem
44
47
 
45
48
 
46
- def dict_to_xml(tag, d):
47
- '''
48
- Turn a simple dict of key/value pairs into XML
49
+ def dict_to_xml(tag: str, d: dict) -> el.Element:
50
+ '''convert a simple dict of key/value pairs into XML
51
+
52
+ Args:
53
+ tag: name of element
54
+ d: dict of values
55
+
56
+ Returns:
57
+ xml element of d
49
58
  '''
50
59
 
51
60
  if not isinstance(tag, str):
@@ -70,7 +79,7 @@ def dict_to_xml(tag, d):
70
79
 
71
80
 
72
81
  def main():
73
- import argparse
82
+ import argparse
74
83
  from .__init__ import __version__
75
84
  from femagtools.bch import Reader
76
85
 
@@ -88,7 +97,7 @@ def main():
88
97
  args = argparser.parse_args()
89
98
  if not args.filename:
90
99
  sys.exit(0)
91
-
100
+
92
101
  bchresults = Reader()
93
102
  with io.open(args.filename, encoding='latin1', errors='ignore') as f:
94
103
  bchresults.read(f.readlines())
@@ -27,36 +27,31 @@ logger = logging.getLogger(__name__)
27
27
  use_asyncio = True
28
28
 
29
29
 
30
- @asyncio.coroutine
31
- def read_stream_and_display(stream, display):
30
+ async def read_stream_and_display(stream, display):
32
31
  """Read from stream line by line until EOF, display, and capture the lines.
33
32
 
34
33
  """
35
34
  output = []
36
- while True:
37
- line = yield from stream.readline()
38
- if not line:
39
- break
35
+ async for line in stream.readline():
40
36
  output.append(line)
41
37
  display(line) # assume it doesn't block
42
38
  return b''.join(output)
43
39
 
44
40
 
45
- @asyncio.coroutine
46
- def read_and_display(*cmd, cwd):
41
+ async def read_and_display(*cmd, cwd):
47
42
  """Capture cmd's stdout, stderr while displaying them as they arrive
48
43
  (line by line).
49
44
 
50
45
  """
51
46
  # start process
52
- process = yield from asyncio.create_subprocess_exec(*cmd, cwd=cwd,
53
- stdout=PIPE, stderr=PIPE)
47
+ process = await asyncio.create_subprocess_exec(*cmd, cwd=cwd,
48
+ stdout=PIPE, stderr=PIPE)
54
49
 
55
50
  def nodisplay(l):
56
51
  return
57
52
  # read child's stdout/stderr concurrently (capture and display)
58
53
  try:
59
- stdout, stderr = yield from asyncio.gather(
54
+ stdout, stderr = asyncio.gather(
60
55
  read_stream_and_display(process.stdout, nodisplay),
61
56
  read_stream_and_display(process.stderr, sys.stderr.buffer.write))
62
57
  except Exception:
@@ -64,7 +59,7 @@ def read_and_display(*cmd, cwd):
64
59
  raise
65
60
  finally:
66
61
  # wait for the process to exit
67
- rc = yield from process.wait()
62
+ rc = process.wait()
68
63
  return rc, stdout, stderr
69
64
 
70
65
 
@@ -6,7 +6,6 @@ import sys
6
6
  import pathlib
7
7
  import logging
8
8
  import femagtools.grid
9
- import model
10
9
  import importlib
11
10
  import os
12
11
 
@@ -73,6 +72,7 @@ def read_paramsin(p):
73
72
 
74
73
 
75
74
  if __name__ == '__main__':
75
+ import model
76
76
  logging.basicConfig(level=logging.INFO,
77
77
  format='%(asctime)s %(message)s')
78
78
 
@@ -0,0 +1,8 @@
1
+ """
2
+ femagtools.dxfsl
3
+ ~~~~~~~~~~~~~~~~
4
+
5
+ convert dxf to fsl
6
+
7
+
8
+ """