PyFemtet 1.8.3__tar.gz → 1.9.1__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 (183) hide show
  1. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/PKG-INFO +1 -1
  2. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/femopt.py +9 -144
  3. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/_history.py +111 -9
  4. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_base_interface.py +10 -0
  5. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/excel_interface.py +0 -4
  6. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/_femtet_parametric.py +7 -7
  7. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/femtet_interface.py +13 -1
  8. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py +1 -1
  9. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/_base_optimizer.py +149 -62
  10. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyproject.toml +1 -1
  11. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/LICENSE +0 -0
  12. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/LICENSE_THIRD_PARTY.txt +0 -0
  13. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/README.md +0 -0
  14. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/__init__.py +0 -0
  15. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/1. make_pot_and_update_po.bat +0 -0
  16. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/2. build_mo.bat +0 -0
  17. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/__init__.py +0 -0
  18. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/babel.cfg +0 -0
  19. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/i18n.py +0 -0
  20. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  21. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po +0 -0
  22. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/locales/messages.pot +0 -0
  23. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/messages.py +0 -0
  24. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/__init__.py +0 -0
  25. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/closing.py +0 -0
  26. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/dask_util.py +0 -0
  27. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/df_util.py +0 -0
  28. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/excel_macro_util.py +0 -0
  29. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/excel_parse_util.py +0 -0
  30. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_access_inspection.py +0 -0
  31. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_autosave.py +0 -0
  32. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_exit.py +0 -0
  33. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_version.py +0 -0
  34. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/helper.py +0 -0
  35. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/process_util.py +0 -0
  36. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/sample.xlsx +0 -0
  37. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/solidworks_variable.py +0 -0
  38. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/str_enum.py +0 -0
  39. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/symbol_support_for_param_name.py +0 -0
  40. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/core.py +0 -0
  41. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/dispatch_extensions/__init__.py +0 -0
  42. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/dispatch_extensions/_impl.py +0 -0
  43. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/logger/__init__.py +0 -0
  44. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/logger/_impl.py +0 -0
  45. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/__init__.py +0 -0
  46. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/exceptions.py +0 -0
  47. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/__init__.py +0 -0
  48. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/_hypervolume.py +0 -0
  49. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/_optimality.py +0 -0
  50. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/__init__.py +0 -0
  51. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_dummy_classes.py +0 -0
  52. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/__init__.py +0 -0
  53. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm +0 -0
  54. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/__init__.py +0 -0
  55. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/__init__.py +0 -0
  56. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py +0 -0
  57. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/model1.prt +0 -0
  58. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/model1.x_t +0 -0
  59. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/update_model.py +0 -0
  60. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_solidworks/__init__.py +0 -0
  61. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py +0 -0
  62. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_multiple_fem_interface.py +0 -0
  63. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_reopen_decorator.py +0 -0
  64. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_solidworks_interface/__init__.py +0 -0
  65. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_solidworks_interface/solidworks_interface.py +0 -0
  66. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_solidworks_interface/sw_const.py +0 -0
  67. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/__init__.py +0 -0
  68. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py +0 -0
  69. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/debug-pof-botorch.reccsv +0 -0
  70. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_with_excel_settings/__init__.py +0 -0
  71. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_with_excel_settings/with_excel_settings.py +0 -0
  72. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/YAML_Generator.xlsm +0 -0
  73. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/__init__.py +0 -0
  74. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/__main__.py +0 -0
  75. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/sample/sample.bas +0 -0
  76. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/sample/sample.femprj +0 -0
  77. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/__init__.py +0 -0
  78. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/_trial_queue.py +0 -0
  79. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/__init__.py +0 -0
  80. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py +0 -0
  81. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py +0 -0
  82. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py +0 -0
  83. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv +0 -0
  84. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py +0 -0
  85. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +0 -0
  86. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj +0 -0
  87. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/scipy_optimizer/__init__.py +0 -0
  88. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py +0 -0
  89. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/__init__.py +0 -0
  90. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_botorch_utils.py +0 -0
  91. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_gpytorch_modules_extension.py +0 -0
  92. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_helper.py +0 -0
  93. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_model.py +0 -0
  94. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/__init__.py +0 -0
  95. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/problem.py +0 -0
  96. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/variable_manager/__init__.py +0 -0
  97. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/variable_manager/_string_as_expression.py +0 -0
  98. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/variable_manager/_variable_manager.py +0 -0
  99. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/__init__.py +0 -0
  100. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/_create_wrapped_components.py +0 -0
  101. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/__init__.py +0 -0
  102. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/__main__.py +0 -0
  103. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_base_application.py +0 -0
  104. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_common_pages.py +0 -0
  105. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/__init__.py +0 -0
  106. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/alert_region.py +0 -0
  107. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/control_femtet.py +0 -0
  108. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/detail_graphs.py +0 -0
  109. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/main_graph.py +0 -0
  110. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/pm_graph.py +0 -0
  111. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_detail_page.py +0 -0
  112. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_helper.py +0 -0
  113. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_process_monitor/__init__.py +0 -0
  114. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_process_monitor/_application.py +0 -0
  115. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_process_monitor/_pages.py +0 -0
  116. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/__init__.py +0 -0
  117. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/dbc.py +0 -0
  118. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/dcc.py +0 -0
  119. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/html.py +0 -0
  120. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/str_enum.py +0 -0
  121. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/.gitignore +0 -0
  122. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/__init__.py +0 -0
  123. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/__main__.py +0 -0
  124. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/_application.py +0 -0
  125. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/_pages.py +0 -0
  126. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.csv +0 -0
  127. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.db +0 -0
  128. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.jpg +0 -0
  129. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.log +0 -0
  130. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.pdt +0 -0
  131. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.jpg +0 -0
  132. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.pdt +0 -0
  133. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.jpg +0 -0
  134. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.pdt +0 -0
  135. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.jpg +0 -0
  136. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.pdt +0 -0
  137. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.jpg +0 -0
  138. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.pdt +0 -0
  139. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.jpg +0 -0
  140. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.pdt +0 -0
  141. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.jpg +0 -0
  142. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.pdt +0 -0
  143. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.jpg +0 -0
  144. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.pdt +0 -0
  145. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.jpg +0 -0
  146. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.pdt +0 -0
  147. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.jpg +0 -0
  148. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.pdt +0 -0
  149. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.jpg +0 -0
  150. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.pdt +0 -0
  151. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.jpg +0 -0
  152. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.pdt +0 -0
  153. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.jpg +0 -0
  154. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.pdt +0 -0
  155. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.jpg +0 -0
  156. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.pdt +0 -0
  157. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.jpg +0 -0
  158. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.pdt +0 -0
  159. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bgr +0 -0
  160. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bnd +0 -0
  161. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.btr +0 -0
  162. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.jpg +0 -0
  163. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.mtl +0 -0
  164. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.pdt +0 -0
  165. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.prm +0 -0
  166. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.jpg +0 -0
  167. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.pdt +0 -0
  168. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.jpg +0 -0
  169. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.pdt +0 -0
  170. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.jpg +0 -0
  171. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.pdt +0 -0
  172. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.jpg +0 -0
  173. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.pdt +0 -0
  174. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.jpg +0 -0
  175. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.pdt +0 -0
  176. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.femprj +0 -0
  177. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/__init__.py +0 -0
  178. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/contour_creator.py +0 -0
  179. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/main_figure_creator.py +0 -0
  180. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/parallel_plot_creator.py +0 -0
  181. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/pm_graph_creator.py +0 -0
  182. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/wat_ex14_parametric_jp.femprj +0 -0
  183. {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/worker_status.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyfemtet
3
- Version: 1.8.3
3
+ Version: 1.9.1
4
4
  Summary: Design parameter optimization using Femtet.
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -49,8 +49,8 @@ class FEMOpt:
49
49
 
50
50
  def __init__(
51
51
  self,
52
- fem: AbstractFEMInterface = None,
53
- opt: AbstractOptimizer = None,
52
+ fem: AbstractFEMInterface | None = None,
53
+ opt: AbstractOptimizer | None = None,
54
54
  ):
55
55
  self.opt: AbstractOptimizer = opt or OptunaOptimizer()
56
56
 
@@ -160,7 +160,7 @@ class FEMOpt:
160
160
  names: str | list[str],
161
161
  fun: Callable[..., Sequence[float]],
162
162
  n_return: int,
163
- directions: DIRECTION | Sequence[DIRECTION] = None,
163
+ directions: DIRECTION | Sequence[DIRECTION] | None = None,
164
164
  args: tuple | None = None,
165
165
  kwargs: dict | None = None,
166
166
  ):
