PyFemtet 0.8.4__tar.gz → 0.8.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 (144) hide show
  1. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/PKG-INFO +1 -1
  2. pyfemtet-0.8.5/pyfemtet/__init__.py +1 -0
  3. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/_femopt.py +1 -1
  4. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/_test_utils/record_history.py +22 -15
  5. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/__init__.py +4 -1
  6. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_surrogate/_base.py +11 -11
  7. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_surrogate/_singletaskgp.py +4 -3
  8. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/prediction/single_task_gp.py +2 -0
  9. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyproject.toml +1 -1
  10. pyfemtet-0.8.4/pyfemtet/__init__.py +0 -1
  11. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/LICENSE +0 -0
  12. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/README.md +0 -0
  13. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_femtet_config_util/__init__.py +0 -0
  14. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_femtet_config_util/autosave.py +0 -0
  15. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_femtet_config_util/exit.py +0 -0
  16. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/1. make_pot.bat +0 -0
  17. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/2. make_mo.bat +0 -0
  18. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/__init__.py +0 -0
  19. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/babel.cfg +0 -0
  20. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/locales/ja/LC_MESSAGES/messages.mo +0 -0
  21. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/locales/ja/LC_MESSAGES/messages.po +0 -0
  22. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/locales/messages.pot +0 -0
  23. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_message/messages.py +0 -0
  24. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_util/__init__.py +0 -0
  25. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_util/dask_util.py +0 -0
  26. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_util/excel_macro_util.py +0 -0
  27. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_util/excel_parse_util.py +0 -0
  28. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_util/sample.xlsx +0 -0
  29. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/_warning.py +0 -0
  30. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/brep/__init__.py +0 -0
  31. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/brep/_impl.py +0 -0
  32. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/core.py +0 -0
  33. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/dispatch_extensions/__init__.py +0 -0
  34. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/dispatch_extensions/_impl.py +0 -0
  35. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/logger/__init__.py +0 -0
  36. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/logger/_impl.py +0 -0
  37. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/__init__.py +0 -0
  38. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/_femopt_core.py +0 -0
  39. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/_test_utils/__init__.py +0 -0
  40. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/_test_utils/control_femtet.py +0 -0
  41. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/_test_utils/hyper_sphere.py +0 -0
  42. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/excel_ui/(ref) original_project.femprj +0 -0
  43. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/excel_ui/femtet-macro.xlsm +0 -0
  44. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/excel_ui/pyfemtet-core.py +0 -0
  45. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/excel_ui/test-pyfemtet-core.cmd +0 -0
  46. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_create_training_data.py +0 -0
  47. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_create_training_data_jp.py +0 -0
  48. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_optimize_with_surrogate.py +0 -0
  49. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_optimize_with_surrogate_jp.py +0 -0
  50. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_parametric.femprj +0 -0
  51. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_base.py +0 -0
  52. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_excel_interface.py +0 -0
  53. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_femtet.py +0 -0
  54. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_femtet_parametric.py +0 -0
  55. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_femtet_with_nx/__init__.py +0 -0
  56. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_femtet_with_nx/_interface.py +0 -0
  57. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_femtet_with_nx/update_model.py +0 -0
  58. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_femtet_with_sldworks.py +0 -0
  59. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_surrogate/__init__.py +0 -0
  60. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/interface/_surrogate/_chaospy.py +0 -0
  61. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/__init__.py +0 -0
  62. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_base.py +0 -0
  63. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_optuna/__init__.py +0 -0
  64. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_optuna/_botorch_patch/__init__.py +0 -0
  65. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_optuna/_botorch_patch/enable_nonlinear_constraint.py +0 -0
  66. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_optuna/_optuna.py +0 -0
  67. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_optuna/_pof_botorch.py +0 -0
  68. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_scipy.py +0 -0
  69. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/_scipy_scalar.py +0 -0
  70. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/optimizer/parameter.py +0 -0
  71. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/prediction/__init__.py +0 -0
  72. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/prediction/_base.py +0 -0
  73. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/ParametricIF.femprj +0 -0
  74. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/ParametricIF.py +0 -0
  75. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/ParametricIF_test_result.reccsv +0 -0
  76. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.femprj +0 -0
  77. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.prt +0 -0
  78. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.py +0 -0
  79. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX_test_result.reccsv +0 -0
  80. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
  81. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.femprj +0 -0
  82. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.py +0 -0
  83. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW_test_result.reccsv +0 -0
  84. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/constrained_pipe.femprj +0 -0
  85. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/constrained_pipe.py +0 -0
  86. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/constrained_pipe_test_result.reccsv +0 -0
  87. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.femprj +0 -0
  88. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.py +0 -0
  89. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric_test_result.reccsv +0 -0
  90. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.femprj +0 -0
  91. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.py +0 -0
  92. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric_test_result.reccsv +0 -0
  93. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.femprj +0 -0
  94. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.py +0 -0
  95. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv +0 -0
  96. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.femprj +0 -0
  97. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.py +0 -0
  98. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_parallel.py +0 -0
  99. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_test_result.reccsv +0 -0
  100. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.femprj +0 -0
  101. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.py +0 -0
  102. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_parallel.py +0 -0
  103. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_test_result.reccsv +0 -0
  104. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.femprj +0 -0
  105. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.py +0 -0
  106. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
  107. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.py +0 -0
  108. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
  109. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.py +0 -0
  110. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/constrained_pipe_jp.py +0 -0
  111. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
  112. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.py +0 -0
  113. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
  114. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.py +0 -0
  115. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
  116. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.py +0 -0
  117. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
  118. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.py +0 -0
  119. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +0 -0
  120. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.femprj +0 -0
  121. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.py +0 -0
  122. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py +0 -0
  123. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/__init__.py +0 -0
  124. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_base.py +0 -0
  125. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/__init__.py +0 -0
  126. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/alert_region.py +0 -0
  127. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/control_femtet.py +0 -0
  128. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/main_figure_creator.py +0 -0
  129. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/main_graph.py +0 -0
  130. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/pm_graph.py +0 -0
  131. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_complex_components/pm_graph_creator.py +0 -0
  132. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_create_wrapped_components.py +0 -0
  133. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_process_monitor/__init__.py +0 -0
  134. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_process_monitor/application.py +0 -0
  135. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_process_monitor/pages.py +0 -0
  136. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_wrapped_components/__init__.py +0 -0
  137. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_wrapped_components/dbc.py +0 -0
  138. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_wrapped_components/dcc.py +0 -0
  139. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_wrapped_components/html.py +0 -0
  140. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/_wrapped_components/str_enum.py +0 -0
  141. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/result_viewer/.gitignore +0 -0
  142. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/result_viewer/__init__.py +0 -0
  143. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/result_viewer/application.py +0 -0
  144. {pyfemtet-0.8.4 → pyfemtet-0.8.5}/pyfemtet/opt/visualization/result_viewer/pages.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyfemtet
