pyfemtet 1.0.3__tar.gz → 1.0.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 (171) hide show
  1. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/PKG-INFO +1 -1
  2. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  3. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po +2 -2
  4. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/history/_history.py +50 -4
  5. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/__init__.py +12 -1
  6. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py +4 -2
  7. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +63 -11
  8. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/prediction/_botorch_utils.py +59 -2
  9. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/prediction/_model.py +2 -2
  10. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyproject.toml +3 -12
  11. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/LICENSE +0 -0
  12. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/LICENSE_THIRD_PARTY.txt +0 -0
  13. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/README.md +0 -0
  14. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/__init__.py +0 -0
  15. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/1. make_pot_and_update_po.bat +0 -0
  16. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/2. build_mo.bat +0 -0
  17. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/__init__.py +0 -0
  18. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/babel.cfg +0 -0
  19. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/i18n.py +0 -0
  20. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/locales/messages.pot +0 -0
  21. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_i18n/messages.py +0 -0
  22. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/__init__.py +0 -0
  23. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/closing.py +0 -0
  24. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/dask_util.py +0 -0
  25. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/df_util.py +0 -0
  26. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/excel_macro_util.py +0 -0
  27. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/excel_parse_util.py +0 -0
  28. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/femtet_access_inspection.py +0 -0
  29. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/femtet_autosave.py +0 -0
  30. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/femtet_exit.py +0 -0
  31. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/femtet_version.py +0 -0
  32. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/helper.py +0 -0
  33. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/process_util.py +0 -0
  34. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/sample.xlsx +0 -0
  35. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/_util/str_enum.py +0 -0
  36. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/core.py +0 -0
  37. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/dispatch_extensions/__init__.py +0 -0
  38. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/dispatch_extensions/_impl.py +0 -0
  39. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/logger/__init__.py +0 -0
  40. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/logger/_impl.py +0 -0
  41. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/__init__.py +0 -0
  42. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/exceptions.py +0 -0
  43. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/femopt.py +0 -0
  44. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/history/__init__.py +0 -0
  45. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/history/_hypervolume.py +0 -0
  46. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/history/_optimality.py +0 -0
  47. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_base_interface.py +0 -0
  48. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_excel_interface/__init__.py +0 -0
  49. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm +0 -0
  50. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_excel_interface/excel_interface.py +0 -0
  51. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_interface/__init__.py +0 -0
  52. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_interface/_femtet_parametric.py +0 -0
  53. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_interface/femtet_interface.py +0 -0
  54. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_nx_interface/__init__.py +0 -0
  55. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py +0 -0
  56. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_nx_interface/model1.prt +0 -0
  57. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_nx_interface/model1.x_t +0 -0
  58. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_nx_interface/update_model.py +0 -0
  59. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_solidworks/__init__.py +0 -0
  60. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py +0 -0
  61. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_solidworks_interface/__init__.py +0 -0
  62. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_solidworks_interface/solidworks_interface.py +0 -0
  63. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_surrogate_model_interface/__init__.py +0 -0
  64. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py +0 -0
  65. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py +0 -0
  66. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_surrogate_model_interface/debug-pof-botorch.reccsv +0 -0
  67. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_with_excel_settings/__init__.py +0 -0
  68. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/interface/_with_excel_settings/with_excel_settings.py +0 -0
  69. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/meta_script/YAML_Generator.xlsm +0 -0
  70. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/meta_script/__init__.py +0 -0
  71. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/meta_script/__main__.py +0 -0
  72. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/meta_script/sample/sample.bas +0 -0
  73. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/meta_script/sample/sample.femprj +0 -0
  74. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/__init__.py +0 -0
  75. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/_base_optimizer.py +0 -0
  76. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/__init__.py +0 -0
  77. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py +0 -0
  78. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py +0 -0
  79. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py +0 -0
  80. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv +0 -0
  81. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj +0 -0
  82. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/scipy_optimizer/__init__.py +0 -0
  83. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py +0 -0
  84. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/prediction/__init__.py +0 -0
  85. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/prediction/_gpytorch_modules_extension.py +0 -0
  86. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/prediction/_helper.py +0 -0
  87. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/problem/__init__.py +0 -0
  88. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/problem/problem.py +0 -0
  89. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/problem/variable_manager/__init__.py +0 -0
  90. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/problem/variable_manager/_string_as_expression.py +0 -0
  91. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/problem/variable_manager/_variable_manager.py +0 -0
  92. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/__init__.py +0 -0
  93. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/_create_wrapped_components.py +0 -0
  94. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/__init__.py +0 -0
  95. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/__main__.py +0 -0
  96. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_base_application.py +0 -0
  97. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_common_pages.py +0 -0
  98. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_complex_components/__init__.py +0 -0
  99. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_complex_components/alert_region.py +0 -0
  100. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_complex_components/control_femtet.py +0 -0
  101. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_complex_components/main_graph.py +0 -0
  102. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_complex_components/pm_graph.py +0 -0
  103. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_process_monitor/__init__.py +0 -0
  104. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_process_monitor/_application.py +0 -0
  105. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_process_monitor/_pages.py +0 -0
  106. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/__init__.py +0 -0
  107. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/dbc.py +0 -0
  108. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/dcc.py +0 -0
  109. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/html.py +0 -0
  110. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/str_enum.py +0 -0
  111. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/.gitignore +0 -0
  112. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/__init__.py +0 -0
  113. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/__main__.py +0 -0
  114. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/_application.py +0 -0
  115. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/_pages.py +0 -0
  116. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.csv +0 -0
  117. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.db +0 -0
  118. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.jpg +0 -0
  119. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.log +0 -0
  120. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.pdt +0 -0
  121. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.jpg +0 -0
  122. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.pdt +0 -0
  123. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.jpg +0 -0
  124. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.pdt +0 -0
  125. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.jpg +0 -0
  126. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.pdt +0 -0
  127. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.jpg +0 -0
  128. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.pdt +0 -0
  129. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.jpg +0 -0
  130. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.pdt +0 -0
  131. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.jpg +0 -0
  132. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.pdt +0 -0
  133. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.jpg +0 -0
  134. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.pdt +0 -0
  135. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.jpg +0 -0
  136. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.pdt +0 -0
  137. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.jpg +0 -0
  138. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.pdt +0 -0
  139. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.jpg +0 -0
  140. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.pdt +0 -0
  141. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.jpg +0 -0
  142. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.pdt +0 -0
  143. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.jpg +0 -0
  144. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.pdt +0 -0
  145. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.jpg +0 -0
  146. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.pdt +0 -0
  147. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.jpg +0 -0
  148. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.pdt +0 -0
  149. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bgr +0 -0
  150. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bnd +0 -0
  151. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.btr +0 -0
  152. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.jpg +0 -0
  153. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.mtl +0 -0
  154. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.pdt +0 -0
  155. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.prm +0 -0
  156. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.jpg +0 -0
  157. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.pdt +0 -0
  158. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.jpg +0 -0
  159. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.pdt +0 -0
  160. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.jpg +0 -0
  161. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.pdt +0 -0
  162. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.jpg +0 -0
  163. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.pdt +0 -0
  164. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.jpg +0 -0
  165. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.pdt +0 -0
  166. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.femprj +0 -0
  167. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/plotter/__init__.py +0 -0
  168. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/plotter/main_figure_creator.py +0 -0
  169. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/visualization/plotter/pm_graph_creator.py +0 -0
  170. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/wat_ex14_parametric_jp.femprj +0 -0
  171. {pyfemtet-1.0.3 → pyfemtet-1.0.5}/pyfemtet/opt/worker_status.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyfemtet
3
- Version: 1.0.3
3
+ Version: 1.0.5
4
4
  Summary: Design parameter optimization using Femtet.
5
5
  License: MIT
6
6
  Author: kazuma.naito
@@ -976,11 +976,11 @@ msgstr "解析モデル互換性チェックで不明なエラーが発生しま
976
976
 
977
977
  #: pyfemtet/opt/visualization/plotter/pm_graph_creator.py:146
978
978
  msgid "Upper of pred. std-dev"
979
- msgstr "予測標準偏差の上限"
979
+ msgstr "予測の標準偏差(+)"
980
980
 
981
981
  #: pyfemtet/opt/visualization/plotter/pm_graph_creator.py:150
982
982
  msgid "Lower of pred. std-dev"
983
- msgstr "予測標準偏差の小さい方"
983
+ msgstr "予測の標準偏差(-)"
984
984
 
985
985
  #: pyfemtet/opt/visualization/plotter/pm_graph_creator.py:183
986
986
  msgid "Std-dev of pred."
@@ -261,6 +261,14 @@ class DataFrameWrapper:
261
261
  class CorrespondingColumnNameRuler:
262
262
  """:meta private:"""
263
263
 
264
+ @staticmethod
265
+ def cns_lower_bound_name(cns_name):
266
+ return cns_name + '_lower_bound'
267
+
268
+ @staticmethod
269
+ def cns_upper_bound_name(cns_name):
270
+ return cns_name + '_upper_bound'
271
+
264
272
  @staticmethod