@@ -208,7 +208,7 @@ class FEMOpt:
208
208
  ):
209
209
  self.opt.set_termination_condition(func)
210
210
 
211
- def set_monitor_host(self, host: str = None, port: int = None):
211
+ def set_monitor_host(self, host: str | None = None, port: int | None = None):
212
212
  """Sets the host IP address and the port of the process monitor.
213
213
 
214
214
  Args:
@@ -240,14 +240,14 @@ class FEMOpt:
240
240
 
241
241
  def optimize(
242
242
  self,
243
- n_trials: int = None,
243
+ n_trials: int | None = None,
244
244
  n_parallel: int = 1,
245
- timeout: float = None,
245
+ timeout: float | None = None,
246
246
  wait_setup: bool = True,
247
247
  confirm_before_exit: bool = True,
248
- history_path: str = None,
248
+ history_path: str | None = None,
249
249
  with_monitor: bool = True,
250
- scheduler_address: str = None,
250
+ scheduler_address: str | None = None,
251
251
  seed: int | None = None,
252
252
  ):
253
253
 
@@ -258,7 +258,7 @@ class FEMOpt:
258
258
  ver=pyfemtet.__version__,
259
259
  )
260
260
  )
261
- client: Client
261
+ client: Client | DummyClient
262
262
 
263
263
  # set arguments
264
264
  self.opt.n_trials = n_trials or self.opt.n_trials
@@ -274,7 +274,6 @@ class FEMOpt:
274
274
  worker_name_base = 'Sub'
275
275
  if n_parallel == 1:
276
276
  cluster = nullcontext()
277
- # noinspection PyTypeChecker
278
277
  client = DummyClient()
279
278
 
280
279
  else:
@@ -534,137 +533,3 @@ class FEMOpt:
534
533
  logger.info(_('All processes are terminated.'))
535
534
 
536
535
  return df
537
-
538
-
539
- def debug_1():
540
- # noinspection PyUnresolvedReferences
541
- from time import sleep
542
- # from pyfemtet.opt.optimizer import InterruptOptimization
543
- import optuna
544
- from pyfemtet.opt.interface import AbstractFEMInterface, NoFEM
545
-
546
- def _parabola(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
547
- x = _opt.get_variables('values')
548
- # print(os.getpid())
549
- # raise RuntimeError
550
- # raise Interrupt
551
- # if get_worker() is None:
552
- # raise RuntimeError
553
- return (x ** 2).sum()
554
-
555
- def _cns(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
556
- x = _opt.get_variables('values')
557
- return x[0]
558
-
559
- _opt = OptunaOptimizer()
560
- _opt.sampler = optuna.samplers.TPESampler(seed=42)
561
- _opt.n_trials = 10
562
-
563
- _fem = NoFEM()
564
- _opt.fem = _fem
565
-
566
- _args = (_opt,)
567
-
568
- _opt.add_parameter('x1', 1, -1, 1, step=0.2)
569
- _opt.add_parameter('x2', 1, -1, 1, step=0.2)
570
-
571
- _opt.add_constraint('cns', _cns, lower_bound=-0.5, args=_args)
572
-
573
- _opt.add_objective('obj', _parabola, args=_args)
574
-
575
- _femopt = FEMOpt(fem=_fem, opt=_opt)
576
- _femopt.opt = _opt
577
- # _femopt.opt.history.path = 'v1test/femopt-restart-test.csv'
578
- _femopt.optimize(n_parallel=2)
579
-
580
- print(os.path.abspath(_femopt.opt.history.path))
581
-
582
-
583
- def substrate_size(Femtet):
584
- """基板のXY平面上での専有面積を計算します。"""
585
- substrate_w = Femtet.GetVariableValue('substrate_w')
586
- substrate_d = Femtet.GetVariableValue('substrate_d')
587
-
588
- # assert get_worker() is not None
589
-
590
- return substrate_w * substrate_d # 単位: mm2
591
-
592
-
593
- def debug_2():
594
- from pyfemtet.opt.interface import FemtetInterface
595
- from pyfemtet.opt.optimizer import OptunaOptimizer
596
-
597
- fem = FemtetInterface(
598
- femprj_path=os.path.join(os.path.dirname(__file__), 'wat_ex14_parametric_jp.femprj'),
599
- )
600
-
601
- opt = OptunaOptimizer()
602
-
603
- opt.fem = fem
604
-
605
- opt.add_parameter(name="substrate_w", initial_value=40, lower_bound=22, upper_bound=60)
606
- opt.add_parameter(name="substrate_d", initial_value=60, lower_bound=34, upper_bound=60)
607
- opt.add_objective(name='基板サイズ(mm2)', fun=substrate_size)
608
- opt.add_objective(name='obj2', fun=substrate_size)
609
- opt.add_objective(name='obj3', fun=substrate_size)
610
-
611
- opt.n_trials = 10
612
- # opt.history.path = os.path.join(os.path.dirname(__file__), 'femtet-test.csv')
613
-
614
- femopt = FEMOpt()
615
-
616
- femopt.opt = opt
617
-
618
- femopt.optimize(n_parallel=1)
619
-
620
-
621
- def debug_3():
622
- # noinspection PyUnresolvedReferences
623
- from time import sleep
624
- # from pyfemtet.opt.optimizer import InterruptOptimization
625
- import optuna
626
- from pyfemtet.opt.interface import AbstractFEMInterface, NoFEM
627
-
628
- def _parabola(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
629
- x = _opt.get_variables('values')
630
- # print(os.getpid())
631
- # raise RuntimeError
632
- # raise Interrupt
633
- # if get_worker() is None:
634
- # raise RuntimeError
635
- return (x ** 2).sum()
636
-
637
- def _cns(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
638
- x = _opt.get_variables('values')
639
- return x[0]
640
-
641
- _opt = OptunaOptimizer()
642
- _opt.sampler = optuna.samplers.TPESampler(seed=42)
643
-
644
- _fem = NoFEM()
645
- _opt.fem = _fem
646
-
647
- _args = (_opt,)
648
-
649
- _opt.add_parameter('x1', 1, -1, 1, step=0.2)
650
- _opt.add_parameter('x2', 1, -1, 1, step=0.2)
651
-
652
- _opt.add_constraint('cns', _cns, lower_bound=-0.5, args=_args)
653
-
654
- _opt.add_objective('obj', _parabola, args=_args)
655
-
656
- _femopt = FEMOpt(fem=_fem, opt=_opt)
657
- _femopt.optimize(
658
- scheduler_address='<dask scheduler で起動したスケジューラの tcp をここに入力>',
659
- n_trials=80,
660
- n_parallel=6,
661
- with_monitor=True,
662
- confirm_before_exit=False,
663
- )
664
-
665
-
666
- if __name__ == '__main__':
667
- # for i in range(1):
668
- debug_1()
669
- # debug_2()
670
- # debug_3()
@@ -372,11 +372,21 @@ class ColumnManager:
372
372
  column_dtypes: dict[str, type]
373
373
  meta_columns: list[str]
374
374
 
375
- @staticmethod
376
- def columns_to_keep_even_if_nan():
377
- return [
378
- "messages",
379
- ]
375
+ def columns_to_keep_even_if_nan(self) -> set[str]:
376
+ out = {"messages"}
377
+ # objective
378
+ for name in self.get_obj_names():
379
+ out.add(name)
380
+ out.add(CorrespondingColumnNameRuler.direction_name(name))
381
+ # constraint
382
+ for name in self.get_cns_names():
383
+ out.add(name)
384
+ out.add(CorrespondingColumnNameRuler.cns_lower_bound_name(name))
385
+ out.add(CorrespondingColumnNameRuler.cns_upper_bound_name(name))
386
+ # other_output
387
+ for name in self.get_other_output_names():
388
+ out.add(name)
389
+ return out
380
390
 
381
391
  def initialize(
382
392
  self,
@@ -955,6 +965,72 @@ class Records:
955
965
  self.loaded_meta_columns = loaded_meta_columns
956
966
  self.loaded_df = loaded_df
957
967
 
968
+ @staticmethod
969
+ def _incompatible_setting_detail(
970
+ category_en: str,
971
+ category_jp: str,
972
+ added: set[str],
973
+ removed: set[str],
974
+ ) -> str | None:
975
+ if not added and not removed:
976
+ return None
977
+ category = _(en_message=category_en, jp_message=category_jp)
978
+ lines = []
979
+ if added:
980
+ lines.append(
981
+ _(
982
+ en_message=" Extra {category}: {names}",
983
+ jp_message=" 余分な{category}: {names}",
984
+ category=category,
985
+ names=", ".join(sorted(added)),
986
+ )
987
+ )
988
+ if removed:
989
+ lines.append(
990
+ _(
991
+ en_message=" Missing {category}: {names}",
992
+ jp_message=" 足りない{category}: {names}",
993
+ category=category,
994
+ names=", ".join(sorted(removed)),
995
+ )
996
+ )
997
+ return "\n".join(lines)
998
+
999
+ @staticmethod
1000
+ def _incompatible_setting_message(details: list[str]) -> str:
1001
+ detail = "\n".join(details)
1002
+ return _(
1003
+ en_message="The current script settings do not match "
1004
+ "the history CSV file loaded via history_path.\n"
1005
+ "\n"
1006
+ "[The current setting incompatibilities]\n"
1007
+ "{detail}\n"
1008
+ "\n"
1009
+ "[Countermeasure]\n"
1010
+ "When resuming optimization with history_path, "
1011
+ "the settings must be compatible with the previous run. "
1012
+ "To fix this, choose one of the following options:\n"
1013
+ " 1. Restore the settings to match the previous run.\n"
1014
+ " 2. Remove the history_path argument to start a new optimization.\n"
1015
+ " 3. Delete the history CSV file (and the .db file with the same name, if it exists) "
1016
+ "to discard the previous history and start fresh.",
1017
+ jp_message="現在のスクリプトの設定が、"
1018
+ "history_path で読み込んだ履歴 CSV ファイルの内容と一致しません。\n"
1019
+ "\n"
1020
+ "[現在の設定の不整合点]\n"
1021
+ "{detail}\n"
1022
+ "\n"
1023
+ "[対策]\n"
1024
+ "history_path を指定して最適化を再開する場合、"
1025
+ "設定は前回の実行と整合している必要があります。"
1026
+ "以下のいずれかの方法で対処してください:\n"
1027
+ " 1. 前回の実行と同じ設定に戻す。\n"
1028
+ " 2. history_path の指定を削除して新しい最適化を開始する。\n"
1029
+ " 3. 履歴 CSV ファイル(および同名の .db ファイルがあればそれも)を削除し、"
1030
+ "前回の履歴を破棄して最初からやり直す。",
1031
+ detail=detail,
1032
+ )
1033
+
958
1034
  def check_problem_compatibility(self):
959
1035
  # 読み込んだデータがないのであれば何もしない
960
1036
  if self.loaded_df is None:
@@ -968,6 +1044,8 @@ class Records:
968
1044
  self.loaded_meta_columns,
969
1045
  )
970
1046
 
1047
+ incompatible_details: list[str] = []
1048
+
971
1049
  # prm_names が過不足ないか
972
1050
  loaded_prm_names = set(
973
1051
  self.column_manager._filter_prm_names(loaded_columns, loaded_meta_columns)
@@ -976,7 +1054,13 @@ class Records:
976
1054
  if not (
977
1055
  len(loaded_prm_names - prm_names) == len(prm_names - loaded_prm_names) == 0
978
1056
  ):
979
- raise RuntimeError("Incompatible parameter setting.")
1057
+ detail = self._incompatible_setting_detail(
1058
+ "parameter", "パラメータ",
1059
+ added=prm_names - loaded_prm_names,
1060
+ removed=loaded_prm_names - prm_names,
1061
+ )
1062
+ if detail:
1063
+ incompatible_details.append(detail)
980
1064
 
981
1065
  # obj_names が増えていないか
982
1066
  loaded_obj_names = set(
@@ -986,7 +1070,13 @@ class Records:
986
1070
  )
987
1071
  obj_names = set(self.column_manager.get_obj_names())
988
1072
  if len(obj_names - loaded_obj_names) > 0:
989
- raise RuntimeError("Incompatible objective setting.")
1073
+ detail = self._incompatible_setting_detail(
1074
+ "objective", "目的関数",
1075
+ added=obj_names - loaded_obj_names,
1076
+ removed=set(),
1077
+ )
1078
+ if detail:
1079
+ incompatible_details.append(detail)
990
1080
 
991
1081
  # cns_names が過不足ないか
992
1082
  # TODO: cns の上下限は変更されてはならない。
@@ -999,7 +1089,18 @@ class Records:
999
1089
  if not (
1000
1090
  len(loaded_cns_names - cns_names) == len(cns_names - loaded_cns_names) == 0
1001
1091
  ):
1002
- raise RuntimeError("Incompatible constraint setting.")
1092
+ detail = self._incompatible_setting_detail(
1093
+ "constraint", "拘束条件",
1094
+ added=cns_names - loaded_cns_names,
1095
+ removed=loaded_cns_names - cns_names,
1096
+ )
1097
+ if detail:
1098
+ incompatible_details.append(detail)
1099
+
1100
+ if incompatible_details:
1101
+ raise RuntimeError(
1102
+ self._incompatible_setting_message(incompatible_details)
1103
+ )
1003
1104
 
1004
1105
  def reinitialize_record_with_loaded_data(
1005
1106
  self, column_order_mode: str = ColumnOrderMode.per_category
@@ -1126,7 +1227,7 @@ class Records:
1126
1227
  self.df_wrapper.set_df(df)
1127
1228
 
1128
1229
  def remove_nan_columns(
1129
- self, df, meta_columns, columns_to_keep: str | list[str] = None
1230
+ self, df, meta_columns, columns_to_keep: set[str] | None = None
1130
1231
  ) -> tuple[pd.DataFrame, tuple[str]]:
1131
1232
  """
