pyfemtet 0.5.3__py3-none-any.whl → 0.5.4__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.
- pyfemtet/__init__.py +1 -1
- pyfemtet/{message → _message}/locales/ja/LC_MESSAGES/messages.po +88 -76
- pyfemtet/{message → _message}/locales/messages.pot +88 -76
- pyfemtet/{message → _message}/messages.py +1 -1
- pyfemtet/_warning.py +23 -0
- pyfemtet/dispatch_extensions/__init__.py +12 -0
- pyfemtet/{dispatch_extensions.py → dispatch_extensions/_impl.py} +45 -43
- pyfemtet/logger/__init__.py +3 -0
- pyfemtet/{logger.py → logger/_impl.py} +12 -6
- pyfemtet/opt/_femopt.py +236 -58
- pyfemtet/opt/_femopt_core.py +12 -5
- pyfemtet/opt/_test_utils/record_history.py +1 -1
- pyfemtet/opt/interface/__init__.py +0 -1
- pyfemtet/opt/interface/_base.py +3 -3
- pyfemtet/opt/interface/_femtet.py +101 -55
- pyfemtet/opt/interface/_femtet_with_nx/_interface.py +35 -12
- pyfemtet/opt/interface/_femtet_with_sldworks.py +22 -2
- pyfemtet/opt/optimizer/_base.py +76 -42
- pyfemtet/opt/optimizer/_optuna.py +33 -1
- pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py +1 -1
- pyfemtet/opt/optimizer/_scipy.py +20 -5
- pyfemtet/opt/optimizer/_scipy_scalar.py +20 -5
- pyfemtet/opt/prediction/{base.py → _base.py} +3 -2
- pyfemtet/opt/prediction/single_task_gp.py +10 -5
- pyfemtet/opt/visualization/{base.py → _base.py} +1 -1
- pyfemtet/opt/visualization/{complex_components → _complex_components}/alert_region.py +2 -2
- pyfemtet/opt/visualization/{complex_components → _complex_components}/control_femtet.py +3 -3
- pyfemtet/opt/visualization/{complex_components → _complex_components}/main_figure_creator.py +1 -1
- pyfemtet/opt/visualization/{complex_components → _complex_components}/main_graph.py +5 -5
- pyfemtet/opt/visualization/{complex_components → _complex_components}/pm_graph.py +5 -5
- pyfemtet/opt/visualization/{complex_components → _complex_components}/pm_graph_creator.py +2 -2
- pyfemtet/opt/visualization/_create_wrapped_components.py +2 -2
- pyfemtet/opt/visualization/{process_monitor → _process_monitor}/application.py +3 -3
- pyfemtet/opt/visualization/{process_monitor → _process_monitor}/pages.py +10 -10
- pyfemtet/opt/visualization/{wrapped_components → _wrapped_components}/dbc.py +1 -1
- pyfemtet/opt/visualization/{wrapped_components → _wrapped_components}/dcc.py +1 -1
- pyfemtet/opt/visualization/{wrapped_components → _wrapped_components}/html.py +1 -1
- pyfemtet/opt/visualization/result_viewer/application.py +4 -4
- pyfemtet/opt/visualization/result_viewer/pages.py +9 -9
- {pyfemtet-0.5.3.dist-info → pyfemtet-0.5.4.dist-info}/METADATA +2 -2
- {pyfemtet-0.5.3.dist-info → pyfemtet-0.5.4.dist-info}/RECORD +53 -51
- {pyfemtet-0.5.3.dist-info → pyfemtet-0.5.4.dist-info}/WHEEL +1 -1
- pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo +0 -0
- /pyfemtet/{message → _message}/1. make_pot.bat +0 -0
- /pyfemtet/{message → _message}/2. make_mo.bat +0 -0
- /pyfemtet/{message → _message}/__init__.py +0 -0
- /pyfemtet/{message → _message}/babel.cfg +0 -0
- /pyfemtet/opt/{parameter.py → optimizer/parameter.py} +0 -0
- /pyfemtet/opt/visualization/{complex_components → _complex_components}/__init__.py +0 -0
- /pyfemtet/opt/visualization/{process_monitor → _process_monitor}/__init__.py +0 -0
- /pyfemtet/opt/visualization/{wrapped_components → _wrapped_components}/__init__.py +0 -0
- /pyfemtet/opt/visualization/{wrapped_components → _wrapped_components}/str_enum.py +0 -0
- {pyfemtet-0.5.3.dist-info → pyfemtet-0.5.4.dist-info}/LICENSE +0 -0
- {pyfemtet-0.5.3.dist-info → pyfemtet-0.5.4.dist-info}/entry_points.txt +0 -0
pyfemtet/opt/optimizer/_scipy.py
CHANGED
|
@@ -15,7 +15,7 @@ from scipy.optimize import minimize, OptimizeResult
|
|
|
15
15
|
from pyfemtet.opt._femopt_core import OptimizationStatus, generate_lhs
|
|
16
16
|
from pyfemtet.opt.optimizer import AbstractOptimizer, logger, OptimizationMethodChecker
|
|
17
17
|
from pyfemtet.core import MeshError, ModelError, SolveError
|
|
18
|
-
from pyfemtet.
|
|
18
|
+
from pyfemtet._message import Msg
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class StopIteration2(Exception):
|
|
@@ -57,15 +57,30 @@ class ScipyMethodChecker(OptimizationMethodChecker):
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class ScipyOptimizer(AbstractOptimizer):
|
|
60
|
+
"""Optimizer using ```scipy```.
|
|
61
|
+
|
|
62
|
+
This class provides an interface for the optimization
|
|
63
|
+
engine using Scipy. For more details, please refer to
|
|
64
|
+
the Scipy documentation.
|
|
65
|
+
|
|
66
|
+
See Also:
|
|
67
|
+
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
**minimize_kwargs:
|
|
71
|
+
The keyword arguments of
|
|
72
|
+
```scipy.optimize.minimize```.
|
|
73
|
+
|
|
74
|
+
Attributes:
|
|
75
|
+
res (OptimizeResult):
|
|
76
|
+
The return value of ```scipy.optimize.minimize```.
|
|
77
|
+
|
|
78
|
+
"""
|
|
60
79
|
|
|
61
80
|
def __init__(
|
|
62
81
|
self,
|
|
63
82
|
**minimize_kwargs,
|
|
64
83
|
):
|
|
65
|
-
"""
|
|
66
|
-
Args:
|
|
67
|
-
**minimize_kwargs: Kwargs of `scipy.optimize.minimize`.
|
|
68
|
-
"""
|
|
69
84
|
super().__init__()
|
|
70
85
|
|
|
71
86
|
# define members
|
|
@@ -15,7 +15,7 @@ from scipy.optimize import minimize_scalar, OptimizeResult
|
|
|
15
15
|
from pyfemtet.opt._femopt_core import OptimizationStatus, generate_lhs
|
|
16
16
|
from pyfemtet.opt.optimizer import AbstractOptimizer, logger, OptimizationMethodChecker
|
|
17
17
|
from pyfemtet.core import MeshError, ModelError, SolveError
|
|
18
|
-
from pyfemtet.
|
|
18
|
+
from pyfemtet._message import Msg
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class ScipyScalarMethodChecker(OptimizationMethodChecker):
|
|
@@ -26,15 +26,30 @@ class ScipyScalarMethodChecker(OptimizationMethodChecker):
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class ScipyScalarOptimizer(AbstractOptimizer):
|
|
29
|
+
"""Optimizer using ```scipy```.
|
|
30
|
+
|
|
31
|
+
This class provides an interface for the optimization
|
|
32
|
+
engine using Scipy. For more details, please refer to
|
|
33
|
+
the Scipy documentation.
|
|
34
|
+
|
|
35
|
+
See Also:
|
|
36
|
+
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize_scalar.html
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
**minimize_kwargs:
|
|
40
|
+
The keyword arguments of
|
|
41
|
+
```scipy.optimize.minimize_scalar```.
|
|
42
|
+
|
|
43
|
+
Attributes:
|
|
44
|
+
res (OptimizeResult):
|
|
45
|
+
The return value of ```scipy.optimize.minimize_scalar```.
|
|
46
|
+
|
|
47
|
+
"""
|
|
29
48
|
|
|
30
49
|
def __init__(
|
|
31
50
|
self,
|
|
32
51
|
**minimize_kwargs,
|
|
33
52
|
):
|
|
34
|
-
"""
|
|
35
|
-
Args:
|
|
36
|
-
**minimize_kwargs: Kwargs of `scipy.optimize.minimize_scalar` __except ``fun``.__.
|
|
37
|
-
"""
|
|
38
53
|
super().__init__()
|
|
39
54
|
|
|
40
55
|
# define members
|
|
@@ -7,11 +7,12 @@ from pyfemtet.opt._femopt_core import History
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class PredictionModelBase(ABC):
|
|
10
|
+
"""Simple Abstract surrogate model class."""
|
|
10
11
|
|
|
11
12
|
@abstractmethod
|
|
12
13
|
def fit(self, x: np.ndarray, y: np.ndarray):
|
|
13
14
|
"""
|
|
14
|
-
|
|
15
|
+
Args:
|
|
15
16
|
x (np.ndarray): Input. (Point number) rows and (variable number) columns.
|
|
16
17
|
y (np.ndarray): Output. (Point number) rows and (objective number) columns.
|
|
17
18
|
"""
|
|
@@ -19,7 +20,7 @@ class PredictionModelBase(ABC):
|
|
|
19
20
|
@abstractmethod
|
|
20
21
|
def predict(self, x: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
|
|
21
22
|
"""
|
|
22
|
-
|
|
23
|
+
Args:
|
|
23
24
|
x (np.ndarray): Input. (Point number) rows and (variable number) columns.
|
|
24
25
|
Returns:
|
|
25
26
|
np.ndarray: (Point number) rows and (objective number) columns. Index 0 is mean and index 1 is std.
|
|
@@ -6,10 +6,10 @@ from botorch.models import SingleTaskGP
|
|
|
6
6
|
from botorch.fit import fit_gpytorch_mll
|
|
7
7
|
from gpytorch.mlls import ExactMarginalLogLikelihood
|
|
8
8
|
|
|
9
|
-
from pyfemtet.opt.prediction.
|
|
9
|
+
from pyfemtet.opt.prediction._base import PredictionModelBase
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class
|
|
12
|
+
class _StandardScaler:
|
|
13
13
|
|
|
14
14
|
# noinspection PyAttributeOutsideInit
|
|
15
15
|
def fit_transform(self, x: torch.Tensor) -> torch.Tensor:
|
|
@@ -27,7 +27,7 @@ class MyStandardScaler:
|
|
|
27
27
|
return torch.tensor(x.numpy() * self.s**2).double()
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
class
|
|
30
|
+
class _MinMaxScaler:
|
|
31
31
|
|
|
32
32
|
# noinspection PyAttributeOutsideInit
|
|
33
33
|
def fit_transform(self, x: torch.Tensor) -> torch.Tensor:
|
|
@@ -46,6 +46,11 @@ class MyMinMaxScaler:
|
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class SingleTaskGPModel(PredictionModelBase):
|
|
49
|
+
"""Simple interface surrogate model using ```SingleTaskGP```.
|
|
50
|
+
|
|
51
|
+
See Also:
|
|
52
|
+
https://botorch.org/api/models.html#botorch.models.gp_regression.SingleTaskGP
|
|
53
|
+
"""
|
|
49
54
|
|
|
50
55
|
# noinspection PyAttributeOutsideInit
|
|
51
56
|
def fit(self, x: np.ndarray, y: np.ndarray):
|
|
@@ -56,11 +61,11 @@ class SingleTaskGPModel(PredictionModelBase):
|
|
|
56
61
|
self._is_single_objective = len(y[0]) == 1
|
|
57
62
|
|
|
58
63
|
# Normalize the input data to the unit cube
|
|
59
|
-
self.scaler_x =
|
|
64
|
+
self.scaler_x = _MinMaxScaler()
|
|
60
65
|
train_x = self.scaler_x.fit_transform(train_x)
|
|
61
66
|
|
|
62
67
|
# Standardize the output data
|
|
63
|
-
self.scaler_y =
|
|
68
|
+
self.scaler_y = _StandardScaler()
|
|
64
69
|
train_y = self.scaler_y.fit_transform(train_y)
|
|
65
70
|
|
|
66
71
|
# Fit a Gaussian Process model using the extracted data
|
|
@@ -14,7 +14,7 @@ from dash import Output, Input # , State, no_update, callback_context
|
|
|
14
14
|
import dash_bootstrap_components
|
|
15
15
|
|
|
16
16
|
from pyfemtet.opt._femopt_core import History
|
|
17
|
-
from pyfemtet.opt.visualization.
|
|
17
|
+
from pyfemtet.opt.visualization._wrapped_components import html, dcc, dbc
|
|
18
18
|
|
|
19
19
|
# the others
|
|
20
20
|
from abc import ABC, abstractmethod
|
|
@@ -7,9 +7,9 @@ from dash import Output, Input, State, no_update, callback_context
|
|
|
7
7
|
from dash.exceptions import PreventUpdate
|
|
8
8
|
|
|
9
9
|
# components
|
|
10
|
-
from pyfemtet.opt.visualization.
|
|
10
|
+
from pyfemtet.opt.visualization._wrapped_components import html, dcc, dbc
|
|
11
11
|
|
|
12
|
-
from pyfemtet.opt.visualization.
|
|
12
|
+
from pyfemtet.opt.visualization._base import AbstractPage, logger
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class AlertRegion(AbstractPage):
|
|
@@ -6,7 +6,7 @@ from dash import Output, Input, State, no_update, callback_context
|
|
|
6
6
|
from dash.exceptions import PreventUpdate
|
|
7
7
|
|
|
8
8
|
# components
|
|
9
|
-
from pyfemtet.opt.visualization.
|
|
9
|
+
from pyfemtet.opt.visualization._wrapped_components import html, dcc, dbc
|
|
10
10
|
|
|
11
11
|
# the others
|
|
12
12
|
import logging
|
|
@@ -16,9 +16,9 @@ import json
|
|
|
16
16
|
# noinspection PyUnresolvedReferences
|
|
17
17
|
from pythoncom import com_error
|
|
18
18
|
|
|
19
|
-
from pyfemtet.opt.visualization.
|
|
19
|
+
from pyfemtet.opt.visualization._base import PyFemtetApplicationBase, AbstractPage, logger
|
|
20
20
|
from pyfemtet.opt.interface._femtet import FemtetInterface
|
|
21
|
-
from pyfemtet.
|
|
21
|
+
from pyfemtet._message import Msg
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class FemtetState(Enum):
|
|
@@ -7,7 +7,7 @@ from dash.exceptions import PreventUpdate
|
|
|
7
7
|
|
|
8
8
|
# components
|
|
9
9
|
from dash import dash_table
|
|
10
|
-
from pyfemtet.opt.visualization.
|
|
10
|
+
from pyfemtet.opt.visualization._wrapped_components import html, dcc, dbc
|
|
11
11
|
|
|
12
12
|
# graph
|
|
13
13
|
import pandas as pd
|
|
@@ -20,9 +20,9 @@ import base64
|
|
|
20
20
|
import json
|
|
21
21
|
import numpy as np
|
|
22
22
|
|
|
23
|
-
from pyfemtet.opt.visualization.
|
|
24
|
-
from pyfemtet.opt.visualization.
|
|
25
|
-
from pyfemtet.
|
|
23
|
+
from pyfemtet.opt.visualization._complex_components import main_figure_creator
|
|
24
|
+
from pyfemtet.opt.visualization._base import AbstractPage, logger
|
|
25
|
+
from pyfemtet._message import Msg
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
FLEXBOX_STYLE_ALLOW_VERTICAL_FILL = {
|
|
@@ -556,7 +556,7 @@ class MainGraph(AbstractPage):
|
|
|
556
556
|
return fig
|
|
557
557
|
|
|
558
558
|
def data_accessor(self) -> pd.DataFrame:
|
|
559
|
-
from pyfemtet.opt.visualization.
|
|
559
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
560
560
|
if isinstance(self.application, ProcessMonitorApplication):
|
|
561
561
|
df = self.application.local_data
|
|
562
562
|
else:
|
|
@@ -7,7 +7,7 @@ from dash.exceptions import PreventUpdate
|
|
|
7
7
|
|
|
8
8
|
# components
|
|
9
9
|
from dash import dash_table
|
|
10
|
-
from pyfemtet.opt.visualization.
|
|
10
|
+
from pyfemtet.opt.visualization._wrapped_components import html, dcc, dbc
|
|
11
11
|
|
|
12
12
|
# graph
|
|
13
13
|
import pandas as pd
|
|
@@ -21,9 +21,9 @@ import base64
|
|
|
21
21
|
import json
|
|
22
22
|
import numpy as np
|
|
23
23
|
|
|
24
|
-
from pyfemtet.opt.visualization.
|
|
25
|
-
from pyfemtet.opt.visualization.
|
|
26
|
-
from pyfemtet.
|
|
24
|
+
from pyfemtet.opt.visualization._complex_components.pm_graph_creator import PredictionModelCreator
|
|
25
|
+
from pyfemtet.opt.visualization._base import AbstractPage, logger
|
|
26
|
+
from pyfemtet._message import Msg
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
FLEXBOX_STYLE_ALLOW_VERTICAL_FILL = {
|
|
@@ -602,7 +602,7 @@ class PredictionModelGraph(AbstractPage):
|
|
|
602
602
|
# return fig
|
|
603
603
|
|
|
604
604
|
def data_accessor(self) -> pd.DataFrame:
|
|
605
|
-
from pyfemtet.opt.visualization.
|
|
605
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
606
606
|
if isinstance(self.application, ProcessMonitorApplication):
|
|
607
607
|
df = self.application.local_data
|
|
608
608
|
else:
|
|
@@ -9,9 +9,9 @@ import plotly.express as px
|
|
|
9
9
|
|
|
10
10
|
from pyfemtet.opt._femopt_core import History
|
|
11
11
|
|
|
12
|
-
from pyfemtet.opt.prediction.
|
|
12
|
+
from pyfemtet.opt.prediction._base import PyFemtetPredictionModel
|
|
13
13
|
from pyfemtet.opt.prediction.single_task_gp import SingleTaskGPModel
|
|
14
|
-
from pyfemtet.
|
|
14
|
+
from pyfemtet._message import Msg
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class PredictionModelCreator:
|
|
@@ -12,13 +12,13 @@ import dash_bootstrap_components as dbc
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
here, me = os.path.split(__file__)
|
|
15
|
-
COMPONENT_FILE_DIR = os.path.join(here, '
|
|
15
|
+
COMPONENT_FILE_DIR = os.path.join(here, '_wrapped_components')
|
|
16
16
|
indent = ' '
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def create(module_name: str) -> str:
|
|
20
20
|
header = '''# auto created module
|
|
21
|
-
from pyfemtet.opt.visualization.
|
|
21
|
+
from pyfemtet.opt.visualization._wrapped_components.str_enum import StrEnum
|
|
22
22
|
# from enum import StrEnum
|
|
23
23
|
import dash
|
|
24
24
|
import dash_bootstrap_components
|
|
@@ -4,9 +4,9 @@ from threading import Thread
|
|
|
4
4
|
|
|
5
5
|
import pandas as pd
|
|
6
6
|
|
|
7
|
-
from pyfemtet.opt.visualization.
|
|
8
|
-
from pyfemtet.opt.visualization.
|
|
9
|
-
from pyfemtet.
|
|
7
|
+
from pyfemtet.opt.visualization._base import PyFemtetApplicationBase, logger
|
|
8
|
+
from pyfemtet.opt.visualization._process_monitor.pages import HomePage, WorkerPage, PredictionModelPage, OptunaVisualizerPage
|
|
9
|
+
from pyfemtet._message import Msg
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class ProcessMonitorApplication(PyFemtetApplicationBase):
|
|
@@ -6,11 +6,11 @@ import optuna
|
|
|
6
6
|
from dash import Output, Input, State, callback_context, no_update, ALL
|
|
7
7
|
from dash.exceptions import PreventUpdate
|
|
8
8
|
|
|
9
|
-
from pyfemtet.opt.visualization.
|
|
10
|
-
from pyfemtet.opt.visualization.
|
|
11
|
-
from pyfemtet.opt.visualization.
|
|
12
|
-
from pyfemtet.opt.visualization.
|
|
13
|
-
from pyfemtet.
|
|
9
|
+
from pyfemtet.opt.visualization._wrapped_components import dcc, dbc, html
|
|
10
|
+
from pyfemtet.opt.visualization._base import AbstractPage, logger
|
|
11
|
+
from pyfemtet.opt.visualization._complex_components.main_graph import MainGraph # , FLEXBOX_STYLE_ALLOW_VERTICAL_FILL
|
|
12
|
+
from pyfemtet.opt.visualization._complex_components.pm_graph import PredictionModelGraph
|
|
13
|
+
from pyfemtet._message import Msg
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
DBC_COLUMN_STYLE_CENTER = {
|
|
@@ -112,7 +112,7 @@ class HomePage(AbstractPage):
|
|
|
112
112
|
# setup callback of subpages
|
|
113
113
|
super().setup_callback()
|
|
114
114
|
|
|
115
|
-
from pyfemtet.opt.visualization.
|
|
115
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
116
116
|
from pyfemtet.opt._femopt_core import OptimizationStatus
|
|
117
117
|
self.application: ProcessMonitorApplication = self.application
|
|
118
118
|
|
|
@@ -229,7 +229,7 @@ class HomePage(AbstractPage):
|
|
|
229
229
|
class WorkerPage(AbstractPage):
|
|
230
230
|
|
|
231
231
|
def __init__(self, title, rel_url, application):
|
|
232
|
-
from pyfemtet.opt.visualization.
|
|
232
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
233
233
|
self.application: ProcessMonitorApplication = None
|
|
234
234
|
super().__init__(title, rel_url, application)
|
|
235
235
|
|
|
@@ -281,7 +281,7 @@ class PredictionModelPage(AbstractPage):
|
|
|
281
281
|
""""""
|
|
282
282
|
|
|
283
283
|
def __init__(self, title, rel_url, application):
|
|
284
|
-
from pyfemtet.opt.visualization.
|
|
284
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
285
285
|
self.application: ProcessMonitorApplication = None
|
|
286
286
|
super().__init__(title, rel_url, application)
|
|
287
287
|
|
|
@@ -296,7 +296,7 @@ class PredictionModelPage(AbstractPage):
|
|
|
296
296
|
class OptunaVisualizerPage(AbstractPage):
|
|
297
297
|
|
|
298
298
|
def __init__(self, title, rel_url, application):
|
|
299
|
-
from pyfemtet.opt.visualization.
|
|
299
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
300
300
|
self.application: ProcessMonitorApplication = None
|
|
301
301
|
super().__init__(title, rel_url, application)
|
|
302
302
|
|
|
@@ -385,7 +385,7 @@ class OptunaVisualizerPage(AbstractPage):
|
|
|
385
385
|
pass
|
|
386
386
|
|
|
387
387
|
def data_accessor(self) -> pd.DataFrame:
|
|
388
|
-
from pyfemtet.opt.visualization.
|
|
388
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
389
389
|
if isinstance(self.application, ProcessMonitorApplication):
|
|
390
390
|
df = self.application.local_data
|
|
391
391
|
else:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from pyfemtet.opt.visualization.
|
|
1
|
+
from pyfemtet.opt.visualization._base import PyFemtetApplicationBase
|
|
2
2
|
from pyfemtet.opt.visualization.result_viewer.pages import HomePage, PredictionModelPage
|
|
3
|
-
from pyfemtet.opt.visualization.
|
|
3
|
+
from pyfemtet.opt.visualization._process_monitor.pages import OptunaVisualizerPage
|
|
4
4
|
|
|
5
|
-
from pyfemtet.
|
|
5
|
+
from pyfemtet._message import Msg
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class ResultViewerApplication(PyFemtetApplicationBase):
|
|
@@ -18,7 +18,7 @@ class ResultViewerApplication(PyFemtetApplicationBase):
|
|
|
18
18
|
super().setup_callback()
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def
|
|
21
|
+
def _debug():
|
|
22
22
|
import os
|
|
23
23
|
os.chdir(os.path.dirname(__file__))
|
|
24
24
|
|
|
@@ -10,16 +10,16 @@ import shutil
|
|
|
10
10
|
from dash import Output, Input, State, callback_context, no_update
|
|
11
11
|
from dash.exceptions import PreventUpdate
|
|
12
12
|
|
|
13
|
-
from pyfemtet.opt.visualization.
|
|
14
|
-
from pyfemtet.opt.visualization.
|
|
15
|
-
from pyfemtet.opt.visualization.
|
|
16
|
-
from pyfemtet.opt.visualization.
|
|
17
|
-
from pyfemtet.opt.visualization.
|
|
18
|
-
from pyfemtet.opt.visualization.
|
|
13
|
+
from pyfemtet.opt.visualization._wrapped_components import dcc, dbc, html
|
|
14
|
+
from pyfemtet.opt.visualization._base import AbstractPage # , logger
|
|
15
|
+
from pyfemtet.opt.visualization._complex_components.main_graph import MainGraph # , FLEXBOX_STYLE_ALLOW_VERTICAL_FILL
|
|
16
|
+
from pyfemtet.opt.visualization._complex_components.control_femtet import FemtetControl, FemtetState
|
|
17
|
+
from pyfemtet.opt.visualization._complex_components.alert_region import AlertRegion
|
|
18
|
+
from pyfemtet.opt.visualization._complex_components.pm_graph import PredictionModelGraph
|
|
19
19
|
|
|
20
20
|
from pyfemtet.opt._femopt_core import History
|
|
21
21
|
|
|
22
|
-
from pyfemtet.
|
|
22
|
+
from pyfemtet._message import Msg
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class HomePage(AbstractPage):
|
|
@@ -203,7 +203,7 @@ class HomePage(AbstractPage):
|
|
|
203
203
|
trial = pt['customdata'][0]
|
|
204
204
|
|
|
205
205
|
# get pdt path
|
|
206
|
-
pdt_path = self.femtet_control.fem.
|
|
206
|
+
pdt_path = self.femtet_control.fem._create_pdt_path(femprj_path, model_name, trial)
|
|
207
207
|
|
|
208
208
|
# check pdt exists
|
|
209
209
|
if not os.path.exists(pdt_path):
|
|
@@ -721,7 +721,7 @@ class PredictionModelPage(AbstractPage):
|
|
|
721
721
|
""""""
|
|
722
722
|
|
|
723
723
|
def __init__(self, title, rel_url, application):
|
|
724
|
-
from pyfemtet.opt.visualization.
|
|
724
|
+
from pyfemtet.opt.visualization._process_monitor.application import ProcessMonitorApplication
|
|
725
725
|
self.application: ProcessMonitorApplication = None
|
|
726
726
|
super().__init__(title, rel_url, application)
|
|
727
727
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyfemtet
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: Design parameter optimization using Femtet.
|
|
5
5
|
Home-page: https://github.com/pyfemtet/pyfemtet
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -56,7 +56,7 @@ Description-Content-Type: text/markdown
|
|
|
56
56
|
|
|
57
57
|
- Femtet Website: https://www.muratasoftware.com/
|
|
58
58
|
- Documentation (English): https://pyfemtet.readthedocs.io/en/stable/
|
|
59
|
-
- ドキュメント(日本語): https://pyfemtet.readthedocs.io/
|
|
59
|
+
- ドキュメント(日本語): https://pyfemtet.readthedocs.io/ja/stable/
|
|
60
60
|
- Source code: https://github.com/pyfemtet/pyfemtet
|
|
61
61
|
- Bug reports: https://github.com/pyfemtet/pyfemtet/issues
|
|
62
62
|
|
|
@@ -1,40 +1,42 @@
|
|
|
1
|
-
pyfemtet/__init__.py,sha256=
|
|
1
|
+
pyfemtet/__init__.py,sha256=Wnyz-v1lRv9-GD-MTR4pBOZzz-7bZa5truzk5to0t-I,21
|
|
2
|
+
pyfemtet/_message/1. make_pot.bat,sha256=oS38xYsaUnQAuKwUR8hZJFgt3AKBU993fWFDSg2ROz4,570
|
|
3
|
+
pyfemtet/_message/2. make_mo.bat,sha256=nqUi3Cze7JGKkYItlch8ZG2gSbRNZiS2ltuCS7DbmG8,154
|
|
4
|
+
pyfemtet/_message/__init__.py,sha256=gE1-XX_PzHj9BbhqPaK5VcIHuv6_Tec5qlPMC3IRiBg,100
|
|
5
|
+
pyfemtet/_message/babel.cfg,sha256=rlvsm_EjDU2ki-OLVPG3toWspVuVA0JFAFvFp2U-By4,72
|
|
6
|
+
pyfemtet/_message/locales/ja/LC_MESSAGES/messages.po,sha256=Eu8GKYeGojAxjlHQ3HK68jPeHAnJ7DI9wShKiQtxrJs,24125
|
|
7
|
+
pyfemtet/_message/locales/messages.pot,sha256=jwgOPidxH6wT76sXQD6XIzDLGzYnv9SRt6tHTCd1xx0,14143
|
|
8
|
+
pyfemtet/_message/messages.py,sha256=tz1D_yncQz2mrPDRXWyiAW2aPj8_uD_py_VufbCcCVg,13188
|
|
9
|
+
pyfemtet/_warning.py,sha256=QgZvm1eJI09FUh8E5qJE4vCLrHnUIoQ0C9KmZDA05A4,616
|
|
2
10
|
pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
|
|
3
|
-
pyfemtet/dispatch_extensions.py,sha256=
|
|
4
|
-
pyfemtet/
|
|
5
|
-
pyfemtet/
|
|
6
|
-
pyfemtet/
|
|
7
|
-
pyfemtet/message/__init__.py,sha256=gE1-XX_PzHj9BbhqPaK5VcIHuv6_Tec5qlPMC3IRiBg,100
|
|
8
|
-
pyfemtet/message/babel.cfg,sha256=rlvsm_EjDU2ki-OLVPG3toWspVuVA0JFAFvFp2U-By4,72
|
|
9
|
-
pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo,sha256=hbW3KO524_lFYIhU-QGMhHMW4LHnxyecnptFD55ECMo,18332
|
|
10
|
-
pyfemtet/message/locales/ja/LC_MESSAGES/messages.po,sha256=f8rimJEqmLdlrE7JBwETm-Gq2-USOZcSEpnzMqBqk88,23617
|
|
11
|
-
pyfemtet/message/locales/messages.pot,sha256=_gVMy6qaSU7Qu6zIY8KQizb1XpTZ0ijLKbnnk4lAAdg,13635
|
|
12
|
-
pyfemtet/message/messages.py,sha256=i0cOOV8NnBeT1gG-tqgnu_3dIym1hZG8Hzg38sh_Qeo,13187
|
|
11
|
+
pyfemtet/dispatch_extensions/__init__.py,sha256=MI9b6oIS2IXnTNHy8jvZ4QURdTHQd9PN-gifYxqVvk4,272
|
|
12
|
+
pyfemtet/dispatch_extensions/_impl.py,sha256=HU7rKRAzEe5yYukWrKtdi1aIbUas_kLyaa_KZZGCELE,16244
|
|
13
|
+
pyfemtet/logger/__init__.py,sha256=DZNTD9BboiFU9LOiyPKi_Y6gWAga5f1lWkVoq7LV_y0,71
|
|
14
|
+
pyfemtet/logger/_impl.py,sha256=ZN5Rj3kb9UEGFt5KSLlzwfrLF_SAoOxgPBkadwh2Y8w,2825
|
|
13
15
|
pyfemtet/opt/__init__.py,sha256=MPrUWeLZLrJ-ApVckn8dsn3QmRH13aPzit5JgaoshG8,696
|
|
14
|
-
pyfemtet/opt/_femopt.py,sha256=
|
|
15
|
-
pyfemtet/opt/_femopt_core.py,sha256=
|
|
16
|
+
pyfemtet/opt/_femopt.py,sha256=JNKoQ_w1sDfoCT60hzL4fTZ4NIfD6J-pWLCNhOHDFYM,34541
|
|
17
|
+
pyfemtet/opt/_femopt_core.py,sha256=SPfOWjob7XbF5gdHqXwBbDgBR01Wq1-yrRHE5AfFjo4,30123
|
|
16
18
|
pyfemtet/opt/_test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
19
|
pyfemtet/opt/_test_utils/control_femtet.py,sha256=Oy2MmNS-LhUXF9rKLa8AXAfJhppIQI8Nha8LmEZflmk,1169
|
|
18
20
|
pyfemtet/opt/_test_utils/hyper_sphere.py,sha256=nQhw8EIY0DwvcTqrbKhkxiITLZifr4-nG77E-_6ggmA,700
|
|
19
|
-
pyfemtet/opt/_test_utils/record_history.py,sha256=
|
|
20
|
-
pyfemtet/opt/interface/__init__.py,sha256=
|
|
21
|
-
pyfemtet/opt/interface/_base.py,sha256=
|
|
22
|
-
pyfemtet/opt/interface/_femtet.py,sha256=
|
|
21
|
+
pyfemtet/opt/_test_utils/record_history.py,sha256=YzZ8nlyXjw3t0K1kfB8aPka8r058sfx78qspM_vYIIU,2513
|
|
22
|
+
pyfemtet/opt/interface/__init__.py,sha256=5hel-mP6tuxzIEJFMZJZWUEWEbFSsskzCWlQ3HORTYI,466
|
|
23
|
+
pyfemtet/opt/interface/_base.py,sha256=oG2V6UAID2SBOsl68T6TJ0LjC0jkbP41nXQy8k_ybSc,2363
|
|
24
|
+
pyfemtet/opt/interface/_femtet.py,sha256=dBF8AyGkAKRD2YQUsauqTqJLrDjt0rUGaEdR69guN6g,36897
|
|
23
25
|
pyfemtet/opt/interface/_femtet_parametric.py,sha256=KDG8SB43AgwuhpCStjvx10G0RzyHhga6k4dfvp0gvYU,2175
|
|
24
26
|
pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
|
|
25
|
-
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=
|
|
27
|
+
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=BXWdzIFcId1EovpbRD5DmkW0BwqhpDvOuGBv9kdCGy8,5994
|
|
26
28
|
pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=P7VH0i_o-X9OUe6AGaLF1fACPeHNrMjcrOBCA3MMrI4,3092
|
|
27
|
-
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=
|
|
29
|
+
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=NeNw1sqAL_kOrmrrcljrPwi_hBSA-LRU9MOqI_pjQXs,6836
|
|
28
30
|
pyfemtet/opt/optimizer/__init__.py,sha256=wdz7PXkcSJ9Z2OHoegfGvYrnj_OAyU39BvDyiy3QnVw,407
|
|
29
|
-
pyfemtet/opt/optimizer/_base.py,sha256=
|
|
30
|
-
pyfemtet/opt/optimizer/_optuna.py,sha256=
|
|
31
|
-
pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py,sha256
|
|
32
|
-
pyfemtet/opt/optimizer/_scipy.py,sha256=
|
|
33
|
-
pyfemtet/opt/optimizer/_scipy_scalar.py,sha256=
|
|
34
|
-
pyfemtet/opt/parameter.py,sha256=YLE9lmYRaZA8isnTPJnbYXpUn6zsJFW4xg03QaSWey8,3950
|
|
31
|
+
pyfemtet/opt/optimizer/_base.py,sha256=kLcs6Qn2cE3jilU5w6OMf1h5TgyWpxtuiz1Q2hx4JWc,12316
|
|
32
|
+
pyfemtet/opt/optimizer/_optuna.py,sha256=8UVhrJ9elc-_OSmNGmWWOOJq98Jo1MbikcdChTvsfaI,12871
|
|
33
|
+
pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py,sha256=-CBbwjEMYwS-cGCojdewRK2cFQ3O5V2_WHz3Te66TwM,12223
|
|
34
|
+
pyfemtet/opt/optimizer/_scipy.py,sha256=_2whhMNq6hC1lr5PlYhpZ8Zlh6-DkAjz8SVB5qHIpYg,4766
|
|
35
|
+
pyfemtet/opt/optimizer/_scipy_scalar.py,sha256=rGvrLjrgfYzxK9GA0-r2Hhoaqt6A0TQsT_1M3moyklc,3615
|
|
36
|
+
pyfemtet/opt/optimizer/parameter.py,sha256=YLE9lmYRaZA8isnTPJnbYXpUn6zsJFW4xg03QaSWey8,3950
|
|
35
37
|
pyfemtet/opt/prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
pyfemtet/opt/prediction/
|
|
37
|
-
pyfemtet/opt/prediction/single_task_gp.py,sha256=
|
|
38
|
+
pyfemtet/opt/prediction/_base.py,sha256=yAQ7Lhfaicynlb6wIHJtTHG4s42AYNRiBxq7bAqBw-Q,1798
|
|
39
|
+
pyfemtet/opt/prediction/single_task_gp.py,sha256=89biIgHY3kM1ymvu0IcVNaODJ_87TXki-GQ_nkM2EwI,3475
|
|
38
40
|
pyfemtet/opt/samples/femprj_sample/.gitignore,sha256=hx-5Hhaf7kpHe1wvWWfJqjPfObg-zf9CTI4joNh2Hk4,28
|
|
39
41
|
pyfemtet/opt/samples/femprj_sample/ParametricIF.femprj,sha256=9BtDHmc3cdom0Zq33DTdZ0mDAsIUY6i8SRkkg-n7GO0,442090
|
|
40
42
|
pyfemtet/opt/samples/femprj_sample/ParametricIF.py,sha256=oXzchBZEbH69xacDht5HDnbZzKwapXsn6bp9qihY17Y,707
|
|
@@ -87,29 +89,29 @@ pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.femprj,sha256=dMwQM
|
|
|
87
89
|
pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.py,sha256=vMy-KUP1wEMV9Rt6yXjkE40Fcs1t1cpQK-nQJK8hHao,2284
|
|
88
90
|
pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py,sha256=4X0cl3YWpYarcNBCH79mrlyFuKUYSqvnGzokEbv9ILk,2335
|
|
89
91
|
pyfemtet/opt/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
-
pyfemtet/opt/visualization/
|
|
91
|
-
pyfemtet/opt/visualization/
|
|
92
|
-
pyfemtet/opt/visualization/
|
|
93
|
-
pyfemtet/opt/visualization/
|
|
94
|
-
pyfemtet/opt/visualization/
|
|
95
|
-
pyfemtet/opt/visualization/
|
|
96
|
-
pyfemtet/opt/visualization/
|
|
97
|
-
pyfemtet/opt/visualization/
|
|
98
|
-
pyfemtet/opt/visualization/
|
|
99
|
-
pyfemtet/opt/visualization/
|
|
100
|
-
pyfemtet/opt/visualization/
|
|
101
|
-
pyfemtet/opt/visualization/
|
|
92
|
+
pyfemtet/opt/visualization/_base.py,sha256=k0PDvqNKn7sFYIgajWykOTgFztlu5_1bc-xfQQh8bKA,7589
|
|
93
|
+
pyfemtet/opt/visualization/_complex_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
|
+
pyfemtet/opt/visualization/_complex_components/alert_region.py,sha256=sX8xqT4NqhACagK4YgumF4ResrTqhOKQ8dN4q58shI8,2106
|
|
95
|
+
pyfemtet/opt/visualization/_complex_components/control_femtet.py,sha256=LcMoh_MQQ1-hiz7nMGOmxSSoJLOX8viVxZB6uIggg_g,6243
|
|
96
|
+
pyfemtet/opt/visualization/_complex_components/main_figure_creator.py,sha256=8BhugjLPipDdiWioHjEYiys5h5ezYJTBx2r702b-U1A,6950
|
|
97
|
+
pyfemtet/opt/visualization/_complex_components/main_graph.py,sha256=Med4fVTHPhmQXyyMjGcjdCacwOMp4JblAaLKdz_6gVQ,21533
|
|
98
|
+
pyfemtet/opt/visualization/_complex_components/pm_graph.py,sha256=hX0OoJIUqqO4W1bqP1zaQUU2EjRzCg-pMhixkhJEAoA,24926
|
|
99
|
+
pyfemtet/opt/visualization/_complex_components/pm_graph_creator.py,sha256=f-ikYAPChazqyRQ0Y-tKrYrMBHzFHJJ4uV6QXBEBRKI,7304
|
|
100
|
+
pyfemtet/opt/visualization/_create_wrapped_components.py,sha256=9AltJHr1DM6imZfpNp867rC-uAYqQ-emdgTLChKDrl8,2513
|
|
101
|
+
pyfemtet/opt/visualization/_process_monitor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
102
|
+
pyfemtet/opt/visualization/_process_monitor/application.py,sha256=zrl2Bzz4FdYIV-biOMpxdOIMQvQx41_sR2g4j38A04I,7925
|
|
103
|
+
pyfemtet/opt/visualization/_process_monitor/pages.py,sha256=0EGe_Dd8DxQI9V4DMFjbZv8uEarFY1BLsRcVrvWfRzI,15120
|
|
104
|
+
pyfemtet/opt/visualization/_wrapped_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
+
pyfemtet/opt/visualization/_wrapped_components/dbc.py,sha256=iSh4QRmLIQMfiAWowG1ThXLPhmKluRYOYPcdDFVI0t0,42162
|
|
106
|
+
pyfemtet/opt/visualization/_wrapped_components/dcc.py,sha256=-Iw6MjFQmvJ__KcddPhFDqui6lk2ixB2U2tZH_Il5pA,17500
|
|
107
|
+
pyfemtet/opt/visualization/_wrapped_components/html.py,sha256=yZFGMe17BcylwgnpD5fFTQ6IvQiJxsZTbNdBYWlm7AM,95653
|
|
108
|
+
pyfemtet/opt/visualization/_wrapped_components/str_enum.py,sha256=NZqbh2jNEAckvJyZv__MWeRs2F2Q-dkJCWo30rU2rrM,1383
|
|
102
109
|
pyfemtet/opt/visualization/result_viewer/.gitignore,sha256=ryvb4aqbbsHireHWlPQfxxqDHQJo6YkVYhE9imKt0b8,6
|
|
103
110
|
pyfemtet/opt/visualization/result_viewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
104
|
-
pyfemtet/opt/visualization/result_viewer/application.py,sha256=
|
|
105
|
-
pyfemtet/opt/visualization/result_viewer/pages.py,sha256=
|
|
106
|
-
pyfemtet/
|
|
107
|
-
pyfemtet/
|
|
108
|
-
pyfemtet/
|
|
109
|
-
pyfemtet/
|
|
110
|
-
pyfemtet
|
|
111
|
-
pyfemtet-0.5.3.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
112
|
-
pyfemtet-0.5.3.dist-info/METADATA,sha256=_ATbM4hKPv5ozUxw09iyjZkvy6XqoWLoEOTe3qH5aBI,3287
|
|
113
|
-
pyfemtet-0.5.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
114
|
-
pyfemtet-0.5.3.dist-info/entry_points.txt,sha256=ZfYqRaoiPtuWqFi2_msccyrVF0LurMn-IHlYamAegZo,104
|
|
115
|
-
pyfemtet-0.5.3.dist-info/RECORD,,
|
|
111
|
+
pyfemtet/opt/visualization/result_viewer/application.py,sha256=WcHBx_J5eNLKSaprpk9BGifwhO04oN8FiNGYTWorrXA,1691
|
|
112
|
+
pyfemtet/opt/visualization/result_viewer/pages.py,sha256=laEAKHAtdshCAHxgXo-zMNg3RP6lCxfszO3XwLnF1dU,32156
|
|
113
|
+
pyfemtet-0.5.4.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
114
|
+
pyfemtet-0.5.4.dist-info/METADATA,sha256=X_vZXLdjGjFBXRn-JT-6hpbwKTHillnhcNLyQ4a_JMQ,3287
|
|
115
|
+
pyfemtet-0.5.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
116
|
+
pyfemtet-0.5.4.dist-info/entry_points.txt,sha256=ZfYqRaoiPtuWqFi2_msccyrVF0LurMn-IHlYamAegZo,104
|
|
117
|
+
pyfemtet-0.5.4.dist-info/RECORD,,
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|