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.
@@ -1 +1 @@
1
- import{p as r,I as s,_ as a}from"./index-BANm1CMY.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};
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-BANm1CMY.js"></script>
38
- <link rel="stylesheet" crossorigin href="/static/assets/index-BuHal8Ii.css">
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: Profiler path as a string.
176
+ :return: Performance path as a string.
56
177
  """
57
- local_dir = Path(current_app.config["LOCAL_DATA_DIRECTORY"])
58
- remote_dir = Path(current_app.config["REMOTE_DATA_DIRECTORY"])
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
- database_file_name = current_app.config["SQLITE_DB_PATH"]
81
- local_dir = current_app.config["LOCAL_DATA_DIRECTORY"]
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
- profiler_path = (
91
- base_dir / current_app.config["PROFILER_DIRECTORY_NAME"] / profiler_name
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
- return str(target_path)
96
- else:
97
- return ""
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
- # Doesn't handle remote at the moment
372
- # is_remote = True if instance.remote_connection else False
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
- # if is_remote:
378
- # connection = RemoteConnection.model_validate(instance.remote_connection, strict=False)
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
- path.mkdir(parents=True, exist_ok=True)
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 is_remote and not path.exists():
500
- path.mkdir(parents=True, exist_ok=True)
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
- if is_remote:
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ttnn_visualizer
3
- Version: 0.46.0
3
+ Version: 0.47.0
4
4
  Summary: TT-NN Visualizer
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -1,31 +1,31 @@
1
1
  ttnn_visualizer/__init__.py,sha256=FCQeTWnXsf-Wx-fay53-lQsm0y5-GcPMUmzhE5upDx0,93
2
- ttnn_visualizer/app.py,sha256=q5Tb_69HawKdiw2uKe6_cOmYfvU5as40DoREvLfb_38,7281
3
- ttnn_visualizer/csv_queries.py,sha256=lSqjDiZiCVhTkxgkixRJjxvvHLPzzm6Lx8jZ8x4BoIA,15086
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=05FzYjZZy1RHuGgFeJiAjtrpzYd6KcrZzpvIjBCUZss,5011
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=k2EEjbQNR8khbl5IrOetBPhbqgLlqXvuhm0E2z9ImCM,4607
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=MYCpvP9z8yoIVwI2Sa3iUahajZMLDxRmtRWrrUyB4_8,6223
19
- ttnn_visualizer/views.py,sha256=b1ayDuH7zTVr5Pi5KGkpLZMnUvX2pDjljFWDkumcCq0,43224
20
- ttnn_visualizer/static/index.html,sha256=RDJv0bYnRGaMh0KzFqsdaZd8OmO05JRyI-z2L1KSchE,1135
21
- ttnn_visualizer/static/assets/allPaths-esBqnTg5.js,sha256=pdwKU_Qg1xSwaKMha-qO5SOzutgGME6EvbxnWSe3PgI,255
22
- ttnn_visualizer/static/assets/allPathsLoader-KPOKJ-lr.js,sha256=f2t5H20m8LuOmh5qygz1a-sSLhHuLWXiGxTF9FargnM,477
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-BANm1CMY.js,sha256=uXWWiSs-Cs1MWW_pldHWmFOigc5b6WNH6lR_HC0pUGA,7880800
25
- ttnn_visualizer/static/assets/index-BuHal8Ii.css,sha256=YCXZxX68jwt682YZ5gMTPzmXN9r2NjHfItOsrCQqRXk,622571
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-DYuDhweD.js,sha256=MWFWsPb9LjIyB4wpVSbMlOp3pN0673afNlKBfTZg-Dg,281
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.46.0.dist-info/licenses/LICENSE,sha256=WBbTfgMRePWa_1qrAP1iLhxywPnoSIbTAipSk1eeN6U,15301
38
- ttnn_visualizer-0.46.0.dist-info/licenses/LICENSE_understanding.txt,sha256=pymi-yb_RvYM9p2ZA4iSNsImcvhDBBxlGuJCY9dTq7M,233
39
- ttnn_visualizer-0.46.0.dist-info/METADATA,sha256=T7YviW1Jmjd5ymxtEbIdAhDCEV_9feKk61HHFYBOzKc,7751
40
- ttnn_visualizer-0.46.0.dist-info/WHEEL,sha256=lTU6B6eIfYoiQJTZNc-fyaR6BpL6ehTzU3xGYxn2n8k,91
41
- ttnn_visualizer-0.46.0.dist-info/entry_points.txt,sha256=QpuUpkmQ_mEHJTMqOBdU0MH2Z4WF_9iFsGACeyyAO1E,61
42
- ttnn_visualizer-0.46.0.dist-info/top_level.txt,sha256=M1EGkvDOuIfbhDbcUdz2-TSdmCtDoQ2Uyag9k5JLDSY,16
43
- ttnn_visualizer-0.46.0.dist-info/RECORD,,
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 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/select Apache-2.0 https://github.com/palantir/blueprint/blob/develop/packages/select/LICENSE
84
- - @blueprintjs/table Apache-2.0 https://github.com/palantir/blueprint/blob/develop/packages/table/LICENSE
85
- - @eslint/eslintrc MIT https://github.com/eslint/eslintrc/blob/main/LICENSE
86
- - @eslint/js MIT https://github.com/eslint/eslint/blob/main/LICENSE
87
- - @eslint/rewrite Apache-2.0 https://github.com/eslint/rewrite/blob/main/LICENSE
88
- - @tanstack/react-virtual MIT https://github.com/TanStack/virtual/blob/main/LICENSE
89
- - @types/tinycolor2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/tinycolor2/LICENSE
90
- - axios MIT https://github.com/axios/axios/blob/v1.x/LICENSE
91
- - css-select BSD‑2-Clause https://github.com/fb55/css-select/blob/master/LICENSE
92
- - dom-serializer MIT https://github.com/cheeriojs/dom-serializer/blob/master/LICENSE
93
- - globals MIT https://github.com/sindresorhus/globals/blob/main/license
94
- - immutable MIT https://github.com/immutable-js/immutable-js/blob/master/LICENSE
95
- - jotai MIT https://github.com/pmndrs/jotai/blob/main/LICENSE
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
- - mini-svg-data-uri MIT https://github.com/tigt/mini-svg-data-uri/blob/master/LICENSE
98
- - normalize.css MIT https://github.com/necolas/normalize.css/blob/master/LICENSE.md
99
- - papaparse MIT https://github.com/mholt/PapaParse/blob/master/LICENSE
100
- - plotly.js MIT https://github.com/plotly/plotly.js/blob/master/LICENSE
101
- - react MIT https://github.com/facebook/react/blob/main/LICENSE
102
- - react-dom MIT https://github.com/facebook/react/blob/main/LICENSE
103
- - react-helmet-async MIT https://github.com/staylor/react-helmet-async/blob/main/LICENSE
104
- - react-plotly.js MIT https://github.com/plotly/react-plotly.js/blob/master/LICENSE
105
- - react-query MIT https://github.com/TanStack/query/blob/main/LICENSE
106
- - react-router MIT https://github.com/remix-run/react-router/blob/main/LICENSE
107
- - react-router-dom MIT https://github.com/remix-run/react-router/blob/main/LICENSE.md
108
- - react-toastify MIT https://github.com/fkhadra/react-toastify/blob/main/LICENSE
109
- - socket.io-client MIT https://www.npmjs.com/package/socket.io-client
110
- - tinycolor2 MIT https://github.com/bgrins/TinyColor/blob/master/LICENSE
111
- - vis-data – Dual-license Apache‑2.0 or MIT https://github.com/visjs/vis-data/blob/master/LICENSE-MIT and LICENSE-APACHE-2.0
112
- - vis-network – Dual-license Apache‑2.0 or MIT part of vis.js suite; see https://almende.github.io/vis/ (“Vis.js is dual licensed under both Apache-2.0 and MIT”)
113
-
114
- - Flask BSD‑3‑Clause https://github.com/pallets/flask/blob/main/LICENSE.txt
115
- - gunicorn MIT https://github.com/benoitc/gunicorn/blob/master/LICENSE
116
- - uvicorn BSD‑3‑Clause https://github.com/encode/uvicorn/blob/master/LICENSE.md
117
- - flask_cors MIT https://github.com/corydolphin/flask-cors/blob/main/LICENSE
118
- - pydantic MIT https://github.com/pydantic/pydantic-settings/blob/main/LICENSE
119
- - setuptools MIT https://github.com/pypa/setuptools/blob/main/LICENSE
120
- - python-dotenv BSD3‑Clause https://github.com/theskumar/python-dotenv/blob/main/LICENSE
121
- - flask-sqlalchemy BSD3‑Clause https://github.com/pallets-eco/flask-sqlalchemy/blob/main/LICENSE
122
- - flask-socketio MIT https://github.com/miguelgrinberg/Flask-SocketIO/blob/main/LICENSE
123
- - PyYAML MIT https://github.com/yaml/pyyaml/blob/main/LICENSE
124
- - gevent MIT https://github.com/gevent/gevent/blob/master/LICENSE
125
- - pandas – BSD‑3‑Clause – https://github.com/pandas-dev/pandas/blob/main/LICENSE
126
- - wheel MIT https://opensource.org/license/mit
127
- - build MIT https://opensource.org/license/mit
128
- - tt-perf-report MIT https://opensource.org/license/mit
129
- - zstd (python-zstandard) BSD‑3‑Clause https://github.com/indygreg/python-zstandard/blob/main/LICENSE
130
- - playwright Apache-2.0 https://github.com/microsoft/playwright-python/blob/main/LICENSE
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 Apache2.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 Apache2.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};