3
- Version: 0.8.4
3
+ Version: 0.8.5
4
4
  Summary: Design parameter optimization using Femtet.
5
5
  License: BSD-3-Clause
6
6
  Author: kazuma.naito
@@ -0,0 +1 @@
1
+ __version__ = "0.8.5"
@@ -403,7 +403,7 @@ class FEMOpt:
403
403
 
404
404
  if names is not None:
405
405
  if isinstance(names, str):
406
- names = [f'name_{i}' for i in range(n_return)]
406
+ names = [f'{names}_{i}' for i in range(n_return)]
407
407
  else:
408
408
  # names = names
409
409
  pass
@@ -59,32 +59,39 @@ def _get_obj_from_csv(csv_path, encoding=ENCODING):
59
59
  reader = csv.reader(f, delimiter=",")
60
60
  meta = reader.__next__()
61
61
  obj_indices = np.where(np.array(meta) == "obj")[0]
62
- out = df.iloc[:, obj_indices]
62
+ out: pd.DataFrame = df.iloc[:, obj_indices]
63
+ out = out.dropna(axis=0)
63
64
  return out, columns
64
65
 
65
66
 
66
- def is_equal_result(ref_path, dif_path, log_path):
67
+ def is_equal_result(ref_path, dif_path, log_path=None, threashold=0.05):
67
68
  """Check the equality of two result csv files."""
