canns 0.14.0__py3-none-any.whl → 0.14.2__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.
- canns/pipeline/asa_gui/__init__.py +12 -4
- canns/pipeline/asa_gui/analysis_modes/base.py +4 -0
- canns/pipeline/asa_gui/analysis_modes/cohomap_mode.py +11 -0
- canns/pipeline/asa_gui/analysis_modes/cohospace_mode.py +37 -0
- canns/pipeline/asa_gui/analysis_modes/decode_mode.py +13 -0
- canns/pipeline/asa_gui/analysis_modes/fr_mode.py +17 -0
- canns/pipeline/asa_gui/analysis_modes/frm_mode.py +17 -0
- canns/pipeline/asa_gui/analysis_modes/gridscore_mode.py +23 -0
- canns/pipeline/asa_gui/analysis_modes/pathcompare_mode.py +43 -0
- canns/pipeline/asa_gui/analysis_modes/tda_mode.py +27 -0
- canns/pipeline/asa_gui/main_window.py +7 -6
- canns/pipeline/asa_gui/resources/__init__.py +5 -0
- canns/pipeline/asa_gui/resources/dark.qss +8 -0
- canns/pipeline/asa_gui/resources/light.qss +8 -0
- canns/pipeline/asa_gui/resources/logo.ico +0 -0
- canns/pipeline/asa_gui/resources/logo.svg +369 -0
- canns/pipeline/asa_gui/views/pages/analysis_page.py +7 -0
- canns/pipeline/asa_gui/views/pages/preprocess_page.py +29 -0
- {canns-0.14.0.dist-info → canns-0.14.2.dist-info}/METADATA +20 -7
- {canns-0.14.0.dist-info → canns-0.14.2.dist-info}/RECORD +23 -21
- {canns-0.14.0.dist-info → canns-0.14.2.dist-info}/WHEEL +0 -0
- {canns-0.14.0.dist-info → canns-0.14.2.dist-info}/entry_points.txt +0 -0
- {canns-0.14.0.dist-info → canns-0.14.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -42,12 +42,20 @@ def main() -> int:
|
|
|
42
42
|
app.setApplicationDisplayName("ASA GUI")
|
|
43
43
|
QGuiApplication.setApplicationDisplayName("ASA GUI")
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
from .resources import resource_path
|
|
46
|
+
|
|
47
|
+
logo_path = resource_path("logo_256.png")
|
|
48
|
+
if not logo_path.exists():
|
|
49
|
+
logo_path = resource_path("logo.svg")
|
|
47
50
|
if not logo_path.exists():
|
|
48
|
-
logo_path =
|
|
51
|
+
logo_path = resource_path("logo.ico")
|
|
49
52
|
if not logo_path.exists():
|
|
50
|
-
|
|
53
|
+
base = Path(__file__).resolve().parents[4] / "images"
|
|
54
|
+
logo_path = base / "logo_256.png"
|
|
55
|
+
if not logo_path.exists():
|
|
56
|
+
logo_path = base / "logo.svg"
|
|
57
|
+
if not logo_path.exists():
|
|
58
|
+
logo_path = base / "logo.ico"
|
|
51
59
|
icon = QIcon(str(logo_path)) if logo_path.exists() else QIcon()
|
|
52
60
|
if not icon.isNull():
|
|
53
61
|
app.setWindowIcon(icon)
|
|
@@ -29,6 +29,10 @@ class AbstractAnalysisMode(ABC):
|
|
|
29
29
|
"""Apply neuron/time ranges based on loaded data."""
|
|
30
30
|
return None
|
|
31
31
|
|
|
32
|
+
def apply_language(self, lang: str) -> None:
|
|
33
|
+
"""Apply localized tooltips/text."""
|
|
34
|
+
return None
|
|
35
|
+
|
|
32
36
|
|
|
33
37
|
def configure_form_layout(form: QFormLayout) -> None:
|
|
34
38
|
"""Apply consistent spacing/alignment for analysis parameter forms."""
|
|
@@ -54,3 +54,14 @@ class CohoMapMode(AbstractAnalysisMode):
|
|
|
54
54
|
self.num_circ.setValue(2)
|
|
55
55
|
elif preset == "hd":
|
|
56
56
|
self.num_circ.setValue(1)
|
|
57
|
+
|
|
58
|
+
def apply_language(self, lang: str) -> None:
|
|
59
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
60
|
+
if is_zh:
|
|
61
|
+
self.decode_version.setToolTip("解码版本(推荐 v2)。")
|
|
62
|
+
self.num_circ.setToolTip("解码圆数(grid 常用 2,hd 常用 1)。")
|
|
63
|
+
self.subsample.setToolTip("CohoMap 绘制下采样步长。")
|
|
64
|
+
else:
|
|
65
|
+
self.decode_version.setToolTip("Decode version (recommend v2).")
|
|
66
|
+
self.num_circ.setToolTip("Number of circles to decode (grid=2, hd=1).")
|
|
67
|
+
self.subsample.setToolTip("Subsample step for CohoMap plotting.")
|
|
@@ -192,3 +192,40 @@ class CohoSpaceMode(AbstractAnalysisMode):
|
|
|
192
192
|
val = self.neuron_id.value() + int(delta)
|
|
193
193
|
val = max(self.neuron_id.minimum(), min(self.neuron_id.maximum(), val))
|
|
194
194
|
self.neuron_id.setValue(val)
|
|
195
|
+
|
|
196
|
+
def apply_language(self, lang: str) -> None:
|
|
197
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
198
|
+
if is_zh:
|
|
199
|
+
self.dim_mode.setToolTip("解码维度模式(1D/2D)。")
|
|
200
|
+
self.dim.setToolTip("1D 解码维度索引。")
|
|
201
|
+
self.dim1.setToolTip("2D 解码维度 1。")
|
|
202
|
+
self.dim2.setToolTip("2D 解码维度 2。")
|
|
203
|
+
self.mode.setToolTip("spike 或 fr 模式。")
|
|
204
|
+
self.top_percent.setToolTip("活跃点百分比阈值。")
|
|
205
|
+
self.view.setToolTip("显示单神经元或群体。")
|
|
206
|
+
self.subsample.setToolTip("轨迹下采样步长。")
|
|
207
|
+
self.unfold.setToolTip("展开方式(square / skew)。")
|
|
208
|
+
self.skew_show_grid.setToolTip("skew 模式下显示网格。")
|
|
209
|
+
self.skew_tiles.setToolTip("skew 平铺次数。")
|
|
210
|
+
self.enable_score.setToolTip("计算 CohoScore 并选 top-K。")
|
|
211
|
+
self.top_k.setToolTip("Top-K 神经元数量。")
|
|
212
|
+
self.neuron_id.setToolTip("单神经元编号。")
|
|
213
|
+
self.use_best.setToolTip("使用 CohoScore 最小的神经元。")
|
|
214
|
+
self.btn_show.setToolTip("显示当前 neuron 结果。")
|
|
215
|
+
else:
|
|
216
|
+
self.dim_mode.setToolTip("Decode dimension mode (1D/2D).")
|
|
217
|
+
self.dim.setToolTip("1D decoded dimension index.")
|
|
218
|
+
self.dim1.setToolTip("2D decoded dimension 1.")
|
|
219
|
+
self.dim2.setToolTip("2D decoded dimension 2.")
|
|
220
|
+
self.mode.setToolTip("spike or fr mode.")
|
|
221
|
+
self.top_percent.setToolTip("Active percentile threshold.")
|
|
222
|
+
self.view.setToolTip("Show single neuron or population.")
|
|
223
|
+
self.subsample.setToolTip("Trajectory subsample step.")
|
|
224
|
+
self.unfold.setToolTip("Unfold mode (square / skew).")
|
|
225
|
+
self.skew_show_grid.setToolTip("Show grid in skew mode.")
|
|
226
|
+
self.skew_tiles.setToolTip("Skew tiling count.")
|
|
227
|
+
self.enable_score.setToolTip("Compute CohoScore and top-K.")
|
|
228
|
+
self.top_k.setToolTip("Top-K neuron count.")
|
|
229
|
+
self.neuron_id.setToolTip("Single neuron id.")
|
|
230
|
+
self.use_best.setToolTip("Use neuron with lowest CohoScore.")
|
|
231
|
+
self.btn_show.setToolTip("Show current neuron result.")
|
|
@@ -50,3 +50,16 @@ class DecodeMode(AbstractAnalysisMode):
|
|
|
50
50
|
self.num_circ.setValue(2)
|
|
51
51
|
elif preset == "hd":
|
|
52
52
|
self.num_circ.setValue(1)
|
|
53
|
+
|
|
54
|
+
def apply_language(self, lang: str) -> None:
|
|
55
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
56
|
+
if is_zh:
|
|
57
|
+
self.decode_version.setToolTip("解码版本(推荐 v2)。")
|
|
58
|
+
self.num_circ.setToolTip("解码圆数(grid=2,hd=1)。")
|
|
59
|
+
self.real_ground.setToolTip("是否使用 real_ground。")
|
|
60
|
+
self.real_of.setToolTip("是否使用 real_of。")
|
|
61
|
+
else:
|
|
62
|
+
self.decode_version.setToolTip("Decode version (recommend v2).")
|
|
63
|
+
self.num_circ.setToolTip("Number of circles to decode (grid=2, hd=1).")
|
|
64
|
+
self.real_ground.setToolTip("Use real_ground if available.")
|
|
65
|
+
self.real_of.setToolTip("Use real_of if available.")
|
|
@@ -79,3 +79,20 @@ class FRMode(AbstractAnalysisMode):
|
|
|
79
79
|
self.time_end.setRange(0, total_steps)
|
|
80
80
|
if self.time_end.value() == 0:
|
|
81
81
|
self.time_end.setValue(total_steps)
|
|
82
|
+
|
|
83
|
+
def apply_language(self, lang: str) -> None:
|
|
84
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
85
|
+
if is_zh:
|
|
86
|
+
self.normalize.setToolTip("归一化方式;none 表示不归一化。")
|
|
87
|
+
self.mode.setToolTip("fr 需要预处理;spike 直接用事件。")
|
|
88
|
+
self.neuron_start.setToolTip("神经元起始索引。")
|
|
89
|
+
self.neuron_end.setToolTip("神经元结束索引(不包含)。")
|
|
90
|
+
self.time_start.setToolTip("时间起始索引。")
|
|
91
|
+
self.time_end.setToolTip("时间结束索引(不包含)。")
|
|
92
|
+
else:
|
|
93
|
+
self.normalize.setToolTip("Normalization method; none = no normalization.")
|
|
94
|
+
self.mode.setToolTip("fr requires preprocess; spike uses events directly.")
|
|
95
|
+
self.neuron_start.setToolTip("Start neuron index.")
|
|
96
|
+
self.neuron_end.setToolTip("End neuron index (exclusive).")
|
|
97
|
+
self.time_start.setToolTip("Start time index.")
|
|
98
|
+
self.time_end.setToolTip("End time index (exclusive).")
|
|
@@ -86,6 +86,23 @@ class FRMMode(AbstractAnalysisMode):
|
|
|
86
86
|
return
|
|
87
87
|
self.neuron_id.setRange(0, max(0, neuron_count - 1))
|
|
88
88
|
|
|
89
|
+
def apply_language(self, lang: str) -> None:
|
|
90
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
91
|
+
if is_zh:
|
|
92
|
+
self.neuron_id.setToolTip("要查看的神经元编号。")
|
|
93
|
+
self.bin_size.setToolTip("空间分箱大小。")
|
|
94
|
+
self.min_occupancy.setToolTip("最小占据数。")
|
|
95
|
+
self.smoothing.setToolTip("是否启用平滑。")
|
|
96
|
+
self.smooth_sigma.setToolTip("平滑强度(sigma)。")
|
|
97
|
+
self.mode.setToolTip("fr 需要预处理;spike 直接用事件。")
|
|
98
|
+
else:
|
|
99
|
+
self.neuron_id.setToolTip("Neuron index to inspect.")
|
|
100
|
+
self.bin_size.setToolTip("Spatial bin size.")
|
|
101
|
+
self.min_occupancy.setToolTip("Minimum occupancy.")
|
|
102
|
+
self.smoothing.setToolTip("Enable smoothing.")
|
|
103
|
+
self.smooth_sigma.setToolTip("Smoothing strength (sigma).")
|
|
104
|
+
self.mode.setToolTip("fr requires preprocess; spike uses events directly.")
|
|
105
|
+
|
|
89
106
|
def _shift(self, delta: int) -> None:
|
|
90
107
|
val = self.neuron_id.value() + int(delta)
|
|
91
108
|
val = max(self.neuron_id.minimum(), min(self.neuron_id.maximum(), val))
|
|
@@ -117,6 +117,29 @@ class GridScoreMode(AbstractAnalysisMode):
|
|
|
117
117
|
if "neuron_id" in meta:
|
|
118
118
|
self.neuron_id.setValue(int(meta["neuron_id"]))
|
|
119
119
|
|
|
120
|
+
def apply_language(self, lang: str) -> None:
|
|
121
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
122
|
+
if is_zh:
|
|
123
|
+
self.neuron_start.setToolTip("神经元起始索引。")
|
|
124
|
+
self.neuron_end.setToolTip("神经元结束索引(不包含)。")
|
|
125
|
+
self.bins.setToolTip("空间分箱数。")
|
|
126
|
+
self.min_occupancy.setToolTip("最小占据数。")
|
|
127
|
+
self.smoothing.setToolTip("是否启用平滑(需 scipy)。")
|
|
128
|
+
self.sigma.setToolTip("平滑强度(sigma)。")
|
|
129
|
+
self.overlap.setToolTip("自相关重叠比例。")
|
|
130
|
+
self.mode.setToolTip("fr 需要预处理;spike 直接用事件。")
|
|
131
|
+
self.score_thr.setToolTip("可视化阈值(仅显示)。")
|
|
132
|
+
else:
|
|
133
|
+
self.neuron_start.setToolTip("Start neuron index.")
|
|
134
|
+
self.neuron_end.setToolTip("End neuron index (exclusive).")
|
|
135
|
+
self.bins.setToolTip("Spatial bin count.")
|
|
136
|
+
self.min_occupancy.setToolTip("Minimum occupancy.")
|
|
137
|
+
self.smoothing.setToolTip("Enable smoothing (requires scipy).")
|
|
138
|
+
self.sigma.setToolTip("Smoothing strength (sigma).")
|
|
139
|
+
self.overlap.setToolTip("Autocorrelation overlap ratio.")
|
|
140
|
+
self.mode.setToolTip("fr requires preprocess; spike uses events directly.")
|
|
141
|
+
self.score_thr.setToolTip("Visualization threshold only.")
|
|
142
|
+
|
|
120
143
|
|
|
121
144
|
class GridScoreInspectMode(GridScoreMode):
|
|
122
145
|
name = "gridscore_inspect"
|
|
@@ -197,3 +197,46 @@ class PathCompareMode(AbstractAnalysisMode):
|
|
|
197
197
|
"no_wrap": bool(self.no_wrap.isChecked()),
|
|
198
198
|
"animation_format": "gif" if self.save_gif.isChecked() else "none",
|
|
199
199
|
}
|
|
200
|
+
|
|
201
|
+
def apply_language(self, lang: str) -> None:
|
|
202
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
203
|
+
if is_zh:
|
|
204
|
+
self.angle_scale.setToolTip("角度尺度:auto / rad / deg / unit。")
|
|
205
|
+
self.dim_mode.setToolTip("解码维度模式(1D/2D)。")
|
|
206
|
+
self.dim.setToolTip("1D 解码维度索引。")
|
|
207
|
+
self.dim1.setToolTip("2D 解码维度 1。")
|
|
208
|
+
self.dim2.setToolTip("2D 解码维度 2。")
|
|
209
|
+
self.use_box.setToolTip("使用 coordsbox / times_box 对齐(推荐速度过滤后开启)。")
|
|
210
|
+
self.interp_full.setToolTip("插值回完整轨迹。")
|
|
211
|
+
self.coords_key.setToolTip("可选:解码坐标键(默认 coords/coordsbox)。")
|
|
212
|
+
self.times_key.setToolTip("可选:times_box 键名。")
|
|
213
|
+
self.slice_mode.setToolTip("按时间或索引裁剪。")
|
|
214
|
+
self.tmin.setToolTip("起始时间(秒),-1 自动。")
|
|
215
|
+
self.tmax.setToolTip("结束时间(秒),-1 自动。")
|
|
216
|
+
self.imin.setToolTip("起始索引,-1 自动。")
|
|
217
|
+
self.imax.setToolTip("结束索引,-1 自动。")
|
|
218
|
+
self.stride.setToolTip("采样步长。")
|
|
219
|
+
self.tail.setToolTip("尾迹长度(帧)。")
|
|
220
|
+
self.fps.setToolTip("动画帧率。")
|
|
221
|
+
self.no_wrap.setToolTip("禁用角度环绕。")
|
|
222
|
+
self.save_gif.setToolTip("保存 GIF 动画。")
|
|
223
|
+
else:
|
|
224
|
+
self.angle_scale.setToolTip("Angle scale: auto / rad / deg / unit.")
|
|
225
|
+
self.dim_mode.setToolTip("Decode dimension mode (1D/2D).")
|
|
226
|
+
self.dim.setToolTip("1D decoded dimension index.")
|
|
227
|
+
self.dim1.setToolTip("2D decoded dimension 1.")
|
|
228
|
+
self.dim2.setToolTip("2D decoded dimension 2.")
|
|
229
|
+
self.use_box.setToolTip("Use coordsbox/times_box alignment (recommended with speed_filter).")
|
|
230
|
+
self.interp_full.setToolTip("Interpolate back to full trajectory.")
|
|
231
|
+
self.coords_key.setToolTip("Optional decode coords key (default coords/coordsbox).")
|
|
232
|
+
self.times_key.setToolTip("Optional times_box key.")
|
|
233
|
+
self.slice_mode.setToolTip("Slice by time or index.")
|
|
234
|
+
self.tmin.setToolTip("Start time (sec), -1 = auto.")
|
|
235
|
+
self.tmax.setToolTip("End time (sec), -1 = auto.")
|
|
236
|
+
self.imin.setToolTip("Start index, -1 = auto.")
|
|
237
|
+
self.imax.setToolTip("End index, -1 = auto.")
|
|
238
|
+
self.stride.setToolTip("Sampling stride.")
|
|
239
|
+
self.tail.setToolTip("Trail length (frames).")
|
|
240
|
+
self.fps.setToolTip("Animation FPS.")
|
|
241
|
+
self.no_wrap.setToolTip("Disable angle wrap.")
|
|
242
|
+
self.save_gif.setToolTip("Save GIF animation.")
|
|
@@ -110,3 +110,30 @@ class TDAMode(AbstractAnalysisMode):
|
|
|
110
110
|
self.maxdim.setValue(2)
|
|
111
111
|
elif preset == "hd":
|
|
112
112
|
self.maxdim.setValue(1)
|
|
113
|
+
|
|
114
|
+
def apply_language(self, lang: str) -> None:
|
|
115
|
+
is_zh = str(lang).lower().startswith("zh")
|
|
116
|
+
if is_zh:
|
|
117
|
+
self.dim.setToolTip("PCA 维度(常见起点 6–12)。")
|
|
118
|
+
self.num_times.setToolTip("时间下采样步长;越大越快但可能丢细节。")
|
|
119
|
+
self.active_times.setToolTip("选取最活跃时间点数;过小不稳,过大更慢。")
|
|
120
|
+
self.k.setToolTip("采样/去噪相关参数,影响速度与稳定性。")
|
|
121
|
+
self.n_points.setToolTip("点云代表点数量,越大越慢。")
|
|
122
|
+
self.metric.setToolTip("距离度量;推荐 cosine。")
|
|
123
|
+
self.nbs.setToolTip("邻域规模参数,影响稳定性与速度。")
|
|
124
|
+
self.maxdim.setToolTip("最大同调维度;先 1 再 2。")
|
|
125
|
+
self.coeff.setToolTip("有限域系数(默认 47)。")
|
|
126
|
+
self.do_shuffle.setToolTip("显著性检验;代价高,建议少量。")
|
|
127
|
+
self.num_shuffles.setToolTip("Shuffle 次数(越多越慢)。")
|
|
128
|
+
else:
|
|
129
|
+
self.dim.setToolTip("PCA dimension (typical 6–12).")
|
|
130
|
+
self.num_times.setToolTip("Time downsampling step; larger is faster but less detail.")
|
|
131
|
+
self.active_times.setToolTip("Number of most active points; too small is unstable.")
|
|
132
|
+
self.k.setToolTip("Sampling/denoising parameter; affects speed/stability.")
|
|
133
|
+
self.n_points.setToolTip("Number of representative points; larger is slower.")
|
|
134
|
+
self.metric.setToolTip("Distance metric; recommend cosine.")
|
|
135
|
+
self.nbs.setToolTip("Neighborhood parameter; affects stability and speed.")
|
|
136
|
+
self.maxdim.setToolTip("Max homology dimension; start with 1, then 2.")
|
|
137
|
+
self.coeff.setToolTip("Finite field coefficient (default 47).")
|
|
138
|
+
self.do_shuffle.setToolTip("Significance test; expensive, keep small.")
|
|
139
|
+
self.num_shuffles.setToolTip("Number of shuffles (more is slower).")
|
|
@@ -20,7 +20,7 @@ from PySide6.QtWidgets import (
|
|
|
20
20
|
|
|
21
21
|
from .controllers import AnalysisController, PreprocessController
|
|
22
22
|
from .core import PipelineRunner, StateManager, WorkerManager
|
|
23
|
-
from .resources import load_theme_qss
|
|
23
|
+
from .resources import load_theme_qss, resource_path
|
|
24
24
|
from .views.pages.analysis_page import AnalysisPage
|
|
25
25
|
from .views.pages.preprocess_page import PreprocessPage
|
|
26
26
|
from .views.widgets.popup_combo import PopupComboBox
|
|
@@ -164,12 +164,13 @@ class MainWindow(QMainWindow):
|
|
|
164
164
|
pass
|
|
165
165
|
|
|
166
166
|
def _load_logo_pixmap(self, height: int):
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
base = Path(__file__).resolve().parents[4] / "images"
|
|
170
|
-
logo_path = base / "logo.svg"
|
|
167
|
+
logo_path = resource_path("logo.svg")
|
|
171
168
|
if not logo_path.exists():
|
|
172
|
-
|
|
169
|
+
from pathlib import Path
|
|
170
|
+
|
|
171
|
+
logo_path = Path(__file__).resolve().parents[4] / "images" / "logo.svg"
|
|
172
|
+
if not logo_path.exists():
|
|
173
|
+
return None
|
|
173
174
|
icon = QIcon(str(logo_path))
|
|
174
175
|
if icon.isNull():
|
|
175
176
|
return None
|
|
@@ -14,3 +14,8 @@ def load_theme_qss(theme: str) -> str:
|
|
|
14
14
|
fname = "light.qss"
|
|
15
15
|
path = Path(__file__).parent / fname
|
|
16
16
|
return path.read_text(encoding="utf-8")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def resource_path(name: str) -> Path:
|
|
20
|
+
"""Return the package resource path for a bundled file."""
|
|
21
|
+
return Path(__file__).parent / name
|
|
@@ -14,6 +14,14 @@ QLabel#muted {
|
|
|
14
14
|
color: #9ca3af;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
QToolTip {
|
|
18
|
+
color: #e5e7eb;
|
|
19
|
+
background-color: #111827;
|
|
20
|
+
border: 1px solid #4b5563;
|
|
21
|
+
border-radius: 4px;
|
|
22
|
+
padding: 4px 8px;
|
|
23
|
+
}
|
|
24
|
+
|
|
17
25
|
QFrame#card, QGroupBox#card {
|
|
18
26
|
background-color: #1f2937;
|
|
19
27
|
border: 1px solid #374151;
|
|
@@ -14,6 +14,14 @@ QLabel#muted {
|
|
|
14
14
|
color: #6b7280;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
QToolTip {
|
|
18
|
+
color: #111827;
|
|
19
|
+
background-color: #fef3c7;
|
|
20
|
+
border: 1px solid #f59e0b;
|
|
21
|
+
border-radius: 4px;
|
|
22
|
+
padding: 4px 8px;
|
|
23
|
+
}
|
|
24
|
+
|
|
17
25
|
QFrame#card, QGroupBox#card {
|
|
18
26
|
background-color: #ffffff;
|
|
19
27
|
border: 1px solid #e5e7eb;
|
|
Binary file
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1099.81 387.71">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1, .cls-2 {
|
|
6
|
+
fill: none;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.cls-3 {
|
|
10
|
+
fill: #9600bf;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-2, .cls-8, .cls-9, .cls-10, .cls-11, .cls-12, .cls-13, .cls-14, .cls-15, .cls-16, .cls-17, .cls-18, .cls-19 {
|
|
14
|
+
stroke: #fff;
|
|
15
|
+
stroke-linejoin: round;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.cls-4 {
|
|
19
|
+
fill: #009c70;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.cls-5 {
|
|
23
|
+
fill: #350400;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.cls-6 {
|
|
27
|
+
fill: #002faa;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.cls-7 {
|
|
31
|
+
fill: #00ce53;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.cls-8 {
|
|
35
|
+
fill: #9f2800;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.cls-9 {
|
|
39
|
+
fill: #8a0b00;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.cls-20 {
|
|
43
|
+
clip-path: url(#clippath-1);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.cls-10 {
|
|
47
|
+
fill: #1200df;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.cls-11 {
|
|
51
|
+
fill: #9f5000;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.cls-12 {
|
|
55
|
+
fill: #004b94;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.cls-13 {
|
|
59
|
+
fill: #7500b4;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.cls-14 {
|
|
63
|
+
fill: #c97700;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.cls-15 {
|
|
67
|
+
fill: #bc00c9;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.cls-16 {
|
|
71
|
+
fill: #d41a00;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.cls-17 {
|
|
75
|
+
fill: #2a72ff;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.cls-18 {
|
|
79
|
+
fill: #ff7e1f;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.cls-21 {
|
|
83
|
+
clip-path: url(#clippath);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.cls-19 {
|
|
87
|
+
fill: #00c570;
|
|
88
|
+
}
|
|
89
|
+
</style>
|
|
90
|
+
<clipPath id="clippath">
|
|
91
|
+
<polygon class="cls-1" points="799.99 32.33 799.99 32.41 750.01 59.66 700.02 32.36 700.02 32.33 750.01 5 750.01 5 799.99 32.33"/>
|
|
92
|
+
</clipPath>
|
|
93
|
+
<clipPath id="clippath-1">
|
|
94
|
+
<rect class="cls-1" x="695.02" width="109.97" height="64.66"/>
|
|
95
|
+
</clipPath>
|
|
96
|
+
</defs>
|
|
97
|
+
<g id="C">
|
|
98
|
+
<polygon class="cls-10" points="200.56 31.32 200.56 31.4 150.58 58.65 100.59 31.35 100.59 31.32 150.58 3.99 150.58 3.99 200.56 31.32"/>
|
|
99
|
+
<polygon class="cls-17" points="200.44 31.54 200.44 86.13 150.45 113.46 150.45 58.8 200.44 31.54"/>
|
|
100
|
+
<polygon class="cls-17" points="150.45 58.8 150.45 113.46 100.47 86.13 100.47 31.49 150.45 58.8"/>
|
|
101
|
+
<polygon class="cls-17" points="200.44 304.76 200.44 359.42 150.45 332.09 150.45 277.45 200.44 304.76"/>
|
|
102
|
+
<polygon class="cls-10" points="250.42 58.75 250.42 58.82 200.44 86.08 150.45 58.77 150.45 58.75 200.44 31.42 200.44 31.41 250.42 58.75"/>
|
|
103
|
+
<polygon class="cls-12" points="200.44 86.08 200.44 140.74 150.45 113.41 150.45 58.77 200.44 86.08"/>
|
|
104
|
+
<polygon class="cls-10" points="150.45 58.72 150.45 58.8 100.47 86.05 50.48 58.75 50.48 58.72 100.47 31.39 100.47 31.39 150.45 58.72"/>
|
|
105
|
+
<polygon class="cls-6" points="150.45 58.8 150.45 113.38 100.47 140.72 100.47 86.05 150.45 58.8"/>
|
|
106
|
+
<polygon class="cls-6" points="250.42 58.8 250.42 113.38 200.43 140.72 200.43 86.05 250.42 58.8"/>
|
|
107
|
+
<polygon class="cls-6" points="100.47 86.05 100.47 140.72 50.48 113.38 50.48 58.75 100.47 86.05"/>
|
|
108
|
+
<polygon class="cls-12" points="100.47 250.04 100.47 250.12 50.48 277.37 .5 250.07 .5 250.04 50.48 222.71 50.49 222.71 100.47 250.04"/>
|
|
109
|
+
<polygon class="cls-17" points="100.47 250.12 100.47 304.71 50.48 332.04 50.48 277.37 100.47 250.12"/>
|
|
110
|
+
<polygon class="cls-12" points="50.48 277.37 50.48 332.04 .5 304.7 .5 250.07 50.48 277.37"/>
|
|
111
|
+
<polygon class="cls-6" points="100.47 195.38 100.47 195.46 50.48 222.71 .5 195.41 .5 195.38 50.48 168.05 50.49 168.05 100.47 195.38"/>
|
|
112
|
+
<polygon class="cls-6" points="100.47 195.46 100.47 250.04 50.48 277.37 50.48 222.71 100.47 195.46"/>
|
|
113
|
+
<polygon class="cls-12" points="50.48 222.71 50.48 277.37 .5 250.04 .5 195.41 50.48 222.71"/>
|
|
114
|
+
<polygon class="cls-6" points="100.47 140.72 100.47 140.79 50.48 168.05 .5 140.74 .5 140.71 50.48 113.39 50.49 113.38 100.47 140.72"/>
|
|
115
|
+
<polygon class="cls-6" points="100.47 140.79 100.47 195.38 50.48 222.71 50.48 168.05 100.47 140.79"/>
|
|
116
|
+
<polygon class="cls-12" points="50.48 168.05 50.48 222.71 .5 195.38 .5 140.74 50.48 168.05"/>
|
|
117
|
+
<polygon class="cls-10" points="100.47 86.05 100.47 86.13 50.48 113.38 .5 86.08 .5 86.05 50.48 58.72 50.49 58.72 100.47 86.05"/>
|
|
118
|
+
<polygon class="cls-6" points="100.47 86.13 100.47 140.72 50.48 168.05 50.48 113.38 100.47 86.13"/>
|
|
119
|
+
<polygon class="cls-12" points="50.48 113.38 50.48 168.05 .5 140.71 .5 86.08 50.48 113.38"/>
|
|
120
|
+
<polygon class="cls-10" points="150.45 277.38 150.45 277.45 100.47 304.71 50.48 277.4 50.48 277.37 100.47 250.05 100.47 250.04 150.45 277.38"/>
|
|
121
|
+
<polygon class="cls-17" points="150.45 277.45 150.45 332.04 100.47 359.37 100.47 304.71 150.45 277.45"/>
|
|
122
|
+
<polygon class="cls-12" points="100.47 304.71 100.47 359.37 50.48 332.04 50.48 277.4 100.47 304.71"/>
|
|
123
|
+
<polygon class="cls-10" points="200.44 304.68 200.44 304.76 150.45 332.01 100.47 304.71 100.47 304.68 150.45 277.35 150.45 277.35 200.44 304.68"/>
|
|
124
|
+
<polygon class="cls-6" points="200.44 304.76 200.44 359.34 150.45 386.68 150.45 332.01 200.44 304.76"/>
|
|
125
|
+
<polygon class="cls-12" points="150.45 332.01 150.45 386.68 100.47 359.34 100.47 304.71 150.45 332.01"/>
|
|
126
|
+
</g>
|
|
127
|
+
<g id="A">
|
|
128
|
+
<g id="basic_A">
|
|
129
|
+
<polygon class="cls-4" points="450.34 222.79 450.34 277.38 425.6 290.91 425.59 290.91 403.98 302.73 400.36 304.71 400.35 304.71 400.35 250.04 400.36 250.04 400.6 249.9 425.59 236.28 425.6 236.28 450.34 222.79"/>
|
|
130
|
+
<polygon class="cls-7" points="450.34 222.71 450.34 222.79 400.36 250.04 350.37 222.74 350.37 222.71 400.36 195.38 400.36 195.38 450.34 222.71"/>
|
|
131
|
+
<polygon class="cls-19" points="400.36 250.04 400.36 304.71 350.37 277.37 350.37 222.74 400.36 250.04"/>
|
|
132
|
+
</g>
|
|
133
|
+
<g id="basic_A-2" data-name="basic_A">
|
|
134
|
+
<polygon class="cls-4" points="350.38 222.99 350.38 277.58 325.64 291.11 325.63 291.11 304.02 302.93 300.4 304.91 300.39 304.91 300.39 250.24 300.4 250.24 300.64 250.1 325.63 236.48 325.64 236.48 350.38 222.99"/>
|
|
135
|
+
<polygon class="cls-7" points="350.38 222.92 350.38 222.99 300.4 250.25 250.41 222.94 250.41 222.91 300.4 195.59 300.4 195.58 350.38 222.92"/>
|
|
136
|
+
<polygon class="cls-19" points="300.4 250.25 300.4 304.91 250.41 277.58 250.41 222.94 300.4 250.25"/>
|
|
137
|
+
</g>
|
|
138
|
+
<g id="basic_A-3" data-name="basic_A">
|
|
139
|
+
<polygon class="cls-4" points="300.4 195.58 300.4 250.17 275.66 263.7 275.65 263.7 254.04 275.52 250.42 277.5 250.41 277.5 250.41 222.83 250.42 222.83 250.66 222.69 275.65 209.07 275.66 209.07 300.4 195.58"/>
|
|
140
|
+
<polygon class="cls-7" points="300.4 195.51 300.4 195.58 250.41 222.84 200.43 195.53 200.43 195.5 250.41 168.18 250.42 168.17 300.4 195.51"/>
|
|
141
|
+
<polygon class="cls-19" points="250.41 222.84 250.41 277.5 200.43 250.17 200.43 195.53 250.41 222.84"/>
|
|
142
|
+
</g>
|
|
143
|
+
<g id="basic_A-4" data-name="basic_A">
|
|
144
|
+
<polygon class="cls-4" points="350.38 114.21 350.38 168.8 325.64 182.33 325.63 182.33 304.02 194.15 300.4 196.13 300.39 196.13 300.39 141.46 300.4 141.46 300.64 141.32 325.63 127.7 325.64 127.7 350.38 114.21"/>
|
|
145
|
+
<polygon class="cls-7" points="350.37 114.14 350.37 114.22 300.39 141.47 250.41 114.16 250.41 114.14 300.39 86.81 300.39 86.81 350.37 114.14"/>
|
|
146
|
+
<polygon class="cls-19" points="300.39 141.47 300.39 196.13 250.41 168.8 250.41 114.16 300.39 141.47"/>
|
|
147
|
+
</g>
|
|
148
|
+
<g id="basic_A-5" data-name="basic_A">
|
|
149
|
+
<polygon class="cls-4" points="450.36 114.21 450.36 168.8 425.62 182.33 425.61 182.33 404 194.15 400.38 196.13 400.37 196.13 400.37 141.46 400.38 141.46 400.62 141.32 425.61 127.7 425.62 127.7 450.36 114.21"/>
|
|
150
|
+
<polygon class="cls-7" points="450.36 114.14 450.36 114.21 400.38 141.47 350.39 114.16 350.39 114.14 400.38 86.81 400.38 86.8 450.36 114.14"/>
|
|
151
|
+
<polygon class="cls-19" points="400.38 141.47 400.38 196.13 350.39 168.8 350.39 114.16 400.38 141.47"/>
|
|
152
|
+
</g>
|
|
153
|
+
<g id="basic_A-6" data-name="basic_A">
|
|
154
|
+
<polygon class="cls-4" points="400.36 32.29 400.36 86.88 375.62 100.41 375.61 100.41 354 112.23 350.38 114.21 350.37 114.21 350.37 59.54 350.38 59.54 350.62 59.4 375.61 45.78 375.62 45.78 400.36 32.29"/>
|
|
155
|
+
<polygon class="cls-7" points="400.36 32.22 400.36 32.3 350.37 59.55 300.39 32.24 300.39 32.22 350.37 4.89 350.38 4.89 400.36 32.22"/>
|
|
156
|
+
<polygon class="cls-19" points="350.37 59.55 350.37 114.21 300.39 86.88 300.39 32.24 350.37 59.55"/>
|
|
157
|
+
</g>
|
|
158
|
+
<g id="basic_A-7" data-name="basic_A">
|
|
159
|
+
<polygon class="cls-4" points="550.33 277.42 550.33 332.01 525.59 345.54 525.58 345.54 503.97 357.36 500.35 359.34 500.34 359.34 500.34 304.67 500.35 304.67 500.59 304.53 525.58 290.91 525.59 290.91 550.33 277.42"/>
|
|
160
|
+
<polygon class="cls-7" points="550.33 277.35 550.33 277.42 500.35 304.68 450.36 277.37 450.36 277.35 500.35 250.02 500.35 250.02 550.33 277.35"/>
|
|
161
|
+
<polygon class="cls-19" points="500.35 304.68 500.35 359.34 450.36 332.01 450.36 277.37 500.35 304.68"/>
|
|
162
|
+
</g>
|
|
163
|
+
<g id="basic_A-8" data-name="basic_A">
|
|
164
|
+
<polygon class="cls-4" points="500.34 195.5 500.34 250.09 475.6 263.62 475.59 263.62 453.98 275.44 450.36 277.42 450.35 277.42 450.35 222.75 450.36 222.75 450.6 222.61 475.59 208.99 475.6 208.99 500.34 195.5"/>
|
|
165
|
+
<polygon class="cls-7" points="500.34 195.43 500.34 195.51 450.35 222.76 400.37 195.45 400.37 195.43 450.35 168.1 450.36 168.1 500.34 195.43"/>
|
|
166
|
+
<polygon class="cls-19" points="450.35 222.76 450.35 277.42 400.37 250.09 400.37 195.45 450.35 222.76"/>
|
|
167
|
+
</g>
|
|
168
|
+
<polygon class="cls-7" points="250.41 277.43 250.41 277.51 250.03 277.72 200.43 304.76 150.45 277.46 150.45 277.43 150.52 277.39 200.43 250.1 200.89 250.35 250.41 277.43"/>
|
|
169
|
+
<polygon class="cls-4" points="250.42 277.5 250.42 332.09 200.44 359.42 200.44 304.76 250.42 277.5"/>
|
|
170
|
+
</g>
|
|
171
|
+
<g id="s">
|
|
172
|
+
<g id="basic_s">
|
|
173
|
+
<polygon class="cls-8" points="1099.13 305.42 1099.13 305.46 1074.13 319.08 1049.14 305.43 1049.14 305.42 1074.13 291.75 1074.14 291.75 1099.13 305.42"/>
|
|
174
|
+
<polygon class="cls-5" points="1099.13 278.12 1099.13 305.41 1086.76 312.18 1086.75 312.18 1075.95 318.09 1074.14 319.08 1074.13 319.08 1074.13 291.74 1074.14 291.74 1074.26 291.67 1086.75 284.86 1086.76 284.86 1099.13 278.12"/>
|
|
175
|
+
<polygon class="cls-16" points="1099.13 278.08 1099.13 278.12 1074.13 291.74 1049.14 278.09 1049.14 278.08 1074.13 264.41 1074.14 264.41 1099.13 278.08"/>
|
|
176
|
+
<polygon class="cls-9" points="1074.13 291.74 1074.13 319.08 1049.14 305.41 1049.14 278.09 1074.13 291.74"/>
|
|
177
|
+
</g>
|
|
178
|
+
<g id="basic_s-2" data-name="basic_s">
|
|
179
|
+
<polygon class="cls-8" points="1074.14 319.09 1074.14 319.12 1049.14 332.75 1024.15 319.1 1024.15 319.08 1049.14 305.42 1049.14 305.42 1074.14 319.09"/>
|
|
180
|
+
<polygon class="cls-5" points="1074.14 291.79 1074.14 319.08 1061.77 325.85 1061.76 325.85 1050.96 331.76 1049.15 332.75 1049.14 332.75 1049.14 305.41 1049.15 305.41 1049.27 305.34 1061.76 298.53 1061.77 298.53 1074.14 291.79"/>
|
|
181
|
+
<polygon class="cls-16" points="1074.14 291.75 1074.14 291.79 1049.14 305.41 1024.15 291.76 1024.15 291.75 1049.14 278.08 1049.15 278.08 1074.14 291.75"/>
|
|
182
|
+
<polygon class="cls-9" points="1049.14 305.41 1049.14 332.74 1024.15 319.08 1024.15 291.76 1049.14 305.41"/>
|
|
183
|
+
</g>
|
|
184
|
+
<g id="basic_s-3" data-name="basic_s">
|
|
185
|
+
<polygon class="cls-8" points="1049.14 332.94 1049.14 332.98 1024.15 346.61 999.16 332.96 999.16 332.94 1024.15 319.28 1024.15 319.28 1049.14 332.94"/>
|
|
186
|
+
<polygon class="cls-5" points="1049.15 305.64 1049.15 332.94 1036.78 339.7 1036.77 339.7 1025.97 345.61 1024.16 346.6 1024.15 346.6 1024.15 319.27 1024.16 319.27 1024.28 319.2 1036.77 312.39 1036.78 312.39 1049.15 305.64"/>
|
|
187
|
+
<polygon class="cls-16" points="1049.14 305.61 1049.14 305.64 1024.15 319.27 999.16 305.62 999.16 305.6 1024.15 291.94 1024.15 291.94 1049.14 305.61"/>
|
|
188
|
+
<polygon class="cls-9" points="1024.15 319.27 1024.15 346.6 999.16 332.94 999.16 305.62 1024.15 319.27"/>
|
|
189
|
+
</g>
|
|
190
|
+
<g id="basic_s-4" data-name="basic_s">
|
|
191
|
+
<polygon class="cls-8" points="1024.15 346.61 1024.15 346.65 999.16 360.28 974.17 346.63 974.17 346.61 999.16 332.95 999.16 332.95 1024.15 346.61"/>
|
|
192
|
+
<polygon class="cls-5" points="1024.15 319.31 1024.15 346.61 1011.78 353.37 1011.78 353.37 1000.97 359.28 999.16 360.27 999.16 360.27 999.16 332.94 999.16 332.94 999.28 332.87 1011.78 326.06 1011.78 326.06 1024.15 319.31"/>
|
|
193
|
+
<polygon class="cls-16" points="1024.15 319.28 1024.15 319.31 999.16 332.94 974.17 319.29 974.17 319.27 999.16 305.61 999.16 305.61 1024.15 319.28"/>
|
|
194
|
+
<polygon class="cls-9" points="999.16 332.94 999.16 360.27 974.17 346.61 974.17 319.29 999.16 332.94"/>
|
|
195
|
+
</g>
|
|
196
|
+
<g id="basic_s-5" data-name="basic_s">
|
|
197
|
+
<polygon class="cls-8" points="1099.13 278.13 1099.13 278.17 1074.14 291.79 1049.14 278.14 1049.14 278.13 1074.14 264.46 1074.14 264.46 1099.13 278.13"/>
|
|
198
|
+
<polygon class="cls-5" points="1099.13 250.83 1099.13 278.12 1086.76 284.89 1086.75 284.89 1075.95 290.8 1074.14 291.79 1074.13 291.79 1074.13 264.45 1074.14 264.45 1074.26 264.38 1086.75 257.57 1086.76 257.57 1099.13 250.83"/>
|
|
199
|
+
<polygon class="cls-16" points="1099.13 250.79 1099.13 250.83 1074.14 264.45 1049.14 250.8 1049.14 250.79 1074.14 237.12 1074.14 237.12 1099.13 250.79"/>
|
|
200
|
+
<polygon class="cls-9" points="1074.14 264.45 1074.14 291.79 1049.14 278.12 1049.14 250.8 1074.14 264.45"/>
|
|
201
|
+
</g>
|
|
202
|
+
<g id="basic_s-6" data-name="basic_s">
|
|
203
|
+
<polygon class="cls-8" points="1099.13 250.75 1099.13 250.79 1074.14 264.42 1049.14 250.77 1049.14 250.75 1074.14 237.09 1074.14 237.09 1099.13 250.75"/>
|
|
204
|
+
<polygon class="cls-5" points="1099.13 223.45 1099.13 250.75 1086.76 257.51 1086.75 257.51 1075.95 263.42 1074.14 264.41 1074.13 264.41 1074.13 237.08 1074.14 237.08 1074.26 237.01 1086.75 230.2 1086.76 230.2 1099.13 223.45"/>
|
|
205
|
+
<polygon class="cls-16" points="1099.13 223.41 1099.13 223.45 1074.14 237.08 1049.14 223.43 1049.14 223.41 1074.14 209.75 1074.14 209.75 1099.13 223.41"/>
|
|
206
|
+
<polygon class="cls-9" points="1074.14 237.08 1074.14 264.41 1049.14 250.75 1049.14 223.43 1074.14 237.08"/>
|
|
207
|
+
</g>
|
|
208
|
+
<g id="basic_s-7" data-name="basic_s">
|
|
209
|
+
<polygon class="cls-8" points="1074.13 264.42 1074.13 264.45 1049.14 278.08 1024.15 264.43 1024.15 264.41 1049.14 250.75 1049.14 250.75 1074.13 264.42"/>
|
|
210
|
+
<polygon class="cls-5" points="1074.13 237.12 1074.13 264.41 1061.76 271.18 1061.76 271.18 1050.95 277.09 1049.14 278.08 1049.14 278.08 1049.14 250.74 1049.14 250.74 1049.26 250.67 1061.76 243.86 1061.76 243.86 1074.13 237.12"/>
|
|
211
|
+
<polygon class="cls-16" points="1074.13 237.08 1074.13 237.12 1049.14 250.74 1024.15 237.09 1024.15 237.08 1049.14 223.41 1049.14 223.41 1074.13 237.08"/>
|
|
212
|
+
<polygon class="cls-9" points="1049.14 250.74 1049.14 278.07 1024.15 264.41 1024.15 237.09 1049.14 250.74"/>
|
|
213
|
+
</g>
|
|
214
|
+
<g id="basic_s-8" data-name="basic_s">
|
|
215
|
+
<polygon class="cls-8" points="1049.14 278.1 1049.14 278.14 1024.15 291.77 999.16 278.11 999.16 278.1 1024.15 264.44 1024.15 264.43 1049.14 278.1"/>
|
|
216
|
+
<polygon class="cls-5" points="1049.15 250.8 1049.15 278.1 1036.78 284.86 1036.77 284.86 1025.97 290.77 1024.16 291.76 1024.15 291.76 1024.15 264.43 1024.16 264.43 1024.28 264.36 1036.77 257.55 1036.78 257.55 1049.15 250.8"/>
|
|
217
|
+
<polygon class="cls-16" points="1049.14 250.76 1049.14 250.8 1024.15 264.43 999.16 250.78 999.16 250.76 1024.15 237.1 1024.15 237.1 1049.14 250.76"/>
|
|
218
|
+
<polygon class="cls-9" points="1024.15 264.43 1024.15 291.76 999.16 278.09 999.16 250.78 1024.15 264.43"/>
|
|
219
|
+
</g>
|
|
220
|
+
<g id="basic_s-9" data-name="basic_s">
|
|
221
|
+
<polygon class="cls-8" points="1024.15 291.74 1024.15 291.78 999.16 305.41 974.17 291.76 974.17 291.74 999.16 278.08 999.16 278.08 1024.15 291.74"/>
|
|
222
|
+
<polygon class="cls-5" points="1024.15 264.44 1024.15 291.74 1011.78 298.5 1011.78 298.5 1000.97 304.41 999.16 305.4 999.16 305.4 999.16 278.07 999.16 278.07 999.28 278 1011.78 271.19 1011.78 271.19 1024.15 264.44"/>
|
|
223
|
+
<polygon class="cls-16" points="1024.15 264.41 1024.15 264.44 999.16 278.07 974.17 264.42 974.17 264.4 999.16 250.74 999.16 250.74 1024.15 264.41"/>
|
|
224
|
+
<polygon class="cls-9" points="999.16 278.07 999.16 305.4 974.17 291.74 974.17 264.42 999.16 278.07"/>
|
|
225
|
+
</g>
|
|
226
|
+
<g id="basic_s-10" data-name="basic_s">
|
|
227
|
+
<polygon class="cls-8" points="1024.15 264.5 1024.15 264.53 999.16 278.16 974.17 264.51 974.17 264.49 999.16 250.83 999.16 250.83 1024.15 264.5"/>
|
|
228
|
+
<polygon class="cls-5" points="1024.15 237.2 1024.15 264.49 1011.78 271.26 1011.78 271.26 1000.97 277.17 999.16 278.16 999.16 278.16 999.16 250.82 999.16 250.82 999.28 250.75 1011.78 243.94 1011.78 243.94 1024.15 237.2"/>
|
|
229
|
+
<polygon class="cls-16" points="1024.15 237.16 1024.15 237.2 999.16 250.82 974.17 237.17 974.17 237.16 999.16 223.49 999.16 223.49 1024.15 237.16"/>
|
|
230
|
+
<polygon class="cls-9" points="999.16 250.82 999.16 278.16 974.17 264.49 974.17 237.17 999.16 250.82"/>
|
|
231
|
+
</g>
|
|
232
|
+
<g id="basic_s-11" data-name="basic_s">
|
|
233
|
+
<polygon class="cls-8" points="1099.31 196.55 1099.31 196.58 1074.32 210.21 1049.32 196.56 1049.32 196.54 1074.32 182.88 1074.32 182.88 1099.31 196.55"/>
|
|
234
|
+
<polygon class="cls-5" points="1099.31 169.25 1099.31 196.54 1086.94 203.31 1086.93 203.31 1076.13 209.22 1074.32 210.21 1074.31 210.21 1074.31 182.87 1074.32 182.87 1074.44 182.8 1086.93 175.99 1086.94 175.99 1099.31 169.25"/>
|
|
235
|
+
<polygon class="cls-16" points="1099.31 169.21 1099.31 169.25 1074.32 182.87 1049.33 169.22 1049.33 169.21 1074.32 155.54 1074.32 155.54 1099.31 169.21"/>
|
|
236
|
+
<polygon class="cls-9" points="1074.32 182.87 1074.32 210.21 1049.33 196.54 1049.33 169.22 1074.32 182.87"/>
|
|
237
|
+
</g>
|
|
238
|
+
<g id="basic_s-12" data-name="basic_s">
|
|
239
|
+
<polygon class="cls-8" points="1074.32 210.17 1074.32 210.21 1049.33 223.83 1024.34 210.18 1024.34 210.17 1049.33 196.5 1049.33 196.5 1074.32 210.17"/>
|
|
240
|
+
<polygon class="cls-5" points="1074.32 182.87 1074.32 210.16 1061.95 216.93 1061.95 216.93 1051.14 222.84 1049.33 223.83 1049.33 223.83 1049.33 196.49 1049.33 196.49 1049.45 196.42 1061.95 189.61 1061.95 189.61 1074.32 182.87"/>
|
|
241
|
+
<polygon class="cls-16" points="1074.32 182.83 1074.32 182.87 1049.33 196.49 1024.34 182.84 1024.34 182.83 1049.33 169.16 1049.33 169.16 1074.32 182.83"/>
|
|
242
|
+
<polygon class="cls-9" points="1049.33 196.49 1049.33 223.83 1024.34 210.16 1024.34 182.84 1049.33 196.49"/>
|
|
243
|
+
</g>
|
|
244
|
+
<g id="basic_s-13" data-name="basic_s">
|
|
245
|
+
<polygon class="cls-8" points="1049.32 223.84 1049.32 223.87 1024.33 237.5 999.34 223.85 999.34 223.83 1024.33 210.17 1024.33 210.17 1049.32 223.84"/>
|
|
246
|
+
<polygon class="cls-5" points="1049.33 196.54 1049.33 223.83 1036.96 230.6 1036.95 230.6 1026.15 236.51 1024.34 237.5 1024.33 237.5 1024.33 210.16 1024.34 210.16 1024.46 210.09 1036.95 203.28 1036.96 203.28 1049.33 196.54"/>
|
|
247
|
+
<polygon class="cls-16" points="1049.33 196.5 1049.33 196.54 1024.33 210.16 999.34 196.51 999.34 196.5 1024.33 182.83 1024.34 182.83 1049.33 196.5"/>
|
|
248
|
+
<polygon class="cls-9" points="1024.33 210.16 1024.33 237.49 999.34 223.83 999.34 196.51 1024.33 210.16"/>
|
|
249
|
+
</g>
|
|
250
|
+
<g id="basic_s-14" data-name="basic_s">
|
|
251
|
+
<polygon class="cls-8" points="1024.34 237.51 1024.34 237.54 999.34 251.17 974.35 237.52 974.35 237.5 999.34 223.84 999.35 223.84 1024.34 237.51"/>
|
|
252
|
+
<polygon class="cls-5" points="1024.34 210.2 1024.34 237.5 1011.97 244.26 1011.96 244.26 1001.16 250.17 999.35 251.16 999.34 251.16 999.34 223.83 999.35 223.83 999.47 223.76 1011.96 216.95 1011.97 216.95 1024.34 210.2"/>
|
|
253
|
+
<polygon class="cls-16" points="1024.34 210.17 1024.34 210.21 999.35 223.83 974.35 210.18 974.35 210.17 999.35 196.5 999.35 196.5 1024.34 210.17"/>
|
|
254
|
+
<polygon class="cls-9" points="999.35 223.83 999.35 251.16 974.35 237.5 974.35 210.18 999.35 223.83"/>
|
|
255
|
+
</g>
|
|
256
|
+
</g>
|
|
257
|
+
<g>
|
|
258
|
+
<g class="cls-21">
|
|
259
|
+
<g class="cls-20">
|
|
260
|
+
<image width="230" height="136" transform="translate(694.68 -.39) scale(.48)" xlink:href="data:image/png;base64,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"/>
|
|
261
|
+
</g>
|
|
262
|
+
</g>
|
|
263
|
+
<polygon class="cls-2" points="799.99 32.33 799.99 32.41 750.01 59.66 700.02 32.36 700.02 32.33 750.01 5 750.01 5 799.99 32.33"/>
|
|
264
|
+
</g>
|
|
265
|
+
<g id="N2">
|
|
266
|
+
<g id="basic_N2">
|
|
267
|
+
<polygon class="cls-11" points="849.94 223.16 849.94 277.75 825.2 291.28 825.19 291.28 803.58 303.1 799.96 305.08 799.95 305.08 799.95 250.41 799.96 250.41 800.2 250.27 825.19 236.65 825.2 236.65 849.94 223.16"/>
|
|
268
|
+
<polygon class="cls-18" points="849.94 223.08 849.94 223.16 799.96 250.41 749.97 223.11 749.97 223.08 799.96 195.75 799.96 195.75 849.94 223.08"/>
|
|
269
|
+
<polygon class="cls-14" points="799.96 250.41 799.96 305.08 749.97 277.75 749.97 223.11 799.96 250.41"/>
|
|
270
|
+
</g>
|
|
271
|
+
<g id="basic_N2-2" data-name="basic_N2">
|
|
272
|
+
<polygon class="cls-11" points="849.94 168.6 849.94 223.19 825.2 236.72 825.19 236.72 803.58 248.54 799.96 250.52 799.95 250.52 799.95 195.85 799.96 195.85 800.2 195.71 825.19 182.09 825.2 182.09 849.94 168.6"/>
|
|
273
|
+
<polygon class="cls-18" points="849.94 168.52 849.94 168.6 799.96 195.85 749.97 168.55 749.97 168.52 799.96 141.19 799.96 141.19 849.94 168.52"/>
|
|
274
|
+
<polygon class="cls-14" points="799.96 195.85 799.96 250.52 749.97 223.18 749.97 168.55 799.96 195.85"/>
|
|
275
|
+
</g>
|
|
276
|
+
<g id="basic_N2-3" data-name="basic_N2">
|
|
277
|
+
<polygon class="cls-11" points="849.94 113.93 849.94 168.52 825.2 182.05 825.19 182.05 803.58 193.87 799.96 195.85 799.95 195.85 799.95 141.18 799.96 141.18 800.2 141.04 825.19 127.42 825.2 127.42 849.94 113.93"/>
|
|
278
|
+
<polygon class="cls-18" points="849.94 113.86 849.94 113.94 799.96 141.19 749.97 113.88 749.97 113.86 799.96 86.53 799.96 86.53 849.94 113.86"/>
|
|
279
|
+
<polygon class="cls-14" points="799.96 141.19 799.96 195.85 749.97 168.52 749.97 113.88 799.96 141.19"/>
|
|
280
|
+
</g>
|
|
281
|
+
<g id="basic_N2-4" data-name="basic_N2">
|
|
282
|
+
<polygon class="cls-11" points="849.95 59.72 849.95 114.31 825.21 127.84 825.2 127.84 803.59 139.66 799.97 141.64 799.96 141.64 799.96 86.97 799.97 86.97 800.21 86.83 825.2 73.21 825.21 73.21 849.95 59.72"/>
|
|
283
|
+
<polygon class="cls-18" points="849.94 59.64 849.94 59.72 799.96 86.98 749.98 59.67 749.98 59.64 799.96 32.31 799.96 32.31 849.94 59.64"/>
|
|
284
|
+
<polygon class="cls-14" points="799.96 86.98 799.96 141.64 749.98 114.31 749.98 59.67 799.96 86.98"/>
|
|
285
|
+
</g>
|
|
286
|
+
<g id="basic_N2-5" data-name="basic_N2">
|
|
287
|
+
<polygon class="cls-14" points="949.91 223.33 949.91 277.92 925.17 291.45 925.16 291.45 903.55 303.27 899.93 305.25 899.92 305.25 899.92 250.58 899.93 250.58 900.17 250.44 925.16 236.82 925.17 236.82 949.91 223.33"/>
|
|
288
|
+
<polygon class="cls-18" points="949.91 223.26 949.91 223.33 899.93 250.59 849.94 223.28 849.94 223.25 899.93 195.93 899.93 195.92 949.91 223.26"/>
|
|
289
|
+
<polygon class="cls-14" points="899.93 250.59 899.93 305.25 849.94 277.92 849.94 223.28 899.93 250.59"/>
|
|
290
|
+
</g>
|
|
291
|
+
<g id="basic_N2-6" data-name="basic_N2">
|
|
292
|
+
<polygon class="cls-11" points="899.93 141.59 899.93 196.18 875.19 209.71 875.18 209.71 853.57 221.53 849.95 223.51 849.94 223.51 849.94 168.84 849.95 168.84 850.19 168.7 875.18 155.08 875.19 155.08 899.93 141.59"/>
|
|
293
|
+
<polygon class="cls-18" points="899.93 141.52 899.93 141.59 849.94 168.85 799.96 141.54 799.96 141.52 849.94 114.19 849.95 114.18 899.93 141.52"/>
|
|
294
|
+
<polygon class="cls-14" points="849.94 168.85 849.94 223.51 799.96 196.18 799.96 141.54 849.94 168.85"/>
|
|
295
|
+
</g>
|
|
296
|
+
<g id="basic_N2-7" data-name="basic_N2">
|
|
297
|
+
<polygon class="cls-11" points="999.9 305.29 999.9 359.88 975.16 373.41 975.15 373.41 953.54 385.23 949.92 387.21 949.91 387.21 949.91 332.54 949.92 332.54 950.16 332.4 975.15 318.78 975.16 318.78 999.9 305.29"/>
|
|
298
|
+
<polygon class="cls-18" points="999.89 305.22 999.89 305.29 949.91 332.55 899.93 305.24 899.93 305.22 949.91 277.89 949.91 277.88 999.89 305.22"/>
|
|
299
|
+
<polygon class="cls-14" points="949.91 332.55 949.91 387.21 899.93 359.88 899.93 305.24 949.91 332.55"/>
|
|
300
|
+
</g>
|
|
301
|
+
<g id="basic_N2-8" data-name="basic_N2">
|
|
302
|
+
<polygon class="cls-11" points="999.9 250.58 999.9 305.17 975.16 318.7 975.15 318.7 953.54 330.52 949.92 332.5 949.91 332.5 949.91 277.83 949.92 277.83 950.16 277.69 975.15 264.07 975.16 264.07 999.9 250.58"/>
|
|
303
|
+
<polygon class="cls-11" points="999.9 250.51 999.9 250.58 949.91 277.84 899.93 250.53 899.93 250.5 949.91 223.18 949.92 223.17 999.9 250.51"/>
|
|
304
|
+
<polygon class="cls-14" points="949.91 277.84 949.91 332.5 899.93 305.17 899.93 250.53 949.91 277.84"/>
|
|
305
|
+
</g>
|
|
306
|
+
<g id="basic_N2-9" data-name="basic_N2">
|
|
307
|
+
<polygon class="cls-11" points="999.9 195.92 999.9 250.51 975.16 264.04 975.15 264.04 953.54 275.86 949.92 277.84 949.91 277.84 949.91 223.17 949.92 223.17 950.16 223.03 975.15 209.41 975.16 209.41 999.9 195.92"/>
|
|
308
|
+
<polygon class="cls-18" points="999.9 195.84 999.9 195.92 949.91 223.17 899.93 195.87 899.93 195.84 949.91 168.51 949.92 168.51 999.9 195.84"/>
|
|
309
|
+
<polygon class="cls-14" points="949.91 223.17 949.91 277.84 899.93 250.5 899.93 195.87 949.91 223.17"/>
|
|
310
|
+
</g>
|
|
311
|
+
<g id="basic_N2-10" data-name="basic_N2">
|
|
312
|
+
<polygon class="cls-11" points="999.91 141.73 999.91 196.32 975.17 209.85 975.16 209.85 953.55 221.67 949.93 223.65 949.92 223.65 949.92 168.98 949.93 168.98 950.17 168.84 975.16 155.22 975.17 155.22 999.91 141.73"/>
|
|
313
|
+
<polygon class="cls-18" points="999.91 141.66 999.91 141.73 949.93 168.99 899.94 141.68 899.94 141.65 949.93 114.33 949.93 114.32 999.91 141.66"/>
|
|
314
|
+
<polygon class="cls-14" points="949.93 168.99 949.93 223.65 899.94 196.32 899.94 141.68 949.93 168.99"/>
|
|
315
|
+
</g>
|
|
316
|
+
</g>
|
|
317
|
+
<g id="N1">
|
|
318
|
+
<g id="basic_N1">
|
|
319
|
+
<polygon class="cls-13" points="750.04 223.12 750.04 277.71 725.3 291.24 725.29 291.24 703.68 303.06 700.06 305.04 700.05 305.04 700.05 250.37 700.06 250.37 700.3 250.23 725.29 236.61 725.3 236.61 750.04 223.12"/>
|
|
320
|
+
<polygon class="cls-15" points="750.04 223.04 750.04 223.12 700.06 250.37 650.07 223.07 650.07 223.04 700.06 195.71 700.06 195.71 750.04 223.04"/>
|
|
321
|
+
<polygon class="cls-3" points="700.06 250.37 700.06 305.04 650.07 277.7 650.07 223.07 700.06 250.37"/>
|
|
322
|
+
</g>
|
|
323
|
+
<g id="basic_N1-2" data-name="basic_N1">
|
|
324
|
+
<polygon class="cls-13" points="750.04 168.6 750.04 223.19 725.3 236.72 725.29 236.72 703.68 248.54 700.06 250.52 700.05 250.52 700.05 195.85 700.06 195.85 700.3 195.71 725.29 182.09 725.3 182.09 750.04 168.6"/>
|
|
325
|
+
<polygon class="cls-15" points="750.04 168.52 750.04 168.6 700.06 195.85 650.08 168.55 650.08 168.52 700.06 141.19 700.06 141.19 750.04 168.52"/>
|
|
326
|
+
<polygon class="cls-3" points="700.06 195.85 700.06 250.51 650.08 223.18 650.08 168.55 700.06 195.85"/>
|
|
327
|
+
</g>
|
|
328
|
+
<g id="basic_N1-3" data-name="basic_N1">
|
|
329
|
+
<polygon class="cls-13" points="750.03 113.89 750.03 168.48 725.29 182.01 725.28 182.01 703.67 193.83 700.05 195.81 700.04 195.81 700.04 141.14 700.05 141.14 700.29 141 725.28 127.38 725.29 127.38 750.03 113.89"/>
|
|
330
|
+
<polygon class="cls-15" points="750.03 113.81 750.03 113.89 700.05 141.14 650.06 113.84 650.06 113.81 700.05 86.48 700.05 86.48 750.03 113.81"/>
|
|
331
|
+
<polygon class="cls-3" points="700.05 141.14 700.05 195.8 650.06 168.47 650.06 113.84 700.05 141.14"/>
|
|
332
|
+
</g>
|
|
333
|
+
<g id="basic_N1-4" data-name="basic_N1">
|
|
334
|
+
<polygon class="cls-13" points="750.02 59.73 750.02 114.32 725.28 127.85 725.27 127.85 703.66 139.67 700.04 141.65 700.03 141.65 700.03 86.98 700.04 86.98 700.28 86.84 725.27 73.22 725.28 73.22 750.02 59.73"/>
|
|
335
|
+
<polygon class="cls-15" points="750.02 59.66 750.02 59.73 700.04 86.99 650.05 59.68 650.05 59.65 700.04 32.33 700.04 32.32 750.02 59.66"/>
|
|
336
|
+
<polygon class="cls-3" points="700.04 86.99 700.04 141.65 650.05 114.32 650.05 59.68 700.04 86.99"/>
|
|
337
|
+
</g>
|
|
338
|
+
<g id="basic_N1-5" data-name="basic_N1">
|
|
339
|
+
<polygon class="cls-13" points="700.14 195.83 700.14 250.42 675.4 263.95 675.39 263.95 653.78 275.77 650.16 277.75 650.15 277.75 650.15 223.08 650.16 223.08 650.4 222.94 675.39 209.32 675.4 209.32 700.14 195.83"/>
|
|
340
|
+
<polygon class="cls-15" points="700.14 195.75 700.14 195.83 650.16 223.08 600.17 195.78 600.17 195.75 650.16 168.42 650.16 168.42 700.14 195.75"/>
|
|
341
|
+
<polygon class="cls-3" points="650.16 223.08 650.16 277.75 600.17 250.41 600.17 195.78 650.16 223.08"/>
|
|
342
|
+
</g>
|
|
343
|
+
<g id="basic_N1-6" data-name="basic_N1">
|
|
344
|
+
<polygon class="cls-13" points="650.3 168.68 650.3 223.27 625.56 236.8 625.55 236.8 603.94 248.62 600.32 250.6 600.31 250.6 600.31 195.93 600.32 195.93 600.56 195.79 625.55 182.17 625.56 182.17 650.3 168.68"/>
|
|
345
|
+
<polygon class="cls-15" points="650.3 168.61 650.3 168.69 600.32 195.94 550.33 168.63 550.33 168.61 600.32 141.28 600.32 141.28 650.3 168.61"/>
|
|
346
|
+
<polygon class="cls-3" points="600.32 195.94 600.32 250.6 550.33 223.27 550.33 168.63 600.32 195.94"/>
|
|
347
|
+
</g>
|
|
348
|
+
<g id="basic_N1-7" data-name="basic_N1">
|
|
349
|
+
<polygon class="cls-13" points="600.32 304.95 600.32 359.54 575.58 373.07 575.57 373.07 553.96 384.89 550.34 386.87 550.33 386.87 550.33 332.2 550.34 332.2 550.58 332.06 575.57 318.44 575.58 318.44 600.32 304.95"/>
|
|
350
|
+
<polygon class="cls-15" points="600.32 304.88 600.32 304.95 550.33 332.21 500.35 304.9 500.35 304.87 550.33 277.54 550.34 277.54 600.32 304.88"/>
|
|
351
|
+
<polygon class="cls-3" points="550.33 332.21 550.33 386.87 500.35 359.54 500.35 304.9 550.33 332.21"/>
|
|
352
|
+
</g>
|
|
353
|
+
<g id="basic_N1-8" data-name="basic_N1">
|
|
354
|
+
<polygon class="cls-13" points="600.32 250.29 600.32 304.88 575.58 318.41 575.57 318.41 553.96 330.23 550.34 332.21 550.33 332.21 550.33 277.54 550.34 277.54 550.58 277.4 575.57 263.78 575.58 263.78 600.32 250.29"/>
|
|
355
|
+
<polygon class="cls-15" points="600.32 250.21 600.32 250.29 550.33 277.54 500.35 250.24 500.35 250.21 550.33 222.88 550.34 222.88 600.32 250.21"/>
|
|
356
|
+
<polygon class="cls-3" points="550.33 277.54 550.33 332.2 500.35 304.87 500.35 250.24 550.33 277.54"/>
|
|
357
|
+
</g>
|
|
358
|
+
<g id="basic_N1-9" data-name="basic_N1">
|
|
359
|
+
<polygon class="cls-13" points="600.31 195.7 600.31 250.29 575.57 263.82 575.56 263.82 553.95 275.64 550.33 277.62 550.32 277.62 550.32 222.95 550.33 222.95 550.57 222.81 575.56 209.19 575.57 209.19 600.31 195.7"/>
|
|
360
|
+
<polygon class="cls-15" points="600.31 195.62 600.31 195.7 550.33 222.95 500.34 195.65 500.34 195.62 550.33 168.29 550.33 168.29 600.31 195.62"/>
|
|
361
|
+
<polygon class="cls-3" points="550.33 222.95 550.33 277.62 500.34 250.28 500.34 195.65 550.33 222.95"/>
|
|
362
|
+
</g>
|
|
363
|
+
<g id="basic_N1-10" data-name="basic_N1">
|
|
364
|
+
<polygon class="cls-13" points="600.31 141.03 600.31 195.62 575.57 209.15 575.56 209.15 553.95 220.97 550.33 222.95 550.32 222.95 550.32 168.28 550.33 168.28 550.57 168.14 575.56 154.52 575.57 154.52 600.31 141.03"/>
|
|
365
|
+
<polygon class="cls-15" points="600.31 140.96 600.31 141.03 550.33 168.29 500.34 140.98 500.34 140.96 550.33 113.63 550.33 113.63 600.31 140.96"/>
|
|
366
|
+
<polygon class="cls-3" points="550.33 168.29 550.33 222.95 500.34 195.62 500.34 140.98 550.33 168.29"/>
|
|
367
|
+
</g>
|
|
368
|
+
</g>
|
|
369
|
+
</svg>
|
|
@@ -206,6 +206,9 @@ class AnalysisPage(QWidget):
|
|
|
206
206
|
self.run_btn.setText("运行分析" if is_zh else "Run Analysis")
|
|
207
207
|
self.stop_btn.setText("停止" if is_zh else "Stop")
|
|
208
208
|
self.logs_label.setText("日志" if is_zh else "Logs")
|
|
209
|
+
self.analysis_mode.setToolTip(
|
|
210
|
+
"选择分析模块" if is_zh else "Select an analysis mode to run."
|
|
211
|
+
)
|
|
209
212
|
|
|
210
213
|
if self._last_state is not None:
|
|
211
214
|
self._update_info(self._last_state)
|
|
@@ -216,6 +219,10 @@ class AnalysisPage(QWidget):
|
|
|
216
219
|
else "Mode=— | preset=— | preprocess=— | spike_main_shape=—"
|
|
217
220
|
)
|
|
218
221
|
|
|
222
|
+
for mode in self._modes.values():
|
|
223
|
+
if hasattr(mode, "apply_language"):
|
|
224
|
+
mode.apply_language(self._lang)
|
|
225
|
+
|
|
219
226
|
def load_state(self, state) -> None:
|
|
220
227
|
self._last_state = state
|
|
221
228
|
self._update_info(state)
|
|
@@ -317,6 +317,35 @@ class PreprocessPage(QWidget):
|
|
|
317
317
|
self.stop_btn.setText("停止" if is_zh else "Stop")
|
|
318
318
|
self.logs_label.setText("日志" if is_zh else "Logs")
|
|
319
319
|
|
|
320
|
+
self.input_mode.setToolTip(
|
|
321
|
+
"仅支持 ASA .npz 输入" if is_zh else "Only ASA .npz input is supported in this GUI."
|
|
322
|
+
)
|
|
323
|
+
self.preprocess_method.setToolTip(
|
|
324
|
+
"嵌入会生成稠密矩阵供 TDA/FR 使用"
|
|
325
|
+
if is_zh
|
|
326
|
+
else "Embedding builds a dense spike matrix for TDA/FR."
|
|
327
|
+
)
|
|
328
|
+
self.embed_res.setToolTip(
|
|
329
|
+
"时间分箱分辨率(与 t 单位一致)。" if is_zh else "Time bin resolution (same unit as t)."
|
|
330
|
+
)
|
|
331
|
+
self.embed_dt.setToolTip(
|
|
332
|
+
"时间步长(与 t 单位一致)。" if is_zh else "Time step (same unit as t)."
|
|
333
|
+
)
|
|
334
|
+
self.embed_sigma.setToolTip(
|
|
335
|
+
"高斯平滑尺度,越大越平滑。" if is_zh else "Gaussian smoothing scale."
|
|
336
|
+
)
|
|
337
|
+
self.embed_smooth.setToolTip("是否启用平滑。" if is_zh else "Enable smoothing.")
|
|
338
|
+
self.embed_speed_filter.setToolTip(
|
|
339
|
+
"过滤低速时间点(常见于 grid 数据)。"
|
|
340
|
+
if is_zh
|
|
341
|
+
else "Remove low-speed samples (common for grid data)."
|
|
342
|
+
)
|
|
343
|
+
self.embed_min_speed.setToolTip(
|
|
344
|
+
"速度阈值(与 t/x/y 单位一致)。"
|
|
345
|
+
if is_zh
|
|
346
|
+
else "Speed threshold (same unit as t/x/y)."
|
|
347
|
+
)
|
|
348
|
+
|
|
320
349
|
def _show_help(self) -> None:
|
|
321
350
|
lang = str(QSettings("canns", "asa_gui").value("lang", "en"))
|
|
322
351
|
title = (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: canns
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.2
|
|
4
4
|
Summary: A Python Library for Continuous Attractor Neural Networks
|
|
5
5
|
Project-URL: Repository, https://github.com/routhleck/canns
|
|
6
6
|
Author-email: Sichao He <sichaohe@outlook.com>
|
|
@@ -77,7 +77,7 @@ CANNs is a Python library built on top of brainpy with performance‑critical mo
|
|
|
77
77
|
- **Task-first API** – `canns.task.tracking` and `canns.task.open_loop_navigation` generate smooth tracking inputs, population coding stimuli, or import experimental trajectories.
|
|
78
78
|
- **Rich analysis suite** – `canns.analyzer` covers energy landscapes, tuning curves, spike embeddings, UMAP/TDA helpers, and theta-sweep animations.
|
|
79
79
|
- **Unified training** – `canns.trainer.HebbianTrainer` implements generic Hebbian learning and prediction, layered on the abstract `Trainer` base.
|
|
80
|
-
- **Pipeline workspace** – the ASA
|
|
80
|
+
- **Pipeline workspace** – the ASA GUI (Attractor Structure Analyzer) provides an end-to-end analysis workflow (TDA → decode → CohoMap/CohoSpace/FR/FRM) with interactive visualization, help tips, and bilingual UI.
|
|
81
81
|
- **Extensible foundations** – base classes (`BasicModel`, `Task`, `Trainer`, `Pipeline`) keep custom components consistent with the built-in ecosystem.
|
|
82
82
|
|
|
83
83
|
## Visual Gallery
|
|
@@ -128,6 +128,9 @@ pip install canns
|
|
|
128
128
|
pip install canns[cuda12]
|
|
129
129
|
pip install canns[tpu]
|
|
130
130
|
|
|
131
|
+
# GUI (recommended for pipeline usage)
|
|
132
|
+
pip install canns[gui]
|
|
133
|
+
|
|
131
134
|
```
|
|
132
135
|
|
|
133
136
|
## Quick Start
|
|
@@ -156,20 +159,30 @@ def step(t, stimulus):
|
|
|
156
159
|
|
|
157
160
|
us, inputs = bm.for_loop(
|
|
158
161
|
step,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
task.data,
|
|
162
|
-
)
|
|
162
|
+
task.run_steps,
|
|
163
|
+
task.data,
|
|
163
164
|
)
|
|
164
165
|
```
|
|
165
166
|
|
|
166
|
-
For the ASA pipeline,
|
|
167
|
+
For the ASA pipeline, the recommended entrypoint is the GUI:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
canns-gui
|
|
171
|
+
# or
|
|
172
|
+
python -m canns.pipeline.asa_gui
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
> Note: ASA TUI (`python -m canns.pipeline.asa` / `canns-tui`) is a legacy interface kept for transition.
|
|
167
176
|
|
|
168
177
|
## Documentation & Notebooks
|
|
169
178
|
|
|
170
179
|
- [Quick Start Guide](https://routhleck.com/canns/en/notebooks/01_quick_start.html) – condensed tour of the library layout.
|
|
171
180
|
- [Design Philosophy](https://routhleck.com/canns/en/notebooks/00_design_philosophy.html) – detailed design rationale for each module.
|
|
172
181
|
- Interactive launchers: [](https://mybinder.org/v2/gh/routhleck/canns/HEAD?filepath=docs%2Fen%2Fnotebooks) [](https://colab.research.google.com/github/routhleck/canns/blob/master/docs/en/notebooks/)
|
|
182
|
+
- Tutorials (Chinese, online):
|
|
183
|
+
- [ASA GUI end-to-end](https://routhleck.com/canns/zh/3_full_detail_tutorials/04_pipeline/03_asa_gui.html)
|
|
184
|
+
- [ASA pipeline principles & parameters](https://routhleck.com/canns/zh/3_full_detail_tutorials/02_data_analysis/01_asa_pipeline.html)
|
|
185
|
+
- [Cell classification](https://routhleck.com/canns/zh/3_full_detail_tutorials/02_data_analysis/04_cell_classification.html)
|
|
173
186
|
|
|
174
187
|
## Development Workflow
|
|
175
188
|
|
|
@@ -81,21 +81,21 @@ canns/pipeline/asa/screens.py,sha256=DbqidxmoKe4KzSLuxuriVv1PIVFn5Z-PfScVfjrIiEA
|
|
|
81
81
|
canns/pipeline/asa/state.py,sha256=XukidfcFIOmm9ttT226FOTYR5hv2VAY8_DZt7V1Ml2g,6955
|
|
82
82
|
canns/pipeline/asa/styles.tcss,sha256=eaXI3rQeWdBYmWdLJMMiSO6acHtreLRVKKoIHb2-dBk,3349
|
|
83
83
|
canns/pipeline/asa/widgets.py,sha256=3vPGGQWP9V5FwuwqykCVp7dzAHdpcFkDqib0DtIw-lQ,8087
|
|
84
|
-
canns/pipeline/asa_gui/__init__.py,sha256=
|
|
84
|
+
canns/pipeline/asa_gui/__init__.py,sha256=38gJUuQGfZ5gTJOJfYx8gJuy_bF69Qdpi1HNEYDKaH8,2250
|
|
85
85
|
canns/pipeline/asa_gui/__main__.py,sha256=2UOQtIE5oXkcq9HcuY13M3Jk6-uaDu8A0VJfvr203ck,134
|
|
86
86
|
canns/pipeline/asa_gui/app.py,sha256=Wd-tVGNPE1mQ0S9bET-cyjfj5UWsTIFFHOQRu0lngBs,833
|
|
87
|
-
canns/pipeline/asa_gui/main_window.py,sha256=
|
|
87
|
+
canns/pipeline/asa_gui/main_window.py,sha256=kQp8DTmp7SuYVCglh5lVja7DyQ7hAOxPgCEUmjKHgbk,7019
|
|
88
88
|
canns/pipeline/asa_gui/analysis_modes/__init__.py,sha256=m5tra-3lOcKi09HV3WxvTnDuF5lgV92C_fHH_4V87zw,990
|
|
89
|
-
canns/pipeline/asa_gui/analysis_modes/base.py,sha256
|
|
89
|
+
canns/pipeline/asa_gui/analysis_modes/base.py,sha256=SqZhsD6umV0ecHGca5FcCx7G2eeskE8HZToRBc3Y5AA,1335
|
|
90
90
|
canns/pipeline/asa_gui/analysis_modes/batch_mode.py,sha256=sua3cD6G4vTGT7fUSrdvYNwldA3KZ1O4MCCsSOX4knc,531
|
|
91
|
-
canns/pipeline/asa_gui/analysis_modes/cohomap_mode.py,sha256=
|
|
92
|
-
canns/pipeline/asa_gui/analysis_modes/cohospace_mode.py,sha256=
|
|
93
|
-
canns/pipeline/asa_gui/analysis_modes/decode_mode.py,sha256=
|
|
94
|
-
canns/pipeline/asa_gui/analysis_modes/fr_mode.py,sha256=
|
|
95
|
-
canns/pipeline/asa_gui/analysis_modes/frm_mode.py,sha256=
|
|
96
|
-
canns/pipeline/asa_gui/analysis_modes/gridscore_mode.py,sha256=
|
|
97
|
-
canns/pipeline/asa_gui/analysis_modes/pathcompare_mode.py,sha256=
|
|
98
|
-
canns/pipeline/asa_gui/analysis_modes/tda_mode.py,sha256=
|
|
91
|
+
canns/pipeline/asa_gui/analysis_modes/cohomap_mode.py,sha256=kIB9zzh_hmhxSXFrv8FLabFLkOp_FhBOs1t_2gPass4,2360
|
|
92
|
+
canns/pipeline/asa_gui/analysis_modes/cohospace_mode.py,sha256=yfLpw0-Q9oMiCIJg-ca_v93__OgXfrGeEFd9DsOc0a4,9368
|
|
93
|
+
canns/pipeline/asa_gui/analysis_modes/decode_mode.py,sha256=uEe3lfWAA0pqmCXzNpaA3A1nrDedTN43_f1R_ssg_A8,2304
|
|
94
|
+
canns/pipeline/asa_gui/analysis_modes/fr_mode.py,sha256=xzx1RhGVDbx6huEtEHGfUqWgRN_C6Sf-Ycj9BzIgTRY,3961
|
|
95
|
+
canns/pipeline/asa_gui/analysis_modes/frm_mode.py,sha256=8rgh_P7dxYJfx2TxrhD00Ja6tK0q6NboqwZ7n0Sw_2U,3992
|
|
96
|
+
canns/pipeline/asa_gui/analysis_modes/gridscore_mode.py,sha256=XC-O2lMx3NPxUkSoZo_69g7B_yFAYUnKIPKLj9-gKM4,5712
|
|
97
|
+
canns/pipeline/asa_gui/analysis_modes/pathcompare_mode.py,sha256=ODG6hxtRNj5CxeJgfr1JiX6AuokyBrPVBvTTJnd5SPw,9600
|
|
98
|
+
canns/pipeline/asa_gui/analysis_modes/tda_mode.py,sha256=xnsWv_zfstzYPf_nLbQkCNHxxhYRznz4m-73ClaBQKs,6094
|
|
99
99
|
canns/pipeline/asa_gui/controllers/__init__.py,sha256=RuQz960T4kEuQsBI_cjS0cQgFyqAdblLXy_dDoLPbTE,198
|
|
100
100
|
canns/pipeline/asa_gui/controllers/analysis_controller.py,sha256=8cKs-RYHh_NflP7xeS0u0_y9WsZ268H1Wyp-wHZC97I,1769
|
|
101
101
|
canns/pipeline/asa_gui/controllers/preprocess_controller.py,sha256=uNZifNGadYPxAVyWnfonOs5pwCgxwB1nrBGqvv8Y3hU,2825
|
|
@@ -108,9 +108,11 @@ canns/pipeline/asa_gui/models/__init__.py,sha256=Pr5wfeu_iA8bh2ob9tfWQcWmzWydYjM
|
|
|
108
108
|
canns/pipeline/asa_gui/models/config.py,sha256=oDAeNlReKJEITc8B5AT9xxQl3Ug1yaGs6DrzSJcABXc,314
|
|
109
109
|
canns/pipeline/asa_gui/models/job.py,sha256=_HdhJIzdH9OSKrRpcl3WCS4O04Bvur5uT9yb9oOWBuE,852
|
|
110
110
|
canns/pipeline/asa_gui/models/presets.py,sha256=zEtR1_35ovSuGa3xMOvZoVDJJUK0rSi8OOlfkQWFvFE,519
|
|
111
|
-
canns/pipeline/asa_gui/resources/__init__.py,sha256=
|
|
112
|
-
canns/pipeline/asa_gui/resources/dark.qss,sha256=
|
|
113
|
-
canns/pipeline/asa_gui/resources/light.qss,sha256=
|
|
111
|
+
canns/pipeline/asa_gui/resources/__init__.py,sha256=xaC4dS2THCTTKOF6MDHMOGGPni9Nnjmeqj7fCaoxzwI,575
|
|
112
|
+
canns/pipeline/asa_gui/resources/dark.qss,sha256=xqlPIFtnKKfBJbcL-kZ-qwFKTl9ADEU2mN7PDJiT7SE,3132
|
|
113
|
+
canns/pipeline/asa_gui/resources/light.qss,sha256=PuFpiWoU3qfGczTWlSjkHGDpMr3Jh0x6SZ0hdCvg_b4,3025
|
|
114
|
+
canns/pipeline/asa_gui/resources/logo.ico,sha256=V54_QvIzs6TK1K28zX915taioAM1gPESAKRCRPAjR4U,125806
|
|
115
|
+
canns/pipeline/asa_gui/resources/logo.svg,sha256=UQqbGRtnROO2BdN3XMkovdBqWew69Z9Sr7SUof2_n3o,48323
|
|
114
116
|
canns/pipeline/asa_gui/resources/styles.qss,sha256=MaWWGn3f9yvOYpgdgy8VyITWk5vGGPut2H_rnQM4-EU,2188
|
|
115
117
|
canns/pipeline/asa_gui/utils/__init__.py,sha256=UDPlNIUi5Jl16YiQbmOWz7TTTjFFJn_nDwDuYleAlKM,35
|
|
116
118
|
canns/pipeline/asa_gui/utils/formatters.py,sha256=w9MP0mGior_hxPqGhjNCXxwNbItgnaCDTdxJ1zUPGgk,347
|
|
@@ -119,8 +121,8 @@ canns/pipeline/asa_gui/utils/validators.py,sha256=x5Tw2Pk434vlfQKBYgUOJPL6MLw0Oh
|
|
|
119
121
|
canns/pipeline/asa_gui/views/__init__.py,sha256=ThoLlMw7bKxA7lkv_AvIR1mbpaoM0vkIxVP1p7mlzQM,28
|
|
120
122
|
canns/pipeline/asa_gui/views/help_content.py,sha256=kL7MSwc9v3gHLz86Apiy64xbwymt9r7sPEjz5ka6EB0,8452
|
|
121
123
|
canns/pipeline/asa_gui/views/pages/__init__.py,sha256=xB7VTY_hKfoCNMGeWZbV3gHG9ErrzmwqW30UlUkbqgE,161
|
|
122
|
-
canns/pipeline/asa_gui/views/pages/analysis_page.py,sha256=
|
|
123
|
-
canns/pipeline/asa_gui/views/pages/preprocess_page.py,sha256=
|
|
124
|
+
canns/pipeline/asa_gui/views/pages/analysis_page.py,sha256=X6PGW_cgvAiNFqUpsS2TuVWl258Q6Q90C9NEQT1TetQ,22807
|
|
125
|
+
canns/pipeline/asa_gui/views/pages/preprocess_page.py,sha256=ds8BHq4a9nsu3aAoojFR_jegO2RXNVYdgf3BnIxIG7M,20762
|
|
124
126
|
canns/pipeline/asa_gui/views/panels/__init__.py,sha256=Spqmc0Sjh38cgr42gszmiogZQFFOLN1yL7ekSpVJCrE,36
|
|
125
127
|
canns/pipeline/asa_gui/views/widgets/__init__.py,sha256=xaTYXw99OL8ye1cpfoKgSwqC7c2B6lrLLsYHRB16m64,481
|
|
126
128
|
canns/pipeline/asa_gui/views/widgets/artifacts_tab.py,sha256=U_fuOCfSmkDhx3G97aod-8UPSIFVz_MrsU4b_ik_5qE,1431
|
|
@@ -156,8 +158,8 @@ canns/trainer/utils.py,sha256=ZdoLiRqFLfKXsWi0KX3wGUp0OqFikwiou8dPf3xvFhE,2847
|
|
|
156
158
|
canns/typing/__init__.py,sha256=mXySdfmD8fA56WqZTb1Nj-ZovcejwLzNjuk6PRfTwmA,156
|
|
157
159
|
canns/utils/__init__.py,sha256=OMyZ5jqZAIUS2Jr0qcnvvrx6YM-BZ1EJy5uZYeA3HC0,366
|
|
158
160
|
canns/utils/benchmark.py,sha256=oJ7nvbvnQMh4_MZh7z160NPLp-197X0rEnmnLHYlev4,1361
|
|
159
|
-
canns-0.14.
|
|
160
|
-
canns-0.14.
|
|
161
|
-
canns-0.14.
|
|
162
|
-
canns-0.14.
|
|
163
|
-
canns-0.14.
|
|
161
|
+
canns-0.14.2.dist-info/METADATA,sha256=QfJB-3QkIfsgIgwtY9jTYbzmvitph_jYNSGM1IDuvHg,9751
|
|
162
|
+
canns-0.14.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
163
|
+
canns-0.14.2.dist-info/entry_points.txt,sha256=57YF2HZp_BG3GeGB8L0m3wR1sSfNyMXF1q4CKEjce6U,164
|
|
164
|
+
canns-0.14.2.dist-info/licenses/LICENSE,sha256=u6NJ1N-QSnf5yTwSk5UvFAdU2yKD0jxG0Xa91n1cPO4,11306
|
|
165
|
+
canns-0.14.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|