pyfemtet 0.4.6__py3-none-any.whl → 0.4.8__py3-none-any.whl

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 (28) hide show
  1. pyfemtet/__init__.py +1 -1
  2. pyfemtet/_test_util.py +115 -0
  3. pyfemtet/opt/_femopt.py +7 -1
  4. pyfemtet/opt/_femopt_core.py +20 -3
  5. pyfemtet/opt/femprj_sample/cad_ex01_NX.py +4 -0
  6. pyfemtet/opt/femprj_sample/cad_ex01_NX_test_result.reccsv +13 -0
  7. pyfemtet/opt/femprj_sample/cad_ex01_SW_test_result.reccsv +13 -0
  8. pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj +0 -0
  9. pyfemtet/opt/femprj_sample/gal_ex58_parametric_test_result.reccsv +13 -0
  10. pyfemtet/opt/femprj_sample/gau_ex08_parametric_test_result.reccsv +23 -0
  11. pyfemtet/opt/femprj_sample/her_ex40_parametric_test_result.reccsv +18 -0
  12. pyfemtet/opt/femprj_sample/paswat_ex1_parametric_test_result.reccsv +18 -0
  13. pyfemtet/opt/femprj_sample/wat_ex14_parametric_test_result.reccsv +18 -0
  14. pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py +4 -0
  15. pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
  16. pyfemtet/opt/interface/_base.py +6 -0
  17. pyfemtet/opt/interface/_femtet.py +203 -27
  18. pyfemtet/opt/interface/_femtet_parametric.py +3 -3
  19. pyfemtet/opt/interface/_femtet_with_nx/_interface.py +35 -2
  20. pyfemtet/opt/interface/_femtet_with_nx/update_model.py +36 -28
  21. pyfemtet/opt/opt/_base.py +2 -0
  22. pyfemtet/opt/visualization/_graphs.py +16 -13
  23. pyfemtet/opt/visualization/_monitor.py +88 -10
  24. {pyfemtet-0.4.6.dist-info → pyfemtet-0.4.8.dist-info}/METADATA +2 -1
  25. {pyfemtet-0.4.6.dist-info → pyfemtet-0.4.8.dist-info}/RECORD +28 -20
  26. {pyfemtet-0.4.6.dist-info → pyfemtet-0.4.8.dist-info}/LICENSE +0 -0
  27. {pyfemtet-0.4.6.dist-info → pyfemtet-0.4.8.dist-info}/WHEEL +0 -0
  28. {pyfemtet-0.4.6.dist-info → pyfemtet-0.4.8.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  import os
2
+ import base64
2
3
  from typing import Optional, List
3
4
 
4
5
  import json
@@ -6,10 +7,11 @@ import webbrowser
6
7
  from time import sleep
7
8
  from threading import Thread
8
9
 
10
+ import numpy as np
9
11
  import pandas as pd
10
12
  import psutil
11
13
  from plotly.graph_objects import Figure
12
- from dash import Dash, html, dcc, Output, Input, State, callback_context, no_update
14
+ from dash import Dash, html, dcc, Output, Input, State, callback_context, no_update, dash_table
13
15
  from dash.exceptions import PreventUpdate
14
16
  import dash_bootstrap_components as dbc
15
17
 
@@ -18,7 +20,6 @@ from pyfemtet.opt.interface import FemtetInterface
18
20
  from pyfemtet.opt.visualization._graphs import (
19
21
  update_default_figure,
20
22
  update_hypervolume_plot,
21
- _CUSTOM_DATA_DICT
22
23
  )
23
24
 
24
25
 
@@ -28,6 +29,8 @@ logger = get_logger('viz')
28
29
  logger.setLevel(logging.INFO)
29
30
 
30
31
 
32
+ here = os.path.dirname(__file__)
33
+
31
34
  DBC_COLUMN_STYLE_CENTER = {
32
35
  'display': 'flex',
33
36
  'justify-content': 'center',
@@ -458,7 +461,7 @@ class FemtetControl:
458
461
  points_dicts = selection_data['points']
459
462
  for points_dict in points_dicts:
460
463
  logger.debug(points_dict)
461
- trial = points_dict['customdata'][_CUSTOM_DATA_DICT['trial']]
464
+ trial = points_dict['customdata'][0]
462
465
  logger.debug(trial)
463
466
  index = trial - 1
464
467
  names = [name for name in home.monitor.local_df.columns if name.startswith('prm_')]
@@ -556,6 +559,7 @@ class HomePageBase:
556
559
  ID_GRAPH_TABS = 'home-graph-tabs'
557
560
  ID_GRAPH_CARD_BODY = 'home-graph-card-body'
558
561
  ID_GRAPH = 'home-graph'
562
+ ID_GRAPH_TOOLTIP = 'home-graph-hover-tooltip'
559
563
  ID_SELECTION_DATA = 'home-selection-data'
560
564
 
561
565
  # selection data attribute
@@ -577,7 +581,6 @@ class HomePageBase:
577
581
  self.monitor = monitor
578
582
  self.app: Dash = monitor.app
579
583
  self.history = monitor.history
580
- self.df = monitor.local_df
581
584
  self.setup_graph_card()
582
585
  self.setup_contents()
583
586
  self.setup_layout()
@@ -616,7 +619,12 @@ class HomePageBase:
616
619
  children=[
617
620
  # Loading : child が Output である callback について、
618
621
  # それが発火してから return するまでの間 Spinner が出てくる
619
- dcc.Loading(dcc.Graph(id=self.ID_GRAPH)),
622
+ html.Div([
623
+ dcc.Loading(
624
+ dcc.Graph(id=self.ID_GRAPH, clear_on_unhover=True, figure=self.get_fig_by_tab_id(default_tab)),
625
+ ),
626
+ dcc.Tooltip(id=self.ID_GRAPH_TOOLTIP),
627
+ ]),
620
628
  ],
621
629
  id=self.ID_GRAPH_CARD_BODY,
622
630
  ),
@@ -633,7 +641,7 @@ class HomePageBase:
633
641
  Output(self.ID_GRAPH, 'figure'),
634
642
  ],
