ttnn-visualizer 0.25.1__py3-none-any.whl → 0.27.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 +32 -5
- ttnn_visualizer/csv_queries.py +20 -4
- ttnn_visualizer/decorators.py +6 -6
- ttnn_visualizer/exceptions.py +7 -0
- ttnn_visualizer/file_uploads.py +7 -0
- ttnn_visualizer/models.py +21 -12
- ttnn_visualizer/queries.py +5 -5
- ttnn_visualizer/sessions.py +95 -40
- ttnn_visualizer/settings.py +1 -1
- ttnn_visualizer/sockets.py +17 -17
- ttnn_visualizer/static/assets/{allPaths-BsZhgQ3T.js → allPaths-DfvpbqXZ.js} +1 -1
- ttnn_visualizer/static/assets/{allPathsLoader-DgFQ6cmn.js → allPathsLoader-C1wkx2sM.js} +2 -2
- ttnn_visualizer/static/assets/{index-C6f3UdbP.css → index-BTfoVg9a.css} +2 -2
- ttnn_visualizer/static/assets/{index-Fd4wdmZt.js → index-CeYOVqR1.js} +247 -247
- ttnn_visualizer/static/assets/{splitPathsBySizeLoader-BFDp4kIf.js → splitPathsBySizeLoader-C_Kuh9CJ.js} +1 -1
- ttnn_visualizer/static/index.html +3 -3
- ttnn_visualizer/utils.py +6 -0
- ttnn_visualizer/views.py +73 -32
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/METADATA +6 -9
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/RECORD +25 -25
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/LICENSE +0 -0
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/LICENSE_understanding.txt +0 -0
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/WHEEL +0 -0
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/entry_points.txt +0 -0
- {ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.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-CeYOVqR1.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-BVMreIQm.js").then(t=>t.I),[])];case 1:return r=e.sent(),[3,4];case 2:return[4,i(()=>import("./index-Do7YB6C4.js").then(t=>t.I),[])];case 3:r=e.sent(),e.label=4;case 4:return[2,r[a]]}})})};export{p as splitPathsBySizeLoader};
|
@@ -6,7 +6,7 @@
|
|
6
6
|
name="viewport"
|
7
7
|
content="width=device-width, initial-scale=1.0"
|
8
8
|
/>
|
9
|
-
<title>
|
9
|
+
<title>TT-NN Visualizer</title>
|
10
10
|
|
11
11
|
<link
|
12
12
|
rel="icon"
|
@@ -27,8 +27,8 @@
|
|
27
27
|
name="theme-color"
|
28
28
|
content="#33333d"
|
29
29
|
/>
|
30
|
-
<script type="module" crossorigin src="/assets/index-
|
31
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
30
|
+
<script type="module" crossorigin src="/assets/index-CeYOVqR1.js"></script>
|
31
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BTfoVg9a.css">
|
32
32
|
</head>
|
33
33
|
<body>
|
34
34
|
<div id="root"></div>
|
ttnn_visualizer/utils.py
CHANGED
@@ -106,6 +106,12 @@ def get_report_path(active_report, current_app, remote_connection=None):
|
|
106
106
|
else:
|
107
107
|
return ""
|
108
108
|
|
109
|
+
def get_npe_path(npe_name, current_app):
|
110
|
+
local_dir = Path(current_app.config["LOCAL_DATA_DIRECTORY"])
|
111
|
+
|
112
|
+
npe_path = local_dir / "npe"
|
113
|
+
|
114
|
+
return str(npe_path)
|
109
115
|
|
110
116
|
def read_last_synced_file(directory: str) -> Optional[int]:
|
111
117
|
"""Reads the '.last-synced' file in the specified directory and returns the timestamp as an integer, or None if not found."""
|
ttnn_visualizer/views.py
CHANGED
@@ -21,6 +21,7 @@ from ttnn_visualizer.enums import ConnectionTestStates
|
|
21
21
|
from ttnn_visualizer.exceptions import RemoteConnectionException
|
22
22
|
from ttnn_visualizer.file_uploads import (
|
23
23
|
extract_report_name,
|
24
|
+
extract_npe_name,
|
24
25
|
save_uploaded_files,
|
25
26
|
validate_files,
|
26
27
|
)
|
@@ -28,7 +29,7 @@ from ttnn_visualizer.models import (
|
|
28
29
|
RemoteReportFolder,
|
29
30
|
RemoteConnection,
|
30
31
|
StatusMessage,
|
31
|
-
|
32
|
+
Instance,
|
32
33
|
)
|
33
34
|
from ttnn_visualizer.queries import DatabaseQueries
|
34
35
|
from ttnn_visualizer.remote_sqlite_setup import get_sqlite_path, check_sqlite_path
|
@@ -42,7 +43,7 @@ from ttnn_visualizer.serializers import (
|
|
42
43
|
serialize_devices,
|
43
44
|
)
|
44
45
|
from ttnn_visualizer.sessions import (
|
45
|
-
|
46
|
+
update_instance,
|
46
47
|
)
|
47
48
|
from ttnn_visualizer.sftp_operations import (
|
48
49
|
sync_remote_folders,
|
@@ -175,7 +176,7 @@ def operation_detail(operation_id, session):
|
|
175
176
|
)
|
176
177
|
@with_session
|
177
178
|
@timer
|
178
|
-
def operation_history(session:
|
179
|
+
def operation_history(session: Instance):
|
179
180
|
operation_history_filename = "operation_history.json"
|
180
181
|
if session.remote_connection and session.remote_connection.useRemoteQuerying:
|
181
182
|
if not session.remote_folder:
|
@@ -202,7 +203,7 @@ def operation_history(session: TabSession):
|
|
202
203
|
@api.route("/config")
|
203
204
|
@with_session
|
204
205
|
@timer
|
205
|
-
def get_config(session:
|
206
|
+
def get_config(session: Instance):
|
206
207
|
if session.remote_connection and session.remote_connection.useRemoteQuerying:
|
207
208
|
if not session.remote_folder:
|
208
209
|
return {}
|
@@ -224,7 +225,7 @@ def get_config(session: TabSession):
|
|
224
225
|
@api.route("/tensors", methods=["GET"])
|
225
226
|
@with_session
|
226
227
|
@timer
|
227
|
-
def tensors_list(session:
|
228
|
+
def tensors_list(session: Instance):
|
228
229
|
with DatabaseQueries(session) as db:
|
229
230
|
device_id = request.args.get("device_id", None)
|
230
231
|
tensors = list(db.query_tensors(filters={"device_id": device_id}))
|
@@ -239,7 +240,7 @@ def tensors_list(session: TabSession):
|
|
239
240
|
@api.route("/buffer", methods=["GET"])
|
240
241
|
@with_session
|
241
242
|
@timer
|
242
|
-
def buffer_detail(session:
|
243
|
+
def buffer_detail(session: Instance):
|
243
244
|
address = request.args.get("address")
|
244
245
|
operation_id = request.args.get("operation_id")
|
245
246
|
|
@@ -261,7 +262,7 @@ def buffer_detail(session: TabSession):
|
|
261
262
|
@api.route("/buffer-pages", methods=["GET"])
|
262
263
|
@with_session
|
263
264
|
@timer
|
264
|
-
def buffer_pages(session:
|
265
|
+
def buffer_pages(session: Instance):
|
265
266
|
address = request.args.get("address")
|
266
267
|
operation_id = request.args.get("operation_id")
|
267
268
|
buffer_type = request.args.get("buffer_type", "")
|
@@ -296,7 +297,7 @@ def buffer_pages(session: TabSession):
|
|
296
297
|
@api.route("/tensors/<tensor_id>", methods=["GET"])
|
297
298
|
@with_session
|
298
299
|
@timer
|
299
|
-
def tensor_detail(tensor_id, session:
|
300
|
+
def tensor_detail(tensor_id, session: Instance):
|
300
301
|
with DatabaseQueries(session) as db:
|
301
302
|
tensors = list(db.query_tensors(filters={"tensor_id": tensor_id}))
|
302
303
|
if not tensors:
|
@@ -307,7 +308,7 @@ def tensor_detail(tensor_id, session: TabSession):
|
|
307
308
|
|
308
309
|
@api.route("/operation-buffers", methods=["GET"])
|
309
310
|
@with_session
|
310
|
-
def get_operations_buffers(session:
|
311
|
+
def get_operations_buffers(session: Instance):
|
311
312
|
buffer_type = request.args.get("buffer_type", "")
|
312
313
|
device_id = request.args.get("device_id", None)
|
313
314
|
if buffer_type and str.isdigit(buffer_type):
|
@@ -327,7 +328,7 @@ def get_operations_buffers(session: TabSession):
|
|
327
328
|
|
328
329
|
@api.route("/operation-buffers/<operation_id>", methods=["GET"])
|
329
330
|
@with_session
|
330
|
-
def get_operation_buffers(operation_id, session:
|
331
|
+
def get_operation_buffers(operation_id, session: Instance):
|
331
332
|
buffer_type = request.args.get("buffer_type", "")
|
332
333
|
device_id = request.args.get("device_id", None)
|
333
334
|
if buffer_type and str.isdigit(buffer_type):
|
@@ -356,7 +357,7 @@ def get_operation_buffers(operation_id, session: TabSession):
|
|
356
357
|
|
357
358
|
@api.route("/profiler/device-log", methods=["GET"])
|
358
359
|
@with_session
|
359
|
-
def get_profiler_data(session:
|
360
|
+
def get_profiler_data(session: Instance):
|
360
361
|
if not session.profiler_path:
|
361
362
|
return Response(status=HTTPStatus.NOT_FOUND)
|
362
363
|
with DeviceLogProfilerQueries(session) as csv:
|
@@ -366,7 +367,7 @@ def get_profiler_data(session: TabSession):
|
|
366
367
|
|
367
368
|
@api.route("/profiler/perf-results", methods=["GET"])
|
368
369
|
@with_session
|
369
|
-
def get_profiler_performance_data(session:
|
370
|
+
def get_profiler_performance_data(session: Instance):
|
370
371
|
if not session.profiler_path:
|
371
372
|
return Response(status=HTTPStatus.NOT_FOUND)
|
372
373
|
with OpsPerformanceQueries(session) as csv:
|
@@ -377,7 +378,7 @@ def get_profiler_performance_data(session: TabSession):
|
|
377
378
|
|
378
379
|
@api.route("/profiler/perf-results/raw", methods=["GET"])
|
379
380
|
@with_session
|
380
|
-
def get_profiler_perf_results_data_raw(session:
|
381
|
+
def get_profiler_perf_results_data_raw(session: Instance):
|
381
382
|
if not session.profiler_path:
|
382
383
|
return Response(status=HTTPStatus.NOT_FOUND)
|
383
384
|
content = OpsPerformanceQueries.get_raw_csv(session)
|
@@ -390,7 +391,7 @@ def get_profiler_perf_results_data_raw(session: TabSession):
|
|
390
391
|
|
391
392
|
@api.route("/profiler/perf-results/report", methods=["GET"])
|
392
393
|
@with_session
|
393
|
-
def get_profiler_perf_results_report(session:
|
394
|
+
def get_profiler_perf_results_report(session: Instance):
|
394
395
|
if not session.profiler_path:
|
395
396
|
return Response(status=HTTPStatus.NOT_FOUND)
|
396
397
|
|
@@ -404,7 +405,7 @@ def get_profiler_perf_results_report(session: TabSession):
|
|
404
405
|
|
405
406
|
@api.route("/profiler/device-log/raw", methods=["GET"])
|
406
407
|
@with_session
|
407
|
-
def get_profiler_data_raw(session:
|
408
|
+
def get_profiler_data_raw(session: Instance):
|
408
409
|
if not session.profiler_path:
|
409
410
|
return Response(status=HTTPStatus.NOT_FOUND)
|
410
411
|
content = DeviceLogProfilerQueries.get_raw_csv(session)
|
@@ -417,7 +418,7 @@ def get_profiler_data_raw(session: TabSession):
|
|
417
418
|
|
418
419
|
@api.route("/profiler/device-log/zone/<zone>", methods=["GET"])
|
419
420
|
@with_session
|
420
|
-
def get_zone_statistics(zone, session:
|
421
|
+
def get_zone_statistics(zone, session: Instance):
|
421
422
|
if not session.profiler_path:
|
422
423
|
return Response(status=HTTPStatus.NOT_FOUND)
|
423
424
|
with DeviceLogProfilerQueries(session) as csv:
|
@@ -427,7 +428,7 @@ def get_zone_statistics(zone, session: TabSession):
|
|
427
428
|
|
428
429
|
@api.route("/devices", methods=["GET"])
|
429
430
|
@with_session
|
430
|
-
def get_devices(session:
|
431
|
+
def get_devices(session: Instance):
|
431
432
|
with DatabaseQueries(session) as db:
|
432
433
|
devices = list(db.query_devices())
|
433
434
|
return serialize_devices(devices)
|
@@ -449,19 +450,18 @@ def create_report_files():
|
|
449
450
|
|
450
451
|
save_uploaded_files(files, report_directory, report_name)
|
451
452
|
|
452
|
-
|
453
|
-
|
453
|
+
instance_id = request.args.get("instanceId")
|
454
|
+
update_instance(instance_id=instance_id, report_name=report_name, clear_remote=True)
|
454
455
|
|
455
456
|
return StatusMessage(
|
456
457
|
status=ConnectionTestStates.OK, message="Success."
|
457
458
|
).model_dump()
|
458
459
|
|
459
|
-
|
460
460
|
@api.route("/local/upload/profile", methods=["POST"])
|
461
461
|
def create_profile_files():
|
462
462
|
files = request.files.getlist("files")
|
463
463
|
report_directory = Path(current_app.config["LOCAL_DATA_DIRECTORY"])
|
464
|
-
|
464
|
+
instance_id = request.args.get("instanceId")
|
465
465
|
|
466
466
|
if not validate_files(
|
467
467
|
files,
|
@@ -498,8 +498,8 @@ def create_profile_files():
|
|
498
498
|
str(report_directory),
|
499
499
|
)
|
500
500
|
|
501
|
-
|
502
|
-
|
501
|
+
update_instance(
|
502
|
+
instance_id=instance_id, profile_name=profiler_folder_name, clear_remote=True
|
503
503
|
)
|
504
504
|
|
505
505
|
return StatusMessage(
|
@@ -507,6 +507,31 @@ def create_profile_files():
|
|
507
507
|
).model_dump()
|
508
508
|
|
509
509
|
|
510
|
+
@api.route("/local/upload/npe", methods=["POST"])
|
511
|
+
def create_npe_files():
|
512
|
+
files = request.files.getlist("files")
|
513
|
+
report_directory = current_app.config["LOCAL_DATA_DIRECTORY"]
|
514
|
+
|
515
|
+
for file in files:
|
516
|
+
if not file.filename.endswith(".json"):
|
517
|
+
return StatusMessage(
|
518
|
+
status=ConnectionTestStates.FAILED,
|
519
|
+
message="NPE requires a valid JSON file",
|
520
|
+
).model_dump()
|
521
|
+
|
522
|
+
npe_name = extract_npe_name(files)
|
523
|
+
target_directory = report_directory / "npe"
|
524
|
+
target_directory.mkdir(parents=True, exist_ok=True)
|
525
|
+
|
526
|
+
save_uploaded_files(files, target_directory, npe_name)
|
527
|
+
|
528
|
+
instance_id = request.args.get("instanceId")
|
529
|
+
update_instance(instance_id=instance_id, npe_name=npe_name, clear_remote=True)
|
530
|
+
|
531
|
+
return StatusMessage(
|
532
|
+
status=ConnectionTestStates.OK, message="Success"
|
533
|
+
).model_dump()
|
534
|
+
|
510
535
|
@api.route("/remote/folder", methods=["POST"])
|
511
536
|
def get_remote_folders():
|
512
537
|
connection = RemoteConnection.model_validate(request.json, strict=False)
|
@@ -570,7 +595,7 @@ import yaml
|
|
570
595
|
|
571
596
|
@api.route("/cluster_desc", methods=["GET"])
|
572
597
|
@with_session
|
573
|
-
def get_cluster_description_file(session:
|
598
|
+
def get_cluster_description_file(session: Instance):
|
574
599
|
if not session.remote_connection:
|
575
600
|
return jsonify({"error": "Remote connection not found"}), 404
|
576
601
|
|
@@ -670,7 +695,7 @@ def sync_remote_folder():
|
|
670
695
|
|
671
696
|
folder = request_body.get("folder")
|
672
697
|
profile = request_body.get("profile", None)
|
673
|
-
|
698
|
+
instance_id = request.args.get("instanceId", None)
|
674
699
|
connection = RemoteConnection.model_validate(
|
675
700
|
request_body.get("connection"), strict=False
|
676
701
|
)
|
@@ -683,7 +708,7 @@ def sync_remote_folder():
|
|
683
708
|
remote_dir,
|
684
709
|
profile=profile_folder,
|
685
710
|
exclude_patterns=[r"/tensors(/|$)"],
|
686
|
-
sid=
|
711
|
+
sid=instance_id,
|
687
712
|
)
|
688
713
|
|
689
714
|
profile_folder.lastSynced = int(time.time())
|
@@ -701,7 +726,7 @@ def sync_remote_folder():
|
|
701
726
|
remote_folder.remotePath,
|
702
727
|
remote_dir,
|
703
728
|
exclude_patterns=[r"/tensors(/|$)"],
|
704
|
-
sid=
|
729
|
+
sid=instance_id,
|
705
730
|
)
|
706
731
|
|
707
732
|
remote_folder.lastSynced = int(time.time())
|
@@ -767,11 +792,11 @@ def use_remote_folder():
|
|
767
792
|
|
768
793
|
remote_path = f"{Path(report_data_directory).name}/{connection.host}/{connection_directory.name}"
|
769
794
|
|
770
|
-
|
771
|
-
current_app.logger.info(f"Setting active report for {
|
795
|
+
instance_id = request.args.get("instanceId")
|
796
|
+
current_app.logger.info(f"Setting active report for {instance_id} - {remote_path}")
|
772
797
|
|
773
|
-
|
774
|
-
|
798
|
+
update_instance(
|
799
|
+
instance_id=instance_id,
|
775
800
|
report_name=report_folder,
|
776
801
|
profile_name=profile_name,
|
777
802
|
remote_connection=connection,
|
@@ -789,6 +814,22 @@ def health_check():
|
|
789
814
|
|
790
815
|
@api.route("/session", methods=["GET"])
|
791
816
|
@with_session
|
792
|
-
def
|
817
|
+
def get_instance(session: Instance):
|
793
818
|
# Used to gate UI functions if no report is active
|
794
819
|
return session.model_dump()
|
820
|
+
|
821
|
+
@api.route("/npe", methods=["GET"])
|
822
|
+
@with_session
|
823
|
+
@timer
|
824
|
+
def get_npe_data(session: Instance):
|
825
|
+
if not session.npe_path:
|
826
|
+
logger.error("NPE path is not set in the session.")
|
827
|
+
return Response(status=HTTPStatus.NOT_FOUND)
|
828
|
+
|
829
|
+
npe_file = Path(f"{session.npe_path}/{session.active_report.npe_name}.json")
|
830
|
+
if not npe_file.exists():
|
831
|
+
logger.error(f"NPE file does not exist: {npe_file}")
|
832
|
+
return Response(status=HTTPStatus.NOT_FOUND)
|
833
|
+
with open(npe_file, "r") as file:
|
834
|
+
npe_data = json.load(file)
|
835
|
+
return jsonify(npe_data)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ttnn_visualizer
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.27.0
|
4
4
|
Summary: TT Visualizer
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
@@ -57,10 +57,11 @@ TT-NN Visualizer can be installed from PyPI:
|
|
57
57
|
|
58
58
|
After installation run `ttnn-visualizer` to start the application.
|
59
59
|
|
60
|
-
It is recommended to do this within a virtual environment. The minimum Python version is 3.10
|
60
|
+
It is recommended to do this within a virtual environment. The minimum Python version is **3.10**.
|
61
61
|
|
62
|
-
Please see the [getting started](https://github.com/tenstorrent/ttnn-visualizer/blob/main/docs/getting-started.md) guide
|
63
|
-
|
62
|
+
Please see the [getting started](https://github.com/tenstorrent/ttnn-visualizer/blob/main/docs/getting-started.md) guide for further information on getting up and running with TT-NN Visualizer.
|
63
|
+
|
64
|
+
If you want to test out TT-NN Visualizer you can try some of the [sample data](https://github.com/tenstorrent/ttnn-visualizer/tree/main?tab=readme-ov-file#sample-reports). See [loading data](https://github.com/tenstorrent/ttnn-visualizer/blob/main/docs/getting-started.md#loading-data) for instructions on how to use this.
|
64
65
|
|
65
66
|
## Features
|
66
67
|
|
@@ -86,7 +87,7 @@ For the latest updates and features, please see [releases](https://github.com/te
|
|
86
87
|
|
87
88
|
https://github.com/user-attachments/assets/d00a2629-0bd1-4ee1-bb12-bd796d85221d
|
88
89
|
|
89
|
-
| L1 Summary with Tensor highlight | Operation inputs and
|
90
|
+
| L1 Summary with Tensor highlight | Operation inputs and outputs |
|
90
91
|
|-----------------------------------------------|------------------------------------------|
|
91
92
|
| <img width="400" alt="L1 Summary with Tensor highlight" src="https://github.com/user-attachments/assets/73c0aff8-16b2-4d1e-85a8-81c434012d36" /> | <img width="400" alt="Operation inputs and outputs" src="https://github.com/user-attachments/assets/e9480ad2-7e24-436b-932b-050c6b489516" /> |
|
92
93
|
|
@@ -114,10 +115,6 @@ https://github.com/user-attachments/assets/d00a2629-0bd1-4ee1-bb12-bd796d85221d
|
|
114
115
|
|-----------------------------------------------|------------------------------------------|
|
115
116
|
| <img width="400" alt="NPE" src="https://github.com/user-attachments/assets/1f4441c6-9d9e-4834-9e71-edec1955243c" /> | <img width="400" alt="NPE" src="https://github.com/user-attachments/assets/7159992e-7691-41cf-a152-8bc6a3606ade" /> |
|
116
117
|
|
117
|
-
## Remote Querying
|
118
|
-
|
119
|
-
Use [remote querying](https://github.com/tenstorrent/ttnn-visualizer/blob/main/docs/remote-querying.md) instead of syncing the report data to your local file system.
|
120
|
-
|
121
118
|
## Sample reports
|
122
119
|
|
123
120
|
You may test the application using the following sample reports.
|
@@ -1,34 +1,34 @@
|
|
1
1
|
ttnn_visualizer/__init__.py,sha256=qn9AwfHTxYYK0Icz-q2Q41Xo9ET6oc6anZzgh02PhK4,94
|
2
|
-
ttnn_visualizer/app.py,sha256=
|
3
|
-
ttnn_visualizer/csv_queries.py,sha256=
|
4
|
-
ttnn_visualizer/decorators.py,sha256=
|
2
|
+
ttnn_visualizer/app.py,sha256=vTcZ6DfTVXpTQCwHTlrQuIK1_WHhDpKGBSv69ZeVosY,6279
|
3
|
+
ttnn_visualizer/csv_queries.py,sha256=AqyyxTU4ZvbNiZNBWepsBWa8709z2H-J1DFEGaM7ywE,21451
|
4
|
+
ttnn_visualizer/decorators.py,sha256=zfvDqeUkzeFJq0RApByl1utdv2EAh-ij4YBqheBknsU,4252
|
5
5
|
ttnn_visualizer/enums.py,sha256=XTWZGvPFtKmIhPXGCbbzi6bxFgRpLrAZGrrR5YvGYjY,203
|
6
|
-
ttnn_visualizer/exceptions.py,sha256=
|
6
|
+
ttnn_visualizer/exceptions.py,sha256=tl3WvS_6mVCFixN_elFUeypV51trVuKVcM36D2svEbE,1055
|
7
7
|
ttnn_visualizer/extensions.py,sha256=jovwo_j9toJVuXDVq4iPpXJMRXPpzSliNpE1TOJMDHI,380
|
8
|
-
ttnn_visualizer/file_uploads.py,sha256=
|
9
|
-
ttnn_visualizer/models.py,sha256=
|
10
|
-
ttnn_visualizer/queries.py,sha256=
|
8
|
+
ttnn_visualizer/file_uploads.py,sha256=s7gKQVpc2j1qFKY_AOYr9yoISjjUer5FjvsZyQZ_1P0,2603
|
9
|
+
ttnn_visualizer/models.py,sha256=fsokoPLzjTLlaaG0gi5xzRWBhuCmvUOgeQFMpc1ocPc,7585
|
10
|
+
ttnn_visualizer/queries.py,sha256=oifyj_ROmQwUkQCFO1SteuphaoZbROcnizG1ix-1r3U,13616
|
11
11
|
ttnn_visualizer/remote_sqlite_setup.py,sha256=Zd7U7q_N92rD0P2qb1GIXuZjhV4LXqfq7Bhg0MTLS5k,3269
|
12
12
|
ttnn_visualizer/requirements.txt,sha256=LiycuPs-Oh8PZ1qM6v1KlUPQG86nQyQFz_x7dU8DSpA,370
|
13
13
|
ttnn_visualizer/serializers.py,sha256=smY3CgbqaAXsovoYZ-A9fgPXih5lUS2HD_3aIZMcFS4,7821
|
14
|
-
ttnn_visualizer/sessions.py,sha256=
|
15
|
-
ttnn_visualizer/settings.py,sha256=
|
14
|
+
ttnn_visualizer/sessions.py,sha256=saH4-ePXitXJzr1GvA_G-lrYxpx0Dk2gZ8DNoTlPgYU,8788
|
15
|
+
ttnn_visualizer/settings.py,sha256=kC0mBNrZDq1S7RPeRGnPcGZxGuM515A1upsWRrKl5k8,3841
|
16
16
|
ttnn_visualizer/sftp_operations.py,sha256=RrzCGo__2sQ2g4r90qlyFBEq4v6ooX2ntJ7VDKuynC0,17659
|
17
|
-
ttnn_visualizer/sockets.py,sha256=
|
17
|
+
ttnn_visualizer/sockets.py,sha256=o0oTG26LCjTJL8ajHR28ZBp9Z8RfWDehaS8Orns1HoQ,3624
|
18
18
|
ttnn_visualizer/ssh_client.py,sha256=KRLuIk6wxrZZQUQKfC8QWMhXGJQvfKKeyxLThgRX6ak,2679
|
19
|
-
ttnn_visualizer/utils.py,sha256=
|
20
|
-
ttnn_visualizer/views.py,sha256=
|
19
|
+
ttnn_visualizer/utils.py,sha256=zD8_B7Dd8sgOQF52LNQ5HrLxuvfZg-YnxLrZOpuA5Lw,6372
|
20
|
+
ttnn_visualizer/views.py,sha256=nYpWsXnBG6yQEoBYcQk-nrdDFUIsYiYoV8ibSw1h960,27986
|
21
21
|
ttnn_visualizer/bin/docker-entrypoint-web,sha256=uuv6aubpMCfOcuvDBxwBDITE8PN39teuwyJ2zA5KWuw,413
|
22
22
|
ttnn_visualizer/bin/pip3-install,sha256=nbSRT4GfJQIQ9KTNO3j-6b5WM4lrx9XA4GBlAURRMws,502
|
23
|
-
ttnn_visualizer/static/index.html,sha256=
|
24
|
-
ttnn_visualizer/static/assets/allPaths-
|
25
|
-
ttnn_visualizer/static/assets/allPathsLoader-
|
23
|
+
ttnn_visualizer/static/index.html,sha256=SxpwihJ2A01wnUwkg6ozH8duXxciJmmyDIs6csdoWXc,923
|
24
|
+
ttnn_visualizer/static/assets/allPaths-DfvpbqXZ.js,sha256=mlrmIupcMQ0flCfpqrtQ-3x8bBolyDmy7zOVvq725OY,309
|
25
|
+
ttnn_visualizer/static/assets/allPathsLoader-C1wkx2sM.js,sha256=sIypA5lMRhOnuhYis-PC_CHwOpTZNVmCWoVvaU2RXSk,550
|
26
|
+
ttnn_visualizer/static/assets/index-BTfoVg9a.css,sha256=3Ft7KsW9G6k2DYkHJvRwadGpYzSjTPVBAetC0r5xnVQ,615889
|
26
27
|
ttnn_visualizer/static/assets/index-BVMreIQm.js,sha256=QJTBb4VVCMoLPYsWdru3heJX1VtMJQYJGx-tq8gZNTw,280965
|
27
|
-
ttnn_visualizer/static/assets/index-
|
28
|
+
ttnn_visualizer/static/assets/index-CeYOVqR1.js,sha256=EE7mCKhj-f_gbmEJhlPpiNPNvnPrYtF4gEsFa8ZsDn0,6985407
|
28
29
|
ttnn_visualizer/static/assets/index-Do7YB6C4.js,sha256=10jCIy7zph8mPB2htGfhXJBV7LO2FFrGhfz7xoQyh00,289378
|
29
|
-
ttnn_visualizer/static/assets/index-Fd4wdmZt.js,sha256=U1QMm-Wr1f4zUePl7Q3ia6FK7EbZ0F1on0S4iwnPfUQ,6980268
|
30
30
|
ttnn_visualizer/static/assets/site-BTBrvHC5.webmanifest,sha256=Uy_XmnGuYFVf-OZuma2NvgEPdrCrevb3HZvaxSIHoA0,456
|
31
|
-
ttnn_visualizer/static/assets/splitPathsBySizeLoader-
|
31
|
+
ttnn_visualizer/static/assets/splitPathsBySizeLoader-C_Kuh9CJ.js,sha256=Ips02EyFWciDCreb3_HkMZ2F3SPgaLxPOzUw93Vsnmo,472
|
32
32
|
ttnn_visualizer/static/favicon/android-chrome-192x192.png,sha256=BZWA09Zxaa3fXbaeS6nhWo2e-DUSjm9ElzNQ_xTB5XU,6220
|
33
33
|
ttnn_visualizer/static/favicon/android-chrome-512x512.png,sha256=HBiJSZyguB3o8fMJuqIGcpeBy_9JOdImme3wD02UYCw,62626
|
34
34
|
ttnn_visualizer/static/favicon/favicon-32x32.png,sha256=Zw201qUsczQv1UvoQvJf5smQ2ss10xaTeWxmQNYCGtY,480
|
@@ -37,10 +37,10 @@ ttnn_visualizer/static/sample-data/cluster-desc.yaml,sha256=LMxOmsRUXtVVU5ogzYkX
|
|
37
37
|
ttnn_visualizer/tests/__init__.py,sha256=qn9AwfHTxYYK0Icz-q2Q41Xo9ET6oc6anZzgh02PhK4,94
|
38
38
|
ttnn_visualizer/tests/test_queries.py,sha256=OoINMZezyJkpiQuM1Owp4DlMoJGTl6OgsUbPa2Rxqc0,16546
|
39
39
|
ttnn_visualizer/tests/test_serializers.py,sha256=966AJkXLAwzsceSQ9QR-Sy7VrEbE71AtfMF3y9ZIIWc,18490
|
40
|
-
ttnn_visualizer-0.
|
41
|
-
ttnn_visualizer-0.
|
42
|
-
ttnn_visualizer-0.
|
43
|
-
ttnn_visualizer-0.
|
44
|
-
ttnn_visualizer-0.
|
45
|
-
ttnn_visualizer-0.
|
46
|
-
ttnn_visualizer-0.
|
40
|
+
ttnn_visualizer-0.27.0.dist-info/LICENSE,sha256=7_uV4foXIbLyroI1M6NdIySajtLuPwayZr1UN2ItErI,11353
|
41
|
+
ttnn_visualizer-0.27.0.dist-info/LICENSE_understanding.txt,sha256=pymi-yb_RvYM9p2ZA4iSNsImcvhDBBxlGuJCY9dTq7M,233
|
42
|
+
ttnn_visualizer-0.27.0.dist-info/METADATA,sha256=b9ogJbUbZDs1H_XkgLMq7oXboCq-4sVWNITxg6ryNY8,7297
|
43
|
+
ttnn_visualizer-0.27.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
44
|
+
ttnn_visualizer-0.27.0.dist-info/entry_points.txt,sha256=QpuUpkmQ_mEHJTMqOBdU0MH2Z4WF_9iFsGACeyyAO1E,61
|
45
|
+
ttnn_visualizer-0.27.0.dist-info/top_level.txt,sha256=M1EGkvDOuIfbhDbcUdz2-TSdmCtDoQ2Uyag9k5JLDSY,16
|
46
|
+
ttnn_visualizer-0.27.0.dist-info/RECORD,,
|
File without changes
|
{ttnn_visualizer-0.25.1.dist-info → ttnn_visualizer-0.27.0.dist-info}/LICENSE_understanding.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|