1132
1233
 
@@ -1134,6 +1235,7 @@ class Records:
1134
1235
  df:
1135
1236
  meta_columns:
1136
1237
  columns_to_keep: Allowing these columns to all NaN values.
1238
+ If None, use self.column_manager.columns_to_keep_even_if_nan().
1137
1239
 
1138
1240
  Returns:
1139
1241
  Removed DataFrame and corresponding meta_columns.
@@ -244,6 +244,16 @@ class AbstractFEMInterface:
244
244
  def _get_additional_data(self) -> dict:
245
245
  return dict()
246
246
 
247
+ # name
248
+ @property
249
+ def name(self) -> str:
250
+ if hasattr(self, '_name'):
251
+ return self._name
252
+ return self.__class__.__name__
253
+
254
+ @name.setter
255
+ def name(self, value: str):
256
+ self._name = value
247
257
 
248
258
  class COMInterface(AbstractFEMInterface):
249
259
 
@@ -662,7 +662,6 @@ class ExcelInterface(COMInterface):
662
662
  upper_bound=ub,
663
663
  step=step,
664
664
  fix=not use,
665
- supress_duplicated_name_check=True,
666
665
  )
667
666
 
668
667
  elif kind == 'Categorical':
@@ -675,7 +674,6 @@ class ExcelInterface(COMInterface):
675
674
  initial_value=value,