635
643
  [
636
- Input(self.ID_GRAPH_CARD_BODY, 'children'),
644
+ Input(self.ID_DUMMY, 'children'),
637
645
  ],
638
646
  [
639
647
  State(self.ID_GRAPH_TABS, 'active_tab'),
@@ -678,6 +686,72 @@ class HomePageBase:
678
686
  logger.debug(f'on_select: {selected_data}')
679
687
  return [selected_data]
680
688
 
689
+ # ホバーに画像を表示する callback
690
+ @self.monitor.app.callback(
691
+ Output(self.ID_GRAPH_TOOLTIP, "show"),
692
+ Output(self.ID_GRAPH_TOOLTIP, "bbox"),
693
+ Output(self.ID_GRAPH_TOOLTIP, "children"),
694
+ Input(self.ID_GRAPH, "hoverData"),
695
+ )
696
+ def display_hover(hoverData):
697
+ if hoverData is None:
698
+ return False, no_update, no_update
699
+
700
+ pt = hoverData["points"][0]
701
+ bbox = pt["bbox"]
702
+
703
+ # get row of the history
704
+ trial = pt['customdata'][0]
705
+ row = self.monitor.local_df[self.monitor.local_df['trial'] == trial]
706
+
707
+ # === create hovered data ===
708
+ # get encoded image from history.additional_metadata
709
+ img_url = None
710
+
711
+ # Femtet specified processing
712
+ metadata = self.history.metadata
713
+ if metadata[0] != '':
714
+ # get img path
715
+ d = json.loads(metadata[0])
716
+ femprj_path = d['femprj_path']
717
+ model_name = d['model_name']
718
+ femprj_result_dir = femprj_path.replace('.femprj', '.Results')
719
+ img_path = os.path.join(femprj_result_dir, f'{model_name}_trial{trial}.jpg')
720
+ if os.path.exists(img_path):
721
+ # create encoded image
722
+ with open(img_path, 'rb') as f:
723
+ content = f.read()
724
+ encoded_image = base64.b64encode(content).decode('utf-8')
725
+ img_url = 'data:image/jpeg;base64, ' + encoded_image
726
+ html_img = html.Img(src=img_url, style={"width": "200px"}) if img_url is not None else html.Div()
727
+
728
+ # parameters
729
+ pd.options.display.float_format = '{:.4e}'.format
730
+ parameters = row.iloc[:, np.where(np.array(metadata) == 'prm')[0]]
731
+ names = parameters.columns
732
+ values = [f'{value:.3e}' for value in parameters.values.ravel()]
733
+ data = pd.DataFrame(dict(
734
+ name=names, value=values
735
+ ))
736
+
737
+ # descript result
738
+ desc = html.Div([
739
+ html.H3(f"trial{trial}", style={"color": "darkblue"}),
740
+ dash_table.DataTable(
741
+ columns=[{'name': col, 'id': col} for col in data.columns],
742
+ data=data.to_dict('records')
743
+ ),
744
+ ])
745
+
746
+ # make output
747
+ children = html.Div([
748
+ html.Div(html_img, style={'display': 'inline-block', 'margin-right': '10px', 'vertical-align': 'top'}),
749
+ html.Div(desc, style={'display': 'inline-block', 'margin-right': '10px'})
750
+ ])
751
+
752
+ return True, bbox, children
753
+
754
+
681
755
  def get_fig_by_tab_id(self, tab_id):
682
756
  if tab_id in self.graphs.keys():
683
757
  fig_func = self.graphs[tab_id]['fig_func']
@@ -712,8 +786,8 @@ class ResultViewerAppHomePage(HomePageBase):
712
786
  '---\n'
713
787
  '- 最適化の結果分析画面です。\n'
714
788
  '- 凡例をクリックすると、対応する要素の表示/非表示を切り替えます。\n'
715
- '- ブラウザを使用しますが、ネットワーク通信は行いません。\n'
716
- '- ブラウザを閉じてもプログラムは終了しません。'
789
+ '- ブラウザを使用しますが、解析結果のインターネット通信は行いません。\n'
790
+ '- ブラウザを閉じてもプログラムは終了しません。\n'
717
791
  ' - コマンドプロンプトを閉じるかコマンドプロンプトに `CTRL+C` を入力してプログラムを終了してください。\n'
718
792
  )
