graphica-plot 2.0.0__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.
Files changed (181) hide show
  1. graphica/Graphica.ico +0 -0
  2. graphica/__init__.py +1 -0
  3. graphica/__main__.py +111 -0
  4. graphica/assets/__init__.py +0 -0
  5. graphica/assets/icons/__init__.py +0 -0
  6. graphica/assets/icons/arrow-right.svg +21 -0
  7. graphica/assets/icons/bold.svg +20 -0
  8. graphica/assets/icons/calculator.svg +26 -0
  9. graphica/assets/icons/chart-histogram.svg +24 -0
  10. graphica/assets/icons/chart-line.svg +20 -0
  11. graphica/assets/icons/chevron-down.svg +19 -0
  12. graphica/assets/icons/chevron-right.svg +19 -0
  13. graphica/assets/icons/color-swatch.svg +22 -0
  14. graphica/assets/icons/column-insert-right.svg +21 -0
  15. graphica/assets/icons/column-remove.svg +21 -0
  16. graphica/assets/icons/copy.svg +20 -0
  17. graphica/assets/icons/download.svg +21 -0
  18. graphica/assets/icons/edit.svg +21 -0
  19. graphica/assets/icons/eye-off.svg +21 -0
  20. graphica/assets/icons/eye.svg +20 -0
  21. graphica/assets/icons/file-plus.svg +22 -0
  22. graphica/assets/icons/folder-plus.svg +21 -0
  23. graphica/assets/icons/folder.svg +19 -0
  24. graphica/assets/icons/highlight.svg +22 -0
  25. graphica/assets/icons/history.svg +20 -0
  26. graphica/assets/icons/italic.svg +21 -0
  27. graphica/assets/icons/layout-grid.svg +22 -0
  28. graphica/assets/icons/math-function.svg +22 -0
  29. graphica/assets/icons/message-2.svg +21 -0
  30. graphica/assets/icons/mountain.svg +20 -0
  31. graphica/assets/icons/palette.svg +22 -0
  32. graphica/assets/icons/pointer.svg +19 -0
  33. graphica/assets/icons/refresh.svg +20 -0
  34. graphica/assets/icons/row-insert-bottom.svg +21 -0
  35. graphica/assets/icons/row-remove.svg +21 -0
  36. graphica/assets/icons/search.svg +20 -0
  37. graphica/assets/icons/select-all.svg +35 -0
  38. graphica/assets/icons/subscript.svg +20 -0
  39. graphica/assets/icons/superscript.svg +20 -0
  40. graphica/assets/icons/table.svg +21 -0
  41. graphica/assets/icons/trash.svg +23 -0
  42. graphica/assets/icons/typography.svg +23 -0
  43. graphica/assets/icons/x.svg +20 -0
  44. graphica/core/__init__.py +0 -0
  45. graphica/core/analysis.py +1278 -0
  46. graphica/core/app_paths.py +35 -0
  47. graphica/core/axis_settings.py +128 -0
  48. graphica/core/caption_export.py +47 -0
  49. graphica/core/color_palettes.py +56 -0
  50. graphica/core/commands.py +226 -0
  51. graphica/core/cvd_simulation.py +49 -0
  52. graphica/core/dataset.py +443 -0
  53. graphica/core/diagnostics.py +105 -0
  54. graphica/core/excel_utils.py +58 -0
  55. graphica/core/fit_models.py +379 -0
  56. graphica/core/grid_data.py +128 -0
  57. graphica/core/i18n.py +44 -0
  58. graphica/core/json_utils.py +27 -0
  59. graphica/core/label_utils.py +21 -0
  60. graphica/core/methods_text.py +115 -0
  61. graphica/core/named_colors.py +126 -0
  62. graphica/core/plugin_api.py +515 -0
  63. graphica/core/plugin_context.py +167 -0
  64. graphica/core/plugin_install.py +82 -0
  65. graphica/core/plugin_manifest.py +67 -0
  66. graphica/core/plugin_testing.py +213 -0
  67. graphica/core/plugin_types.py +118 -0
  68. graphica/core/provenance.py +19 -0
  69. graphica/core/report_export.py +51 -0
  70. graphica/core/safe_eval.py +194 -0
  71. graphica/core/script_export.py +272 -0
  72. graphica/core/translations_en.py +530 -0
  73. graphica/core/unit_conversion.py +51 -0
  74. graphica/core/update_check.py +43 -0
  75. graphica/core/version.py +14 -0
  76. graphica/gui/__init__.py +0 -0
  77. graphica/gui/app_settings.py +119 -0
  78. graphica/gui/axis_bindings.py +173 -0
  79. graphica/gui/binding.py +135 -0
  80. graphica/gui/builders/__init__.py +1 -0
  81. graphica/gui/builders/axis_panel.py +431 -0
  82. graphica/gui/builders/canvas_area.py +176 -0
  83. graphica/gui/builders/common.py +120 -0
  84. graphica/gui/builders/dataset_panel.py +433 -0
  85. graphica/gui/builders/property_sections.py +208 -0
  86. graphica/gui/canvas.py +519 -0
  87. graphica/gui/color_history.py +47 -0
  88. graphica/gui/color_picker_widget.py +198 -0
  89. graphica/gui/crash_handler.py +77 -0
  90. graphica/gui/cvd_preview.py +23 -0
  91. graphica/gui/data_editor.py +761 -0
  92. graphica/gui/data_import_flow.py +355 -0
  93. graphica/gui/dataset_bindings.py +107 -0
  94. graphica/gui/dataset_style_icon.py +80 -0
  95. graphica/gui/datasets/__init__.py +1 -0
  96. graphica/gui/datasets/actions_menu.py +114 -0
  97. graphica/gui/datasets/colors.py +218 -0
  98. graphica/gui/datasets/fitting.py +70 -0
  99. graphica/gui/datasets/host.py +162 -0
  100. graphica/gui/datasets/operations/__init__.py +1 -0
  101. graphica/gui/datasets/operations/fitting.py +468 -0
  102. graphica/gui/datasets/operations/peaks.py +109 -0
  103. graphica/gui/datasets/operations/processing.py +659 -0
  104. graphica/gui/datasets/operations/runner.py +148 -0
  105. graphica/gui/datasets/operations/transfer.py +227 -0
  106. graphica/gui/datasets/order.py +310 -0
  107. graphica/gui/datasets/overlays.py +74 -0
  108. graphica/gui/datasets/peaks.py +21 -0
  109. graphica/gui/datasets/plugin_runs.py +99 -0
  110. graphica/gui/datasets/processing.py +68 -0
  111. graphica/gui/datasets/property_panel.py +538 -0
  112. graphica/gui/datasets/transfer.py +36 -0
  113. graphica/gui/detached_canvas_window.py +22 -0
  114. graphica/gui/dialogs/__init__.py +137 -0
  115. graphica/gui/dialogs/analysis.py +1322 -0
  116. graphica/gui/dialogs/app.py +1015 -0
  117. graphica/gui/dialogs/appearance.py +851 -0
  118. graphica/gui/dialogs/data_edit.py +577 -0
  119. graphica/gui/dialogs/data_import.py +679 -0
  120. graphica/gui/dialogs/export.py +433 -0
  121. graphica/gui/dock_layout.py +176 -0
  122. graphica/gui/export_preview_panel.py +321 -0
  123. graphica/gui/export_settings.py +16 -0
  124. graphica/gui/file_association.py +97 -0
  125. graphica/gui/icon_utils.py +44 -0
  126. graphica/gui/main_app_window.py +210 -0
  127. graphica/gui/main_window.py +1151 -0
  128. graphica/gui/mathtext_preview.py +168 -0
  129. graphica/gui/menu_bar.py +320 -0
  130. graphica/gui/minimap_widget.py +151 -0
  131. graphica/gui/mixins/__init__.py +0 -0
  132. graphica/gui/mixins/export_mixin.py +520 -0
  133. graphica/gui/mixins/help_mixin.py +127 -0
  134. graphica/gui/mixins/project_io_mixin.py +289 -0
  135. graphica/gui/mixins/quick_access_mixin.py +194 -0
  136. graphica/gui/mixins/ui_setup_mixin.py +206 -0
  137. graphica/gui/notify.py +61 -0
  138. graphica/gui/panels/__init__.py +43 -0
  139. graphica/gui/panels/axis_settings.py +605 -0
  140. graphica/gui/panels/dataset_tree.py +424 -0
  141. graphica/gui/plot_type_drawers.py +131 -0
  142. graphica/gui/plugin_context.py +119 -0
  143. graphica/gui/project_files.py +361 -0
  144. graphica/gui/provenance_panel.py +65 -0
  145. graphica/gui/rendering/__init__.py +1 -0
  146. graphica/gui/rendering/annotations.py +177 -0
  147. graphica/gui/rendering/appearance.py +368 -0
  148. graphica/gui/rendering/common.py +316 -0
  149. graphica/gui/rendering/data_1d.py +376 -0
  150. graphica/gui/rendering/data_2d.py +66 -0
  151. graphica/gui/residual_panel.py +62 -0
  152. graphica/gui/resources.py +16 -0
  153. graphica/gui/single_instance.py +141 -0
  154. graphica/gui/splash.py +83 -0
  155. graphica/gui/task_runner.py +41 -0
  156. graphica/gui/theme.py +864 -0
  157. graphica/gui/tools/__init__.py +56 -0
  158. graphica/gui/tools/annotation.py +275 -0
  159. graphica/gui/tools/cursor.py +259 -0
  160. graphica/gui/tools/layout_edit.py +285 -0
  161. graphica/gui/tools/manager.py +78 -0
  162. graphica/gui/tools/peak_placement.py +132 -0
  163. graphica/gui/tools/range_select.py +191 -0
  164. graphica/gui/tools/region_highlight.py +222 -0
  165. graphica/gui/tools/slice_extraction.py +200 -0
  166. graphica/gui/widget_translation.py +46 -0
  167. graphica/gui/workers.py +280 -0
  168. graphica/models/__init__.py +0 -0
  169. graphica/models/project.py +197 -0
  170. graphica/plugin/__init__.py +20 -0
  171. graphica/plugin/testing.py +57 -0
  172. graphica/sample_data/__init__.py +0 -0
  173. graphica/sample_data/cooling_curve_sample.csv +42 -0
  174. graphica/ui_main_window.py +581 -0
  175. graphica_plot-2.0.0.dist-info/METADATA +317 -0
  176. graphica_plot-2.0.0.dist-info/RECORD +181 -0
  177. graphica_plot-2.0.0.dist-info/WHEEL +5 -0
  178. graphica_plot-2.0.0.dist-info/entry_points.txt +2 -0
  179. graphica_plot-2.0.0.dist-info/licenses/LICENSE +30 -0
  180. graphica_plot-2.0.0.dist-info/licenses/THIRD_PARTY_LICENSES.md +91 -0
  181. graphica_plot-2.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,530 @@