676
675
  choices=choices,
677
676
  fix=not use,
678
- supress_duplicated_name_check=True,
679
677
  )
680
678
 
681
679
  else:
@@ -722,7 +720,6 @@ class ExcelInterface(COMInterface):
722
720
  direction=direction,
723
721
  fun=_ScapeGoatObjective(),
724
722
  kwargs=dict(name=name),
725
- supress_duplicated_name_check=True,
726
723
  )
727
724
 
728
725
  def load_constraints(self, opt: OptimizationDataPerFEM, raise_if_no_keyword=False):
@@ -784,7 +781,6 @@ class ExcelInterface(COMInterface):
784
781
  fun=_ScapeGoatObjective(),
785
782
  kwargs=dict(name=name),
786
783
  using_fem=not calc_before_solve,
787
- supress_duplicated_name_check=True,
788
784
  )
789
785
 
790
786
  def objective_from_excel(self, _, name: str):
@@ -223,7 +223,6 @@ def add_parametric_results_as_objectives(opt, Femtet, indexes, directions) -> bo
223
223
  # objective value function
224
224
  opt.add_objective(
225
225
  name=name, fun=_parametric_objective, direction=direction, args=(i,),
226
- supress_duplicated_name_check=True,
227
226
  )
228
227
  return True # ここまで来たら成功