719
793
  self.contents.children = [
@@ -753,9 +827,10 @@ class ProcessMonitorAppHomePage(HomePageBase):
753
827
  note = dcc.Markdown(
754
828
  '---\n'
755
829
  '- 最適化の結果分析画面です。\n'
756
- '- ブラウザを使用しますが、ネットワーク通信は行いません。\n'
830
+ '- ブラウザを使用しますが、解析結果のインターネット通信は行いません。\n'
757
831
  '- この画面を閉じても最適化は中断されません。\n'
758
832
  f'- この画面を再び開くにはブラウザのアドレスバーに「localhost:{self.monitor.DEFAULT_PORT}」と入力して下さい。\n'
833
+ '- __マウスオーバーで表示されるデータを見る場合は、「自動更新を一時停止する」ボタンを押してください。__\n'
759
834
  )
760
835
 
761
836
  self.contents.children = [
@@ -832,7 +907,10 @@ class ProcessMonitorAppHomePage(HomePageBase):
832
907
  # 1. interval => figure を更新する
833
908
  if (len(self.monitor.local_df) > 0) and (active_tab_id is not None):
834
909
  fig = self.get_fig_by_tab_id(active_tab_id)
835
- ret[card_body] = dcc.Graph(figure=fig, id=self.ID_GRAPH) # list にせんとダメかも
910
+ ret[card_body] = [
911
+ dcc.Graph(figure=fig, id=self.ID_GRAPH, clear_on_unhover=True),
912
+ dcc.Tooltip(id=self.ID_GRAPH_TOOLTIP),
913
+ ]
836
914
 
837
915
  # 3. btn toggle => (toggle の children を切替) and (interval を切替)
838
916
  if toggle_n_clicks % 2 == 1:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyfemtet
3
- Version: 0.4.6
3
+ Version: 0.4.8
4
4
  Summary: Design parameter optimization using Femtet.
5
5
  Home-page: https://github.com/pyfemtet/pyfemtet
6
6
  License: BSD-3-Clause
@@ -27,6 +27,7 @@ Requires-Dist: optuna-integration (>=3.6.0,<4.0.0)
27
27
  Requires-Dist: pandas (>=2.1.3,<3.0.0)
28
28
  Requires-Dist: plotly (>=5.18.0,<6.0.0)
29
29
  Requires-Dist: psutil (>=5.9.6,<6.0.0)
30
+ Requires-Dist: pytest-dashboard (>=0.1.2,<0.2.0)
30
31
  Requires-Dist: pywin32 (>=306,<307)
31
32
  Requires-Dist: scipy (>=1.11.4,<2.0.0)
32
33
  Requires-Dist: tqdm (>=4.66.1,<5.0.0)
@@ -12,35 +12,43 @@ pyfemtet/FemtetPJTSample/her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g
12
12
  pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py,sha256=UfhJffuXyhzdIWNpOrpV6xLTK1fuVvgyhlyg4Rp-628,2148
13
13
  pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj,sha256=pxacKe0NPNUPAcxqo2cATFApsMKiVt2g2e_FOk4fpjA,172895
14
14
  pyfemtet/FemtetPJTSample/wat_ex14_parametric.py,sha256=LGbWxCek0Ad2YrDCKykiQkE3aIypM4g8P3mLd_2anEE,2052
15
- pyfemtet/__init__.py,sha256=kz_EtUK14aaAj9cTvW7Wp3hr3-OKQMeZoE6Yry0bGJo,21
15
+ pyfemtet/__init__.py,sha256=hllK95qvjUJQSsYx58i-DzgOBo2oIokt_oxkpukFlL0,21
16
+ pyfemtet/_test_util.py,sha256=cxSPWvYbvAMAEoY_H3XpWlhhdS0MijwZEQgZ7aa4Fy8,3727
16
17
  pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
17
18
  pyfemtet/dispatch_extensions.py,sha256=MhWiUXVt2Cq8vDeajMK4SrajjiAmb4m2fK8gXwHLrWA,16177
18
19
  pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
19
20
  pyfemtet/opt/__init__.py,sha256=_P8unESvqCRD5pmuo6-5yo7BbrPi7c0aE6UZpqUD-_I,596
20
- pyfemtet/opt/_femopt.py,sha256=QiEaf7EToNQDufBzL82TALclTkQA3ufJHQovI0mC0DY,22367
21
- pyfemtet/opt/_femopt_core.py,sha256=n_m-GIW82uvKNAn_N1ypBZQ4sOjngfNly7-SEkOXfuU,24774
21
+ pyfemtet/opt/_femopt.py,sha256=o2TLbmWwiOVdDsVHSh6j3k7fWktHJQxpTpeDmDkg5XE,22601
22
+ pyfemtet/opt/_femopt_core.py,sha256=fn14koJby6wP9Hh0lSanN-h5rTBhaKTov9r82VaFaiM,25490
22
23
  pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj,sha256=KC8JlHqHzqgyKriK911QSnQByQpRlw-SX5OSQ_GNe5M,149193
23
24
  pyfemtet/opt/femprj_sample/cad_ex01_NX.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
24
- pyfemtet/opt/femprj_sample/cad_ex01_NX.py,sha256=qpfbU41qsJSMWnROzTOU1mpmHngGoa0cjnLHqNkt0EY,4519
25
+ pyfemtet/opt/femprj_sample/cad_ex01_NX.py,sha256=avqLWkSjkLG17pVFa6RTxqWcn6G1CiXe2CIk2uGhiv4,4648
26
+ pyfemtet/opt/femprj_sample/cad_ex01_NX_test_result.reccsv,sha256=hcOiI1Ct5o7k_tN8nB82kpVJpAtGvdLBjLwqEAFz49c,1029
25
27
  pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT,sha256=jjBi4aRRwZPK-4-YRKDC4eO_Ch2jwd7M7chvJlnBbZU,97158
26
28
  pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj,sha256=knN0bBTHm5CqExLdmxdJvPldJ6ahnQesKt974qRjWh4,126837
27
29
  pyfemtet/opt/femprj_sample/cad_ex01_SW.py,sha256=HOpxWC_jxnKmabO4u5JrHNHPR8b7WFm-PauJSoTxRrQ,4586
28
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj,sha256=-HDpYkp0bi2ZGKerQGVm-TIHq67D5dkIFcgl_QmZXy4,72896
30
+ pyfemtet/opt/femprj_sample/cad_ex01_SW_test_result.reccsv,sha256=hcOiI1Ct5o7k_tN8nB82kpVJpAtGvdLBjLwqEAFz49c,1029
31
+ pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj,sha256=dbanN3W2eX_ciZ0wZGqK60mc4edSVh5G2OqbbMKyFng,74898
29
32
  pyfemtet/opt/femprj_sample/gal_ex58_parametric.py,sha256=yNAgkHknRY6CPnYR6ETl6ZNOElepvQNwwnofUGpFhVw,2485
33
+ pyfemtet/opt/femprj_sample/gal_ex58_parametric_test_result.reccsv,sha256=hcOiI1Ct5o7k_tN8nB82kpVJpAtGvdLBjLwqEAFz49c,1029
30
34
  pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj,sha256=Yb9ILeTEKx5xfJGk8IZH_DVlgkpGB33Vy9-LGIEQboY,279251
31
35
  pyfemtet/opt/femprj_sample/gau_ex08_parametric.py,sha256=7SLe6Qbi2AGm1Li7kotyy2qSYynX2YitoW255XRxOOI,1956
36
+ pyfemtet/opt/femprj_sample/gau_ex08_parametric_test_result.reccsv,sha256=usCllUrcaDihii8rSyCcZDhXp1wJI01P-yzm-BHfhb4,2779
32
37
  pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj,sha256=LLAUDlUo1dIpRzlKPs1lvACzJQxjnWW3xAGAodYEqRM,117221
33
38
  pyfemtet/opt/femprj_sample/her_ex40_parametric.py,sha256=9ubwnEavFpjbTAbH5RmYwYoGxATl-ehW_oH_kDLTlXs,4839
39
+ pyfemtet/opt/femprj_sample/her_ex40_parametric_test_result.reccsv,sha256=_vTN2GdxPcHZByNw14izdYB190Vn6WROp7-qOHW7QU8,2845
34
40
  pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj,sha256=z2NHFJWiuiLv_zhxjFpLpmRbYVvQ43bAMj_NLioQGsk,262283
35
41
  pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py,sha256=nFBQPr2gaCoLVxZDsKVUU_aZ3I9ZwbQCwz1_qJTSgOU,2388
36
42
  pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py,sha256=2IPq3SMrd2TCQMKL0_NA7ELBAj9yqwNe2RiMWpopw_M,2499
43
+ pyfemtet/opt/femprj_sample/paswat_ex1_parametric_test_result.reccsv,sha256=RjENlloyx71dkZJ_fIY6FVWKnSBCT_RmV1dO98eJxyY,3303
37
44
  pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj,sha256=F-yu2dGrsbrIA1Lhizu2aHTjQFTohyBmOuJv-Iyl8jk,179596
38
45
  pyfemtet/opt/femprj_sample/wat_ex14_parametric.py,sha256=sGj0khYO7_yGyXGHbdWJ883XvzO1HUbrgBLjiS2d7TM,2240
46
+ pyfemtet/opt/femprj_sample/wat_ex14_parametric_test_result.reccsv,sha256=92IkN7HdHBatyacO6aU3MVhOG6rkXlodlw34oF91BSM,3056
39
47
  pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj,sha256=0RBhOGhtiFAp0QSCTBYEaDY9EZymn9hJYchAOJ6PaBA,143533
40
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py,sha256=2LE-3d0XEChqCSwgUi45V8eAsF_YUGUgO9jLx5u5bjQ,4797
48
+ pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py,sha256=eH7u_Mq-THlEV4R1mlrSK6uVz5-_KiO3p4Rl57A_Cik,4926
41
49
  pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj,sha256=ZZhT9XjB9Xu9YwHWv4gbvKBiUWlOFKEoHjAcGWb3vvQ,128026
42
50
  pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py,sha256=o8P6o7Q0d0Jj02Qeij8kxbduyyKf_fNHSlXU_1H65S8,4864
43
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj,sha256=zmKyHbVI2vYaQU3KYrAfsiA1d87HVfDYw27VAcd1Yno,75668
51
+ pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj,sha256=PzqtNVde6VnMHFpedRBsOq9JVhCY0ymQPVs54EKsNLw,75668
44
52
  pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py,sha256=gnCPiaxCPITAP-972DylFQ0BNpDJLeal9HPf5cfbhRI,2488
45
53
  pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj,sha256=TTXw_8YT8pzHQlu4ufGzTq1IFYSwcWWt4GA6sIY1YPM,295600
46
54
  pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py,sha256=GxfAb5_0F9tK_i9almLdQh7OjzdNFo_leoyIPtPCqvM,2114
@@ -52,21 +60,21 @@ pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py,sha256=zpkGyK
52
60
  pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
53
61
  pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py,sha256=vnfI4WuCvyjQN1MhnzyB-jcAPtTwz3yNiwtTm2yQZHU,2311
54
62
  pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
55
- pyfemtet/opt/interface/_base.py,sha256=lDjdvKYmBMxSc7SfoWSu91qVijGaQ2Ng-0C7z_f4eFM,2079
56
- pyfemtet/opt/interface/_femtet.py,sha256=oNgOB-Frtc0ffIHgC-Knf0iAXqicM3zRtVQA__QIQiU,26209
57
- pyfemtet/opt/interface/_femtet_parametric.py,sha256=BmKeha6ivYIqNieA7iYSEoo-_xn8TSte-jzsmhlwy38,2822
63
+ pyfemtet/opt/interface/_base.py,sha256=Ti2wCicyeofAZ0DzQLYoj9PBj1lyM5_lbLa0LBoypLM,2228
64
+ pyfemtet/opt/interface/_femtet.py,sha256=PSy1AldNK7Yg7tmxzqEmwCb5oYXouh_Y6p2vrxtwnDY,33151
65
+ pyfemtet/opt/interface/_femtet_parametric.py,sha256=l3Ka-e6WPTM4cerIFT4_qK6o80Lk9oHPsOnXUaJufm4,2883
58
66
  pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
59
- pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=kTEmfAyLMEZvYTYjGXgYnoyhi-wDzhKK7opyVp7rOcY,3931
60
- pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=t0AB7mKY7rmrI_9stP1-5qhzmugEQ19DnZ4CCrCdTSw,2856
67
+ pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=8ZvD6ajNmKUqXPkDsGJ4tOHrQOYwWBlO9OSPaCO3ml0,5666
68
+ pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=uFf_SU96_BYUmLBBR5w3NS3WqXvEvSbOoxVnz9FA3Ug,3187
61
69
  pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=400FidHp7mBAVLyxzLlLtGYNzK_TtK61ycd4vFjHES0,6254
62
70
  pyfemtet/opt/opt/__init__.py,sha256=eQh-7PJN2YEUbHZnjinbeIyb0bk1wSh76TaEAa2l8SU,191
63
- pyfemtet/opt/opt/_base.py,sha256=yEnPWAxFUIRNmUV-nbfCW4N3naDkkzQGME3qsDgEBFQ,7571
71
+ pyfemtet/opt/opt/_base.py,sha256=PIEoahy7VdnrfR4jknGiB0ZzJTPzM7gEpErb6Zsm2l4,7692
64
72
  pyfemtet/opt/opt/_optuna.py,sha256=TWtp9auU6GBWtEJVOuo8aWSvLcCHCUNUyOQRnqyln4I,9996
65
73
  pyfemtet/opt/visualization/__init__.py,sha256=PUCHoZnuZrHjTd0QQQBgzWkCpKY2noBPTvi-lyvxQyw,193
66
- pyfemtet/opt/visualization/_graphs.py,sha256=G6HaoGD3GpuwXih1nuTeFQMD0zv4jrhogedP9hxaG1c,5306
67
- pyfemtet/opt/visualization/_monitor.py,sha256=X2KR6fd8qf1U58Qr_o0jn0FTm1w9ARMPhs4eMYgGipI,42100
68
- pyfemtet-0.4.6.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
69
- pyfemtet-0.4.6.dist-info/METADATA,sha256=F71t5_WaaWazfhzMkfhw9_EC5NbFd8nMn-HsXSgoM3w,3332
70
- pyfemtet-0.4.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
71
- pyfemtet-0.4.6.dist-info/entry_points.txt,sha256=E_NUq8BEuKLM3z6Ou0sh6HyvaKE5O6NBDlmO-wgEGaQ,67
72
- pyfemtet-0.4.6.dist-info/RECORD,,
74
+ pyfemtet/opt/visualization/_graphs.py,sha256=eovw8ShTGGWaDNr-nZuQZd3aa_gcYr-zziB0ZSI8JPg,5436
75
+ pyfemtet/opt/visualization/_monitor.py,sha256=kMPvptwC3hQXbmrXt6HIyF1qApgUxiSH8zrE7MevgdY,45431
76
+ pyfemtet-0.4.8.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
77
+ pyfemtet-0.4.8.dist-info/METADATA,sha256=TTFX4zlFXMSiozRcC_jdlEXNpaeddgUf0URfqHARN18,3381
78
+ pyfemtet-0.4.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
79
+ pyfemtet-0.4.8.dist-info/entry_points.txt,sha256=E_NUq8BEuKLM3z6Ou0sh6HyvaKE5O6NBDlmO-wgEGaQ,67
80
+ pyfemtet-0.4.8.dist-info/RECORD,,