scitex 2.4.3__py3-none-any.whl → 2.5.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.
- scitex/__version__.py +1 -1
- scitex/io/_load.py +5 -0
- scitex/io/_load_modules/_canvas.py +171 -0
- scitex/io/_save.py +8 -0
- scitex/io/_save_modules/_canvas.py +356 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +77 -22
- scitex/plt/docs/FIGURE_ARCHITECTURE.md +257 -0
- scitex/plt/utils/__init__.py +10 -0
- scitex/plt/utils/_collect_figure_metadata.py +14 -12
- scitex/plt/utils/_csv_column_naming.py +237 -0
- scitex/session/_decorator.py +13 -1
- scitex/vis/README.md +246 -615
- scitex/vis/__init__.py +138 -78
- scitex/vis/canvas.py +423 -0
- scitex/vis/docs/CANVAS_ARCHITECTURE.md +307 -0
- scitex/vis/editor/__init__.py +1 -1
- scitex/vis/editor/_dearpygui_editor.py +1830 -0
- scitex/vis/editor/_defaults.py +40 -1
- scitex/vis/editor/_edit.py +54 -18
- scitex/vis/editor/_flask_editor.py +37 -0
- scitex/vis/editor/_qt_editor.py +865 -0
- scitex/vis/editor/flask_editor/__init__.py +21 -0
- scitex/vis/editor/flask_editor/bbox.py +216 -0
- scitex/vis/editor/flask_editor/core.py +152 -0
- scitex/vis/editor/flask_editor/plotter.py +130 -0
- scitex/vis/editor/flask_editor/renderer.py +184 -0
- scitex/vis/editor/flask_editor/templates/__init__.py +33 -0
- scitex/vis/editor/flask_editor/templates/html.py +295 -0
- scitex/vis/editor/flask_editor/templates/scripts.py +614 -0
- scitex/vis/editor/flask_editor/templates/styles.py +549 -0
- scitex/vis/editor/flask_editor/utils.py +81 -0
- scitex/vis/io/__init__.py +84 -21
- scitex/vis/io/canvas.py +226 -0
- scitex/vis/io/data.py +204 -0
- scitex/vis/io/directory.py +202 -0
- scitex/vis/io/export.py +460 -0
- scitex/vis/io/panel.py +424 -0
- {scitex-2.4.3.dist-info → scitex-2.5.0.dist-info}/METADATA +9 -2
- {scitex-2.4.3.dist-info → scitex-2.5.0.dist-info}/RECORD +42 -21
- scitex/vis/DJANGO_INTEGRATION.md +0 -677
- scitex/vis/editor/_web_editor.py +0 -1440
- scitex/vis/tmp.txt +0 -239
- {scitex-2.4.3.dist-info → scitex-2.5.0.dist-info}/WHEEL +0 -0
- {scitex-2.4.3.dist-info → scitex-2.5.0.dist-info}/entry_points.txt +0 -0
- {scitex-2.4.3.dist-info → scitex-2.5.0.dist-info}/licenses/LICENSE +0 -0
scitex/vis/io/panel.py
ADDED
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: 2025-12-08
|
|
4
|
+
# File: ./src/scitex/vis/io/panel.py
|
|
5
|
+
"""
|
|
6
|
+
Panel operations for scitex.vis.
|
|
7
|
+
|
|
8
|
+
Handles adding, removing, updating, and listing panels within a canvas.
|
|
9
|
+
Panels can be either 'scitex' type (full stx.plt output) or 'image' type (static image).
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Dict, Any, Union, List, Optional
|
|
14
|
+
import shutil
|
|
15
|
+
|
|
16
|
+
from .directory import get_canvas_directory_path
|
|
17
|
+
from .canvas import load_canvas_json, save_canvas_json
|
|
18
|
+
from .data import compute_file_hash
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _symlink_or_copy(source: Path, dest: Path, bundle: bool = False) -> None:
|
|
22
|
+
"""Create relative symlink or copy file based on bundle flag."""
|
|
23
|
+
import os
|
|
24
|
+
|
|
25
|
+
if dest.exists() or dest.is_symlink():
|
|
26
|
+
dest.unlink()
|
|
27
|
+
|
|
28
|
+
if bundle:
|
|
29
|
+
shutil.copy2(source, dest)
|
|
30
|
+
else:
|
|
31
|
+
try:
|
|
32
|
+
# Use relative symlink for portability
|
|
33
|
+
rel_path = os.path.relpath(source.resolve(), dest.parent.resolve())
|
|
34
|
+
dest.symlink_to(rel_path)
|
|
35
|
+
except (OSError, ValueError):
|
|
36
|
+
# Fallback to copy if symlink fails (e.g., Windows without admin)
|
|
37
|
+
shutil.copy2(source, dest)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _get_default_panel_properties() -> Dict[str, Any]:
|
|
41
|
+
"""Get default panel properties."""
|
|
42
|
+
return {
|
|
43
|
+
"position": {"x_mm": 0, "y_mm": 0},
|
|
44
|
+
"size": {"width_mm": 50, "height_mm": 50},
|
|
45
|
+
"z_index": 0,
|
|
46
|
+
"rotation_deg": 0,
|
|
47
|
+
"clip": {
|
|
48
|
+
"enabled": False,
|
|
49
|
+
"x_mm": 0,
|
|
50
|
+
"y_mm": 0,
|
|
51
|
+
"width_mm": None,
|
|
52
|
+
"height_mm": None,
|
|
53
|
+
},
|
|
54
|
+
"opacity": 1.0,
|
|
55
|
+
"flip_h": False,
|
|
56
|
+
"flip_v": False,
|
|
57
|
+
"visible": True,
|
|
58
|
+
"label": {
|
|
59
|
+
"text": "",
|
|
60
|
+
"position": "top-left",
|
|
61
|
+
"fontsize": 12,
|
|
62
|
+
"fontweight": "bold",
|
|
63
|
+
},
|
|
64
|
+
"border": {
|
|
65
|
+
"visible": False,
|
|
66
|
+
"color": "#000000",
|
|
67
|
+
"width_mm": 0.2,
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def add_panel_from_scitex(
|
|
73
|
+
project_dir: Union[str, Path],
|
|
74
|
+
canvas_name: str,
|
|
75
|
+
panel_name: str,
|
|
76
|
+
source_png: Union[str, Path],
|
|
77
|
+
source_json: Optional[Union[str, Path]] = None,
|
|
78
|
+
source_csv: Optional[Union[str, Path]] = None,
|
|
79
|
+
panel_properties: Optional[Dict[str, Any]] = None,
|
|
80
|
+
bundle: bool = False,
|
|
81
|
+
) -> Path:
|
|
82
|
+
"""
|
|
83
|
+
Add a panel from stx.plt output (scitex type).
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
project_dir : str or Path
|
|
88
|
+
Project root directory
|
|
89
|
+
canvas_name : str
|
|
90
|
+
Canvas name
|
|
91
|
+
panel_name : str
|
|
92
|
+
Name for the new panel
|
|
93
|
+
source_png : str or Path
|
|
94
|
+
Path to source PNG file
|
|
95
|
+
source_json : str or Path, optional
|
|
96
|
+
Path to source JSON file (auto-detected if not provided)
|
|
97
|
+
source_csv : str or Path, optional
|
|
98
|
+
Path to source CSV file (auto-detected if not provided)
|
|
99
|
+
panel_properties : Dict, optional
|
|
100
|
+
Panel properties (position, size, etc.)
|
|
101
|
+
bundle : bool, optional
|
|
102
|
+
If True, copy files. If False (default), use symlinks.
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
Path
|
|
107
|
+
Path to panel directory
|
|
108
|
+
"""
|
|
109
|
+
source_png = Path(source_png)
|
|
110
|
+
base_name = source_png.stem
|
|
111
|
+
|
|
112
|
+
# Auto-detect json and csv if not provided
|
|
113
|
+
if source_json is None:
|
|
114
|
+
source_json = source_png.parent / f"{base_name}.json"
|
|
115
|
+
if source_csv is None:
|
|
116
|
+
source_csv = source_png.parent / f"{base_name}.csv"
|
|
117
|
+
|
|
118
|
+
source_json = Path(source_json)
|
|
119
|
+
source_csv = Path(source_csv)
|
|
120
|
+
|
|
121
|
+
# Create panel directory
|
|
122
|
+
canvas_dir = get_canvas_directory_path(project_dir, canvas_name)
|
|
123
|
+
panel_dir = canvas_dir / "panels" / panel_name
|
|
124
|
+
panel_dir.mkdir(parents=True, exist_ok=True)
|
|
125
|
+
|
|
126
|
+
# Use symlinks (default) or copy files based on bundle flag
|
|
127
|
+
_symlink_or_copy(source_png.resolve(), panel_dir / "panel.png", bundle=bundle)
|
|
128
|
+
if source_json.exists():
|
|
129
|
+
_symlink_or_copy(source_json.resolve(), panel_dir / "panel.json", bundle=bundle)
|
|
130
|
+
if source_csv.exists():
|
|
131
|
+
_symlink_or_copy(source_csv.resolve(), panel_dir / "panel.csv", bundle=bundle)
|
|
132
|
+
|
|
133
|
+
# Build panel entry
|
|
134
|
+
panel_entry = _get_default_panel_properties()
|
|
135
|
+
panel_entry["name"] = panel_name
|
|
136
|
+
panel_entry["type"] = "scitex"
|
|
137
|
+
|
|
138
|
+
if panel_properties:
|
|
139
|
+
_deep_merge(panel_entry, panel_properties)
|
|
140
|
+
|
|
141
|
+
# Update canvas.json
|
|
142
|
+
canvas_json = load_canvas_json(project_dir, canvas_name, verify_data_hashes=False)
|
|
143
|
+
|
|
144
|
+
# Remove existing panel with same name
|
|
145
|
+
canvas_json["panels"] = [p for p in canvas_json["panels"] if p.get("name") != panel_name]
|
|
146
|
+
|
|
147
|
+
# Add new panel
|
|
148
|
+
canvas_json["panels"].append(panel_entry)
|
|
149
|
+
|
|
150
|
+
# Add data file reference with hash
|
|
151
|
+
if source_csv.exists():
|
|
152
|
+
csv_path = f"panels/{panel_name}/panel.csv"
|
|
153
|
+
csv_hash = compute_file_hash(panel_dir / "panel.csv")
|
|
154
|
+
# Remove existing reference
|
|
155
|
+
canvas_json["data_files"] = [
|
|
156
|
+
d for d in canvas_json.get("data_files", [])
|
|
157
|
+
if d.get("path") != csv_path
|
|
158
|
+
]
|
|
159
|
+
canvas_json["data_files"].append({
|
|
160
|
+
"path": csv_path,
|
|
161
|
+
"hash": csv_hash,
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
save_canvas_json(project_dir, canvas_name, canvas_json)
|
|
165
|
+
|
|
166
|
+
return panel_dir
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def add_panel_from_image(
|
|
170
|
+
project_dir: Union[str, Path],
|
|
171
|
+
canvas_name: str,
|
|
172
|
+
panel_name: str,
|
|
173
|
+
source_image: Union[str, Path],
|
|
174
|
+
panel_properties: Optional[Dict[str, Any]] = None,
|
|
175
|
+
bundle: bool = False,
|
|
176
|
+
) -> Path:
|
|
177
|
+
"""
|
|
178
|
+
Add a panel from an image file (image type).
|
|
179
|
+
|
|
180
|
+
Parameters
|
|
181
|
+
----------
|
|
182
|
+
project_dir : str or Path
|
|
183
|
+
Project root directory
|
|
184
|
+
canvas_name : str
|
|
185
|
+
Canvas name
|
|
186
|
+
panel_name : str
|
|
187
|
+
Name for the new panel
|
|
188
|
+
source_image : str or Path
|
|
189
|
+
Path to source image file (PNG, JPG, SVG)
|
|
190
|
+
panel_properties : Dict, optional
|
|
191
|
+
Panel properties (position, size, etc.)
|
|
192
|
+
bundle : bool, optional
|
|
193
|
+
If True, copy files. If False (default), use symlinks.
|
|
194
|
+
|
|
195
|
+
Returns
|
|
196
|
+
-------
|
|
197
|
+
Path
|
|
198
|
+
Path to panel directory
|
|
199
|
+
"""
|
|
200
|
+
source_image = Path(source_image)
|
|
201
|
+
suffix = source_image.suffix.lower()
|
|
202
|
+
|
|
203
|
+
# Create panel directory
|
|
204
|
+
canvas_dir = get_canvas_directory_path(project_dir, canvas_name)
|
|
205
|
+
panel_dir = canvas_dir / "panels" / panel_name
|
|
206
|
+
panel_dir.mkdir(parents=True, exist_ok=True)
|
|
207
|
+
|
|
208
|
+
# Use symlink (default) or copy based on bundle flag
|
|
209
|
+
dest_name = f"panel{suffix}"
|
|
210
|
+
_symlink_or_copy(source_image.resolve(), panel_dir / dest_name, bundle=bundle)
|
|
211
|
+
|
|
212
|
+
# Build panel entry
|
|
213
|
+
panel_entry = _get_default_panel_properties()
|
|
214
|
+
panel_entry["name"] = panel_name
|
|
215
|
+
panel_entry["type"] = "image"
|
|
216
|
+
panel_entry["source"] = dest_name
|
|
217
|
+
|
|
218
|
+
if panel_properties:
|
|
219
|
+
_deep_merge(panel_entry, panel_properties)
|
|
220
|
+
|
|
221
|
+
# Update canvas.json
|
|
222
|
+
canvas_json = load_canvas_json(project_dir, canvas_name, verify_data_hashes=False)
|
|
223
|
+
|
|
224
|
+
# Remove existing panel with same name
|
|
225
|
+
canvas_json["panels"] = [p for p in canvas_json["panels"] if p.get("name") != panel_name]
|
|
226
|
+
|
|
227
|
+
# Add new panel
|
|
228
|
+
canvas_json["panels"].append(panel_entry)
|
|
229
|
+
|
|
230
|
+
save_canvas_json(project_dir, canvas_name, canvas_json)
|
|
231
|
+
|
|
232
|
+
return panel_dir
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def remove_panel(
|
|
236
|
+
project_dir: Union[str, Path],
|
|
237
|
+
canvas_name: str,
|
|
238
|
+
panel_name: str,
|
|
239
|
+
) -> bool:
|
|
240
|
+
"""
|
|
241
|
+
Remove a panel from canvas.
|
|
242
|
+
|
|
243
|
+
Parameters
|
|
244
|
+
----------
|
|
245
|
+
project_dir : str or Path
|
|
246
|
+
Project root directory
|
|
247
|
+
canvas_name : str
|
|
248
|
+
Canvas name
|
|
249
|
+
panel_name : str
|
|
250
|
+
Name of panel to remove
|
|
251
|
+
|
|
252
|
+
Returns
|
|
253
|
+
-------
|
|
254
|
+
bool
|
|
255
|
+
True if removed, False if panel didn't exist
|
|
256
|
+
"""
|
|
257
|
+
canvas_dir = get_canvas_directory_path(project_dir, canvas_name)
|
|
258
|
+
panel_dir = canvas_dir / "panels" / panel_name
|
|
259
|
+
|
|
260
|
+
# Remove from canvas.json
|
|
261
|
+
canvas_json = load_canvas_json(project_dir, canvas_name, verify_data_hashes=False)
|
|
262
|
+
|
|
263
|
+
original_count = len(canvas_json["panels"])
|
|
264
|
+
canvas_json["panels"] = [p for p in canvas_json["panels"] if p.get("name") != panel_name]
|
|
265
|
+
|
|
266
|
+
# Remove data file references for this panel
|
|
267
|
+
canvas_json["data_files"] = [
|
|
268
|
+
d for d in canvas_json.get("data_files", [])
|
|
269
|
+
if not d.get("path", "").startswith(f"panels/{panel_name}/")
|
|
270
|
+
]
|
|
271
|
+
|
|
272
|
+
if len(canvas_json["panels"]) < original_count:
|
|
273
|
+
save_canvas_json(project_dir, canvas_name, canvas_json)
|
|
274
|
+
|
|
275
|
+
# Remove panel directory
|
|
276
|
+
if panel_dir.exists():
|
|
277
|
+
shutil.rmtree(panel_dir)
|
|
278
|
+
|
|
279
|
+
return True
|
|
280
|
+
|
|
281
|
+
return False
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def update_panel(
|
|
285
|
+
project_dir: Union[str, Path],
|
|
286
|
+
canvas_name: str,
|
|
287
|
+
panel_name: str,
|
|
288
|
+
updates: Dict[str, Any],
|
|
289
|
+
) -> Dict[str, Any]:
|
|
290
|
+
"""
|
|
291
|
+
Update panel properties.
|
|
292
|
+
|
|
293
|
+
Parameters
|
|
294
|
+
----------
|
|
295
|
+
project_dir : str or Path
|
|
296
|
+
Project root directory
|
|
297
|
+
canvas_name : str
|
|
298
|
+
Canvas name
|
|
299
|
+
panel_name : str
|
|
300
|
+
Name of panel to update
|
|
301
|
+
updates : Dict[str, Any]
|
|
302
|
+
Properties to update
|
|
303
|
+
|
|
304
|
+
Returns
|
|
305
|
+
-------
|
|
306
|
+
Dict[str, Any]
|
|
307
|
+
Updated panel entry
|
|
308
|
+
|
|
309
|
+
Raises
|
|
310
|
+
------
|
|
311
|
+
ValueError
|
|
312
|
+
If panel not found
|
|
313
|
+
"""
|
|
314
|
+
canvas_json = load_canvas_json(project_dir, canvas_name, verify_data_hashes=False)
|
|
315
|
+
|
|
316
|
+
# Find panel
|
|
317
|
+
panel_entry = None
|
|
318
|
+
for panel in canvas_json["panels"]:
|
|
319
|
+
if panel.get("name") == panel_name:
|
|
320
|
+
panel_entry = panel
|
|
321
|
+
break
|
|
322
|
+
|
|
323
|
+
if panel_entry is None:
|
|
324
|
+
raise ValueError(f"Panel not found: {panel_name}")
|
|
325
|
+
|
|
326
|
+
# Apply updates
|
|
327
|
+
_deep_merge(panel_entry, updates)
|
|
328
|
+
|
|
329
|
+
save_canvas_json(project_dir, canvas_name, canvas_json)
|
|
330
|
+
|
|
331
|
+
return panel_entry
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def list_panels(
|
|
335
|
+
project_dir: Union[str, Path],
|
|
336
|
+
canvas_name: str,
|
|
337
|
+
) -> List[Dict[str, Any]]:
|
|
338
|
+
"""
|
|
339
|
+
List all panels in a canvas.
|
|
340
|
+
|
|
341
|
+
Parameters
|
|
342
|
+
----------
|
|
343
|
+
project_dir : str or Path
|
|
344
|
+
Project root directory
|
|
345
|
+
canvas_name : str
|
|
346
|
+
Canvas name
|
|
347
|
+
|
|
348
|
+
Returns
|
|
349
|
+
-------
|
|
350
|
+
List[Dict[str, Any]]
|
|
351
|
+
List of panel entries
|
|
352
|
+
"""
|
|
353
|
+
canvas_json = load_canvas_json(project_dir, canvas_name, verify_data_hashes=False)
|
|
354
|
+
return canvas_json.get("panels", [])
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def get_panel(
|
|
358
|
+
project_dir: Union[str, Path],
|
|
359
|
+
canvas_name: str,
|
|
360
|
+
panel_name: str,
|
|
361
|
+
) -> Optional[Dict[str, Any]]:
|
|
362
|
+
"""
|
|
363
|
+
Get a specific panel by name.
|
|
364
|
+
|
|
365
|
+
Parameters
|
|
366
|
+
----------
|
|
367
|
+
project_dir : str or Path
|
|
368
|
+
Project root directory
|
|
369
|
+
canvas_name : str
|
|
370
|
+
Canvas name
|
|
371
|
+
panel_name : str
|
|
372
|
+
Name of panel
|
|
373
|
+
|
|
374
|
+
Returns
|
|
375
|
+
-------
|
|
376
|
+
Optional[Dict[str, Any]]
|
|
377
|
+
Panel entry or None if not found
|
|
378
|
+
"""
|
|
379
|
+
panels = list_panels(project_dir, canvas_name)
|
|
380
|
+
for panel in panels:
|
|
381
|
+
if panel.get("name") == panel_name:
|
|
382
|
+
return panel
|
|
383
|
+
return None
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
def reorder_panels(
|
|
387
|
+
project_dir: Union[str, Path],
|
|
388
|
+
canvas_name: str,
|
|
389
|
+
panel_order: List[str],
|
|
390
|
+
) -> None:
|
|
391
|
+
"""
|
|
392
|
+
Reorder panels by z_index based on provided order.
|
|
393
|
+
|
|
394
|
+
Parameters
|
|
395
|
+
----------
|
|
396
|
+
project_dir : str or Path
|
|
397
|
+
Project root directory
|
|
398
|
+
canvas_name : str
|
|
399
|
+
Canvas name
|
|
400
|
+
panel_order : List[str]
|
|
401
|
+
List of panel names in desired z-order (first = bottom)
|
|
402
|
+
"""
|
|
403
|
+
canvas_json = load_canvas_json(project_dir, canvas_name, verify_data_hashes=False)
|
|
404
|
+
|
|
405
|
+
# Update z_index based on order
|
|
406
|
+
for idx, panel_name in enumerate(panel_order):
|
|
407
|
+
for panel in canvas_json["panels"]:
|
|
408
|
+
if panel.get("name") == panel_name:
|
|
409
|
+
panel["z_index"] = idx
|
|
410
|
+
break
|
|
411
|
+
|
|
412
|
+
save_canvas_json(project_dir, canvas_name, canvas_json)
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
def _deep_merge(base: Dict, updates: Dict) -> None:
|
|
416
|
+
"""Deep merge updates into base dictionary (in-place)."""
|
|
417
|
+
for key, value in updates.items():
|
|
418
|
+
if key in base and isinstance(base[key], dict) and isinstance(value, dict):
|
|
419
|
+
_deep_merge(base[key], value)
|
|
420
|
+
else:
|
|
421
|
+
base[key] = value
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
# EOF
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scitex
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.0
|
|
4
4
|
Summary: A comprehensive Python library for scientific computing and data analysis
|
|
5
5
|
Project-URL: Homepage, https://github.com/ywatanabe1989/scitex-code
|
|
6
6
|
Project-URL: Documentation, https://scitex.readthedocs.io
|
|
@@ -101,6 +101,7 @@ Requires-Dist: bitsandbytes; extra == 'all'
|
|
|
101
101
|
Requires-Dist: bs4; extra == 'all'
|
|
102
102
|
Requires-Dist: catboost; extra == 'all'
|
|
103
103
|
Requires-Dist: crawl4ai; extra == 'all'
|
|
104
|
+
Requires-Dist: dearpygui; extra == 'all'
|
|
104
105
|
Requires-Dist: einops; extra == 'all'
|
|
105
106
|
Requires-Dist: fairscale; extra == 'all'
|
|
106
107
|
Requires-Dist: fastapi; extra == 'all'
|
|
@@ -133,6 +134,7 @@ Requires-Dist: pyedflib; extra == 'all'
|
|
|
133
134
|
Requires-Dist: pymed; extra == 'all'
|
|
134
135
|
Requires-Dist: pymupdf; extra == 'all'
|
|
135
136
|
Requires-Dist: pypdf2; extra == 'all'
|
|
137
|
+
Requires-Dist: pyqt6; extra == 'all'
|
|
136
138
|
Requires-Dist: pytesseract; extra == 'all'
|
|
137
139
|
Requires-Dist: python-docx; extra == 'all'
|
|
138
140
|
Requires-Dist: pytorch-optimizer; extra == 'all'
|
|
@@ -206,6 +208,10 @@ Requires-Dist: torchaudio; extra == 'dl'
|
|
|
206
208
|
Requires-Dist: torchsummary; extra == 'dl'
|
|
207
209
|
Requires-Dist: torchvision; extra == 'dl'
|
|
208
210
|
Requires-Dist: transformers; extra == 'dl'
|
|
211
|
+
Provides-Extra: gui
|
|
212
|
+
Requires-Dist: dearpygui; extra == 'gui'
|
|
213
|
+
Requires-Dist: flask; extra == 'gui'
|
|
214
|
+
Requires-Dist: pyqt6; extra == 'gui'
|
|
209
215
|
Provides-Extra: jupyter
|
|
210
216
|
Requires-Dist: ipdb; extra == 'jupyter'
|
|
211
217
|
Requires-Dist: ipykernel; extra == 'jupyter'
|
|
@@ -296,7 +302,7 @@ Part of the fully open-source SciTeX project: https://scitex.ai
|
|
|
296
302
|
|
|
297
303
|
``` bash
|
|
298
304
|
pip install scitex # ~600 MB, Core + utilities
|
|
299
|
-
pip install scitex[dl,ml,jupyter,neuro,web,scholar,writer,dev] # ~2-5 GB, Complete toolkit
|
|
305
|
+
pip install scitex[dl,ml,jupyter,neuro,web,gui,scholar,writer,dev] # ~2-5 GB, Complete toolkit
|
|
300
306
|
```
|
|
301
307
|
|
|
302
308
|
### Alial
|
|
@@ -352,6 +358,7 @@ plt.close(fig)
|
|
|
352
358
|
| **jupyter** | JupyterLab, papermill | ~100 MB |
|
|
353
359
|
| **neuro** | MNE, obspy (EEG/MEG analysis) | ~200 MB |
|
|
354
360
|
| **web** | FastAPI, Flask, Streamlit | ~50 MB |
|
|
361
|
+
| **gui** | Flask, DearPyGui, PyQt6 (multi-backend figure editors) | ~100 MB |
|
|
355
362
|
| **scholar** | Selenium, PDF tools, paper management | ~150 MB |
|
|
356
363
|
| **writer** | LaTeX compilation tools | ~10 MB |
|
|
357
364
|
| **dev** | Testing, linting (dev only) | ~100 MB |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
scitex/.mcp.json,sha256=ge1NDrBZkRIxJgx_tCS9QvcEa_P_ay8AAAafraZVRP4,1259
|
|
2
2
|
scitex/__init__.py,sha256=8MkZBGNQrJj9Iy0qKI5aVUYWXyFW8I2HCIdxG8O9WuY,5778
|
|
3
3
|
scitex/__main__.py,sha256=m0B6tnYHtUnkY7tXQab7qlqfNsLTtHqtWOs1Sg-wnhw,488
|
|
4
|
-
scitex/__version__.py,sha256=
|
|
4
|
+
scitex/__version__.py,sha256=IXuw38szkcDXLVw6ko9SiWFDX-gbeJo6PuKI-s0uXVg,400
|
|
5
5
|
scitex/_optional_deps.py,sha256=oHwPdE6uJ4MmWNgt7JXojNtbwkUjR4c0mCCNMOK4k-w,3696
|
|
6
6
|
scitex/errors.py,sha256=sgl1csU2sfHCINxO9jwPCdNA6hr-CqaT8tQMiuH93sQ,15247
|
|
7
7
|
scitex/units.py,sha256=2T6VCwcjHBT_zPr_DG3JhUIF7a7TU1pUxMQPDBKZNCw,10373
|
|
@@ -402,7 +402,7 @@ scitex/io/_cache.py,sha256=2T10CGtFaxwTGICtFvWWEAhpENlgCMJ1cEqIm2nyTSo,2931
|
|
|
402
402
|
scitex/io/_flush.py,sha256=_lF16-UNLT-J8Vtv5L-BpdmZ_tk8M9ooXVgETWfUhyY,511
|
|
403
403
|
scitex/io/_glob.py,sha256=ZdQEsnqPw9lXf6kAqUyDNjg_MTwXxGePc-AeFxiPTDY,3550
|
|
404
404
|
scitex/io/_json2md.py,sha256=JIM3tpZZ7klk5ku7x93xL_-1SRISLJOa6DffsxLs0Pk,3265
|
|
405
|
-
scitex/io/_load.py,sha256=
|
|
405
|
+
scitex/io/_load.py,sha256=91xVgsTy7u_2C-GDX-vKXWteMTX2kra-yZ5x5PtgsqI,10900
|
|
406
406
|
scitex/io/_load_cache.py,sha256=eWr9RB36hClqOWvCce0ykk7zjmgEV-MJZ8DP3ovSUmM,7636
|
|
407
407
|
scitex/io/_load_configs.py,sha256=v3lMiKHSs1W48t1oGY2EEB7PeYlXHdiiAQ_qRAOuCTs,5721
|
|
408
408
|
scitex/io/_metadata.py,sha256=M5c8GfTJvb8VgSL4EOrvj6B6dqtiYX7c4Fi_HjzQZ6g,9953
|
|
@@ -410,12 +410,13 @@ scitex/io/_mv_to_tmp.py,sha256=oNwVn4WliWX2dFsSnkrA6B7Yn-BNX6O5hHrCbjXWufg,421
|
|
|
410
410
|
scitex/io/_path.py,sha256=mqbs2Y2kJP-IHwvdtnJs8vyime9i0QY8bh3IyVEP3qA,7803
|
|
411
411
|
scitex/io/_qr_utils.py,sha256=toLF1OzI8DQhIjbGPiMyRTwd6ba-LAk0nHPZ-fKMmXU,1969
|
|
412
412
|
scitex/io/_reload.py,sha256=k3FSMO-ts0sAqNVYroVAG5rxk7haIRtyDbPl1ZvLIfw,2780
|
|
413
|
-
scitex/io/_save.py,sha256=
|
|
413
|
+
scitex/io/_save.py,sha256=HGGleElb9izOKWbwV_vYp71-gqnqne2MIjYNpZmeLDE,42529
|
|
414
414
|
scitex/io/memo.md,sha256=L6hzBLnJrC3QcUmKZ_-6wUliRXnEInZiRP8pWvKlx7k,98235
|
|
415
415
|
scitex/io/_load_modules/_H5Explorer.py,sha256=FCl8_Jc1kH6xkOaIoq2CIXQ-0xjzCzbxOzHwMAr3SK8,10351
|
|
416
416
|
scitex/io/_load_modules/_ZarrExplorer.py,sha256=lm9ZE64uyK9uoiY1NoJjwEbQNdbSXddPwtK3KVxwC90,3356
|
|
417
417
|
scitex/io/_load_modules/__init__.py,sha256=53Z8frCV8Z9xkr4W-x95fQJMZ3jrJtTvu3ujfcDBPJA,1057
|
|
418
418
|
scitex/io/_load_modules/_bibtex.py,sha256=_9E39P-tEe7lLvq5sSIsKIMLwfOggW5Rr2Pn7Iw0YhE,5710
|
|
419
|
+
scitex/io/_load_modules/_canvas.py,sha256=tDrKiRqNJSYWL_e8kKhUR6jzlpLbQ59HXHFvXni0mAU,5034
|
|
419
420
|
scitex/io/_load_modules/_catboost.py,sha256=YrNjB8Aw_a89ovHTt5q-pJ4PQQ6VtsU0gh2QHIXkeVg,1657
|
|
420
421
|
scitex/io/_load_modules/_con.py,sha256=Q9kXysIVm-ziagItNv4rfivX-y9iGmbSrqAlG5z9EdM,483
|
|
421
422
|
scitex/io/_load_modules/_docx.py,sha256=UKboIkZLQfzUk1xQqA5taJb15NjePL6oJAKTganFqk4,933
|
|
@@ -439,6 +440,7 @@ scitex/io/_load_modules/_yaml.py,sha256=-F-XyRqApbRZdUsuObit0XM1RsC7Xdo4fFe5_N_n
|
|
|
439
440
|
scitex/io/_load_modules/_zarr.py,sha256=ahwbs5iWyisan4LwoUu1GA8qOpq7dgHKikGgxUnIzhM,3614
|
|
440
441
|
scitex/io/_save_modules/__init__.py,sha256=hYN8b3itnZlWgUMQka4k5-HaARQy-NVx9GHDip7xEMM,2333
|
|
441
442
|
scitex/io/_save_modules/_bibtex.py,sha256=oChSTWb1HhK6kEtjuWpK-8q8_Cu-k9DE0CEc-M68NII,5882
|
|
443
|
+
scitex/io/_save_modules/_canvas.py,sha256=s72x_9PxDA1gD77muidYSzucvitGSswbnGVV9Bj5F2g,11650
|
|
442
444
|
scitex/io/_save_modules/_catboost.py,sha256=wYLeTlnMtTXGlGmeUoBr_gobpV8JRsiAH-7d7ze8t8M,513
|
|
443
445
|
scitex/io/_save_modules/_csv.py,sha256=K9NFdwk_kJzD-4UhgFu3dY3zDTl44KO_lJ6YnnODjfs,3264
|
|
444
446
|
scitex/io/_save_modules/_excel.py,sha256=LkTF_G3ff5WlyNZNC3SWQt7_UztYrdIEgFDmusliaL0,6357
|
|
@@ -568,7 +570,7 @@ scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py,sha256=96Zi2gJ1
|
|
|
568
570
|
scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py,sha256=asQlzM-1UHwuG7Wcjybexkf6XY791jRkdMS86yuelVI,1088
|
|
569
571
|
scitex/plt/_subplots/_export_as_csv_formatters/_format_matshow.py,sha256=rF6wQXoJAcnOKr3XPERe6FmnVLd4jh_koqWpPG3GVjA,1219
|
|
570
572
|
scitex/plt/_subplots/_export_as_csv_formatters/_format_pie.py,sha256=dqFGKkltfa3Y-e47pVixCSpTIY7Z-msPQFuumhfGs-o,1134
|
|
571
|
-
scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py,sha256=
|
|
573
|
+
scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py,sha256=4NWr99Gjed_kKTfelFAuTsBIR4by-fTFbzzFfNakhD8,6921
|
|
572
574
|
scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py,sha256=ToOsgYCgKDBqUeSVq1IWeXmvWR0gGag-pcIwmIlVav8,2691
|
|
573
575
|
scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_imshow.py,sha256=ETYxkEjVZBu9jVFam29GMUZNUDDb0V0OJHtQpIjSO4A,1133
|
|
574
576
|
scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py,sha256=Lj85dnnNRs5wsWqzvsw6Ui7q6tqhTjP0ZLjaN-sHGoU,1499
|
|
@@ -662,20 +664,22 @@ scitex/plt/color/_colors.py,sha256=N8WYRPLYlWFn9TV-jhUAmfRjjpv45aNQAXUpGFgNa9A,4
|
|
|
662
664
|
scitex/plt/color/_get_colors_from_conf_matap.py,sha256=5oHCtGa3a3xtWa3NPYjgC3kapYmOUs3fZ0Q5JGK2YOI,4057
|
|
663
665
|
scitex/plt/color/_interpolate.py,sha256=jTprQ4hINxjYdFLlVutI2PMkjqAWjvev-jRyIA78rEQ,976
|
|
664
666
|
scitex/plt/color/_vizualize_colors.py,sha256=EoCbgm3IrXwq6oCJHmmLsVjnWaOUXp-j3D6pt0vDH5c,1356
|
|
667
|
+
scitex/plt/docs/FIGURE_ARCHITECTURE.md,sha256=_z7hzBmvRutllrm0SZ1Gltq8vX6H8Mm6mhvRZKj-fEM,6097
|
|
665
668
|
scitex/plt/styles/SCITEX_STYLE.yaml,sha256=x7-UGZBgzLumi1eVvgEFOuQmzvTxFQ75ZVZ0VBVz-To,4514
|
|
666
669
|
scitex/plt/styles/__init__.py,sha256=2KrY7gkfbuAD8ZfDI5bnovMJdjTHLJV5pIMq3mz01_0,1500
|
|
667
670
|
scitex/plt/styles/_plot_defaults.py,sha256=FxwRUMONhizf8UeUZ8wtSCJkpONHvYaZO3rkpaC4eX8,7962
|
|
668
671
|
scitex/plt/styles/_plot_postprocess.py,sha256=5fL8gXqROnqDfyZqBIhUwZ8-LMiDm45C7sHSHAnnOvk,19628
|
|
669
672
|
scitex/plt/styles/_style_loader.py,sha256=QtjFY2VQYKZzOtYMk_RadkWX9JqK3MDgsr2WRlV2M2s,7481
|
|
670
673
|
scitex/plt/styles/presets.py,sha256=j5SrabLBPQizVNKPZbFD5IVSEcnu__EIdcZdZfHhh9k,8029
|
|
671
|
-
scitex/plt/utils/__init__.py,sha256=
|
|
674
|
+
scitex/plt/utils/__init__.py,sha256=Kyh9kupztX-FLk5WS1UPqwIFcoQS2JfqaBZU_phdAx8,2355
|
|
672
675
|
scitex/plt/utils/_calc_bacc_from_conf_mat.py,sha256=6_e5bc6hi3kosYqi-7qVJCNAPAX5dA9iebBwTrc1lX4,1222
|
|
673
676
|
scitex/plt/utils/_calc_nice_ticks.py,sha256=ORlbvqcumBxx8gNwTv384OPzJRXtIIXtMsRpNOvx9SQ,3080
|
|
674
677
|
scitex/plt/utils/_close.py,sha256=joX9DiSJusUn3tLpApyd62Cri2FH3nDxk6He3Hxxars,1964
|
|
675
|
-
scitex/plt/utils/_collect_figure_metadata.py,sha256=
|
|
678
|
+
scitex/plt/utils/_collect_figure_metadata.py,sha256=ZxQTNQcNE4TPeLPhEHzF_jZLTaayvwCOwhYNJpIRPhQ,20928
|
|
676
679
|
scitex/plt/utils/_colorbar.py,sha256=K_YNnKuQv5FfrJKe8V8OA62ztLM2chy1VPHUs0Zowlk,4702
|
|
677
680
|
scitex/plt/utils/_configure_mpl.py,sha256=PJQkygYniH1ik7o5D_GJuJDx2wO0zFAFN89KlKkzkWg,15845
|
|
678
681
|
scitex/plt/utils/_crop.py,sha256=AvKM5pjTez-Eky8ADFw0RZB2hvr_bfSkDX_Zj46BuE8,8607
|
|
682
|
+
scitex/plt/utils/_csv_column_naming.py,sha256=HW6JpISsWbMRTAG5MPjUQ_Lsu54EhtjCFSe1AgBLC-I,6488
|
|
679
683
|
scitex/plt/utils/_dimension_viewer.py,sha256=tw3if2HRlL8m0ah33ko1Y6q8hLIX8LjdWf5w34VL7ec,12569
|
|
680
684
|
scitex/plt/utils/_figure_from_axes_mm.py,sha256=ZTKitbffW2E_j6cmcnEj1kW2LyXZ57DhPdlg7aAhyQA,11907
|
|
681
685
|
scitex/plt/utils/_figure_mm.py,sha256=b9d8aRfZnZOO0kiP2EcMevbuxnsCSQMEZRStGZkgA6A,13030
|
|
@@ -2756,7 +2760,7 @@ scitex/security/cli.py,sha256=-QMRwGcbj_3F2ZSKwZoBhX392IteXq8T4_6Xn39SCUw,3636
|
|
|
2756
2760
|
scitex/security/github.py,sha256=hIM3vVg3b5GdB2X5HRQL2M0FB9xoJgD3xGEpcDg6NyU,10824
|
|
2757
2761
|
scitex/session/README.md,sha256=lcXy_JnOgwA2oRlMrAREAg6w4xxrEz0j3syvatwxoko,6052
|
|
2758
2762
|
scitex/session/__init__.py,sha256=SQB8pyGklciq9_pkicbMYqZPMctjMiW5QWydL9wA5uM,1515
|
|
2759
|
-
scitex/session/_decorator.py,sha256=
|
|
2763
|
+
scitex/session/_decorator.py,sha256=KlReag5dKRYX3N5urt-Vm_AlcGhNdSQsiYi46hlN1Yo,20110
|
|
2760
2764
|
scitex/session/_lifecycle.py,sha256=U_hZu8C8UCmHncaDZhhzBKg5uskvXfcbOUAA9nd4Jw8,25932
|
|
2761
2765
|
scitex/session/_manager.py,sha256=i5UuNzC8Mp0Dy_rw5FSIo7CwbTG7g57PeFMFTxn4EMQ,2826
|
|
2762
2766
|
scitex/session/template.py,sha256=JqnYA-8dtq-zUyAbbCJ_8aCIoThgxsn7CXIRWyLO54U,532
|
|
@@ -2852,22 +2856,39 @@ scitex/utils/_search.py,sha256=IZ4I1sjiwCURw0yjAu9MO7pYRoQuh80urUyBFRQU8_k,3948
|
|
|
2852
2856
|
scitex/utils/_verify_scitex_format.py,sha256=_WGwZu9Y2hQk75VEkIC1ulI5v4l2wmSgWquqd2ywpW4,17551
|
|
2853
2857
|
scitex/utils/_verify_scitex_format_v01.py,sha256=EYWiwxS1Xgfb1ZawMJ10coYVizGQgagVGkyt9LgGjzA,10883
|
|
2854
2858
|
scitex/utils/template.py,sha256=M38FsmsdJhPNO7eKQbsmcliHbS2aqA8B7_dxxjlzE1k,2506
|
|
2855
|
-
scitex/vis/
|
|
2856
|
-
scitex/vis/
|
|
2857
|
-
scitex/vis/
|
|
2858
|
-
scitex/vis/tmp.txt,sha256=mReC8L9MN7ZMCYsc6G6jNxg5fyIW-7N9hvCgtrxt5ac,7960
|
|
2859
|
+
scitex/vis/README.md,sha256=I2gHvX0bTAfqujnqGScA9jF7BHwhG29ttM326eqj11s,9140
|
|
2860
|
+
scitex/vis/__init__.py,sha256=w8EyvZ7FMX55XvdG0nKJZwhP539nFloLjUGqLt3jleA,4650
|
|
2861
|
+
scitex/vis/canvas.py,sha256=LRnGsDeZ8dJ6ItFoaG3thP4mfNwxTyYrt5v4ADEucRs,12831
|
|
2859
2862
|
scitex/vis/backend/__init__.py,sha256=Samj3vse9vbMJDaEMbcW9t5S9vx9Z3ZYrqnCqi5a988,1110
|
|
2860
2863
|
scitex/vis/backend/export.py,sha256=hK8jZfgVLtMPUo-PWqlGPC60QpRGG1KUIQnl96cI7-4,3911
|
|
2861
2864
|
scitex/vis/backend/parser.py,sha256=xR-Hml_2rK6B2Kj3m4t5UPoP0BZcteewDC3DH17pRQY,4504
|
|
2862
2865
|
scitex/vis/backend/render.py,sha256=jc4QU8HfUhhzrd0b7zW_KUwC6r2BXQ3C_EObqgNOzV4,11137
|
|
2863
|
-
scitex/vis/
|
|
2864
|
-
scitex/vis/editor/
|
|
2865
|
-
scitex/vis/editor/
|
|
2866
|
+
scitex/vis/docs/CANVAS_ARCHITECTURE.md,sha256=LF5GSiUA1ZWriZt1lAc0FNsGEjl__zgqDQLIp6HKkb8,10559
|
|
2867
|
+
scitex/vis/editor/__init__.py,sha256=WOTzc1pn-_GJb4WOATlI8T48_kbsPqUsLSnHgA3u4HM,578
|
|
2868
|
+
scitex/vis/editor/_dearpygui_editor.py,sha256=Xqj6aWpQRdfSjPvAxGHTdByG0JfIPvNWKfOyNnVNvdw,73723
|
|
2869
|
+
scitex/vis/editor/_defaults.py,sha256=9oD5X8EFvqqekd3nQPscEWJtwCr6xwB5tCLydW9QtnM,7370
|
|
2870
|
+
scitex/vis/editor/_edit.py,sha256=N0VVF1siCg8UjyYWT6Xao7hKPly_BycJxv6EO8YkJRM,11101
|
|
2871
|
+
scitex/vis/editor/_flask_editor.py,sha256=xt8_xzxOjiPen4LIIWCQnXbLp4Bd42UDQGfqPv8fpvI,848
|
|
2866
2872
|
scitex/vis/editor/_mpl_editor.py,sha256=rrns4erlzx9LwVfkjwsTOPXwdWaDgEoVEmJagKk4Jo0,7703
|
|
2873
|
+
scitex/vis/editor/_qt_editor.py,sha256=hVNLfNqEghqMInSA_TdIJhXXBZlWPh3KTPqOyHXQBhg,32697
|
|
2867
2874
|
scitex/vis/editor/_tkinter_editor.py,sha256=5XU70hjVdbU2VX0LpHz5wQDzxBNOXubCz8IJWt3b1mE,18683
|
|
2868
|
-
scitex/vis/editor/
|
|
2869
|
-
scitex/vis/
|
|
2875
|
+
scitex/vis/editor/flask_editor/__init__.py,sha256=hJY-EO3oN0M7meHDgMWISE04l-5D9cxX6jmzTTGW_VQ,527
|
|
2876
|
+
scitex/vis/editor/flask_editor/bbox.py,sha256=RhgLGz4aaf4cols5n22e3zNQfEOxXWlNf7MDvsw6HGA,8513
|
|
2877
|
+
scitex/vis/editor/flask_editor/core.py,sha256=SjoH1EEgVpvEs78ZfMxj9A9ZwMhRwVjSAueN7h0JWKs,5512
|
|
2878
|
+
scitex/vis/editor/flask_editor/plotter.py,sha256=2-9fDDCIt7LC7JPwju8ude9dgittOHCI5imuZjRFHJY,4559
|
|
2879
|
+
scitex/vis/editor/flask_editor/renderer.py,sha256=mVQtjF_oDOBAJgllFHRM7JDugQYkUoAuPGEXswsJ8IE,5646
|
|
2880
|
+
scitex/vis/editor/flask_editor/utils.py,sha256=QhKgVMqamWsbHALkEcpC5sqZKQBLaIqKUmd0tI829H0,2540
|
|
2881
|
+
scitex/vis/editor/flask_editor/templates/__init__.py,sha256=bnu99-lmSWTauuVY-2cUKGIvlymgtnCWnDbY0oFwx2A,708
|
|
2882
|
+
scitex/vis/editor/flask_editor/templates/html.py,sha256=7QT5lfWI7qOa4-R5IiAOdKvPEpnTV2DWpPPRhhmQ8OQ,15059
|
|
2883
|
+
scitex/vis/editor/flask_editor/templates/scripts.py,sha256=LGgVGEMg6NyjasvH5QgFfCKN8O2sJvDITUxz8dOm37k,21795
|
|
2884
|
+
scitex/vis/editor/flask_editor/templates/styles.py,sha256=4LMHLQtB3bFa-RjZ2EtbWY3v3THJVg46WXa1jv2Np08,13033
|
|
2885
|
+
scitex/vis/io/__init__.py,sha256=Qmxyot62vE-QZDz9u2NCnGDQb_oKEXXguR6LL1bbBhQ,2337
|
|
2886
|
+
scitex/vis/io/canvas.py,sha256=L1h6hfKKNqGpXedDmFtmMVw7KLviLKTfi1l02XqN3Os,5694
|
|
2887
|
+
scitex/vis/io/data.py,sha256=soOB0wr9QFDhdvjVxxREAHdRCi1B5PnDoa1pd7SR1Sc,4786
|
|
2888
|
+
scitex/vis/io/directory.py,sha256=spLu_xdbsrcQRV79c6ooJ5XvLuSvR-QJMDyuPG-DVKg,5360
|
|
2889
|
+
scitex/vis/io/export.py,sha256=4iylKmJjCeqQuIjA8CJzYSdeV21bKdIGiJ4i23BwQ4g,12360
|
|
2870
2890
|
scitex/vis/io/load.py,sha256=6hh7pVNc4e9BM8lz1grywORUrSFI9Syb0Nk2bQWvTLg,3708
|
|
2891
|
+
scitex/vis/io/panel.py,sha256=aYZ_cyZ5X6Xtm-bSq4sTuq8Jz9qQEsJnMGUS7W5hwZY,11631
|
|
2871
2892
|
scitex/vis/io/save.py,sha256=85O_lznZYJMspHjnyhBIKiMxF0xTAIQQkl_W3mmMhL8,3051
|
|
2872
2893
|
scitex/vis/model/__init__.py,sha256=v2dfoL1UGvDDkqrjrqR83L_r275P7rsxGWzHdvURVLw,2532
|
|
2873
2894
|
scitex/vis/model/annotations.py,sha256=b1qLp80U_6f_aFwZ0PyJtZz5DJHiIpUl5rHq1qG4QoI,3733
|
|
@@ -2933,8 +2954,8 @@ scitex/writer/utils/__init__.py,sha256=wizvQZbOWHsNnkdDsB8J4-lPInRM3gDdwOCRg1fLI
|
|
|
2933
2954
|
scitex/writer/utils/_parse_latex_logs.py,sha256=_KfTzSw2IYhUzdZBJsZreAvQZk_BJHUBe2qIUNJfd-s,3154
|
|
2934
2955
|
scitex/writer/utils/_parse_script_args.py,sha256=vVMQE-AHCs2Q2uVQDuZVN8N3Eft0sxuPtNmnyPXVgnc,4625
|
|
2935
2956
|
scitex/writer/utils/_watch.py,sha256=qSBbwbeCPmXEWXn-ozCrar43rp664Wo65JzwIMWx7wE,2575
|
|
2936
|
-
scitex-2.
|
|
2937
|
-
scitex-2.
|
|
2938
|
-
scitex-2.
|
|
2939
|
-
scitex-2.
|
|
2940
|
-
scitex-2.
|
|
2957
|
+
scitex-2.5.0.dist-info/METADATA,sha256=WozVBcO25KEnBXTriDRsMkbihu_O0Icpc2HiMyvBGaE,29965
|
|
2958
|
+
scitex-2.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
2959
|
+
scitex-2.5.0.dist-info/entry_points.txt,sha256=jmgM0XEEIfCoMvwDSUNwRHBHaX_cfcJWQgi-lFc-BNU,48
|
|
2960
|
+
scitex-2.5.0.dist-info/licenses/LICENSE,sha256=TfPDBt3ar0uv_f9cqCDMZ5rIzW3CY8anRRd4PkL6ejs,34522
|
|
2961
|
+
scitex-2.5.0.dist-info/RECORD,,
|