68
69
  ref_df, ref_columns = _get_obj_from_csv(ref_path)
69
70
  dif_df, dif_columns = _get_obj_from_csv(dif_path)
70
71
 
71
- with open(log_path, "a", newline="\n", encoding=ENCODING) as f:
72
- f.write("\n\n===== 結果の分析 =====\n\n")
73
- f.write(f" \tref\tdif\n")
74
- f.write(f"---------------------\n")
75
- f.write(f"len(col)\t{len(ref_columns)}\t{len(dif_columns)}\n")
76
- f.write(f"len(df) \t{len(ref_df)}\t{len(dif_df)}\n")
77
- try:
78
- difference = (
72
+ if log_path is not None:
73
+ with open(log_path, "a", newline="\n", encoding=ENCODING) as f:
74
+ f.write("\n\n===== 結果の分析 =====\n\n")
75
+ f.write(f" \tref\tdif\n")
76
+ f.write(f"---------------------\n")
77
+ f.write(f"len(col)\t{len(ref_columns)}\t{len(dif_columns)}\n")
78
+ f.write(f"len(df) \t{len(ref_df)}\t{len(dif_df)}\n")
79
+ try:
80
+ difference = (
81
+ np.abs(ref_df.values - dif_df.values) / np.abs(dif_df.values)
82
+ ).mean()
83
+ f.write(f"diff \t{int(difference*100)}%\n")
84
+ except Exception:
85
+ f.write(f"diff \tcannot calc\n")
86
+
87
+ else:
88
+ difference = (
79
89
  np.abs(ref_df.values - dif_df.values) / np.abs(dif_df.values)
80
- ).mean()
81
- f.write(f"diff \t{int(difference*100)}%\n")
82
- except Exception:
83
- f.write(f"diff \tcannot calc\n")
90
+ ).mean()
84
91
 
85
92
  assert len(ref_columns) == len(dif_columns), "結果 csv の column 数が異なります。"
86
93
  assert len(ref_df) == len(dif_df), "結果 csv の row 数が異なります。"
87
- assert difference <= 0.05, "前回の結果との平均差異が 5% を超えています。"
94
+ assert difference <= threashold*100, f"前回の結果との平均差異が {int(difference)}% で {int(threashold*100)}% を超えています。"
88
95
 
89
96
 
90
97
  def _get_simplified_df_values(csv_path, exclude_columns=None):
@@ -21,7 +21,9 @@ else:
21
21
  FemtetWithNXInterface = type('FemtetWithNXInterface', (FemtetInterface,), {})
22
22
  ExcelInterface = type('FemtetInterface', (NotAvailableForWindows,), {})
23
23
 
24
- from pyfemtet.opt.interface._surrogate import PoFBoTorchInterface
24
+ from pyfemtet.opt.interface._surrogate._base import SurrogateModelInterfaceBase
25
+ from pyfemtet.opt.interface._surrogate._singletaskgp import PoFBoTorchInterface
26
+
25
27
 
26
28
  __all__ =[
27
29
  'FEMInterface',
@@ -30,5 +32,6 @@ __all__ =[
30
32
  'FemtetWithSolidworksInterface',
31
33
  'FemtetWithNXInterface',
32
34
  'ExcelInterface',
35
+ 'SurrogateModelInterfaceBase',
33
36
  'PoFBoTorchInterface',
34
37
  ]
@@ -17,6 +17,7 @@ class SurrogateModelInterfaceBase(FEMInterface, ABC):
17
17
  self,
18
18
  history_path: str = None,
19
19
  history: History = None,
20
+ override_objective: bool = True,
20
21
  ):
21
22
 
22
23
  self.history: History
@@ -25,6 +26,7 @@ class SurrogateModelInterfaceBase(FEMInterface, ABC):
25
26
  self.obj: dict[str, float] = dict()
26
27
  self.df_prm: pd.DataFrame
27
28
  self.df_obj: pd.DataFrame
29
+ self.override_objective: bool = override_objective
28
30
 
