ttnn-visualizer 0.45.0__py3-none-any.whl → 0.47.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.
- ttnn_visualizer/app.py +36 -1
- ttnn_visualizer/csv_queries.py +2 -1
- ttnn_visualizer/decorators.py +3 -3
- ttnn_visualizer/file_uploads.py +1 -1
- ttnn_visualizer/settings.py +1 -0
- ttnn_visualizer/sftp_operations.py +23 -8
- ttnn_visualizer/static/assets/allPaths-OR2-IW-_.js +1 -0
- ttnn_visualizer/static/assets/allPathsLoader-xRXweacG.js +2 -0
- ttnn_visualizer/static/assets/index-03c8d4Gh.js +1 -0
- ttnn_visualizer/static/assets/{index-BgTcwiDZ.js → index-CmA3KkTi.js} +390 -390
- ttnn_visualizer/static/assets/index-DJA68-a6.css +7 -0
- ttnn_visualizer/static/assets/index-PKNBViIU.js +1 -0
- ttnn_visualizer/static/assets/splitPathsBySizeLoader-P9sdNg6R.js +1 -0
- ttnn_visualizer/static/index.html +2 -2
- ttnn_visualizer/utils.py +190 -28
- ttnn_visualizer/views.py +32 -30
- {ttnn_visualizer-0.45.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/METADATA +4 -3
- ttnn_visualizer-0.47.0.dist-info/RECORD +43 -0
- {ttnn_visualizer-0.45.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/licenses/LICENSE +95 -45
- ttnn_visualizer/static/assets/allPaths-CWDYwlGf.js +0 -1
- ttnn_visualizer/static/assets/allPathsLoader-CWMmYjN2.js +0 -2
- ttnn_visualizer/static/assets/index-B-fsa5Ru.js +0 -1
- ttnn_visualizer/static/assets/index-DLOviMB1.js +0 -1
- ttnn_visualizer/static/assets/index-cjyfcubn.css +0 -7
- ttnn_visualizer/static/assets/splitPathsBySizeLoader-BHSjwVae.js +0 -1
- ttnn_visualizer-0.45.0.dist-info/RECORD +0 -43
- {ttnn_visualizer-0.45.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/WHEEL +0 -0
- {ttnn_visualizer-0.45.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/entry_points.txt +0 -0
- {ttnn_visualizer-0.45.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/licenses/LICENSE_understanding.txt +0 -0
- {ttnn_visualizer-0.45.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
import{p as r,I as s,_ as a}from"./index-CmA3KkTi.js";const n=async(o,_)=>{const i=r(o);let t;return _===s.STANDARD?t=await a(()=>import("./index-03c8d4Gh.js").then(e=>e.I),[]):t=await a(()=>import("./index-PKNBViIU.js").then(e=>e.I),[]),t[i]};export{n as splitPathsBySizeLoader};
|
@@ -34,8 +34,8 @@
|
|
34
34
|
/* SERVER_CONFIG */
|
35
35
|
</script>
|
36
36
|
|
37
|
-
<script type="module" crossorigin src="/static/assets/index-
|
38
|
-
<link rel="stylesheet" crossorigin href="/static/assets/index-
|
37
|
+
<script type="module" crossorigin src="/static/assets/index-CmA3KkTi.js"></script>
|
38
|
+
<link rel="stylesheet" crossorigin href="/static/assets/index-DJA68-a6.css">
|
39
39
|
</head>
|
40
40
|
<body>
|
41
41
|
|
ttnn_visualizer/utils.py
CHANGED
@@ -18,6 +18,127 @@ logger = logging.getLogger(__name__)
|
|
18
18
|
LAST_SYNCED_FILE_NAME = ".last-synced"
|
19
19
|
|
20
20
|
|
21
|
+
class PathResolver:
|
22
|
+
"""Centralized path resolution for both TT-Metal and upload/sync modes."""
|
23
|
+
|
24
|
+
def __init__(self, current_app):
|
25
|
+
self.current_app = current_app
|
26
|
+
self.tt_metal_home = current_app.config.get("TT_METAL_HOME")
|
27
|
+
self.is_direct_report_mode = bool(self.tt_metal_home)
|
28
|
+
|
29
|
+
def get_base_report_path(self, report_type: str, remote_connection=None):
|
30
|
+
"""
|
31
|
+
Get the base path for a report type (profiler/performance).
|
32
|
+
|
33
|
+
Args:
|
34
|
+
report_type: Either 'profiler' or 'performance'
|
35
|
+
remote_connection: Optional remote connection for upload/sync mode
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
Path object to the base directory for this report type
|
39
|
+
"""
|
40
|
+
if self.is_direct_report_mode:
|
41
|
+
tt_metal_base = Path(self.tt_metal_home) / "generated"
|
42
|
+
if report_type == "profiler":
|
43
|
+
return tt_metal_base / "ttnn" / "reports"
|
44
|
+
elif report_type == "performance":
|
45
|
+
return tt_metal_base / "profiler" / "reports"
|
46
|
+
else:
|
47
|
+
raise ValueError(f"Unknown report type: {report_type}")
|
48
|
+
else:
|
49
|
+
# Upload/sync mode - use existing logic
|
50
|
+
local_dir = Path(self.current_app.config["LOCAL_DATA_DIRECTORY"])
|
51
|
+
remote_dir = Path(self.current_app.config["REMOTE_DATA_DIRECTORY"])
|
52
|
+
|
53
|
+
if remote_connection:
|
54
|
+
base_dir = remote_dir / remote_connection.host
|
55
|
+
else:
|
56
|
+
base_dir = local_dir
|
57
|
+
|
58
|
+
if report_type == "profiler":
|
59
|
+
return base_dir / self.current_app.config["PROFILER_DIRECTORY_NAME"]
|
60
|
+
elif report_type == "performance":
|
61
|
+
return base_dir / self.current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
62
|
+
else:
|
63
|
+
raise ValueError(f"Unknown report type: {report_type}")
|
64
|
+
|
65
|
+
def get_profiler_path(self, profiler_name: str, remote_connection=None):
|
66
|
+
"""Get the full path to a profiler report's db.sqlite file."""
|
67
|
+
if not profiler_name:
|
68
|
+
return ""
|
69
|
+
|
70
|
+
base_path = self.get_base_report_path("profiler", remote_connection)
|
71
|
+
|
72
|
+
if self.is_direct_report_mode and not base_path.exists():
|
73
|
+
logger.warning(f"TT-Metal profiler reports not found: {base_path}")
|
74
|
+
return ""
|
75
|
+
|
76
|
+
profiler_path = base_path / profiler_name
|
77
|
+
target_path = profiler_path / self.current_app.config["SQLITE_DB_PATH"]
|
78
|
+
|
79
|
+
return str(target_path)
|
80
|
+
|
81
|
+
def get_performance_path(self, performance_name: str, remote_connection=None):
|
82
|
+
"""Get the full path to a performance report directory."""
|
83
|
+
base_path = self.get_base_report_path("performance", remote_connection)
|
84
|
+
|
85
|
+
if self.is_direct_report_mode and not base_path.exists():
|
86
|
+
logger.warning(f"TT-Metal performance reports not found: {base_path}")
|
87
|
+
return ""
|
88
|
+
|
89
|
+
performance_path = base_path / performance_name
|
90
|
+
return str(performance_path)
|
91
|
+
|
92
|
+
def get_mode_info(self):
|
93
|
+
"""Get information about the current mode for debugging/display."""
|
94
|
+
if self.is_direct_report_mode:
|
95
|
+
return {
|
96
|
+
"mode": "tt_metal",
|
97
|
+
"tt_metal_home": self.tt_metal_home,
|
98
|
+
"profiler_base": str(
|
99
|
+
Path(self.tt_metal_home) / "generated" / "ttnn" / "reports"
|
100
|
+
),
|
101
|
+
"performance_base": str(
|
102
|
+
Path(self.tt_metal_home) / "generated" / "profiler" / "reports"
|
103
|
+
),
|
104
|
+
}
|
105
|
+
else:
|
106
|
+
return {
|
107
|
+
"mode": "upload_sync",
|
108
|
+
"local_dir": str(self.current_app.config["LOCAL_DATA_DIRECTORY"]),
|
109
|
+
"remote_dir": str(self.current_app.config["REMOTE_DATA_DIRECTORY"]),
|
110
|
+
}
|
111
|
+
|
112
|
+
def validate_tt_metal_setup(self):
|
113
|
+
"""Validate that TT-Metal directories exist and are accessible."""
|
114
|
+
if not self.is_direct_report_mode:
|
115
|
+
return True, "Not in TT-Metal mode"
|
116
|
+
|
117
|
+
tt_metal_base = Path(self.tt_metal_home)
|
118
|
+
if not tt_metal_base.exists():
|
119
|
+
return False, f"TT_METAL_HOME directory does not exist: {tt_metal_base}"
|
120
|
+
|
121
|
+
generated_dir = tt_metal_base / "generated"
|
122
|
+
if not generated_dir.exists():
|
123
|
+
return False, f"TT-Metal generated directory not found: {generated_dir}"
|
124
|
+
|
125
|
+
profiler_base = self.get_base_report_path("profiler")
|
126
|
+
performance_base = self.get_base_report_path("performance")
|
127
|
+
|
128
|
+
messages = []
|
129
|
+
if not profiler_base.exists():
|
130
|
+
messages.append(f"Profiler reports directory not found: {profiler_base}")
|
131
|
+
if not performance_base.exists():
|
132
|
+
messages.append(
|
133
|
+
f"Performance reports directory not found: {performance_base}"
|
134
|
+
)
|
135
|
+
|
136
|
+
if messages:
|
137
|
+
return False, "; ".join(messages)
|
138
|
+
|
139
|
+
return True, "TT-Metal setup is valid"
|
140
|
+
|
141
|
+
|
21
142
|
def str_to_bool(string_value):
|
22
143
|
return string_value.lower() in ("yes", "true", "t", "1")
|
23
144
|
|
@@ -52,20 +173,10 @@ def get_performance_path(performance_name, current_app, remote_connection=None):
|
|
52
173
|
:param current_app: Flask current application object.
|
53
174
|
:param remote_connection: Remote connection model instance
|
54
175
|
|
55
|
-
:return:
|
176
|
+
:return: Performance path as a string.
|
56
177
|
"""
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
if remote_connection:
|
61
|
-
base_dir = Path(remote_dir).joinpath(remote_connection.host)
|
62
|
-
else:
|
63
|
-
base_dir = local_dir
|
64
|
-
|
65
|
-
profiler_dir = base_dir / current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
66
|
-
performance_path = profiler_dir / performance_name
|
67
|
-
|
68
|
-
return str(performance_path)
|
178
|
+
resolver = PathResolver(current_app)
|
179
|
+
return resolver.get_performance_path(performance_name, remote_connection)
|
69
180
|
|
70
181
|
|
71
182
|
def get_profiler_path(profiler_name, current_app, remote_connection=None):
|
@@ -77,24 +188,75 @@ def get_profiler_path(profiler_name, current_app, remote_connection=None):
|
|
77
188
|
|
78
189
|
:return: profiler_path as a string
|
79
190
|
"""
|
80
|
-
|
81
|
-
|
82
|
-
remote_dir = current_app.config["REMOTE_DATA_DIRECTORY"]
|
191
|
+
resolver = PathResolver(current_app)
|
192
|
+
return resolver.get_profiler_path(profiler_name, remote_connection)
|
83
193
|
|
84
|
-
if profiler_name:
|
85
|
-
if remote_connection:
|
86
|
-
base_dir = Path(remote_dir).joinpath(remote_connection.host)
|
87
|
-
else:
|
88
|
-
base_dir = local_dir
|
89
194
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
target_path = profiler_path / database_file_name
|
195
|
+
def create_path_resolver(current_app):
|
196
|
+
"""Create a PathResolver instance for the current app."""
|
197
|
+
return PathResolver(current_app)
|
94
198
|
|
95
|
-
|
96
|
-
|
97
|
-
|
199
|
+
|
200
|
+
def get_available_reports(current_app):
|
201
|
+
"""
|
202
|
+
Get available reports in the current mode.
|
203
|
+
|
204
|
+
Returns a dict with 'profiler' and 'performance' keys containing lists of available reports.
|
205
|
+
This is a convenience function for views that need to discover available reports.
|
206
|
+
"""
|
207
|
+
resolver = PathResolver(current_app)
|
208
|
+
|
209
|
+
reports = {"profiler": [], "performance": []}
|
210
|
+
|
211
|
+
# Get profiler reports
|
212
|
+
try:
|
213
|
+
profiler_base = resolver.get_base_report_path("profiler")
|
214
|
+
if profiler_base.exists():
|
215
|
+
for report_dir in profiler_base.iterdir():
|
216
|
+
if report_dir.is_dir():
|
217
|
+
db_file = report_dir / current_app.config["SQLITE_DB_PATH"]
|
218
|
+
if db_file.exists():
|
219
|
+
reports["profiler"].append(
|
220
|
+
{
|
221
|
+
"name": report_dir.name,
|
222
|
+
"path": str(report_dir),
|
223
|
+
"modified": report_dir.stat().st_mtime,
|
224
|
+
}
|
225
|
+
)
|
226
|
+
except Exception as e:
|
227
|
+
logger.warning(f"Error reading profiler reports: {e}")
|
228
|
+
|
229
|
+
# Get performance reports
|
230
|
+
try:
|
231
|
+
performance_base = resolver.get_base_report_path("performance")
|
232
|
+
if performance_base.exists():
|
233
|
+
for report_dir in performance_base.iterdir():
|
234
|
+
if report_dir.is_dir():
|
235
|
+
# Check for typical performance files
|
236
|
+
has_perf_files = any(
|
237
|
+
(report_dir / filename).exists()
|
238
|
+
for filename in [
|
239
|
+
"profile_log_device.csv",
|
240
|
+
"tracy_profile_log_host.tracy",
|
241
|
+
]
|
242
|
+
) or any(report_dir.glob("ops_perf_results*.csv"))
|
243
|
+
|
244
|
+
if has_perf_files:
|
245
|
+
reports["performance"].append(
|
246
|
+
{
|
247
|
+
"name": report_dir.name,
|
248
|
+
"path": str(report_dir),
|
249
|
+
"modified": report_dir.stat().st_mtime,
|
250
|
+
}
|
251
|
+
)
|
252
|
+
except Exception as e:
|
253
|
+
logger.warning(f"Error reading performance reports: {e}")
|
254
|
+
|
255
|
+
# Sort by modification time (newest first)
|
256
|
+
reports["profiler"].sort(key=lambda x: x["modified"], reverse=True)
|
257
|
+
reports["performance"].sort(key=lambda x: x["modified"], reverse=True)
|
258
|
+
|
259
|
+
return reports
|
98
260
|
|
99
261
|
|
100
262
|
def get_npe_path(npe_name, current_app):
|
ttnn_visualizer/views.py
CHANGED
@@ -7,7 +7,6 @@ import json
|
|
7
7
|
import logging
|
8
8
|
import re
|
9
9
|
import shutil
|
10
|
-
import subprocess
|
11
10
|
import time
|
12
11
|
from http import HTTPStatus
|
13
12
|
from pathlib import Path
|
@@ -69,6 +68,7 @@ from ttnn_visualizer.sftp_operations import (
|
|
69
68
|
)
|
70
69
|
from ttnn_visualizer.ssh_client import SSHClient
|
71
70
|
from ttnn_visualizer.utils import (
|
71
|
+
create_path_resolver,
|
72
72
|
get_cluster_descriptor_path,
|
73
73
|
read_last_synced_file,
|
74
74
|
timer,
|
@@ -369,20 +369,18 @@ def get_operation_buffers(operation_id, instance: Instance):
|
|
369
369
|
@api.route("/profiler", methods=["GET"])
|
370
370
|
@with_instance
|
371
371
|
def get_profiler_data_list(instance: Instance):
|
372
|
-
#
|
373
|
-
|
374
|
-
# config_key = "REMOTE_DATA_DIRECTORY" if is_remote else "LOCAL_DATA_DIRECTORY"
|
375
|
-
config_key = "LOCAL_DATA_DIRECTORY"
|
376
|
-
data_directory = Path(current_app.config[config_key])
|
372
|
+
# Use PathResolver to get the base path for profiler reports
|
373
|
+
resolver = create_path_resolver(current_app)
|
377
374
|
|
378
|
-
#
|
379
|
-
|
380
|
-
# path = data_directory / connection.host / current_app.config["PROFILER_DIRECTORY_NAME"]
|
381
|
-
# else:
|
382
|
-
path = data_directory / current_app.config["PROFILER_DIRECTORY_NAME"]
|
375
|
+
# Note: "profiler" in app terminology maps to tt-metal's ttnn/reports
|
376
|
+
path = resolver.get_base_report_path("profiler", instance.remote_connection)
|
383
377
|
|
384
378
|
if not path.exists():
|
385
|
-
|
379
|
+
if resolver.is_direct_report_mode:
|
380
|
+
logger.warning(f"TT-Metal profiler reports not found: {path}")
|
381
|
+
return jsonify([])
|
382
|
+
else:
|
383
|
+
path.mkdir(parents=True, exist_ok=True)
|
386
384
|
|
387
385
|
valid_dirs = []
|
388
386
|
|
@@ -438,7 +436,6 @@ def get_profiler_data_list(instance: Instance):
|
|
438
436
|
continue
|
439
437
|
if not any(file.name == "config.json" for file in files):
|
440
438
|
continue
|
441
|
-
|
442
439
|
valid_dirs.append({"path": dir_path.name, "reportName": report_name})
|
443
440
|
|
444
441
|
return jsonify(valid_dirs)
|
@@ -492,13 +489,20 @@ def delete_profiler_report(profiler_name, instance: Instance):
|
|
492
489
|
@api.route("/performance", methods=["GET"])
|
493
490
|
@with_instance
|
494
491
|
def get_performance_data_list(instance: Instance):
|
492
|
+
# Use PathResolver to get the base path for performance reports
|
493
|
+
resolver = create_path_resolver(current_app)
|
494
|
+
|
495
|
+
# Note: "performance" in app terminology maps to tt-metal's profiler/reports
|
496
|
+
path = resolver.get_base_report_path("performance", instance.remote_connection)
|
497
|
+
|
495
498
|
is_remote = True if instance.remote_connection else False
|
496
|
-
config_key = "REMOTE_DATA_DIRECTORY" if is_remote else "LOCAL_DATA_DIRECTORY"
|
497
|
-
data_directory = Path(current_app.config[config_key])
|
498
|
-
path = data_directory / current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
499
499
|
|
500
|
-
if not
|
501
|
-
|
500
|
+
if not path.exists():
|
501
|
+
if resolver.is_direct_report_mode:
|
502
|
+
logger.warning(f"TT-Metal performance reports not found: {path}")
|
503
|
+
return jsonify([])
|
504
|
+
elif not is_remote:
|
505
|
+
path.mkdir(parents=True, exist_ok=True)
|
502
506
|
|
503
507
|
if current_app.config["SERVER_MODE"]:
|
504
508
|
session_instances = session.get("instances", [])
|
@@ -522,15 +526,7 @@ def get_performance_data_list(instance: Instance):
|
|
522
526
|
set(db_directory_names + session_directory_names + demo_directory_names)
|
523
527
|
)
|
524
528
|
else:
|
525
|
-
|
526
|
-
connection = RemoteConnection.model_validate(
|
527
|
-
instance.remote_connection, strict=False
|
528
|
-
)
|
529
|
-
path = (
|
530
|
-
data_directory
|
531
|
-
/ connection.host
|
532
|
-
/ current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
533
|
-
)
|
529
|
+
# PathResolver already handles remote vs local logic
|
534
530
|
directory_names = (
|
535
531
|
[directory.name for directory in path.iterdir() if directory.is_dir()]
|
536
532
|
if path.exists()
|
@@ -560,7 +556,12 @@ def get_performance_data_list(instance: Instance):
|
|
560
556
|
if not any(file.name.startswith("ops_perf_results") for file in files):
|
561
557
|
continue
|
562
558
|
|
563
|
-
valid_dirs.append(
|
559
|
+
valid_dirs.append(
|
560
|
+
{
|
561
|
+
"path": dir_path.name,
|
562
|
+
"reportName": dir_path.name,
|
563
|
+
}
|
564
|
+
)
|
564
565
|
|
565
566
|
return jsonify(valid_dirs)
|
566
567
|
|
@@ -1018,7 +1019,7 @@ def test_remote_folder():
|
|
1018
1019
|
)
|
1019
1020
|
|
1020
1021
|
# Test Directory Configuration
|
1021
|
-
if not has_failures():
|
1022
|
+
if not has_failures() and connection.profilerPath:
|
1022
1023
|
try:
|
1023
1024
|
check_remote_path_exists(connection, "profilerPath")
|
1024
1025
|
add_status(ConnectionTestStates.OK.value, "Memory folder path exists")
|
@@ -1068,7 +1069,8 @@ def test_remote_folder():
|
|
1068
1069
|
def read_remote_folder():
|
1069
1070
|
connection = RemoteConnection.model_validate(request.json, strict=False)
|
1070
1071
|
try:
|
1071
|
-
|
1072
|
+
# Only profilerPath is relevant here as we're reading the stack trace file
|
1073
|
+
content = read_remote_file(connection, remote_path=connection.profilerPath)
|
1072
1074
|
except RemoteConnectionException as e:
|
1073
1075
|
return Response(status=e.http_status, response=e.message)
|
1074
1076
|
return Response(status=200, response=content)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ttnn_visualizer
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.47.0
|
4
4
|
Summary: TT-NN Visualizer
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
@@ -18,8 +18,8 @@ Requires-Dist: Flask==3.1.1
|
|
18
18
|
Requires-Dist: gevent==24.10.2
|
19
19
|
Requires-Dist: gunicorn~=23.0.0
|
20
20
|
Requires-Dist: pandas==2.2.3
|
21
|
-
Requires-Dist: pydantic_core==2.
|
22
|
-
Requires-Dist: pydantic==2.
|
21
|
+
Requires-Dist: pydantic_core==2.27.1
|
22
|
+
Requires-Dist: pydantic==2.10.3
|
23
23
|
Requires-Dist: python-dotenv==1.0.1
|
24
24
|
Requires-Dist: PyYAML==6.0.2
|
25
25
|
Requires-Dist: tt-perf-report==1.0.7
|
@@ -29,6 +29,7 @@ Provides-Extra: dev
|
|
29
29
|
Requires-Dist: black==25.1.0; extra == "dev"
|
30
30
|
Requires-Dist: isort==6.0.1; extra == "dev"
|
31
31
|
Requires-Dist: mypy; extra == "dev"
|
32
|
+
Requires-Dist: playwright==1.48.0; extra == "dev"
|
32
33
|
Requires-Dist: pytest==8.4.1; extra == "dev"
|
33
34
|
Dynamic: license-file
|
34
35
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
ttnn_visualizer/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
2
|
+
ttnn_visualizer/app.py,sha256=5LEFKR-jn5HGqzYU1OWE4LCHzS4OAzwLKge5jSRDsBc,8663
|
3
|
+
ttnn_visualizer/csv_queries.py,sha256=pQV3WJ0jSMo84L7kOdAbGO5lGfOtcq-oAlHzu09ND2Q,15089
|
4
|
+
ttnn_visualizer/decorators.py,sha256=8k73rTiGPSpPP5CHxzLxTQPxoQTAlhMQNcEbplQL3Ek,5805
|
5
|
+
ttnn_visualizer/enums.py,sha256=SEIqp1tlc_zw2vQ8nHH9YTaV0m3Cb8fjn_goqz5wurE,203
|
6
|
+
ttnn_visualizer/exceptions.py,sha256=XwTIykJpdvZV8nqrd9JZdHIYL0EBFBhTbE9H09VZluA,2273
|
7
|
+
ttnn_visualizer/extensions.py,sha256=6OIRJ8-_ccfjOaXSruRXiS29jEbxp4Pyk-0JlD8IHBQ,379
|
8
|
+
ttnn_visualizer/file_uploads.py,sha256=HFcC6TBt5I0oBkiKgM2Qw1W7hpixE8TOTACS5N-rmGE,5013
|
9
|
+
ttnn_visualizer/instances.py,sha256=XctQgQXdlwtuXWFXFletRoX1m1lGUZdiW3TwIIjY0uw,11564
|
10
|
+
ttnn_visualizer/models.py,sha256=oxZVvWjtBDP0X6GqoYaH4wDa5PqJF_vG_I3Q_YWHMmo,7814
|
11
|
+
ttnn_visualizer/queries.py,sha256=3Nv0jXIDNVH-qKx9xc9zSINy4FdmDidu-1I6f-VYV48,9603
|
12
|
+
ttnn_visualizer/remote_sqlite_setup.py,sha256=VdJk5LfkaJo1XPC-yxy909I0AOgJF1GUjryj0Oe0O14,3498
|
13
|
+
ttnn_visualizer/serializers.py,sha256=LmjHIrFg8BLx1JKVFh9Nd_TcA7nyy1MwY2BOGnX1MKw,8029
|
14
|
+
ttnn_visualizer/settings.py,sha256=W0PCeBCGXONNfFHqI7ATCVGhKv0a02-BhwBwrB3Clag,4660
|
15
|
+
ttnn_visualizer/sftp_operations.py,sha256=9HwbPJPSO1UUQ98d5zeWAkEwR0zFPryUakcI68GqkVw,30181
|
16
|
+
ttnn_visualizer/sockets.py,sha256=W5pK0QmlsU58EH_Qnra6HlcswLS7vsw5C_pk4avVYvs,3706
|
17
|
+
ttnn_visualizer/ssh_client.py,sha256=-GS2_1tdlUqVoLfRS02i3_o1fQaM39UQN-jtAnPBmzQ,13511
|
18
|
+
ttnn_visualizer/utils.py,sha256=_W990vRnup9zlWJ-g_Bggyo-wDjCYF49p0nPxWNgxrE,12934
|
19
|
+
ttnn_visualizer/views.py,sha256=4l9bYIdDMyui1WjBDOn7rJ9V4egc439jeN1uG47Yk7Y,43072
|
20
|
+
ttnn_visualizer/static/index.html,sha256=5kiMyUyhbOhgwPgREMpeH3v-AGdP5G4Qtb10TcV7A-w,1135
|
21
|
+
ttnn_visualizer/static/assets/allPaths-OR2-IW-_.js,sha256=Oh2drbxvlmAIFWE4Srb9Pi8hdb__NF3_mVn2Vm60UI4,255
|
22
|
+
ttnn_visualizer/static/assets/allPathsLoader-xRXweacG.js,sha256=co2dBtSW_xZQ_XduamaE0h5AVsH-Ldswk44uwD7QvNc,477
|
23
|
+
ttnn_visualizer/static/assets/index-03c8d4Gh.js,sha256=k0jIi5q-lzXcPCqAD7K091vBMOkJHmx_fYcYKh-fOnM,285602
|
24
|
+
ttnn_visualizer/static/assets/index-CmA3KkTi.js,sha256=rp_h66A8t5Jl7OwbDKnM6bj03uE_H2bwqBAc6aIuIKY,7882665
|
25
|
+
ttnn_visualizer/static/assets/index-DJA68-a6.css,sha256=sPrF4HPkGtkuy0Ae8wkQXcUUzGGRGeKNeymUY6YPtwo,622830
|
26
|
+
ttnn_visualizer/static/assets/index-PKNBViIU.js,sha256=dUuCyAPr_QvvTY0Xula4q4rgOm1J7xgdbppL67off4k,294225
|
27
|
+
ttnn_visualizer/static/assets/site-BTBrvHC5.webmanifest,sha256=Uy_XmnGuYFVf-OZuma2NvgEPdrCrevb3HZvaxSIHoA0,456
|
28
|
+
ttnn_visualizer/static/assets/splitPathsBySizeLoader-P9sdNg6R.js,sha256=hrgrHehC3Bwy8EF3pWi11eVXlDm4JZ9Y2-j7CSX0WCY,281
|
29
|
+
ttnn_visualizer/static/favicon/android-chrome-192x192.png,sha256=BZWA09Zxaa3fXbaeS6nhWo2e-DUSjm9ElzNQ_xTB5XU,6220
|
30
|
+
ttnn_visualizer/static/favicon/android-chrome-512x512.png,sha256=HBiJSZyguB3o8fMJuqIGcpeBy_9JOdImme3wD02UYCw,62626
|
31
|
+
ttnn_visualizer/static/favicon/favicon-32x32.png,sha256=Zw201qUsczQv1UvoQvJf5smQ2ss10xaTeWxmQNYCGtY,480
|
32
|
+
ttnn_visualizer/static/favicon/favicon.svg,sha256=wDPY3VrekJ_DE1TnJ2vUy602K3S4Xe9TgrdZ7jXK9c8,633
|
33
|
+
ttnn_visualizer/static/sample-data/cluster-desc.yaml,sha256=LMxOmsRUXtVVU5ogzYkXUozB3dg2IzqIRJQpV_O5qMU,29618
|
34
|
+
ttnn_visualizer/tests/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
35
|
+
ttnn_visualizer/tests/test_queries.py,sha256=HqaDXwudZpXiigJdHkdJP8oiUc-PtHASbpLnQQpbD7A,13792
|
36
|
+
ttnn_visualizer/tests/test_serializers.py,sha256=AF6m6tvewnZ_OSQMgMTUhsOI26GdJHPajvnRGIa9P4U,18492
|
37
|
+
ttnn_visualizer-0.47.0.dist-info/licenses/LICENSE,sha256=gcO1GgS_1J-gOVcHALMiIPsyPv2Pu7hSSHhsgkp6F_Y,19345
|
38
|
+
ttnn_visualizer-0.47.0.dist-info/licenses/LICENSE_understanding.txt,sha256=pymi-yb_RvYM9p2ZA4iSNsImcvhDBBxlGuJCY9dTq7M,233
|
39
|
+
ttnn_visualizer-0.47.0.dist-info/METADATA,sha256=ugKvf2bHr5oB9S0nXFfYV8tRTBr652XPa3t43IrnFRI,7751
|
40
|
+
ttnn_visualizer-0.47.0.dist-info/WHEEL,sha256=lTU6B6eIfYoiQJTZNc-fyaR6BpL6ehTzU3xGYxn2n8k,91
|
41
|
+
ttnn_visualizer-0.47.0.dist-info/entry_points.txt,sha256=QpuUpkmQ_mEHJTMqOBdU0MH2Z4WF_9iFsGACeyyAO1E,61
|
42
|
+
ttnn_visualizer-0.47.0.dist-info/top_level.txt,sha256=M1EGkvDOuIfbhDbcUdz2-TSdmCtDoQ2Uyag9k5JLDSY,16
|
43
|
+
ttnn_visualizer-0.47.0.dist-info/RECORD,,
|
@@ -77,50 +77,100 @@ Third-Party Dependencies:
|
|
77
77
|
|
78
78
|
The following separate and independent dependencies are utilized by this project but are not distributed as part of the software and are subject to their own license terms listed as follows:
|
79
79
|
|
80
|
-
- @blueprintjs/colors
|
81
|
-
- @blueprintjs/core
|
82
|
-
- @blueprintjs/icons
|
83
|
-
- @blueprintjs/
|
84
|
-
- @blueprintjs/
|
85
|
-
- @
|
86
|
-
- @
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
-
|
93
|
-
-
|
94
|
-
- papaparse
|
95
|
-
-
|
96
|
-
- react
|
97
|
-
- react-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
101
|
-
- react-
|
102
|
-
-
|
103
|
-
-
|
104
|
-
-
|
105
|
-
-
|
106
|
-
-
|
107
|
-
-
|
108
|
-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-
|
113
|
-
-
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
118
|
-
-
|
119
|
-
-
|
120
|
-
-
|
121
|
-
-
|
122
|
-
-
|
123
|
-
-
|
124
|
-
-
|
80
|
+
- @blueprintjs/colors - Apache-2.0 - https://github.com/palantir/blueprint/blob/develop/packages/colors/LICENSE
|
81
|
+
- @blueprintjs/core - Apache-2.0 - https://github.com/palantir/blueprint/blob/develop/packages/core/LICENSE
|
82
|
+
- @blueprintjs/icons - Apache-2.0 - https://github.com/palantir/blueprint/blob/develop/packages/icons/LICENSE
|
83
|
+
- @blueprintjs/node-build-scripts - Apache-2.0 - https://github.com/palantir/blueprint/blob/develop/packages/node-build-scripts/LICENSE
|
84
|
+
- @blueprintjs/select - Apache-2.0 - https://github.com/palantir/blueprint/blob/develop/packages/select/LICENSE
|
85
|
+
- @blueprintjs/table - Apache-2.0 - https://github.com/palantir/blueprint/blob/develop/packages/table/LICENSE
|
86
|
+
- @eslint/compat - Apache-2.0 - https://github.com/eslint/rewrite/blob/main/packages/compat/LICENSE
|
87
|
+
- @eslint/eslintrc - MIT - https://github.com/eslint/eslintrc/blob/main/LICENSE
|
88
|
+
- @eslint/js - MIT - https://github.com/eslint/eslint/blob/main/LICENSE
|
89
|
+
- @eslint/rewrite - Apache-2.0 - https://github.com/eslint/rewrite/blob/main/LICENSE
|
90
|
+
- @tanstack/react-virtual - MIT - https://github.com/TanStack/virtual/blob/main/LICENSE
|
91
|
+
- @testing-library/dom - MIT - https://github.com/testing-library/dom-testing-library/blob/main/LICENSE
|
92
|
+
- @testing-library/jest-dom - MIT - https://github.com/testing-library/jest-dom/blob/main/LICENSE
|
93
|
+
- @testing-library/react - MIT - https://github.com/testing-library/react-testing-library/blob/main/LICENSE
|
94
|
+
- @types/papaparse - MIT - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
95
|
+
- @types/react - MIT - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
96
|
+
- @types/react-dom - MIT - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
97
|
+
- @types/react-plotly.js - MIT - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
98
|
+
- @types/tinycolor2 - MIT - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/tinycolor2/LICENSE
|
99
|
+
- @typescript-eslint/eslint-plugin - MIT - https://github.com/typescript-eslint/typescript-eslint/blob/main/LICENSE
|
100
|
+
- @typescript-eslint/parser - MIT - https://github.com/typescript-eslint/typescript-eslint/blob/main/LICENSE
|
101
|
+
- @vitejs/plugin-react - MIT - https://github.com/vitejs/vite-plugin-react/blob/main/LICENSE
|
102
|
+
- ajv - MIT - https://github.com/ajv-validator/ajv/blob/master/LICENSE
|
103
|
+
- axios - MIT - https://github.com/axios/axios/blob/v1.x/LICENSE
|
104
|
+
- classnames - MIT - https://github.com/JedWatson/classnames/blob/main/LICENSE
|
105
|
+
- css-select - BSD‑2-Clause - https://github.com/fb55/css-select/blob/master/LICENSE
|
106
|
+
- dom-serializer - MIT - https://github.com/cheeriojs/dom-serializer/blob/master/LICENSE
|
107
|
+
- eslint - MIT - https://github.com/eslint/eslint/blob/main/LICENSE
|
108
|
+
- eslint-config-airbnb-base - MIT - https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/LICENSE.md
|
109
|
+
- eslint-config-erb - MIT - https://github.com/electron-react-boilerplate/eslint-config-erb/blob/main/LICENSE
|
110
|
+
- eslint-config-prettier - MIT - https://github.com/prettier/eslint-config-prettier/blob/main/LICENSE
|
111
|
+
- eslint-import-resolver-alias - MIT - https://github.com/johvin/eslint-import-resolver-alias/blob/master/LICENSE
|
112
|
+
- eslint-import-resolver-typescript - ISC - https://github.com/import-js/eslint-import-resolver-typescript/blob/master/LICENSE
|
113
|
+
- eslint-plugin-compat - MIT - https://github.com/amilajack/eslint-plugin-compat/blob/main/LICENSE
|
114
|
+
- eslint-plugin-import - MIT - https://github.com/import-js/eslint-plugin-import/blob/main/LICENSE
|
115
|
+
- eslint-plugin-jsx-a11y - MIT - https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/LICENSE.md
|
116
|
+
- eslint-plugin-prettier - MIT - https://github.com/prettier/eslint-plugin-prettier/blob/main/LICENSE.md
|
117
|
+
- eslint-plugin-promise - ISC - https://github.com/eslint-community/eslint-plugin-promise/blob/main/LICENSE.md
|
118
|
+
- eslint-plugin-react - MIT - https://github.com/jsx-eslint/eslint-plugin-react/blob/master/LICENSE
|
119
|
+
- eslint-plugin-react-hooks - MIT - https://github.com/facebook/react/blob/main/LICENSE
|
120
|
+
- eslint-plugin-react-refresh - MIT - https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/LICENSE
|
121
|
+
- eslint-plugin-unused-imports - MIT - https://github.com/sweepline/eslint-plugin-unused-imports/blob/master/LICENSE
|
122
|
+
- globals - MIT - https://github.com/sindresorhus/globals/blob/main/license
|
123
|
+
- highlight.js - BSD-3-Clause - https://github.com/highlightjs/highlight.js/blob/main/LICENSE
|
124
|
+
- htmlparser2 - MIT - https://github.com/fb55/htmlparser2/blob/master/LICENSE
|
125
|
+
- husky - MIT - https://github.com/typicode/husky/blob/main/LICENSE
|
126
|
+
- immutable - MIT - https://github.com/immutable-js/immutable-js/blob/master/LICENSE
|
127
|
+
- jotai - MIT - https://github.com/pmndrs/jotai/blob/main/LICENSE
|
128
|
+
- jsdom - MIT - https://github.com/jsdom/jsdom/blob/main/LICENSE.txt
|
129
|
+
- lint-staged - MIT - https://github.com/lint-staged/lint-staged/blob/main/LICENSE
|
130
|
+
- mini-svg-data-uri - MIT - https://github.com/tigt/mini-svg-data-uri/blob/master/LICENSE
|
131
|
+
- normalize.css - MIT - https://github.com/necolas/normalize.css/blob/master/LICENSE.md
|
132
|
+
- only-allow - MIT - https://github.com/pnpm/only-allow/blob/master/LICENSE
|
133
|
+
- papaparse - MIT - https://github.com/mholt/PapaParse/blob/master/LICENSE
|
134
|
+
- plotly.js - MIT - https://github.com/plotly/plotly.js/blob/master/LICENSE
|
135
|
+
- prettier - MIT - https://github.com/prettier/eslint-config-prettier/blob/main/LICENSE
|
136
|
+
- react - MIT - https://github.com/facebook/react/blob/main/LICENSE
|
137
|
+
- react-dom - MIT - https://github.com/facebook/react/blob/main/LICENSE
|
138
|
+
- react-helmet-async - MIT - https://github.com/staylor/react-helmet-async/blob/main/LICENSE
|
139
|
+
- react-plotly.js - MIT - https://github.com/plotly/react-plotly.js/blob/master/LICENSE
|
140
|
+
- react-query - MIT - https://github.com/TanStack/query/blob/main/LICENSE
|
141
|
+
- react-router - MIT - https://github.com/remix-run/react-router/blob/main/LICENSE
|
142
|
+
- react-router-dom - MIT - https://github.com/remix-run/react-router/blob/main/LICENSE.md
|
143
|
+
- react-toastify - MIT - https://github.com/fkhadra/react-toastify/blob/main/LICENSE
|
144
|
+
- sass - MIT - https://github.com/sass/dart-sass/blob/main/LICENSE
|
145
|
+
- socket.io-client - MIT - https://www.npmjs.com/package/socket.io-client
|
146
|
+
- stylelint - MIT - https://github.com/stylelint/stylelint/blob/main/LICENSE
|
147
|
+
- stylelint-config-standard-scss - MIT - https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/LICENSE
|
148
|
+
- stylelint-prettier - MIT - https://github.com/prettier/stylelint-prettier/blob/main/LICENSE.md
|
149
|
+
- svgo - MIT - https://github.com/svg/svgo/blob/main/LICENSE
|
150
|
+
- tinycolor2 - MIT - https://github.com/bgrins/TinyColor/blob/master/LICENSE
|
151
|
+
- typescript - Apache-2.0 - https://github.com/microsoft/TypeScript/blob/main/LICENSE.txt
|
152
|
+
- vis-data - Dual-license Apache‑2.0 or MIT - https://github.com/visjs/vis-data/blob/master/LICENSE-APACHE-2.0 and https://github.com/visjs/vis-data/blob/master/LICENSE-MIT
|
153
|
+
- vis-network - Dual-license Apache‑2.0 or MIT - https://github.com/visjs/vis-network/blob/master/LICENSE-APACHE-2.0 or
|
154
|
+
- vite - MIT - https://github.com/vitejs/vite/blob/main/LICENSE
|
155
|
+
- vitest - MIT - https://github.com/vitest-dev/vitest/blob/main/LICENSE
|
156
|
+
- vitest-canvas-mock - MIT - https://github.com/wobsoriano/vitest-canvas-mock/blob/main/LICENSE
|
157
|
+
|
158
|
+
- build - MIT https://opensource.org/license/mit
|
159
|
+
- Flask - BSD‑3‑Clause - https://github.com/pallets/flask/blob/main/LICENSE.txt
|
160
|
+
- flask_cors - MIT - https://github.com/corydolphin/flask-cors/blob/main/LICENSE
|
161
|
+
- flask-socketio - MIT - https://github.com/miguelgrinberg/Flask-SocketIO/blob/main/LICENSE
|
162
|
+
- flask-sqlalchemy - BSD‑3‑Clause - https://github.com/pallets-eco/flask-sqlalchemy/blob/main/LICENSE
|
163
|
+
- gevent - MIT - https://github.com/gevent/gevent/blob/master/LICENSE
|
164
|
+
- gunicorn - MIT - https://github.com/benoitc/gunicorn/blob/master/LICENSE
|
165
|
+
- pandas - BSD‑3‑Clause - https://github.com/pandas-dev/pandas/blob/main/LICENSE
|
166
|
+
- playwright - Apache-2.0 - https://github.com/microsoft/playwright-python/blob/main/LICENSE
|
167
|
+
- pydantic - MIT - https://github.com/pydantic/pydantic-settings/blob/main/LICENSE
|
168
|
+
- python-dotenv - BSD‑3‑Clause - https://github.com/theskumar/python-dotenv/blob/main/LICENSE
|
169
|
+
- PyYAML - MIT - https://github.com/yaml/pyyaml/blob/main/LICENSE
|
170
|
+
- setuptools - MIT - https://github.com/pypa/setuptools/blob/main/LICENSE
|
171
|
+
- tt-perf-report - MIT https://opensource.org/license/mit
|
172
|
+
- uvicorn - BSD‑3‑Clause - https://github.com/encode/uvicorn/blob/master/LICENSE.md
|
173
|
+
- wheel - MIT https://opensource.org/license/mit
|
174
|
+
- zstd (python-zstandard) - BSD‑3‑Clause - https://github.com/indygreg/python-zstandard/blob/main/LICENSE
|
125
175
|
|
126
176
|
- Upload Release Assets - GitHub Action - MIT - https://github.com/AButler/upload-release-assets/blob/master/LICENSE
|
@@ -1 +0,0 @@
|
|
1
|
-
import{I as n}from"./index-DLOviMB1.js";import{I as e}from"./index-B-fsa5Ru.js";import{p as r,I as s}from"./index-BgTcwiDZ.js";function I(o,t){var a=r(o);return t===s.STANDARD?n[a]:e[a]}function p(o){return r(o)}export{n as IconSvgPaths16,e as IconSvgPaths20,I as getIconPaths,p as iconNameToPathsRecordKey};
|
@@ -1,2 +0,0 @@
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/allPaths-CWDYwlGf.js","assets/index-DLOviMB1.js","assets/index-B-fsa5Ru.js","assets/index-BgTcwiDZ.js","assets/index-cjyfcubn.css"])))=>i.map(i=>d[i]);
|
2
|
-
import{_ as o,a as n,b as i}from"./index-BgTcwiDZ.js";var _=function(e,a){return o(void 0,void 0,void 0,function(){var t;return n(this,function(r){switch(r.label){case 0:return[4,i(()=>import("./allPaths-CWDYwlGf.js"),__vite__mapDeps([0,1,2,3,4]))];case 1:return t=r.sent().getIconPaths,[2,t(e,a)]}})})};export{_ as allPathsLoader};
|