265
273
  def direction_name(obj_name):
266
274
  return obj_name + '_direction'
@@ -453,7 +461,7 @@ class ColumnManager:
453
461
 
454
462
  # later
455
463
  target_cds.update({f(name): object}) # str | float
456
- target_mcs.append(f('obj'))
464
+ target_mcs.append('obj.direction')
457
465
 
458
466
  for name in extra_y_names:
459
467
  # later
@@ -466,16 +474,35 @@ class ColumnManager:
466
474
 
467
475
  elif key == 'c':
468
476
 
477
+ f_lb = CorrespondingColumnNameRuler.cns_lower_bound_name
478
+ f_ub = CorrespondingColumnNameRuler.cns_upper_bound_name
479
+
469
480
  for name in self.c_names:
470
481
  # important
471
482
  column_dtypes.update({name: float})
472
483
  meta_columns.append('cns')
473
484
 
485
+ # later
486
+ target_cds.update({f_lb(name): float})
487
+ target_mcs.append('cns.lower_bound')
488
+
489
+ # later
490
+ target_cds.update({f_ub(name): float})
491
+ target_mcs.append('cns.upper_bound')
492
+
474
493
  for name in extra_c_names:
475
494
  # later
476
495
  target_cds.update({name: float})
477
496
  target_mcs.append('')
478
497
 
498
+ # later
499
+ target_cds.update({f_lb(name): float})
500
+ target_mcs.append('')
501
+
502
+ # later
503
+ target_cds.update({f_ub(name): float})
504
+ target_mcs.append('')
505
+
479
506
  # additional_data を入れる
480
507
  elif key == self._get_additional_data_column():
481
508
  # important
@@ -682,10 +709,19 @@ class Record:
682
709
  # messages to str
683
710
  messages_str = _RECORD_MESSAGE_DELIMITER.join(d['messages'])
684
711
  d.update({'messages': messages_str})
685
-
712
+
713
+ # obj
686
714
  d.update(**{k: v.value for k, v in y.items()})
687
- d.update(**{f'{k}_direction': v.direction for k, v in y.items()})
715
+ d.update(**{f'{CorrespondingColumnNameRuler.direction_name(k)}': v.direction for k, v in y.items()})
716
+
717
+ # cns
688
718
  d.update(**{k: v.value for k, v in c.items()})
719
+ f_lb = CorrespondingColumnNameRuler.cns_lower_bound_name
720
+ d.update(**{f'{f_lb(k)}': v.lower_bound
721
+ for k, v in c.items()})
722
+ f_ub = CorrespondingColumnNameRuler.cns_upper_bound_name
723
+ d.update(**{f'{f_ub(k)}': v.upper_bound
724
+ for k, v in c.items()})
689
725
 