29
31
  # history_path が与えられた場合、history をコンストラクトする
30
32
  if history_path is not None:
@@ -57,27 +59,25 @@ class SurrogateModelInterfaceBase(FEMInterface, ABC):
57
59
  FEMInterface.__init__(
58
60
  self,
59
61
  history=history, # コンストラクト済み history を渡せば並列計算時も何もしなくてよい
62
+ override_objective=self.override_objective
60
63
  )
61
64
 
62
65
  def filter_feasible(self, x: np.ndarray, y: np.ndarray, return_feasibility=False):
63
66
  feasible_idx = np.where(~np.isnan(y.sum(axis=1)))
64
67
  if return_feasibility:
65
68
  # calculated or not
66
- y = np.zeros_like(y)
67
- y[feasible_idx] = 1.
68
- # satisfy weak feasibility or not
69
- infeasible_idx = np.where(~self.history.get_df()['feasible'].values)
70
- y[infeasible_idx] = .0
71
- return x, y.reshape((-1, 1))
69
+ feas = np.zeros((len(y), 1), dtype=float)
70
+ feas[feasible_idx] = 1.
71
+ return x, feas
72
72
  else:
73
73
  return x[feasible_idx], y[feasible_idx]
74
74
 
75
75
  def _setup_after_parallel(self, *args, **kwargs):
76
-
77
- opt: AbstractOptimizer = kwargs['opt']
78
- obj: Objective
79
- for obj_name, obj in opt.objectives.items():
80
- obj.fun = lambda: self.obj[obj_name]
76
+ if self.override_objective:
77
+ opt: AbstractOptimizer = kwargs['opt']
78
+ obj: Objective
79
+ for obj_name, obj in opt.objectives.items():
80
+ obj.fun = lambda obj_name_=obj_name: self.obj[obj_name_]
81
81
 
82
82
  def update_parameter(self, parameters: pd.DataFrame, with_warning=False) -> Optional[List[str]]:
83
83
  for i, row in parameters.iterrows():
@@ -27,8 +27,8 @@ class PoFBoTorchInterface(SurrogateModelInterfaceBase):
27
27
  def train_f(self):
28
28
  # df そのまま用いて training する
29
29
  x, y = self.filter_feasible(self.df_prm.values, self.df_obj.values, return_feasibility=True)
30
- if y.min() == 1:
31
- self.model_f.predict = lambda *args, **kwargs: (1., 0.001)
30
+ if y.min() == 1: # feasible values only
31
+ self.model_f.predict = lambda *args, **kwargs: (1., 0.001) # mean, std
32
32
  self.model_f.fit(x, y)
33
33
 
34
34
  def _setup_after_parallel(self, *args, **kwargs):
@@ -64,7 +64,8 @@ class PoFBoTorchInterface(SurrogateModelInterfaceBase):
64
64
  raise SolveError(Msg.INFO_POF_IS_LESS_THAN_THRESHOLD)
65
65
 
66
66
  # 実際の計算(mean は history.obj_names 順)
67
- mean, _ = self.model.predict(np.array([x]))
67
+ _mean, _std = self.model.predict(np.array([x]))
68
+ mean = _mean[0]
68
69
 
69
70
  # 目的関数の更新
70
71
  self.obj = {obj_name: value for obj_name, value in zip(self.history.obj_names, mean)}
@@ -85,6 +85,8 @@ class SingleTaskGPModel(PredictionModelBase):
85
85
  fit_gpytorch_mll(mll)
86
86
 
87
87
  def predict(self, x: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
88
+ assert len(x.shape) >= 2
89
+
88
90
  X = tensor(x)
89
91
 
90
92
  post = self.gp.posterior(X)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pyfemtet"
3
- version = "0.8.4" # ignored by versioning plugin
3
+ version = "0.8.5" # ignored by versioning plugin
4
4
  description = "Design parameter optimization using Femtet."
5
5
  authors = ["kazuma.naito <kazuma.naito@murata.com>"]
6
6
  readme = "README.md"
@@ -1 +0,0 @@
1
- __version__ = "0.8.4"
File without changes
File without changes
File without changes
File without changes