1
+ """英語の訳。原文(日本語)をキーにした辞書で、core/i18n.py が読み込む。載っていない文字列は日本語のまま出る。"""
2
+
3
+ TRANSLATIONS = {
4
+ # --- メニューバー: ファイル ---
5
+ "ファイル(&F)": "&File",
6
+ "プロジェクトを開く(&O)...": "&Open Project...",
7
+ "上書き保存(&P)": "&Save Project",
8
+ "名前を付けて保存(&A)...": "Save Project &As...",
9
+ "クリップボードから貼り付け(&V)...": "Paste from Clipboard(&V)...",
10
+ "最近使ったファイル": "Recent Files",
11
+ "書式テンプレートを保存(&T)...": "Save Style Template(&T)...",
12
+ "書式テンプレートを適用(&A)...": "Apply Style Template(&A)...",
13
+ "名前を付けてエクスポート(&S)...": "Export As(&S)...",
14
+ "グラフをコピー(&C)": "Copy Plot(&C)",
15
+ "印刷(&R)...": "Print(&R)...",
16
+ "バッチエクスポート(&B)...": "Batch Export(&B)...",
17
+ "オートセーブ間隔を設定(&I)...": "Set Autosave Interval(&I)...",
18
+ "オートセーブ: 無効(&I)...": "Autosave: Off(&I)...",
19
+ "オートセーブ: {minutes}分間隔(&I)...": "Autosave: Every {minutes} min(&I)...",
20
+
21
+ # --- メニューバー: 編集 ---
22
+ "編集(&E)": "&Edit",
23
+ "元に戻す": "Undo",
24
+ "やり直し": "Redo",
25
+ "環境設定(&P)...": "Preferences(&P)...",
26
+ "コマンドパレット(&K)...": "Command Palette(&K)...",
27
+
28
+ # --- メニューバー: 表示 ---
29
+ "表示(&V)": "&View",
30
+ "プロパティパネル": "Properties Panel",
31
+ "エクスポートプレビュー": "Export Preview",
32
+ "ダークモード": "Dark Mode",
33
+
34
+ # --- メニューバー: プラグイン ---
35
+ "プラグイン(&P)": "&Plugins",
36
+
37
+ # --- メニューバー: ヘルプ ---
38
+ "ヘルプ(&H)": "&Help",
39
+ "mathtext リファレンス...": "mathtext Reference...",
40
+ "列計算機能 リファレンス...": "Column Calculator Reference...",
41
+ "キーボードショートカット一覧...": "Keyboard Shortcuts...",
42
+ "{app} について...": "About {app}...",
43
+
44
+ # --- 環境設定ダイアログ: 表示言語 ---
45
+ "表示言語の変更": "Language Changed",
46
+ "表示言語の変更は、次回起動時に反映されます。": "The new display language will take effect the next time you start the app.",
47
+
48
+ # --- メインウィンドウ: matplotlib のツールバー ---
49
+ "元の表示に戻す": "Reset to Original View",
50
+ "最初の表示範囲にリセットします": "Reset to the initial view",
51
+ "前の表示に戻る": "Back to Previous View",
52
+ "1つ前の表示範囲に戻ります": "Back to the previous view",
53
+ "次の表示に進む": "Forward to Next View",
54
+ "戻る前の表示範囲に進みます": "Forward to the view before the last back",
55
+ "パン/ズーム": "Pan/Zoom",
56
+ "左ドラッグで移動、右ドラッグで拡大縮小(x/yキーで軸固定)":
57
+ "Left-drag to pan, right-drag to zoom (hold x/y to lock an axis)",
58
+ "矩形ズーム": "Zoom to Rectangle",
59
+ "ドラッグした矩形範囲に拡大します(x/yキーで軸固定)":
60
+ "Zoom to the dragged rectangle (hold x/y to lock an axis)",
61
+ "サブプロット調整": "Configure Subplots",
62
+ "サブプロット間の余白を調整します": "Adjust the spacing between subplots",
63
+ "画像として保存": "Save as Image",
64
+ "グラフを画像ファイルとして保存します": "Save the plot as an image file",
65
+
66
+ # --- メインウィンドウ: ツールバー/主要ボタン/パネル見出し ---
67
+ "プロットのプロパティ": "Plot Properties",
68
+ "データカーソル": "Data Cursor",
69
+ "注釈 (クリック:テキスト / ドラッグ:矢印 / 右クリック:削除)": "Annotation (Click: text / Drag: arrow / Right-click: delete)",
70
+ "レイアウト編集 (自由配置レイアウト時のみ: ドラッグでプロットを移動/リサイズ)":
71
+ "Edit Layout (Free layout only: drag to move/resize plots)",
72
+ "プロット複製": "Duplicate Plot",
73
+ "データ表示/編集": "View/Edit Data",
74
+ "曲線フィット": "Curve Fit",
75
+ "ピーク検出": "Find Peaks",
76
+ "自動配色": "Auto Color",
77
+ "パレット管理...": "Manage Palettes...",
78
+ "新しいフォルダ": "New Folder",
79
+ "データセットのプロパティ": "Dataset Properties",
80
+ "グラフ全体レイアウト": "Overall Plot Layout",
81
+ "行数": "Rows",
82
+ "列数": "Columns",
83
+ "自由配置レイアウト(ドラッグで配置)": "Free Layout (drag to arrange)",
84
+ "+ プロット追加": "+ Add Plot",
85
+ "- プロット削除": "− Remove Plot",
86
+ "編集対象のプロット": "Active Plot",
87
+
88
+ # --- このソフトについて ---
89
+ "{app} について": "About {app}",
90
+ "バージョン": "Version",
91
+
92
+ # --- ウェルカムダイアログ ---
93
+ "{app} へようこそ": "Welcome to {app}",
94
+ "サンプルデータを開く": "Open Sample Data",
95
+ "閉じる": "Close",
96
+
97
+ # --- 環境設定ダイアログ ---
98
+ "環境設定": "Preferences",
99
+ "外観": "Appearance",
100
+ "ダークモードを有効にする": "Enable dark mode",
101
+ "言語": "Language",
102
+ "表示言語": "Display language",
103
+ "※ 言語の変更は次回起動時に反映されます。": "* The language change takes effect after restarting the app.",
104
+ "保存": "Save",
105
+ " 分": " min",
106
+ "無効": "Off",
107
+ "オートセーブ間隔": "Autosave interval",
108
+
109
+ # --- 起動画面 ---
110
+ "バージョン {version}": "Version {version}",
111
+ "起動しています…": "Starting…",
112
+ "ライブラリを読み込み中…": "Loading libraries…",
113
+ "ウィンドウを準備中…": "Preparing the window…",
114
+
115
+ # --- メニューバー ---
116
+ "データファイルを開く(&D)...": "Open &Data File...",
117
+ "データファイルを開く(D)": "Open Data File",
118
+ "フォルダから一括インポート(&F)...": "Import &Folder...",
119
+ "フォルダから一括インポート(F)": "Import Folder",
120
+ "スタートアップ画面(&W)...": "&Welcome Screen...",
121
+ "スタートアップ画面(W)": "Welcome Screen",
122
+ "エクスポート": "Export",
123
+ "Pythonスクリプトとしてエクスポート...": "Export as Python Script...",
124
+ "Pythonスクリプトとしてエクスポート": "Export as Python Script",
125
+ "LaTeX/Word用キャプションを生成...": "Generate Caption for LaTeX/Word...",
126
+ "LaTeX/Word用キャプションを生成": "Generate Caption for LaTeX/Word",
127
+ "実験レポートを生成 (HTML/PDF)...": "Generate Report (HTML/PDF)...",
128
+ "実験レポートを生成 (HTML/PDF)": "Generate Report (HTML/PDF)",
129
+ "自動バックアップ履歴から復元(&H)...": "Restore from Autosave &History...",
130
+ "自動バックアップ履歴から復元(H)": "Restore from Autosave History",
131
+ "設定・スタイルをエクスポート(&X)...": "E&xport Settings and Styles...",
132
+ "設定・スタイルをエクスポート(X)": "Export Settings and Styles",
133
+ "設定・スタイルをインポート(&M)...": "I&mport Settings and Styles...",
134
+ "設定・スタイルをインポート(M)": "Import Settings and Styles",
135
+ "データセット(&D)": "&Dataset",
136
+ "データセット(D)": "Dataset",
137
+ "残差プロット": "Residual Plot",
138
+ "処理履歴": "Processing History",
139
+ "ミニマップ(レンジスライダー)": "Minimap (Range Slider)",
140
+ "キャンバスを別ウィンドウに切り離す": "Detach Canvas to a Window",
141
+ "パネルラベルを自動表示 ((a)(b)(c)...)": "Automatic Panel Labels ((a)(b)(c)...)",
142
+ "パネルラベルを自動表示 ((a)(b)(c))": "Automatic Panel Labels ((a)(b)(c))",
143
+ "色覚シミュレーションプレビュー...": "Color Vision Simulation Preview...",
144
+ "色覚シミュレーションプレビュー": "Color Vision Simulation Preview",
145
+ "ドックレイアウト": "Dock Layout",
146
+ "現在のレイアウトを保存...": "Save Current Layout...",
147
+ "現在のレイアウトを保存": "Save Current Layout",
148
+ "レイアウトを読み込み": "Load Layout",
149
+ "既定のレイアウトにリセット": "Reset to Default Layout",
150
+ "診断情報をエクスポート...": "Export Diagnostics...",
151
+ "診断情報をエクスポート": "Export Diagnostics",
152
+ "アップデートを確認...": "Check for Updates...",
153
+ "アップデートを確認": "Check for Updates",
154
+ "(履歴なし)": "(No history)",
155
+ "履歴をクリア": "Clear History",
156
+
157
+ # --- データセットのメニュー ---
158
+ "データ処理": "Data Processing",
159
+ "解析": "Analysis",
160
+ "解析・注釈": "Analysis and Annotations",
161
+ "複数データセット": "Multiple Datasets",
162
+ "タブ操作": "Tabs",
163
+ "パネル": "Panels",
164
+ "すべて表示": "Show All",
165
+ "すべて非表示": "Hide All",
166
+ "フォルダ名を変更...": "Rename Folder...",
167
+ "フォルダ内を全て表示": "Show All in Folder",
168
+ "フォルダ内を全て非表示": "Hide All in Folder",
169
+ "スタイルをコピー": "Copy Style",
170
+ "スタイルを貼り付け": "Paste Style",
171
+ "元ファイルから再読み込み": "Reload from Source File",
172
+ "規格化(ノーマライズ)...": "Normalize...",
173
+ "規格化(ノーマライズ)": "Normalize",
174
+ "Savitzky-Golayフィルタ(平滑化/微分)...": "Savitzky-Golay Filter (Smoothing/Derivative)...",
175
+ "Savitzky-Golayフィルタ(平滑化/微分)": "Savitzky-Golay Filter (Smoothing/Derivative)",
176
+ "ベースライン補正...": "Baseline Correction...",
177
+ "ベースライン補正": "Baseline Correction",
178
+ "区間積分(台形則/Simpson則)...": "Interval Integral (Trapezoid/Simpson)...",
179
+ "区間積分(台形則/Simpson則)": "Interval Integral (Trapezoid/Simpson)",
180
+ "累積積分(台形則/Simpson則)...": "Cumulative Integral (Trapezoid/Simpson)...",
181
+ "累積積分(台形則/Simpson則)": "Cumulative Integral (Trapezoid/Simpson)",
182
+ "共通X格子へのリサンプリング/補間...": "Resample/Interpolate onto a Common X Grid...",
183
+ "共通X格子へのリサンプリング/補間": "Resample/Interpolate onto a Common X Grid",
184
+ "重複X値の検出...": "Detect Duplicate X Values...",
185
+ "重複X値の検出": "Detect Duplicate X Values",
186
+ "行フィルタ...": "Filter Rows...",
187
+ "行フィルタ": "Filter Rows",
188
+ "列の値で系列に分割...": "Split into Series by Column Value...",
189
+ "列の値で系列に分割": "Split into Series by Column Value",
190
+ "外れ値検出(Z-score/IQR)...": "Detect Outliers (Z-score/IQR)...",
191
+ "外れ値検出(Z-score/IQR)": "Detect Outliers (Z-score/IQR)",
192
+ "統計値アンカーラベルを追加...": "Add Statistic Label...",
193
+ "統計値アンカーラベルを追加": "Add Statistic Label",
194
+ "インセット(拡大図)を追加...": "Add Inset (Zoom)...",
195
+ "インセット(拡大図)を追加": "Add Inset (Zoom)",
196
+ "ピーク位置に自動ラベルを追加...": "Label Peaks Automatically...",
197
+ "ピーク位置に自動ラベルを追加": "Label Peaks Automatically",
198
+ "ヒストグラム / KDE...": "Histogram / KDE...",
199
+ "ヒストグラム / KDE": "Histogram / KDE",
200
+ "フィット結果のエクスポート...": "Export Fit Result...",
201
+ "フィット結果のエクスポート": "Export Fit Result",
202
+ "「方法」文をコピー...": "Copy Methods Text...",
203
+ "「方法」文をコピー": "Copy Methods Text",
204
+ "データ表をファイルに書き出す...": "Export Data Table to File...",
205
+ "データ表をファイルに書き出す": "Export Data Table to File",
206
+ "別のタブへコピー...": "Copy to Another Tab...",
207
+ "別のタブへコピー": "Copy to Another Tab",
208
+ "別のタブへ移動...": "Move to Another Tab...",
209
+ "別のタブへ移動": "Move to Another Tab",
210
+ "平均±SD生成...": "Create Mean ± SD...",
211
+ "バッチ列計算...": "Batch Column Calculation...",
212
+ "バッチカーブフィット...": "Batch Curve Fit...",
213
+ "データセット間演算...": "Arithmetic Between Datasets...",
214
+ "X軸アライメント(相互相関)...": "Align X Axes (Cross-correlation)...",
215
+
216
+ # --- 軸の設定 ---
217
+ "X軸": "X Axis",
218
+ "Y軸": "Y Axis",
219
+ "ラベル/書式": "Labels/Format",
220
+ "タイトル": "Title",
221
+ "X軸ラベル": "X-axis label",
222
+ "Y軸ラベル": "Y-axis label",
223
+ "第2Y軸ラベル": "Secondary Y-axis label",
224
+ "第2Y軸 (右側) を使用": "Use secondary Y axis (right)",
225
+ "自動スケール": "Autoscale",
226
+ "最小値": "Minimum",
227
+ "最大値": "Maximum",
228
+ "対数表示": "Log scale",
229
+ "軸を反転": "Invert axis",
230
+ "主目盛": "Major ticks",
231
+ "間隔": "Interval",
232
+ "固定間隔": "Fixed interval",
233
+ "自動": "Auto",
234
+ "自動(既定)": "Auto (default)",
235
+ "補助目盛を表示": "Show minor ticks",
236
+ "X軸主目盛": "X major ticks",
237
+ "X軸補助目盛": "X minor ticks",
238
+ "Y軸主目盛": "Y major ticks",
239
+ "Y軸補助目盛": "Y minor ticks",
240
+ "主軸目盛(主/補助)": "Ticks (major/minor)",
241
+ "第2軸目盛(主/補助)": "2nd-axis ticks",
242
+ "目盛の長さ(主/補助)": "Tick length",
243
+ "主目盛の線の長さ(pt)": "Major tick length (pt)",
244
+ "補助目盛の線の長さ(pt)。「自動」は主目盛の長さの約0.57倍":
245
+ "Minor tick length (pt). \"Auto\" is about 0.57 × the major tick length",
246
+ "目盛の太さ": "Tick width",
247
+ "目盛を表示": "Show ticks",
248
+ "目盛の数値を表示": "Show tick labels",
249
+ "目盛数値": "Tick labels",
250
+ "目盛り表記": "Tick notation",
251
+ "軸端にまとめて指数表記 (×10ⁿ)": "Exponent at the axis end (×10ⁿ)",
252
+ "目盛りごとに指数表記 (例: 1.0×10¹⁰)": "Exponent on each tick (e.g. 1.0×10¹⁰)",
253
+ "常に小数表記": "Always decimal",
254
+ "小数桁数": "Decimal places",
255
+ "目盛りの数値を表示する小数点以下の桁数(「自動」以外を選ぶと指数表記モードより優先されます)":
256
+ "Decimal places of tick labels (anything but \"Auto\" overrides the exponent notation)",
257
+ "対数補助目盛": "Log minor ticks",
258
+ "対数軸の補助目盛りをどこに打つか": "Where to put minor ticks on a log axis",
259
+ "全て(2〜9)": "All (2–9)",
260
+ "少なめ(2, 5)": "Fewer (2, 5)",
261
+ "最小限(5)": "Minimal (5)",
262
+ "補助目盛りに数値ラベルを表示": "Label minor ticks",
263
+ "X軸単位": "X-axis unit",
264
+ "X軸データが表している物理量の単位": "Unit of the quantity on the X axis",
265
+ "第2X軸単位": "2nd X-axis unit",
266
+ "上部に追加する第2X軸に変換して表示する単位": "Unit shown on the secondary X axis added at the top",
267
+ "単位": "Unit",
268
+ "なし": "None",
269
+ "nm(波長)": "nm (wavelength)",
270
+ "cm⁻¹(波数)": "cm⁻¹ (wavenumber)",
271
+ "eV(エネルギー)": "eV (energy)",
272
+ "Hz(周波数)": "Hz (frequency)",
273
+ "X軸を共有(グリッドレイアウト時)": "Share X axes (grid)",
274
+ "Y軸を共有(グリッドレイアウト時)": "Share Y axes (grid)",
275
+ "選択中のサブプロットの位置・サイズ": "Position and size of the selected subplot",
276
+ "幅": "Width",
277
+ "高さ": "Height",
278
+ "グリッドを表示": "Show grid",
279
+ "補助グリッドの表示": "Show minor grid",
280
+ "実線": "Solid",
281
+ "破線": "Dashed",
282
+ "点線": "Dotted",
283
+ "一点鎖線": "Dash-dot",
284
+ "線種": "Line style",
285
+ "太さ": "Width",
286
+ "透過度(アルファ)": "Opacity (alpha)",
287
+ "外枠": "Frame",
288
+ "軸ラベル": "Axis labels",
289
+ "フォント…": "Font…",
290
+ "色…": "Color…",
291
+ "フォント選択...": "Choose Font...",
292
+ "色選択...": "Choose Color...",
293
+ "凡例を表示": "Show legend",
294
+ "凡例の位置": "Legend position",
295
+ "凡例フォント": "Legend font",
296
+ "凡例 文字色": "Legend text color",
297
+ "凡例の順序...": "Legend Order...",
298
+ "カラーバーを表示": "Show colorbar",
299
+ "カラーバーの位置": "Colorbar position",
300
+ "カラーバーの幅(割合)": "Colorbar width (fraction)",
301
+ "カラーバーのラベル": "Colorbar label",
302
+ "右": "Right",
303
+ "左": "Left",
304
+ "上": "Top",
305
+ "下": "Bottom",
306
+ "タイトルを編集": "Edit title",
307
+ "タイトルを入力": "Title",
308
+ "X軸ラベルを編集": "Edit X-axis label",
309
+ "X軸ラベルを入力": "X label",
310
+ "Y軸ラベルを編集": "Edit Y-axis label",
311
+ "Y軸ラベルを入力": "Y label",
312
+ "タイトル/ラベルを編集(書式・記号入力)": "Edit title/label (formatting and symbols)",
313
+ "ラベルの表示/非表示(テキスト自体は保持されます)": "Show/hide the label (the text is kept)",
314
+ "クリックして編集": "Click to edit",
315
+ "描画先プロット": "Target plot",
316
+ "プロット {number}": "Plot {number}",
317
+ "プロット 1": "Plot 1",
318
+
319
+ # --- データセットのプロパティ ---
320
+ "データ列": "Data columns",
321
+ "基本スタイル": "Basic style",
322
+ "グラデーション": "Gradient",
323
+ "ウォーターフォール": "Waterfall",
324
+ "2Dマップ・値による配色": "2D map and color by value",
325
+ "表示の追加要素": "Extra elements",
326
+ "配置・情報": "Placement and info",
327
+ "X軸の列": "X column",
328
+ "Y軸の列": "Y column",
329
+ "X誤差列": "X error column",
330
+ "Y誤差列": "Y error column",
331
+ "Z軸の列": "Z column",
332
+ "凡例名": "Legend name",
333
+ "種別": "Plot type",
334
+ "色": "Color",
335
+ "色を選択…": "Choose Color…",
336
+ "線の種類": "Line style",
337
+ "線の太さ": "Line width",
338
+ "マーカー": "Marker",
339
+ "マーカーサイズ": "Marker size",
340
+ "透明度": "Opacity",
341
+ "平滑化": "Smoothing",
342
+ "平滑化の手法": "Smoothing method",
343
+ "CubicSpline(既定)": "Cubic spline (default)",
344
+ "移動平均": "Moving average",
345
+ "中央値フィルタ": "Median filter",
346
+ "ガウシアンフィルタ": "Gaussian filter",
347
+ "グラデーションを適用": "Apply gradient",
348
+ "終端色": "End color",
349
+ "対象": "Target",
350
+ "線": "Line",
351
+ "塗り": "Fill",
352
+ "両方": "Both",
353
+ "ウォーターフォール表示(積み重ね)": "Waterfall (stacked)",
354
+ "Xオフセット": "X offset",
355
+ "Yオフセット": "Y offset",
356
+ "背面のトレースを隠す(オクルージョン)": "Hide traces behind (occlusion)",
357
+ "奥行き効果(奥のトレースをわずかに縮小)": "Depth effect (shrink traces further back)",
358
+ "1段あたりの縮小率": "Shrink per step",
359
+ "誤差の表示形式": "Error display",
360
+ "エラーバー": "Error bars",
361
+ "誤差バンド": "Error band",
362
+ "2Dグリッドデータとして扱う(ヒートマップ)": "Treat as 2D grid data (heat map)",
363
+ "カラーマップ": "Colormap",
364
+ "表示方式": "Display",
365
+ "ヒートマップ": "Heat map",
366
+ "等高線(線)": "Contour (lines)",
367
+ "等高線(塗りつぶし)": "Contour (filled)",
368
+ "ヒートマップ+等高線": "Heat map + contour",
369
+ "等高線レベル数": "Contour levels",
370
+ "補間方法": "Interpolation",
371
+ "値域を自動": "Auto value range",
372
+ "値域の最小": "Min value",
373
+ "値域の最大": "Max value",
374
+ "欠損値の扱い": "Missing values",
375
+ "欠損値(NaN)を含む点の描画方法": "How to draw points with missing values (NaN)",
376
+ "線を切る(既定)": "Break the line (default)",
377
+ "前の値で埋める": "Fill with the previous value",
378
+ "無視してつなぐ": "Skip and connect",
379
+ "データ点にラベルを表示": "Label data points",
380
+ "ラベルの内容": "Label content",
381
+ "フィット情報": "Fit information",
382
+
383
+ # --- データセットの一覧とボタン ---
384
+ "データセットを検索...": "Search datasets...",
385
+ "データ追加": "Add Data",
386
+ "データ削除": "Remove Data",
387
+ "新規作成": "New",
388
+ "新規データセット作成...": "Create New Dataset...",
389
+ "複製": "Duplicate",
390
+ "表示/編集": "View/Edit",
391
+ "削除": "Delete",
392
+ "多峰フィット": "Multi-peak Fit",
393
+ "その他の操作": "More Actions",
394
+ "カラーマップから自動配色...": "Assign Colors from a Colormap...",
395
+ "カラーマップから自動配色": "Assign Colors from a Colormap",
396
+ "登録した色を適用": "Apply Named Color",
397
+ "(登録がありません)": "(None registered)",
398
+ "統計情報 (選択中データセットのY列の要約統計量)": "Statistics (summary of the Y column of the selected dataset)",
399
+ "統計 (Y列)": "Statistics (Y)",
400
+
401
+ # --- キャンバスとツールバー ---
402
+ "範囲選択 (ドラッグした範囲のカレントデータセットをマスク)":
403
+ "Range Select (mask the dragged range of the current dataset)",
404
+ "ピーク配置 (クリックで多峰分離フィットの初期値を追加、右クリックで削除)":
405
+ "Peak Placement (click to add a multi-peak fit guess, right-click to remove)",
406
+ "スライス抽出 (2Dマップ上でドラッグした線分に沿って1Dデータを抽出)":
407
+ "Slice Extraction (extract 1D data along a line dragged on a 2D map)",
408
+ "領域ハイライト (横ドラッグ:縦帯 / 縦ドラッグ:横帯 / 右クリック:削除)":
409
+ "Region Highlight (drag horizontally: vertical band / vertically: horizontal band / right-click: remove)",
410
+ "表示をリセット (拡大/パンを元に戻す)": "Reset View (undo zoom/pan)",
411
+ "グラフキャンバス": "Plot Canvas",
412
+ "キャンバスを元に戻す": "Reattach Canvas",
413
+ "プロパティ": "Properties",
414
+
415
+ # --- 書き出しのプレビュー ---
416
+ "解像度": "Resolution",
417
+ "ピクセル (px)": "Pixels (px)",
418
+ "インチ (in)": "Inches (in)",
419
+ "センチメートル (cm)": "Centimeters (cm)",
420
+ "背景を透過": "Transparent background",
421
+ "文字をアウトライン化する(SVG)": "Convert text to outlines (SVG)",
422
+ "SVG保存/コピー時、目盛りの数字やラベルの文字をパス(輪郭線)として出力します。":
423
+ "When saving or copying SVG, write tick numbers and label text as paths (outlines).",
424
+ "フル解像度で保存/コピー(間引きなし)": "Save/copy at full resolution (no downsampling)",
425
+ "「名前を付けて保存」「コピー」の出力にのみ適用されます(常時更新されるプレビュー自体は応答性のため常に間引いたまま表示します)。点数の多いLine(折れ線)データセットや2Dマップ(ヒートマップ/等高線)の間引きを無効化し、常に全データ点/全解像度で保存/コピーします。":
426
+ "Applies only to \"Save As\" and \"Copy\" (the live preview always stays downsampled to remain responsive). "
427
+ "Turns off downsampling of large Line datasets and 2D maps (heat maps/contours) so every point is saved or "
428
+ "copied at full resolution.",
429
+ "プレビューがここに表示されます": "The preview appears here",
430
+ "名前を付けて保存...": "Save As...",
431
+ "コピー": "Copy",
432
+ "クリップボードにコピーする形式を選択します": "Choose the format copied to the clipboard",
433
+ "現在の設定でレンダリングした画像をクリップボードにコピーします":
434
+ "Copy the image rendered with the current settings to the clipboard",
435
+ "処理履歴(フィット・ベースライン補正・平滑化等で生成された\nデータセット)を選択すると、ここに処理の流れが表示されます。":
436
+ "Select a dataset created by processing (fitting, baseline\ncorrection, smoothing, ...) to see its history here.",
437
+ "曲線フィットの結果を持つデータセットを選択すると、\nここに残差(実測値 - フィット値)が表示されます。":
438
+ "Select a dataset with a curve-fit result to see\nits residuals (measured - fitted) here.",
439
+
440
+ # --- 色の選び方 ---
441
+ "クリックしてパレットを開く": "Click to open the palette",
442
+ "この色を登録...": "Register This Color...",
443
+ "色名の管理...": "Manage Color Names...",
444
+ "その他の色...": "More Colors...",
445
+ "色を登録": "Register Color",
446
+ "この色の登録名 (%s)": "Registered name of this color (%s)",
447
+ "すべての登録色... (%d件)": "All registered colors... (%d)",
448
+ "色名の管理": "Manage Color Names",
449
+ "よく使う色に名前を付けて登録します。データセットの色欄でスウォッチを押すと、ここに登録した色を名前から選べます。":
450
+ "Give names to colors you use often. Click the swatch in a dataset's color field to pick them by name.",
451
+ "追加...": "Add...",
452
+ "編集...": "Edit...",
453
+ "上へ": "Up",
454
+ "下へ": "Down",
455
+ "並び順は、色欄のポップアップにそのまま反映されます。": "The order here is the order in the color popup.",
456
+ "色を選択": "Choose Color",
457
+ "登録名": "Name",
458
+ "登録を編集": "Edit Registration",
459
+ "名前または色コードで絞り込み": "Filter by name or color code",
460
+ "編集する登録を選んでください。": "Select a registration to edit.",
461
+ "削除する登録を選んでください。": "Select a registration to delete.",
462
+ "登録色を選択": "Choose a Registered Color",
463
+
464
+ # --- 新規データセット ---
465
+ "新規データセットを作成": "Create New Dataset",
466
+ "新規データセット": "New dataset",
467
+ "データセット名": "Dataset name",
468
+ "カンマ区切りで列名を入力してください(例: X, Y, 誤差)": "Enter column names separated by commas (e.g. X, Y, Error)",
469
+ "列名 (カンマ区切り)": "Column names (comma-separated)",
470
+ "初期の空行数": "Initial empty rows",
471
+ "データセット名を入力してください。": "Enter a dataset name.",
472
+ "列名を1つ以上入力してください。": "Enter at least one column name.",
473
+
474
+ # --- 環境設定ほか ---
475
+ "一般": "General",
476
+ "参照...": "Browse...",
477
+ "既定に戻す": "Reset to Default",
478
+ "オートセーブ保存先": "Autosave folder",
479
+ "(既定: {path})": "(default: {path})",
480
+ "オートセーブの保存先を選択": "Choose the Autosave Folder",
481
+ "パフォーマンス": "Performance",
482
+ " 点": " points",
483
+ "データ点にラベルを表示する機能は、データ点数が多いと描画が重くなり、アプリがフリーズする場合があります。この件数を超えるデータセットには、ラベルを有効にしていても自動的に表示しません。":
484
+ "Labelling data points slows drawing down and can freeze the app for large datasets. "
485
+ "Datasets with more points than this are not labelled even when labels are turned on.",
486
+ "データ点ラベルの表示上限": "Point label limit",
487
+ "注釈": "Annotations",
488
+ "スナップ・トゥ・グリッドを有効にする": "Snap to grid",
489
+ "グリッド間隔": "Grid spacing",
490
+ "プラグイン": "Plugins",
491
+ "プラグインをインストール...": "Install Plugin...",
492
+ "プラグインをインストール": "Install Plugin",
493
+ "プラグインフォルダを開く": "Open Plugin Folder",
494
+ "読み込み済みプラグイン": "Loaded plugins",
495
+ "フック単位の登録エラー": "Registration errors per hook",
496
+ "(プラグインは読み込まれていません)": "(No plugins loaded)",
497
+ "(プラグインはありません)": "(No plugins)",
498
+ "(フック単位の登録エラーはありません)": "(No registration errors)",
499
+ "インストール完了": "Installed",
500
+ "インストール失敗": "Installation Failed",
501
+ "プラグイン '{name}' をインストールしました。次回起動時に有効になります。":
502
+ "Installed the plugin '{name}'. It takes effect the next time Graphica starts.",
503
+ "{name} (無効化中)": "{name} (disabled)",
504
+ "{name} — エラー: {error}": "{name} — error: {error}",
505
+ "書式テンプレートを開く...": "Open Style Template...",
506
+ "選択したファイルを開く": "Open Selected File",
507
+ "クイックアクセス": "Quick Access",
508
+ "クイックアクセスの管理": "Manage Quick Access",
509
+ "クイックアクセスの管理...": "Manage Quick Access...",
510
+ "クイックアクセスツールバー": "Quick Access Toolbar",
511
+ "クイックアクセスから削除": "Remove from Quick Access",
512
+ "クイックアクセスに追加": "Add to Quick Access",
513
+ "チェックした項目がクイックアクセスツールバーに表示されます。": "Checked items appear on the Quick Access toolbar.",
514
+ "コマンドを検索...": "Search commands...",
515
+ "ミリメートル (mm)": "Millimeters (mm)",
516
+ # --- 環境設定: ファイルの関連付け ---
517
+ "ファイルの関連付け": "File association",
518
+ ".gra と .graphica を Graphica で開く": "Open .gra and .graphica with Graphica",
519
+ "関連付けを解除": "Remove association",
520
+ "Windows の Graphica.exe から起動したときだけ登録できます。":
521
+ "Available only when running Graphica.exe on Windows.",
522
+ ".gra と .graphica のファイルは、ダブルクリックで Graphica が開きます。":
523
+ ".gra and .graphica files open in Graphica when double-clicked.",
524
+ "登録すると、.gra と .graphica のファイルをダブルクリックで開けます(この利用者だけ)。":
525
+ "Register to open .gra and .graphica files by double-clicking (this user only).",
526
+ "登録できませんでした:\n{error}": "Could not register:\n{error}",
527
+ "解除できませんでした:\n{error}": "Could not remove:\n{error}",
528
+ "第2Y軸": "Secondary Y axis",
529
+ "補助目盛の間隔": "Minor tick interval",
530
+ }
@@ -0,0 +1,51 @@
1
+ """X 軸の単位の変換(nm / eV / cm^-1 / Hz)。nm 以外は波長に反比例するので、どの組も nm を経由して変換する。"""
2
+ import numpy as np
3
+ from typing import Any
4
+
5
+ X_AXIS_UNIT_NONE = 'none'
6
+ X_AXIS_UNIT_NM = 'nm'
7
+ X_AXIS_UNIT_EV = 'eV'
8
+ X_AXIS_UNIT_CM1 = 'cm-1'
9
+ X_AXIS_UNIT_HZ = 'Hz'
10
+
11
+ X_AXIS_UNIT_CHOICES = [X_AXIS_UNIT_NONE, X_AXIS_UNIT_NM, X_AXIS_UNIT_EV, X_AXIS_UNIT_CM1, X_AXIS_UNIT_HZ]
12
+
13
+ X_AXIS_UNIT_LABELS = {
14
+ X_AXIS_UNIT_NONE: 'なし',
15
+ X_AXIS_UNIT_NM: 'nm(波長)',
16
+ X_AXIS_UNIT_EV: 'eV(エネルギー)',
17
+ X_AXIS_UNIT_CM1: 'cm⁻¹(波数)',
18
+ X_AXIS_UNIT_HZ: 'Hz(周波数)',
19
+ }
20
+
21
+ # hc [eV·nm]
22
+ _EV_NM_CONSTANT = 1239.8419843320025
23
+ _WAVENUMBER_NM_CONSTANT = 1.0e7
24
+ # 光速 [m/s] × 1e9
25
+ _FREQUENCY_NM_CONSTANT = 2.99792458e17
26
+
27
+ _UNIT_TO_NM_CONSTANT = {
28
+ X_AXIS_UNIT_EV: _EV_NM_CONSTANT,
29
+ X_AXIS_UNIT_CM1: _WAVENUMBER_NM_CONSTANT,
30
+ X_AXIS_UNIT_HZ: _FREQUENCY_NM_CONSTANT,
31
+ }
32
+
33
+
34
+ def convert_x_axis_unit(value: Any, from_unit: str, to_unit: str) -> Any:
35
+ """from_unit から to_unit へ変換する。
36
+
37
+ 波長 0 は例外にせず inf / nan にする(secondary_xaxis の関数に使うので、ゼロ除算の警告も抑える)。
38
+ """
39
+ value = np.asarray(value, dtype=float)
40
+ if from_unit == to_unit:
41
+ return value
42
+
43
+ with np.errstate(divide='ignore', invalid='ignore'):
44
+ if from_unit == X_AXIS_UNIT_NM:
45
+ wavelength_nm = value
46
+ else:
47
+ wavelength_nm = _UNIT_TO_NM_CONSTANT[from_unit] / value
48
+
49
+ if to_unit == X_AXIS_UNIT_NM:
50
+ return wavelength_nm
51
+ return _UNIT_TO_NM_CONSTANT[to_unit] / wavelength_nm
@@ -0,0 +1,43 @@
1
+ """GitHub Releases で新しい版があるかを見る。公開 API への匿名の GET だけで、利用者を特定できるものは送らない。"""
2
+ import json
3
+ import re
4
+ import urllib.error
5
+ import urllib.request
6
+ from typing import Any
7
+
8
+ GITHUB_REPO = "STsuruga/Graphica"
9
+ _RELEASES_LATEST_URL = f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
10
+ _DEFAULT_TIMEOUT_SEC = 5
11
+
12
+
13
+ def _parse_version(version_str: str) -> tuple[int, ...]:
14
+ """'v1.3.5' などを比べられる整数のタプルにする(数字以外は無視)。"""
15
+ numbers = re.findall(r'\d+', version_str or '')
16
+ return tuple(int(n) for n in numbers) if numbers else (0,)
17
+
18
+
19
+ def is_newer_version(remote_version: str, local_version: str) -> bool:
20
+ return _parse_version(remote_version) > _parse_version(local_version)
21
+
22
+
23
+ def fetch_latest_release_info(timeout: float = _DEFAULT_TIMEOUT_SEC) -> dict[str, str]:
24
+ """最新版の {'tag_name', 'html_url', 'name'}。通信や解釈の失敗は例外のまま(呼び出し側で捕まえる)。"""
25
+ request = urllib.request.Request(
26
+ _RELEASES_LATEST_URL,
27
+ headers={'Accept': 'application/vnd.github+json', 'User-Agent': 'Graphica-update-check'},
28
+ )
29
+ with urllib.request.urlopen(request, timeout=timeout) as response:
30
+ data = json.loads(response.read().decode('utf-8'))
31
+ return {
32
+ 'tag_name': data.get('tag_name', '') or '',
33
+ 'html_url': data.get('html_url') or f'https://github.com/{GITHUB_REPO}/releases',
34
+ 'name': data.get('name', '') or '',
35
+ }
36
+
37
+
38
+ def check_for_update(current_version: str, timeout: float = _DEFAULT_TIMEOUT_SEC, **_ignored: Any) -> dict[str, str] | None:
39
+ """TaskRunner 用。新しい版があれば {'tag_name', 'html_url', 'name'}、無ければ None。"""
40
+ info = fetch_latest_release_info(timeout=timeout)
41
+ if info['tag_name'] and is_newer_version(info['tag_name'], current_version):
42
+ return info
43
+ return None
@@ -0,0 +1,14 @@
1
+ # core/version.py
2
+ """
3
+ アプリ名・バージョン番号を一元管理するモジュール。
4
+ ウィンドウタイトルや「このソフトについて」ダイアログなど、
5
+ バージョン表記が必要な箇所は必ずここを参照する
6
+ (exe名やコード中に直接バージョン文字列を書かないようにするため)。
7
+ """
8
+
9
+ APP_NAME = "Graphica"
10
+ __version__ = "2.0.0"
11
+
12
+ # ログファイル名 (main.py のロギング設定と、クラッシュ案内ダイアログの両方から
13
+ # 参照するため、文字列の重複を避けてここに一元化する)
14
+ LOG_FILE_NAME = "graphica.log"
File without changes