ttnn-visualizer 0.46.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/file_uploads.py +1 -1
- ttnn_visualizer/settings.py +1 -0
- ttnn_visualizer/static/assets/{allPaths-esBqnTg5.js → allPaths-OR2-IW-_.js} +1 -1
- ttnn_visualizer/static/assets/allPathsLoader-xRXweacG.js +2 -0
- ttnn_visualizer/static/assets/{index-BANm1CMY.js → index-CmA3KkTi.js} +198 -198
- ttnn_visualizer/static/assets/{index-BuHal8Ii.css → index-DJA68-a6.css} +2 -2
- ttnn_visualizer/static/assets/{splitPathsBySizeLoader-DYuDhweD.js → splitPathsBySizeLoader-P9sdNg6R.js} +1 -1
- ttnn_visualizer/static/index.html +2 -2
- ttnn_visualizer/utils.py +190 -28
- ttnn_visualizer/views.py +23 -26
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/METADATA +1 -1
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/RECORD +19 -19
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/licenses/LICENSE +94 -50
- ttnn_visualizer/static/assets/allPathsLoader-KPOKJ-lr.js +0 -2
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/WHEEL +0 -0
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/entry_points.txt +0 -0
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/licenses/LICENSE_understanding.txt +0 -0
- {ttnn_visualizer-0.46.0.dist-info → ttnn_visualizer-0.47.0.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
|
|
1
|
-
import{p as r,I as s,_ as a}from"./index-
|
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
@@ -68,6 +68,7 @@ from ttnn_visualizer.sftp_operations import (
|
|
68
68
|
)
|
69
69
|
from ttnn_visualizer.ssh_client import SSHClient
|
70
70
|
from ttnn_visualizer.utils import (
|
71
|
+
create_path_resolver,
|
71
72
|
get_cluster_descriptor_path,
|
72
73
|
read_last_synced_file,
|
73
74
|
timer,
|
@@ -368,20 +369,18 @@ def get_operation_buffers(operation_id, instance: Instance):
|
|
368
369
|
@api.route("/profiler", methods=["GET"])
|
369
370
|
@with_instance
|
370
371
|
def get_profiler_data_list(instance: Instance):
|
371
|
-
#
|
372
|
-
|
373
|
-
# config_key = "REMOTE_DATA_DIRECTORY" if is_remote else "LOCAL_DATA_DIRECTORY"
|
374
|
-
config_key = "LOCAL_DATA_DIRECTORY"
|
375
|
-
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)
|
376
374
|
|
377
|
-
#
|
378
|
-
|
379
|
-
# path = data_directory / connection.host / current_app.config["PROFILER_DIRECTORY_NAME"]
|
380
|
-
# else:
|
381
|
-
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)
|
382
377
|
|
383
378
|
if not path.exists():
|
384
|
-
|
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)
|
385
384
|
|
386
385
|
valid_dirs = []
|
387
386
|
|
@@ -437,7 +436,6 @@ def get_profiler_data_list(instance: Instance):
|
|
437
436
|
continue
|
438
437
|
if not any(file.name == "config.json" for file in files):
|
439
438
|
continue
|
440
|
-
|
441
439
|
valid_dirs.append({"path": dir_path.name, "reportName": report_name})
|
442
440
|
|
443
441
|
return jsonify(valid_dirs)
|
@@ -491,13 +489,20 @@ def delete_profiler_report(profiler_name, instance: Instance):
|
|
491
489
|
@api.route("/performance", methods=["GET"])
|
492
490
|
@with_instance
|
493
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
|
+
|
494
498
|
is_remote = True if instance.remote_connection else False
|
495
|
-
config_key = "REMOTE_DATA_DIRECTORY" if is_remote else "LOCAL_DATA_DIRECTORY"
|
496
|
-
data_directory = Path(current_app.config[config_key])
|
497
|
-
path = data_directory / current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
498
499
|
|
499
|
-
if not
|
500
|
-
|
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)
|
501
506
|
|
502
507
|
if current_app.config["SERVER_MODE"]:
|
503
508
|
session_instances = session.get("instances", [])
|
@@ -521,15 +526,7 @@ def get_performance_data_list(instance: Instance):
|
|
521
526
|
set(db_directory_names + session_directory_names + demo_directory_names)
|
522
527
|
)
|
523
528
|
else:
|
524
|
-
|
525
|
-
connection = RemoteConnection.model_validate(
|
526
|
-
instance.remote_connection, strict=False
|
527
|
-
)
|
528
|
-
path = (
|
529
|
-
data_directory
|
530
|
-
/ connection.host
|
531
|
-
/ current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
532
|
-
)
|
529
|
+
# PathResolver already handles remote vs local logic
|
533
530
|
directory_names = (
|
534
531
|
[directory.name for directory in path.iterdir() if directory.is_dir()]
|
535
532
|
if path.exists()
|
@@ -1,31 +1,31 @@
|
|
1
1
|
ttnn_visualizer/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
2
|
-
ttnn_visualizer/app.py,sha256=
|
3
|
-
ttnn_visualizer/csv_queries.py,sha256=
|
2
|
+
ttnn_visualizer/app.py,sha256=5LEFKR-jn5HGqzYU1OWE4LCHzS4OAzwLKge5jSRDsBc,8663
|
3
|
+
ttnn_visualizer/csv_queries.py,sha256=pQV3WJ0jSMo84L7kOdAbGO5lGfOtcq-oAlHzu09ND2Q,15089
|
4
4
|
ttnn_visualizer/decorators.py,sha256=8k73rTiGPSpPP5CHxzLxTQPxoQTAlhMQNcEbplQL3Ek,5805
|
5
5
|
ttnn_visualizer/enums.py,sha256=SEIqp1tlc_zw2vQ8nHH9YTaV0m3Cb8fjn_goqz5wurE,203
|
6
6
|
ttnn_visualizer/exceptions.py,sha256=XwTIykJpdvZV8nqrd9JZdHIYL0EBFBhTbE9H09VZluA,2273
|
7
7
|
ttnn_visualizer/extensions.py,sha256=6OIRJ8-_ccfjOaXSruRXiS29jEbxp4Pyk-0JlD8IHBQ,379
|
8
|
-
ttnn_visualizer/file_uploads.py,sha256=
|
8
|
+
ttnn_visualizer/file_uploads.py,sha256=HFcC6TBt5I0oBkiKgM2Qw1W7hpixE8TOTACS5N-rmGE,5013
|
9
9
|
ttnn_visualizer/instances.py,sha256=XctQgQXdlwtuXWFXFletRoX1m1lGUZdiW3TwIIjY0uw,11564
|
10
10
|
ttnn_visualizer/models.py,sha256=oxZVvWjtBDP0X6GqoYaH4wDa5PqJF_vG_I3Q_YWHMmo,7814
|
11
11
|
ttnn_visualizer/queries.py,sha256=3Nv0jXIDNVH-qKx9xc9zSINy4FdmDidu-1I6f-VYV48,9603
|
12
12
|
ttnn_visualizer/remote_sqlite_setup.py,sha256=VdJk5LfkaJo1XPC-yxy909I0AOgJF1GUjryj0Oe0O14,3498
|
13
13
|
ttnn_visualizer/serializers.py,sha256=LmjHIrFg8BLx1JKVFh9Nd_TcA7nyy1MwY2BOGnX1MKw,8029
|
14
|
-
ttnn_visualizer/settings.py,sha256=
|
14
|
+
ttnn_visualizer/settings.py,sha256=W0PCeBCGXONNfFHqI7ATCVGhKv0a02-BhwBwrB3Clag,4660
|
15
15
|
ttnn_visualizer/sftp_operations.py,sha256=9HwbPJPSO1UUQ98d5zeWAkEwR0zFPryUakcI68GqkVw,30181
|
16
16
|
ttnn_visualizer/sockets.py,sha256=W5pK0QmlsU58EH_Qnra6HlcswLS7vsw5C_pk4avVYvs,3706
|
17
17
|
ttnn_visualizer/ssh_client.py,sha256=-GS2_1tdlUqVoLfRS02i3_o1fQaM39UQN-jtAnPBmzQ,13511
|
18
|
-
ttnn_visualizer/utils.py,sha256=
|
19
|
-
ttnn_visualizer/views.py,sha256=
|
20
|
-
ttnn_visualizer/static/index.html,sha256=
|
21
|
-
ttnn_visualizer/static/assets/allPaths-
|
22
|
-
ttnn_visualizer/static/assets/allPathsLoader-
|
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
23
|
ttnn_visualizer/static/assets/index-03c8d4Gh.js,sha256=k0jIi5q-lzXcPCqAD7K091vBMOkJHmx_fYcYKh-fOnM,285602
|
24
|
-
ttnn_visualizer/static/assets/index-
|
25
|
-
ttnn_visualizer/static/assets/index-
|
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
26
|
ttnn_visualizer/static/assets/index-PKNBViIU.js,sha256=dUuCyAPr_QvvTY0Xula4q4rgOm1J7xgdbppL67off4k,294225
|
27
27
|
ttnn_visualizer/static/assets/site-BTBrvHC5.webmanifest,sha256=Uy_XmnGuYFVf-OZuma2NvgEPdrCrevb3HZvaxSIHoA0,456
|
28
|
-
ttnn_visualizer/static/assets/splitPathsBySizeLoader-
|
28
|
+
ttnn_visualizer/static/assets/splitPathsBySizeLoader-P9sdNg6R.js,sha256=hrgrHehC3Bwy8EF3pWi11eVXlDm4JZ9Y2-j7CSX0WCY,281
|
29
29
|
ttnn_visualizer/static/favicon/android-chrome-192x192.png,sha256=BZWA09Zxaa3fXbaeS6nhWo2e-DUSjm9ElzNQ_xTB5XU,6220
|
30
30
|
ttnn_visualizer/static/favicon/android-chrome-512x512.png,sha256=HBiJSZyguB3o8fMJuqIGcpeBy_9JOdImme3wD02UYCw,62626
|
31
31
|
ttnn_visualizer/static/favicon/favicon-32x32.png,sha256=Zw201qUsczQv1UvoQvJf5smQ2ss10xaTeWxmQNYCGtY,480
|
@@ -34,10 +34,10 @@ ttnn_visualizer/static/sample-data/cluster-desc.yaml,sha256=LMxOmsRUXtVVU5ogzYkX
|
|
34
34
|
ttnn_visualizer/tests/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
35
35
|
ttnn_visualizer/tests/test_queries.py,sha256=HqaDXwudZpXiigJdHkdJP8oiUc-PtHASbpLnQQpbD7A,13792
|
36
36
|
ttnn_visualizer/tests/test_serializers.py,sha256=AF6m6tvewnZ_OSQMgMTUhsOI26GdJHPajvnRGIa9P4U,18492
|
37
|
-
ttnn_visualizer-0.
|
38
|
-
ttnn_visualizer-0.
|
39
|
-
ttnn_visualizer-0.
|
40
|
-
ttnn_visualizer-0.
|
41
|
-
ttnn_visualizer-0.
|
42
|
-
ttnn_visualizer-0.
|
43
|
-
ttnn_visualizer-0.
|
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,56 +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
|
-
- @eslint/
|
87
|
-
- @eslint/
|
88
|
-
- @
|
89
|
-
- @
|
90
|
-
-
|
91
|
-
-
|
92
|
-
- dom-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
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
|
96
128
|
- jsdom - MIT - https://github.com/jsdom/jsdom/blob/main/LICENSE.txt
|
97
|
-
-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
101
|
-
-
|
102
|
-
-
|
103
|
-
-
|
104
|
-
- react-
|
105
|
-
- react-
|
106
|
-
- react-
|
107
|
-
- react-
|
108
|
-
- react-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-
|
113
|
-
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
118
|
-
-
|
119
|
-
-
|
120
|
-
-
|
121
|
-
-
|
122
|
-
-
|
123
|
-
-
|
124
|
-
-
|
125
|
-
|
126
|
-
-
|
127
|
-
-
|
128
|
-
-
|
129
|
-
-
|
130
|
-
-
|
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
|
131
175
|
|
132
176
|
- Upload Release Assets - GitHub Action - MIT - https://github.com/AButler/upload-release-assets/blob/master/LICENSE
|
@@ -1,2 +0,0 @@
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/allPaths-esBqnTg5.js","assets/index-03c8d4Gh.js","assets/index-PKNBViIU.js","assets/index-BANm1CMY.js","assets/index-BuHal8Ii.css"])))=>i.map(i=>d[i]);
|
2
|
-
import{_ as e}from"./index-BANm1CMY.js";const s=async(t,a)=>{const{getIconPaths:o}=await e(async()=>{const{getIconPaths:r}=await import("./allPaths-esBqnTg5.js");return{getIconPaths:r}},__vite__mapDeps([0,1,2,3,4]));return o(t,a)};export{s as allPathsLoader};
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|