ttnn-visualizer 0.44.1__py3-none-any.whl → 0.45.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/csv_queries.py +1 -54
- ttnn_visualizer/exceptions.py +7 -1
- ttnn_visualizer/models.py +1 -0
- ttnn_visualizer/remote_sqlite_setup.py +6 -82
- ttnn_visualizer/sftp_operations.py +11 -98
- ttnn_visualizer/ssh_client.py +352 -0
- ttnn_visualizer/static/assets/{allPaths-CFKU23gh.js → allPaths-CWDYwlGf.js} +1 -1
- ttnn_visualizer/static/assets/{allPathsLoader-CpaihUCo.js → allPathsLoader-CWMmYjN2.js} +2 -2
- ttnn_visualizer/static/assets/{index-B2fHW2_O.js → index-BgTcwiDZ.js} +177 -177
- ttnn_visualizer/static/assets/{index-BueCaPcI.css → index-cjyfcubn.css} +2 -2
- ttnn_visualizer/static/assets/{splitPathsBySizeLoader-BEb-7YZm.js → splitPathsBySizeLoader-BHSjwVae.js} +1 -1
- ttnn_visualizer/static/index.html +2 -2
- ttnn_visualizer/views.py +71 -177
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/METADATA +4 -1
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/RECORD +20 -19
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/WHEEL +0 -0
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/entry_points.txt +0 -0
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/licenses/LICENSE +0 -0
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/licenses/LICENSE_understanding.txt +0 -0
- {ttnn_visualizer-0.44.1.dist-info → ttnn_visualizer-0.45.0.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
|
|
1
|
-
import{_ as o,a as _,b as i,p as c,I as u}from"./index-
|
1
|
+
import{_ as o,a as _,b as i,p as c,I as u}from"./index-BgTcwiDZ.js";var p=function(n,s){return o(void 0,void 0,void 0,function(){var a,r;return _(this,function(e){switch(e.label){case 0:return a=c(n),s!==u.STANDARD?[3,2]:[4,i(()=>import("./index-DLOviMB1.js").then(t=>t.I),[])];case 1:return r=e.sent(),[3,4];case 2:return[4,i(()=>import("./index-B-fsa5Ru.js").then(t=>t.I),[])];case 3:r=e.sent(),e.label=4;case 4:return[2,r[a]]}})})};export{p 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-BgTcwiDZ.js"></script>
|
38
|
+
<link rel="stylesheet" crossorigin href="/static/assets/index-cjyfcubn.css">
|
39
39
|
</head>
|
40
40
|
<body>
|
41
41
|
|
ttnn_visualizer/views.py
CHANGED
@@ -67,6 +67,7 @@ from ttnn_visualizer.sftp_operations import (
|
|
67
67
|
sync_remote_performance_folders,
|
68
68
|
sync_remote_profiler_folders,
|
69
69
|
)
|
70
|
+
from ttnn_visualizer.ssh_client import SSHClient
|
70
71
|
from ttnn_visualizer.utils import (
|
71
72
|
get_cluster_descriptor_path,
|
72
73
|
read_last_synced_file,
|
@@ -74,123 +75,10 @@ from ttnn_visualizer.utils import (
|
|
74
75
|
)
|
75
76
|
|
76
77
|
|
77
|
-
def handle_ssh_subprocess_error(e: subprocess.CalledProcessError, remote_connection):
|
78
|
-
"""
|
79
|
-
Convert subprocess SSH errors to appropriate SSH exceptions.
|
80
|
-
|
81
|
-
:param e: The subprocess.CalledProcessError
|
82
|
-
:param remote_connection: The RemoteConnection object for context
|
83
|
-
:raises: SSHException, AuthenticationException, or NoValidConnectionsError
|
84
|
-
"""
|
85
|
-
stderr = e.stderr.lower() if e.stderr else ""
|
86
|
-
|
87
|
-
# Check for authentication failures
|
88
|
-
if any(
|
89
|
-
auth_err in stderr
|
90
|
-
for auth_err in [
|
91
|
-
"permission denied",
|
92
|
-
"authentication failed",
|
93
|
-
"publickey",
|
94
|
-
"password",
|
95
|
-
"host key verification failed",
|
96
|
-
]
|
97
|
-
):
|
98
|
-
raise AuthenticationException(
|
99
|
-
f"SSH authentication failed: {remote_connection.username}@{remote_connection.host}: Permission denied (publickey,password)"
|
100
|
-
)
|
101
|
-
|
102
|
-
# Check for connection failures
|
103
|
-
elif any(
|
104
|
-
conn_err in stderr
|
105
|
-
for conn_err in [
|
106
|
-
"connection refused",
|
107
|
-
"network is unreachable",
|
108
|
-
"no route to host",
|
109
|
-
"name or service not known",
|
110
|
-
"connection timed out",
|
111
|
-
]
|
112
|
-
):
|
113
|
-
raise NoValidConnectionsError(f"SSH connection failed: {e.stderr}")
|
114
|
-
|
115
|
-
# Check for general SSH protocol errors
|
116
|
-
elif "ssh:" in stderr or "protocol" in stderr:
|
117
|
-
raise SSHException(f"SSH protocol error: {e.stderr}")
|
118
|
-
|
119
|
-
# Default to generic SSH exception
|
120
|
-
else:
|
121
|
-
raise SSHException(f"SSH command failed: {e.stderr}")
|
122
|
-
|
123
|
-
|
124
78
|
def test_ssh_connection(connection) -> bool:
|
125
79
|
"""Test SSH connection by running a simple command."""
|
126
|
-
|
127
|
-
|
128
|
-
# Handle non-standard SSH port
|
129
|
-
if connection.port != 22:
|
130
|
-
ssh_cmd.extend(["-p", str(connection.port)])
|
131
|
-
|
132
|
-
ssh_cmd.extend(
|
133
|
-
[f"{connection.username}@{connection.host}", "echo 'SSH connection test'"]
|
134
|
-
)
|
135
|
-
|
136
|
-
try:
|
137
|
-
result = subprocess.run(
|
138
|
-
ssh_cmd, capture_output=True, text=True, check=True, timeout=10
|
139
|
-
)
|
140
|
-
return True
|
141
|
-
except subprocess.CalledProcessError as e:
|
142
|
-
if e.returncode == 255: # SSH protocol errors
|
143
|
-
try:
|
144
|
-
handle_ssh_subprocess_error(e, connection)
|
145
|
-
except AuthenticationException:
|
146
|
-
# Convert to AuthenticationFailedException for proper HTTP 422 response
|
147
|
-
user_message = (
|
148
|
-
"SSH authentication failed. This application requires SSH key-based authentication. "
|
149
|
-
"Please ensure your SSH public key is added to the authorized_keys file on the remote server. "
|
150
|
-
"Password authentication is not supported."
|
151
|
-
)
|
152
|
-
logger.info(
|
153
|
-
f"SSH authentication failed for {connection.username}@{connection.host}: {user_message}"
|
154
|
-
)
|
155
|
-
raise AuthenticationFailedException(message=user_message)
|
156
|
-
except NoValidConnectionsError as ssh_err:
|
157
|
-
user_message = (
|
158
|
-
f"Unable to establish SSH connection to {connection.host}. "
|
159
|
-
"Please check the hostname, port, and network connectivity. "
|
160
|
-
"Ensure SSH key-based authentication is properly configured."
|
161
|
-
)
|
162
|
-
logger.warning(
|
163
|
-
f"SSH connection failed for {connection.username}@{connection.host}: {user_message}"
|
164
|
-
)
|
165
|
-
raise RemoteConnectionException(
|
166
|
-
message=user_message, status=ConnectionTestStates.FAILED
|
167
|
-
)
|
168
|
-
except SSHException as ssh_err:
|
169
|
-
user_message = f"SSH connection error to {connection.host}: {str(ssh_err)}. Ensure SSH key-based authentication is properly configured."
|
170
|
-
logger.warning(
|
171
|
-
f"SSH error for {connection.username}@{connection.host}: {user_message}"
|
172
|
-
)
|
173
|
-
raise RemoteConnectionException(
|
174
|
-
message=user_message, status=ConnectionTestStates.FAILED
|
175
|
-
)
|
176
|
-
else:
|
177
|
-
error_message = f"SSH connection test failed: {e.stderr}"
|
178
|
-
logger.error(
|
179
|
-
f"SSH test failed for {connection.username}@{connection.host}: {error_message}"
|
180
|
-
)
|
181
|
-
raise RemoteConnectionException(
|
182
|
-
message=error_message, status=ConnectionTestStates.FAILED
|
183
|
-
)
|
184
|
-
return False
|
185
|
-
except subprocess.TimeoutExpired:
|
186
|
-
timeout_message = "SSH connection test timed out"
|
187
|
-
logger.warning(
|
188
|
-
f"SSH timeout for {connection.username}@{connection.host}: {timeout_message}"
|
189
|
-
)
|
190
|
-
raise RemoteConnectionException(
|
191
|
-
message=timeout_message, status=ConnectionTestStates.FAILED
|
192
|
-
)
|
193
|
-
return False
|
80
|
+
ssh_client = SSHClient(connection)
|
81
|
+
return ssh_client.test_connection()
|
194
82
|
|
195
83
|
|
196
84
|
logger = logging.getLogger(__name__)
|
@@ -643,9 +531,11 @@ def get_performance_data_list(instance: Instance):
|
|
643
531
|
/ connection.host
|
644
532
|
/ current_app.config["PERFORMANCE_DIRECTORY_NAME"]
|
645
533
|
)
|
646
|
-
directory_names =
|
647
|
-
directory.name for directory in path.iterdir() if directory.is_dir()
|
648
|
-
|
534
|
+
directory_names = (
|
535
|
+
[directory.name for directory in path.iterdir() if directory.is_dir()]
|
536
|
+
if path.exists()
|
537
|
+
else []
|
538
|
+
)
|
649
539
|
|
650
540
|
valid_dirs = []
|
651
541
|
|
@@ -761,7 +651,10 @@ def get_performance_results_data_raw(instance: Instance):
|
|
761
651
|
@with_instance
|
762
652
|
def get_performance_results_report(instance: Instance):
|
763
653
|
if not instance.performance_path:
|
764
|
-
return Response(
|
654
|
+
return Response(
|
655
|
+
status=HTTPStatus.BAD_REQUEST,
|
656
|
+
response="No performance data found for instance.",
|
657
|
+
)
|
765
658
|
|
766
659
|
name = request.args.get("name", None)
|
767
660
|
|
@@ -1101,8 +994,8 @@ def test_remote_folder():
|
|
1101
994
|
connection = RemoteConnection.model_validate(connection_data)
|
1102
995
|
statuses = []
|
1103
996
|
|
1104
|
-
def add_status(status, message):
|
1105
|
-
statuses.append(StatusMessage(status=status, message=message))
|
997
|
+
def add_status(status, message, detail=None):
|
998
|
+
statuses.append(StatusMessage(status=status, message=message, detail=detail))
|
1106
999
|
|
1107
1000
|
def has_failures():
|
1108
1001
|
return any(
|
@@ -1115,10 +1008,14 @@ def test_remote_folder():
|
|
1115
1008
|
add_status(ConnectionTestStates.OK.value, "SSH connection established")
|
1116
1009
|
except AuthenticationFailedException as e:
|
1117
1010
|
# Return 422 for authentication failures
|
1118
|
-
add_status(
|
1011
|
+
add_status(
|
1012
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1013
|
+
)
|
1119
1014
|
return [status.model_dump() for status in statuses], e.http_status
|
1120
1015
|
except RemoteConnectionException as e:
|
1121
|
-
add_status(
|
1016
|
+
add_status(
|
1017
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1018
|
+
)
|
1122
1019
|
|
1123
1020
|
# Test Directory Configuration
|
1124
1021
|
if not has_failures():
|
@@ -1126,10 +1023,14 @@ def test_remote_folder():
|
|
1126
1023
|
check_remote_path_exists(connection, "profilerPath")
|
1127
1024
|
add_status(ConnectionTestStates.OK.value, "Memory folder path exists")
|
1128
1025
|
except AuthenticationFailedException as e:
|
1129
|
-
add_status(
|
1026
|
+
add_status(
|
1027
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1028
|
+
)
|
1130
1029
|
return [status.model_dump() for status in statuses], e.http_status
|
1131
1030
|
except RemoteConnectionException as e:
|
1132
|
-
add_status(
|
1031
|
+
add_status(
|
1032
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1033
|
+
)
|
1133
1034
|
|
1134
1035
|
# Test Directory Configuration (perf)
|
1135
1036
|
if not has_failures() and connection.performancePath:
|
@@ -1137,20 +1038,28 @@ def test_remote_folder():
|
|
1137
1038
|
check_remote_path_exists(connection, "performancePath")
|
1138
1039
|
add_status(ConnectionTestStates.OK.value, "Performance folder path exists")
|
1139
1040
|
except AuthenticationFailedException as e:
|
1140
|
-
add_status(
|
1041
|
+
add_status(
|
1042
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1043
|
+
)
|
1141
1044
|
return [status.model_dump() for status in statuses], e.http_status
|
1142
1045
|
except RemoteConnectionException as e:
|
1143
|
-
add_status(
|
1046
|
+
add_status(
|
1047
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1048
|
+
)
|
1144
1049
|
|
1145
1050
|
# Check for Project Configurations
|
1146
1051
|
if not has_failures():
|
1147
1052
|
try:
|
1148
1053
|
check_remote_path_for_reports(connection)
|
1149
1054
|
except AuthenticationFailedException as e:
|
1150
|
-
add_status(
|
1055
|
+
add_status(
|
1056
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1057
|
+
)
|
1151
1058
|
return [status.model_dump() for status in statuses], e.http_status
|
1152
1059
|
except RemoteConnectionException as e:
|
1153
|
-
add_status(
|
1060
|
+
add_status(
|
1061
|
+
ConnectionTestStates.FAILED.value, e.message, getattr(e, "detail", None)
|
1062
|
+
)
|
1154
1063
|
|
1155
1064
|
return [status.model_dump() for status in statuses]
|
1156
1065
|
|
@@ -1174,33 +1083,37 @@ def sync_remote_folder():
|
|
1174
1083
|
if not request_body or not isinstance(request_body, dict):
|
1175
1084
|
return jsonify({"error": "Invalid or missing JSON data"}), 400
|
1176
1085
|
|
1177
|
-
|
1178
|
-
|
1086
|
+
profiler = request_body.get("profiler")
|
1087
|
+
performance = request_body.get("performance", None)
|
1179
1088
|
instance_id = request.args.get("instanceId", None)
|
1180
1089
|
connection = RemoteConnection.model_validate(
|
1181
1090
|
request_body.get("connection"), strict=False
|
1182
1091
|
)
|
1183
1092
|
|
1184
|
-
if
|
1185
|
-
|
1093
|
+
if performance:
|
1094
|
+
performance_folder = RemoteReportFolder.model_validate(
|
1095
|
+
performance, strict=False
|
1096
|
+
)
|
1186
1097
|
try:
|
1187
1098
|
sync_remote_performance_folders(
|
1188
1099
|
connection,
|
1189
1100
|
remote_dir,
|
1190
|
-
|
1101
|
+
performance=performance_folder,
|
1191
1102
|
exclude_patterns=[r"/tensors(/|$)"],
|
1192
1103
|
sid=instance_id,
|
1193
1104
|
)
|
1194
1105
|
|
1195
|
-
|
1106
|
+
performance_folder.lastSynced = int(time.time())
|
1196
1107
|
|
1197
|
-
return
|
1108
|
+
return performance_folder.model_dump()
|
1198
1109
|
|
1199
1110
|
except RemoteConnectionException as e:
|
1200
1111
|
return Response(status=e.http_status, response=e.message)
|
1201
1112
|
|
1202
1113
|
try:
|
1203
|
-
remote_profiler_folder = RemoteReportFolder.model_validate(
|
1114
|
+
remote_profiler_folder = RemoteReportFolder.model_validate(
|
1115
|
+
profiler, strict=False
|
1116
|
+
)
|
1204
1117
|
|
1205
1118
|
sync_remote_profiler_folders(
|
1206
1119
|
connection,
|
@@ -1247,55 +1160,36 @@ def detect_sqlite_path():
|
|
1247
1160
|
def use_remote_folder():
|
1248
1161
|
data = request.get_json(force=True)
|
1249
1162
|
connection = data.get("connection", None)
|
1250
|
-
|
1251
|
-
|
1163
|
+
profiler = data.get("profiler", None)
|
1164
|
+
performance = data.get("performance", None)
|
1252
1165
|
|
1253
|
-
if not connection or not
|
1166
|
+
if not connection or not (profiler or performance):
|
1254
1167
|
return Response(status=HTTPStatus.BAD_REQUEST)
|
1255
1168
|
|
1256
1169
|
connection = RemoteConnection.model_validate(connection, strict=False)
|
1257
|
-
folder = RemoteReportFolder.model_validate(folder, strict=False)
|
1258
|
-
performance_name = None
|
1259
|
-
remote_performance_folder = None
|
1260
1170
|
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
performance_name = remote_performance_folder.reportName
|
1266
|
-
|
1267
|
-
data_directory = current_app.config["REMOTE_DATA_DIRECTORY"]
|
1268
|
-
profiler_name = folder.remotePath.split("/")[-1]
|
1269
|
-
folder_name = folder.remotePath.split("/")[-1]
|
1270
|
-
|
1271
|
-
connection_directory = Path(
|
1272
|
-
data_directory,
|
1273
|
-
connection.host,
|
1274
|
-
current_app.config["PROFILER_DIRECTORY_NAME"],
|
1275
|
-
folder_name,
|
1276
|
-
)
|
1171
|
+
kwargs = {
|
1172
|
+
"instance_id": request.args.get("instanceId"),
|
1173
|
+
"remote_connection": connection,
|
1174
|
+
}
|
1277
1175
|
|
1278
|
-
if
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1176
|
+
if profiler:
|
1177
|
+
remote_profiler_folder = RemoteReportFolder.model_validate(
|
1178
|
+
profiler,
|
1179
|
+
strict=False,
|
1282
1180
|
)
|
1181
|
+
kwargs["remote_profiler_folder"] = remote_profiler_folder
|
1182
|
+
kwargs["profiler_name"] = remote_profiler_folder.remotePath.split("/")[-1]
|
1283
1183
|
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1184
|
+
if performance:
|
1185
|
+
remote_performance_folder = RemoteReportFolder.model_validate(
|
1186
|
+
performance,
|
1187
|
+
strict=False,
|
1188
|
+
)
|
1189
|
+
kwargs["remote_performance_folder"] = remote_performance_folder
|
1190
|
+
kwargs["performance_name"] = remote_performance_folder.reportName
|
1290
1191
|
|
1291
|
-
update_instance(
|
1292
|
-
instance_id=instance_id,
|
1293
|
-
profiler_name=profiler_name,
|
1294
|
-
performance_name=performance_name,
|
1295
|
-
remote_connection=connection,
|
1296
|
-
remote_profiler_folder=folder,
|
1297
|
-
remote_performance_folder=remote_performance_folder,
|
1298
|
-
)
|
1192
|
+
update_instance(**kwargs)
|
1299
1193
|
|
1300
1194
|
return Response(status=HTTPStatus.OK)
|
1301
1195
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ttnn_visualizer
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.45.0
|
4
4
|
Summary: TT-NN Visualizer
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
@@ -137,6 +137,9 @@ Unzip the files into their own directories and select them with the local folder
|
|
137
137
|
**Llama mlp**
|
138
138
|
[memory + performance report](https://github.com/user-attachments/files/18770763/llama_attn_32l_10iter_30jan.zip)
|
139
139
|
|
140
|
+
**N300 llama**
|
141
|
+
[memory + performance report with NPE data + cluster description](https://github.com/user-attachments/files/21496609/n300.zip)
|
142
|
+
|
140
143
|
### NPE report
|
141
144
|
|
142
145
|
**T3K synthetic**
|
@@ -1,30 +1,31 @@
|
|
1
1
|
ttnn_visualizer/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
2
2
|
ttnn_visualizer/app.py,sha256=q5Tb_69HawKdiw2uKe6_cOmYfvU5as40DoREvLfb_38,7281
|
3
|
-
ttnn_visualizer/csv_queries.py,sha256=
|
3
|
+
ttnn_visualizer/csv_queries.py,sha256=lSqjDiZiCVhTkxgkixRJjxvvHLPzzm6Lx8jZ8x4BoIA,15086
|
4
4
|
ttnn_visualizer/decorators.py,sha256=O1QJwuQOHsFNL1H9qOdwe2zlc8r5DsboQOmE6LFwksw,5848
|
5
5
|
ttnn_visualizer/enums.py,sha256=SEIqp1tlc_zw2vQ8nHH9YTaV0m3Cb8fjn_goqz5wurE,203
|
6
|
-
ttnn_visualizer/exceptions.py,sha256=
|
6
|
+
ttnn_visualizer/exceptions.py,sha256=XwTIykJpdvZV8nqrd9JZdHIYL0EBFBhTbE9H09VZluA,2273
|
7
7
|
ttnn_visualizer/extensions.py,sha256=6OIRJ8-_ccfjOaXSruRXiS29jEbxp4Pyk-0JlD8IHBQ,379
|
8
8
|
ttnn_visualizer/file_uploads.py,sha256=05FzYjZZy1RHuGgFeJiAjtrpzYd6KcrZzpvIjBCUZss,5011
|
9
9
|
ttnn_visualizer/instances.py,sha256=XctQgQXdlwtuXWFXFletRoX1m1lGUZdiW3TwIIjY0uw,11564
|
10
|
-
ttnn_visualizer/models.py,sha256=
|
10
|
+
ttnn_visualizer/models.py,sha256=oxZVvWjtBDP0X6GqoYaH4wDa5PqJF_vG_I3Q_YWHMmo,7814
|
11
11
|
ttnn_visualizer/queries.py,sha256=3Nv0jXIDNVH-qKx9xc9zSINy4FdmDidu-1I6f-VYV48,9603
|
12
|
-
ttnn_visualizer/remote_sqlite_setup.py,sha256=
|
12
|
+
ttnn_visualizer/remote_sqlite_setup.py,sha256=VdJk5LfkaJo1XPC-yxy909I0AOgJF1GUjryj0Oe0O14,3498
|
13
13
|
ttnn_visualizer/serializers.py,sha256=LmjHIrFg8BLx1JKVFh9Nd_TcA7nyy1MwY2BOGnX1MKw,8029
|
14
14
|
ttnn_visualizer/settings.py,sha256=k2EEjbQNR8khbl5IrOetBPhbqgLlqXvuhm0E2z9ImCM,4607
|
15
|
-
ttnn_visualizer/sftp_operations.py,sha256=
|
15
|
+
ttnn_visualizer/sftp_operations.py,sha256=Mc8D-WKfajSinhA6F3jqy6E6tW2FL1sNH7RVGCSlpHw,29632
|
16
16
|
ttnn_visualizer/sockets.py,sha256=W5pK0QmlsU58EH_Qnra6HlcswLS7vsw5C_pk4avVYvs,3706
|
17
|
+
ttnn_visualizer/ssh_client.py,sha256=-GS2_1tdlUqVoLfRS02i3_o1fQaM39UQN-jtAnPBmzQ,13511
|
17
18
|
ttnn_visualizer/utils.py,sha256=MYCpvP9z8yoIVwI2Sa3iUahajZMLDxRmtRWrrUyB4_8,6223
|
18
|
-
ttnn_visualizer/views.py,sha256=
|
19
|
-
ttnn_visualizer/static/index.html,sha256=
|
20
|
-
ttnn_visualizer/static/assets/allPaths-
|
21
|
-
ttnn_visualizer/static/assets/allPathsLoader-
|
19
|
+
ttnn_visualizer/views.py,sha256=HdtRtm7EoRdL58J6tJpTHgM8LC-JJkoonCO7aOqcNQk,43054
|
20
|
+
ttnn_visualizer/static/index.html,sha256=tTKnHuJWJhA5pG8sACGjl4hJTl87pOsaXZ1MDvQnn1w,1135
|
21
|
+
ttnn_visualizer/static/assets/allPaths-CWDYwlGf.js,sha256=g0Behx7W6Z5P49-k_-43_TvHfOgvzmOe4CaiWyI20_c,309
|
22
|
+
ttnn_visualizer/static/assets/allPathsLoader-CWMmYjN2.js,sha256=2o6blt77N86TLZwHuIisULLNmUckXMxOKNnlJ1X1JNk,550
|
22
23
|
ttnn_visualizer/static/assets/index-B-fsa5Ru.js,sha256=IonL7d7ppdDr-_FRJZQPWI4HHFTiygYvZGVlUxHY9R8,294235
|
23
|
-
ttnn_visualizer/static/assets/index-
|
24
|
-
ttnn_visualizer/static/assets/index-BueCaPcI.css,sha256=v46sw7YX6b0H_-jtzUK5KpMblgKO4Ynf7EOIPykgkLc,623717
|
24
|
+
ttnn_visualizer/static/assets/index-BgTcwiDZ.js,sha256=yfb30Dh0iYwpbYN6jEz2QbbaK4TbhQuTPRPOSo7aGBs,7917501
|
25
25
|
ttnn_visualizer/static/assets/index-DLOviMB1.js,sha256=sI0W1vvwqvIwKP2_jglrwOhej3n5rJD72-d4ZhlUHqM,285612
|
26
|
+
ttnn_visualizer/static/assets/index-cjyfcubn.css,sha256=jbZ5SgDiTmPodb29OmS_UuGqa5hdJTf4cW83EzF2eoI,625289
|
26
27
|
ttnn_visualizer/static/assets/site-BTBrvHC5.webmanifest,sha256=Uy_XmnGuYFVf-OZuma2NvgEPdrCrevb3HZvaxSIHoA0,456
|
27
|
-
ttnn_visualizer/static/assets/splitPathsBySizeLoader-
|
28
|
+
ttnn_visualizer/static/assets/splitPathsBySizeLoader-BHSjwVae.js,sha256=ow1JJCYwd3kv48nBNna0b3h_EKUV8Ryeb_lqgpsppGU,472
|
28
29
|
ttnn_visualizer/static/favicon/android-chrome-192x192.png,sha256=BZWA09Zxaa3fXbaeS6nhWo2e-DUSjm9ElzNQ_xTB5XU,6220
|
29
30
|
ttnn_visualizer/static/favicon/android-chrome-512x512.png,sha256=HBiJSZyguB3o8fMJuqIGcpeBy_9JOdImme3wD02UYCw,62626
|
30
31
|
ttnn_visualizer/static/favicon/favicon-32x32.png,sha256=Zw201qUsczQv1UvoQvJf5smQ2ss10xaTeWxmQNYCGtY,480
|
@@ -33,10 +34,10 @@ ttnn_visualizer/static/sample-data/cluster-desc.yaml,sha256=LMxOmsRUXtVVU5ogzYkX
|
|
33
34
|
ttnn_visualizer/tests/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
|
34
35
|
ttnn_visualizer/tests/test_queries.py,sha256=HqaDXwudZpXiigJdHkdJP8oiUc-PtHASbpLnQQpbD7A,13792
|
35
36
|
ttnn_visualizer/tests/test_serializers.py,sha256=AF6m6tvewnZ_OSQMgMTUhsOI26GdJHPajvnRGIa9P4U,18492
|
36
|
-
ttnn_visualizer-0.
|
37
|
-
ttnn_visualizer-0.
|
38
|
-
ttnn_visualizer-0.
|
39
|
-
ttnn_visualizer-0.
|
40
|
-
ttnn_visualizer-0.
|
41
|
-
ttnn_visualizer-0.
|
42
|
-
ttnn_visualizer-0.
|
37
|
+
ttnn_visualizer-0.45.0.dist-info/licenses/LICENSE,sha256=-Y7CZK1-MxZZ7l0Rb414S0SZ9tdCby-bMGl_LmFFicM,14806
|
38
|
+
ttnn_visualizer-0.45.0.dist-info/licenses/LICENSE_understanding.txt,sha256=pymi-yb_RvYM9p2ZA4iSNsImcvhDBBxlGuJCY9dTq7M,233
|
39
|
+
ttnn_visualizer-0.45.0.dist-info/METADATA,sha256=0SX4ULCCTPtIEidXqbA6N_4rbI7SAzrMaqKBT17v6Ac,7700
|
40
|
+
ttnn_visualizer-0.45.0.dist-info/WHEEL,sha256=lTU6B6eIfYoiQJTZNc-fyaR6BpL6ehTzU3xGYxn2n8k,91
|
41
|
+
ttnn_visualizer-0.45.0.dist-info/entry_points.txt,sha256=QpuUpkmQ_mEHJTMqOBdU0MH2Z4WF_9iFsGACeyyAO1E,61
|
42
|
+
ttnn_visualizer-0.45.0.dist-info/top_level.txt,sha256=M1EGkvDOuIfbhDbcUdz2-TSdmCtDoQ2Uyag9k5JLDSY,16
|
43
|
+
ttnn_visualizer-0.45.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|