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.

Potentially problematic release.


This version of pyfemtet might be problematic. Click here for more details.

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