229
228
 
@@ -244,7 +243,7 @@ def _parametric_objective(Femtet, parametric_result_index):
244
243
  return dll.GetPrmResult(parametric_result_index)
245
244
 
246
245
 
247
- def solve_via_parametric_dll(Femtet) -> bool:
246
+ def solve_via_parametric_dll(Femtet, clear_sweep_table: bool = True) -> bool:
248
247
  csv_processor = get_csv_processor(Femtet)
249
248
 
250
249
  # remove previous csv if exists
@@ -256,11 +255,12 @@ def solve_via_parametric_dll(Femtet) -> bool:
256
255
  dll = _get_dll_with_set_femtet(Femtet)
257
256
 
258
257
  # reset existing sweep table
259
- dll.ClearPrmSweepTable.restype = ctypes.c_bool
260
- succeed = dll.ClearPrmSweepTable()
261
- if not succeed:
262
- logger.error('Failed to remove existing sweep table!') # 通常ありえないので error
263
- return False
258
+ if clear_sweep_table:
259
+ dll.ClearPrmSweepTable.restype = ctypes.c_bool
260
+ succeed = dll.ClearPrmSweepTable()
261
+ if not succeed:
262
+ logger.error('Failed to remove existing sweep table!') # 通常ありえないので error
263
+ return False
264
264
 
