ttnn-visualizer 0.44.0__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.
@@ -1 +1 @@
1
- import{_ as o,a as _,b as i,p as c,I as u}from"./index-CemTxGZ4.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};
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-CemTxGZ4.js"></script>
38
- <link rel="stylesheet" crossorigin href="/static/assets/index-DdkKoj59.css">
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
- ssh_cmd = ["ssh", "-o", "PasswordAuthentication=no"]
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(status=HTTPStatus.NOT_FOUND)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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(ConnectionTestStates.FAILED.value, e.message)
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
- folder = request_body.get("folder")
1178
- profile = request_body.get("profile", None)
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 profile:
1185
- profile_folder = RemoteReportFolder.model_validate(profile, strict=False)
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
- profile=profile_folder,
1101
+ performance=performance_folder,
1191
1102
  exclude_patterns=[r"/tensors(/|$)"],
1192
1103
  sid=instance_id,
1193
1104
  )
1194
1105
 
1195
- profile_folder.lastSynced = int(time.time())
1106
+ performance_folder.lastSynced = int(time.time())
1196
1107
 
1197
- return profile_folder.model_dump()
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(folder, strict=False)
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
- folder = data.get("folder", None)
1251
- profile = data.get("profile", None)
1163
+ profiler = data.get("profiler", None)
1164
+ performance = data.get("performance", None)
1252
1165
 
1253
- if not connection or not folder:
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
- if profile:
1262
- remote_performance_folder = RemoteReportFolder.model_validate(
1263
- profile, strict=False
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 not connection_directory.exists():
1279
- return Response(
1280
- status=HTTPStatus.INTERNAL_SERVER_ERROR,
1281
- response=f"{connection_directory} does not exist.",
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
- remote_path = (
1285
- f"{Path(data_directory).name}/{connection.host}/{connection_directory.name}"
1286
- )
1287
-
1288
- instance_id = request.args.get("instanceId")
1289
- current_app.logger.info(f"Setting active reports for {instance_id} - {remote_path}")
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.44.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=5RacmSEsNcRx0ZpZQREMbfePfVEG5gcKu_tGo9YZz-c,16644
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=iXx1EmodousLr2y-PKpwYcxV_qJKVcvvjPMn4V-9M0w,2124
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=6Uf44DZv9SZLcPeuqPoiuggo9hy7VWSngG7ILlne4hM,7781
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=kGAUcUaDaB8wGSYdgJkkZ6te3ThnlVfSt1ooIQXxf_k,5959
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=Bq2wMP1bxFZ7otWEfG7hI35K1LKrFSpI0DlvR9F5xCo,32569
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=V3Lc4qP6oRHS9JiJUJ1EJec-R0Y_111yIxEkWTevhcU,47562
19
- ttnn_visualizer/static/index.html,sha256=626ituCiOpggYLOB96z8gyd6uku7C9I3p3onlbY6tZI,1135
20
- ttnn_visualizer/static/assets/allPaths-dhyS1SXV.js,sha256=xhoaJkgQjMA6RrCE2mvnGQ3HFl3faF-3HWWROknEhnc,309
21
- ttnn_visualizer/static/assets/allPathsLoader-B34lEBag.js,sha256=k1nEQ6GfttVArRC5kr7G0luOgbpjOttqt5Pqn9vOLxU,550
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-CemTxGZ4.js,sha256=c72Oe4I_d9hotYby_NUKcMj-zeb6DADOqz6Z7UByobo,7899971
24
+ ttnn_visualizer/static/assets/index-BgTcwiDZ.js,sha256=yfb30Dh0iYwpbYN6jEz2QbbaK4TbhQuTPRPOSo7aGBs,7917501
24
25
  ttnn_visualizer/static/assets/index-DLOviMB1.js,sha256=sI0W1vvwqvIwKP2_jglrwOhej3n5rJD72-d4ZhlUHqM,285612
25
- ttnn_visualizer/static/assets/index-DdkKoj59.css,sha256=XcIJGBlPABPpvR7OCEZ6jlSU3PYzm187H-eYOHAyZcY,624415
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-jLagNmfk.js,sha256=Jm0y_IGwrC-vGtwoZLWtIEFuBgzwzNnr_wM0QxyYiYM,472
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.44.0.dist-info/licenses/LICENSE,sha256=-Y7CZK1-MxZZ7l0Rb414S0SZ9tdCby-bMGl_LmFFicM,14806
37
- ttnn_visualizer-0.44.0.dist-info/licenses/LICENSE_understanding.txt,sha256=pymi-yb_RvYM9p2ZA4iSNsImcvhDBBxlGuJCY9dTq7M,233
38
- ttnn_visualizer-0.44.0.dist-info/METADATA,sha256=NLR0pXqaao9twuAnh7U2WpQPENdpByW6b4w1QMfXvx4,7557
39
- ttnn_visualizer-0.44.0.dist-info/WHEEL,sha256=lTU6B6eIfYoiQJTZNc-fyaR6BpL6ehTzU3xGYxn2n8k,91
40
- ttnn_visualizer-0.44.0.dist-info/entry_points.txt,sha256=QpuUpkmQ_mEHJTMqOBdU0MH2Z4WF_9iFsGACeyyAO1E,61
41
- ttnn_visualizer-0.44.0.dist-info/top_level.txt,sha256=M1EGkvDOuIfbhDbcUdz2-TSdmCtDoQ2Uyag9k5JLDSY,16
42
- ttnn_visualizer-0.44.0.dist-info/RECORD,,
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,,