690
726
  df = pd.DataFrame(
691
727
  {k: [v] for k, v in d.items()},
@@ -1320,7 +1356,7 @@ class History:
1320
1356
  if row is not None:
1321
1357
  self_.postprocess_after_recording(row)
1322
1358
 
1323
- # save history
1359
+ # save history if no FEMOpt
1324
1360
  client = get_client()
1325
1361
  if client is None:
1326
1362
  self.save()
@@ -1332,6 +1368,16 @@ class History:
1332
1368
 
1333
1369
  The destination path is :class:`History.path`.
1334
1370
  """
1371
+
1372
+ # flask server 情報のように、最適化の途中で
1373
+ # 書き換えられるケースがあるので
1374
+ # additional data を再度ここで meta_columns に反映する
1375
+ cm = self._records.column_manager
1376
+ for i, column in enumerate(cm.column_dtypes.keys()):
1377
+ # additional_data を入れる
1378
+ if column == cm._get_additional_data_column():
1379
+ cm.meta_columns[i] = json.dumps(self.additional_data or dict())
1380
+
1335
1381
  self._records.save(self.path)
1336
1382
 
1337
1383
  def _create_optuna_study_for_visualization(self):
@@ -9,6 +9,16 @@ if platform.system() == 'Windows':
9
9
  from ._excel_interface import ExcelInterface
10
10
  from ._with_excel_settings import *
11
11
  from ._with_excel_settings import __all__ as _with_excel_settings__all__
12
+ else:
13
+ class DummyInterface:
14
+ def __init__(self, args, kwargs):
15
+ raise RuntimeError(f'{type(self).__name__} is only for Windows OS.')
16
+
17
+ class FemtetInterface(DummyInterface, AbstractFEMInterface): pass
18
+ class FemtetWithNXInterface(DummyInterface, AbstractFEMInterface): pass
19
+ class FemtetWithSolidworksInterface(DummyInterface, AbstractFEMInterface): pass
20
+ class ExcelInterface(DummyInterface, AbstractFEMInterface): pass
21
+
12
22
 
13
23
  from ._surrogate_model_interface import AbstractSurrogateModelInterfaceBase
14
24
  from ._surrogate_model_interface import BoTorchInterface
@@ -27,4 +37,5 @@ __all__ = [
27
37
  'PoFBoTorchInterface',
28
38
  ]
29
39
 
30
- __all__.extend(_with_excel_settings__all__)
40
+ if platform.system() == 'Windows':
41
+ __all__.extend(_with_excel_settings__all__)
@@ -113,7 +113,7 @@ class _ConvertedConstraint:
113
113
 
114
114
  """
115
115
 
116
- x = X.detach().numpy()
116
+ x = X.detach().cpu().numpy()
117
117
  cns_value = _evaluate_pyfemtet_cns(
118
118
  self.cns,
119
119
  self.opt,
@@ -124,6 +124,8 @@ class _ConvertedConstraint:
124
124
  return Tensor([cns_value - self.cns.lower_bound - self.ce])
125
125
  elif self.ub_or_lb == 'ub':
126
126
  return Tensor([self.cns.upper_bound - cns_value - self.ce])
127
+ else:
128
+ assert False
127
129
 
128
130
 
129
131
  # list[pyfemtet.opt.Constraint] について、正規化された入力に対し、 feasible or not を返す関数
@@ -184,7 +186,7 @@ class NonlinearInequalityConstraints:
184
186
  for each_num_restarts in ic_batch:
185
187
  feasible_q_list = []
186
188
  for each_q in each_num_restarts:
187
- x: np.ndarray = each_q.detach().numpy() # normalized parameters
189
+ x: np.ndarray = each_q.detach().cpu().numpy() # normalized parameters
188
190
  if _is_feasible(self.constraints, self.opt, self.trans, x, self.ce, self.cs):
189
191
  feasible_q_list.append(each_q) # Keep only feasible rows
190
192
 
@@ -841,6 +841,7 @@ class PoFConfig:
841
841
  )
842
842
  feasibility_cdf_threshold: float | str = 0.5 # or 'sample_mean'
843
843
  feasibility_noise: float | str | None = None # 'no' to fixed minimum noise
844
+ remove_hard_constraints_from_gp: bool = False # if consider_explicit_hard_constraint is False, no effect.
844
845
 
845
846
 
846
847
  # TODO:
@@ -1079,6 +1080,8 @@ class PoFBoTorchSampler(BoTorchSampler):
1079
1080
  if n_trials < self._n_startup_trials:
1080
1081
  return {}
1081
1082
 
1083
+ # ===== ここまで変更なし =====
1084
+
1082
1085
  trans = _SearchSpaceTransform(search_space)
1083
1086
  n_objectives = len(study.directions)
1084
1087
  values: numpy.ndarray | torch.Tensor = numpy.empty(
@@ -1099,23 +1102,48 @@ class PoFBoTorchSampler(BoTorchSampler):
1099
1102
  ): # BoTorch always assumes maximization.
1100
1103
  value *= -1
1101
1104
  values[trial_idx, obj_idx] = value
1105
+
1102
1106
  if self._constraints_func is not None:
1107
+
1108
+ # get constraints
1103
1109
  constraints = study._storage.get_trial_system_attrs(trial._trial_id).get(
1104
1110
  _CONSTRAINTS_KEY
1105
1111
  )
1112
+
1113
+ # Explicit hard constraints を optimize_acqf で扱うならば
1114
+ # GP にはそれを渡さない (option)
1115
+ if (
1116
+ constraints is not None
1117
+ and self.pof_config.consider_explicit_hard_constraint
1118
+ and self.pof_config.remove_hard_constraints_from_gp
1119
+ ):
1120
+ constraints = filter_soft_constraints_only(
1121
+ constraints, self.pyfemtet_optimizer
1122
+ )
1123
+
1106
1124
  if constraints is not None:
1125
+
1107
1126
  n_constraints = len(constraints)
1108
1127
 
1109
- if con is None:
1110
- con = numpy.full(
1111
- (n_completed_trials, n_constraints), numpy.nan, dtype=numpy.float64
1112
- )
1113
- elif n_constraints != con.shape[1]:
1114
- raise RuntimeError(
1115
- f"Expected {con.shape[1]} constraints "
1116
- f"but received {n_constraints}."
1117
- )
1118
- con[trial_idx] = constraints
1128
+ # remove_hard_constraints_from_gp
1129
+ # constraints がなくなった場合、
1130
+ # そもそも今後ここに来る必要がない
1131
+ if n_constraints == 0:
1132
+ self._constraints_func = None
1133
+
1134
+ else:
1135
+
1136
+ if con is None:
1137
+ con = numpy.full(
1138
+ (n_completed_trials, n_constraints), numpy.nan, dtype=numpy.float64
1139
+ )
1140
+ elif n_constraints != con.shape[1]:
1141
+ raise RuntimeError(
1142
+ f"Expected {con.shape[1]} constraints "
1143
+ f"but received {n_constraints}."
1144
+ )
1145
+ con[trial_idx] = constraints
1146
+
1119
1147
  elif trial.state == TrialState.RUNNING:
1120
1148
  if all(p in trial.params for p in search_space):
1121
1149
  params[trial_idx] = trans.transform(trial.params)
@@ -1162,7 +1190,6 @@ class PoFBoTorchSampler(BoTorchSampler):
1162
1190
  else:
1163
1191
  running_params = None
1164
1192
 
1165
- # ===== ここまで変更なし =====
1166
1193
 
1167
1194
  # TODO: ミーゼスなどの場合にこれらのシード固定法も試す
1168
1195
  # if self._seed is not None:
@@ -1247,3 +1274,28 @@ class PoFBoTorchSampler(BoTorchSampler):
1247
1274
  # ===== ここまで変更なし =====
1248
1275
 
1249
1276
  return trans.untransform(candidates.cpu().numpy())
1277
+
1278
+
1279
+ def filter_soft_constraints_only(
1280
+ constraints: tuple[float],
1281
+ opt: AbstractOptimizer,
1282
+ ) -> list[float]:
1283
+ # constraints を取得
1284
+ # lb, ub の存在に応じて hard, soft を展開
1285
+ is_soft_list = []
1286
+ for cns in opt.constraints.values():
1287
+ if cns.lower_bound is not None:
1288
+ is_soft_list.append(not cns.hard)
1289
+ if cns.upper_bound is not None:
1290
+ is_soft_list.append(not cns.hard)
1291
+
1292
+ # constraints と比べる
1293
+ assert len(constraints) == len(is_soft_list)
1294
+
1295
+ # soft に該当する要素のみで組立て返す
1296
+ ret = []
1297
+ for is_soft, value in zip(is_soft_list, constraints):
1298
+ if is_soft:
1299
+ ret.append(value)
1300
+
1301
+ return ret
@@ -3,15 +3,17 @@ from __future__ import annotations
3
3
 
4
4
  from packaging import version
5
5
 
6
+ from tqdm import tqdm
6
7
  import torch
7
8
 
8
9
  from gpytorch.mlls import ExactMarginalLogLikelihood
9
10
  from gpytorch.kernels import MaternKernel, ScaleKernel # , RBFKernel
10
11
  from gpytorch.priors.torch_priors import GammaPrior # , LogNormalPrior
11
- # from gpytorch.constraints.constraints import GreaterThan
12
+ from gpytorch.constraints.constraints import GreaterThan
12
13
 
13
14
  from botorch.models import SingleTaskGP
14
15
  from botorch.models.transforms import Standardize, Normalize
16
+ from botorch.exceptions import ModelFittingError
15
17
 
16
18
  # import fit_gpytorch_mll
17
19
  import botorch.version
@@ -22,6 +24,9 @@ if version.parse(botorch.version.version) < version.parse("0.8.0"):
22
24
  else:
23
25
  from botorch.fit import fit_gpytorch_mll
24
26
 
27
+ from pyfemtet.logger import get_module_logger
28
+
29
+ logger = get_module_logger('opt.botorch_util')
25
30
 
26
31
  __all__ = [
27
32
  'get_standardizer_and_no_noise_train_yvar',
@@ -128,6 +133,58 @@ def setup_gp(X, Y, bounds, observation_noise, lh_class=None, covar_module=None):
128
133
  )
129
134
 
130
135
  mll_ = lh_class(model_.likelihood, model_)
131
- fit_gpytorch_mll(mll_)
136
+
137
+ try:
138
+ fit_gpytorch_mll(mll_)
139
+
140
+ except ModelFittingError as e:
141
+ logger.warning(f'{type(e).__name__} is raised '
142
+ f'during fit_gpytorch_mll()! '
143
+ f'The original message is: `{",".join(e.args)}`.')
144
+
145
+ # retry with noise level setting
146
+ try:
147
+ logger.info('Attempt to retrying...')
148
+
149
+ # noinspection PyBroadException
150
+ try:
151
+ model_.likelihood.noise_covar.register_constraint(
152
+ "raw_noise", GreaterThan(1e-5))
153
+ logger.warning('Set the raw_noise constraint to 1e-5.')
154
+ except Exception:
155
+ logger.info('Failed to set the raw_noise constraint. '
156
+ 'Retrying simply.')
157
+
158
+ fit_gpytorch_mll(mll_)
159
+
160
+ except ModelFittingError:
161
+ logger.warning(f'{type(e).__name__} is raised '
162
+ f'during *second* fit_gpytorch_mll()! '
163
+ f'The original message is: `{",".join(e.args)}`.')
164
+
165
+ # retry with another way
166
+ logger.warning('Attempt to retrying.')
167
+ logger.warning('Try to use SGD algorithm...')
168
+
169
+ from torch.optim import SGD
170
+
171
+ NUM_EPOCHS = 150
172
+
173
+ optimizer = SGD([{"params": model_.parameters()}], lr=0.025)
174
+
175
+ model_.train()
176
+
177
+ for epoch in tqdm(range(NUM_EPOCHS), desc='fit with SGD'):
178
+ # clear gradients
179
+ optimizer.zero_grad()
180
+ # forward pass through the model to obtain the output MultivariateNormal
181
+ output = model_(X)
182
+ # Compute negative marginal log likelihood
183
+ loss = -mll_(output, model_.train_targets)
184
+ # back prop gradients
185
+ loss.backward()
186
+ optimizer.step()
187
+
188
+ model_.eval()
132
189
 
133
190
  return model_
@@ -73,8 +73,8 @@ class SingleTaskGPModel(AbstractModel):
73
73
  X = torch.tensor(x, **self.KWARGS)
74
74
  post = self.gp.posterior(X)
75
75
  with torch.no_grad():
76
- mean = post.mean.numpy()
77
- std = post.variance.sqrt().numpy()
76
+ mean = post.mean.cpu().numpy()
77
+ std = post.variance.sqrt().cpu().numpy()
78
78
  return mean, std
79
79
 
80
80
 
@@ -26,14 +26,14 @@ dependencies = [
26
26
  "optuna>=3.4.0, <5.0.0",
27
27
  "optuna-integration>=3.6.0, <5.0.0",
28
28
  "botorch>=0.12.0, <0.15.0",
29
- "torch", # botorch specifies torch's version
30
- "fire>=0.7", # It probably has a strong backward compatibility.
29
+ "torch", # botorch specifies torch's version
30
+ "fire>=0.7", # It probably has a strong backward compatibility.
31
31
  "pyyaml>=6.0.2,<7",
32
32
  ]
33
33
 
34
34
  #[project.optional-dependencies]
35
35
  #brep = ["brepmatching>=0.1.8,<0.2"]
36
- version = "1.0.3"
36
+ version = "1.0.5"
37
37
 
38
38
  [project.urls]
39
39
  Repository = "https://github.com/pyfemtet/pyfemtet"
@@ -58,15 +58,6 @@ dev = [
58
58
  "pytest-reporter-html-dots>=0.11.0",
59
59
  ]
60
60
 
61
- [[tool.uv.index]]
62
- name = "pytorch-cpu"
63
- url = "https://download.pytorch.org/whl/cpu"
64
- explicit = true
65
-
66
- [tool.uv.sources]
67
- # Defaults to installing CUDA without index-url specification only on linux
68
- torch = [{ index = "pytorch-cpu", marker = "sys_platform=='linux'" }]
69
-
70
61
  [tool.uv-dynamic-versioning]
71
62
  fallback-version = "0.0.0"
72
63
 
File without changes
File without changes
File without changes
File without changes