265
265
  # solve
266
266
  dll.PrmCalcExecute.restype = ctypes.c_bool
@@ -174,6 +174,7 @@ class FemtetInterface(COMInterface):
174
174
  self._warn_if_undefined_variable = True
175
175
  self.api_response_warning_time = 10 # mesh, solve, re-execute を除くマクロ実行警告時間
176
176
  self.save_screenshot: Literal["result", "model", "none"] = "model"
177
+ self._clear_parametric_sweep_table: bool = True
177
178
 
178
179
  # connect to Femtet
179
180
  self._connect_and_open_femtet()
@@ -185,6 +186,17 @@ class FemtetInterface(COMInterface):
185
186
 
186
187
  # ===== system =====
187
188
 
189
+ @property
190
+ def name(self) -> str:
191
+ name = ""
192
+ if self.femprj_path is not None:
193
+ name += os.path.basename(self.femprj_path)
194
+ if self.model_name is not None:
195
+ name += f' - {self.model_name}'
196
+ if name == "":
197
+ name = super().name
198
+ return name
199
+
188
200
  @property
189
201
  def object_pass_to_fun(self):
190
202
  """The object pass to the first argument of user-defined objective functions.
@@ -1000,7 +1012,7 @@ class FemtetInterface(COMInterface):
1000
1012
  if_error=SolveError,
1001
1013
  error_message=Msg.ERR_PARAMETRIC_SOLVE_FAILED,
1002
1014
  is_Gaudi_method=True,
1003
- args=(self.Femtet,),
1015
+ args=(self.Femtet, self._clear_parametric_sweep_table),
1004
1016
  )
1005
1017
 
1006
1018
  # parametric analysis の場合
@@ -122,7 +122,7 @@ class AbstractSurrogateModelInterfaceBase(AbstractFEMInterface):
122
122
  def dummy(*args, **kwargs):
123
123
  assert False
124
124
 
125
- ctx.add_objective(obj_name, dummy, direction, supress_duplicated_name_check=True)
125
+ ctx.add_objective(obj_name, dummy, direction)
126
126
 
127
127
  # ctx の目的関数のうち train に含まれるものを差し替え
128
128
  # directions の目的変数名を validation しているので漏れはないはず