semantic-link-labs 0.7.2__py3-none-any.whl → 0.7.4__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.

Potentially problematic release.


This version of semantic-link-labs might be problematic. Click here for more details.

Files changed (82) hide show
  1. {semantic_link_labs-0.7.2.dist-info → semantic_link_labs-0.7.4.dist-info}/METADATA +15 -3
  2. semantic_link_labs-0.7.4.dist-info/RECORD +134 -0
  3. {semantic_link_labs-0.7.2.dist-info → semantic_link_labs-0.7.4.dist-info}/WHEEL +1 -1
  4. sempy_labs/__init__.py +120 -24
  5. sempy_labs/_bpa_translation/{_translations_am-ET.po → _model/_translations_am-ET.po} +22 -0
  6. sempy_labs/_bpa_translation/{_translations_ar-AE.po → _model/_translations_ar-AE.po} +24 -0
  7. sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +938 -0
  8. sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +934 -0
  9. sempy_labs/_bpa_translation/{_translations_cs-CZ.po → _model/_translations_cs-CZ.po} +179 -157
  10. sempy_labs/_bpa_translation/{_translations_da-DK.po → _model/_translations_da-DK.po} +24 -0
  11. sempy_labs/_bpa_translation/{_translations_de-DE.po → _model/_translations_de-DE.po} +77 -52
  12. sempy_labs/_bpa_translation/{_translations_el-GR.po → _model/_translations_el-GR.po} +25 -0
  13. sempy_labs/_bpa_translation/{_translations_es-ES.po → _model/_translations_es-ES.po} +67 -43
  14. sempy_labs/_bpa_translation/{_translations_fa-IR.po → _model/_translations_fa-IR.po} +24 -0
  15. sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +915 -0
  16. sempy_labs/_bpa_translation/{_translations_fr-FR.po → _model/_translations_fr-FR.po} +83 -57
  17. sempy_labs/_bpa_translation/{_translations_ga-IE.po → _model/_translations_ga-IE.po} +25 -0
  18. sempy_labs/_bpa_translation/{_translations_he-IL.po → _model/_translations_he-IL.po} +23 -0
  19. sempy_labs/_bpa_translation/{_translations_hi-IN.po → _model/_translations_hi-IN.po} +24 -0
  20. sempy_labs/_bpa_translation/{_translations_hu-HU.po → _model/_translations_hu-HU.po} +25 -0
  21. sempy_labs/_bpa_translation/_model/_translations_id-ID.po +918 -0
  22. sempy_labs/_bpa_translation/{_translations_is-IS.po → _model/_translations_is-IS.po} +25 -0
  23. sempy_labs/_bpa_translation/{_translations_it-IT.po → _model/_translations_it-IT.po} +25 -0
  24. sempy_labs/_bpa_translation/{_translations_ja-JP.po → _model/_translations_ja-JP.po} +21 -0
  25. sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +823 -0
  26. sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +937 -0
  27. sempy_labs/_bpa_translation/{_translations_nl-NL.po → _model/_translations_nl-NL.po} +80 -56
  28. sempy_labs/_bpa_translation/{_translations_pl-PL.po → _model/_translations_pl-PL.po} +101 -76
  29. sempy_labs/_bpa_translation/{_translations_pt-BR.po → _model/_translations_pt-BR.po} +25 -0
  30. sempy_labs/_bpa_translation/{_translations_pt-PT.po → _model/_translations_pt-PT.po} +25 -0
  31. sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +939 -0
  32. sempy_labs/_bpa_translation/{_translations_ru-RU.po → _model/_translations_ru-RU.po} +25 -0
  33. sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +925 -0
  34. sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +922 -0
  35. sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +914 -0
  36. sempy_labs/_bpa_translation/{_translations_ta-IN.po → _model/_translations_ta-IN.po} +26 -0
  37. sempy_labs/_bpa_translation/{_translations_te-IN.po → _model/_translations_te-IN.po} +24 -0
  38. sempy_labs/_bpa_translation/{_translations_th-TH.po → _model/_translations_th-TH.po} +24 -0
  39. sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +925 -0
  40. sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +933 -0
  41. sempy_labs/_bpa_translation/{_translations_zh-CN.po → _model/_translations_zh-CN.po} +116 -97
  42. sempy_labs/_bpa_translation/{_translations_zu-ZA.po → _model/_translations_zu-ZA.po} +25 -0
  43. sempy_labs/_capacities.py +541 -0
  44. sempy_labs/_clear_cache.py +298 -3
  45. sempy_labs/_connections.py +138 -0
  46. sempy_labs/_dataflows.py +130 -0
  47. sempy_labs/_deployment_pipelines.py +171 -0
  48. sempy_labs/_environments.py +156 -0
  49. sempy_labs/_generate_semantic_model.py +148 -27
  50. sempy_labs/_git.py +380 -0
  51. sempy_labs/_helper_functions.py +203 -8
  52. sempy_labs/_icons.py +43 -0
  53. sempy_labs/_list_functions.py +170 -1012
  54. sempy_labs/_model_bpa.py +90 -112
  55. sempy_labs/_model_bpa_bulk.py +3 -1
  56. sempy_labs/_model_bpa_rules.py +788 -800
  57. sempy_labs/_notebooks.py +143 -0
  58. sempy_labs/_query_scale_out.py +28 -7
  59. sempy_labs/_spark.py +465 -0
  60. sempy_labs/_sql.py +120 -0
  61. sempy_labs/_translations.py +3 -1
  62. sempy_labs/_vertipaq.py +160 -99
  63. sempy_labs/_workspace_identity.py +66 -0
  64. sempy_labs/_workspaces.py +294 -0
  65. sempy_labs/directlake/__init__.py +2 -0
  66. sempy_labs/directlake/_directlake_schema_compare.py +1 -2
  67. sempy_labs/directlake/_directlake_schema_sync.py +1 -2
  68. sempy_labs/directlake/_dl_helper.py +4 -7
  69. sempy_labs/directlake/_generate_shared_expression.py +85 -0
  70. sempy_labs/directlake/_show_unsupported_directlake_objects.py +1 -2
  71. sempy_labs/lakehouse/_get_lakehouse_tables.py +7 -3
  72. sempy_labs/migration/_migrate_calctables_to_lakehouse.py +5 -0
  73. sempy_labs/migration/_migrate_calctables_to_semantic_model.py +5 -0
  74. sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +6 -2
  75. sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +6 -5
  76. sempy_labs/migration/_migration_validation.py +6 -0
  77. sempy_labs/report/_report_functions.py +21 -42
  78. sempy_labs/report/_report_rebind.py +5 -0
  79. sempy_labs/tom/_model.py +95 -52
  80. semantic_link_labs-0.7.2.dist-info/RECORD +0 -111
  81. {semantic_link_labs-0.7.2.dist-info → semantic_link_labs-0.7.4.dist-info}/LICENSE +0 -0
  82. {semantic_link_labs-0.7.2.dist-info → semantic_link_labs-0.7.4.dist-info}/top_level.txt +0 -0
@@ -3,24 +3,21 @@ import pandas as pd
3
3
  import json
4
4
  import os
5
5
  import time
6
- import base64
7
6
  import copy
8
7
  from anytree import Node, RenderTree
9
8
  from powerbiclient import Report
10
- from synapse.ml.services import Translate
11
9
  from pyspark.sql.functions import col, flatten
12
- from pyspark.sql import SparkSession
13
10
  from sempy_labs.report._generate_report import update_report_from_reportjson
14
11
  from sempy_labs.lakehouse._lakehouse import lakehouse_attached
15
12
  from sempy_labs._helper_functions import (
16
13
  generate_embedded_filter,
17
- resolve_dataset_name,
18
14
  resolve_report_id,
19
15
  resolve_lakehouse_name,
20
16
  language_validate,
21
17
  resolve_workspace_name_and_id,
22
18
  lro,
23
19
  _decode_b64,
20
+ resolve_dataset_id,
24
21
  )
25
22
  from typing import List, Optional, Union
26
23
  from sempy._utils._log import log
@@ -405,6 +402,7 @@ def clone_report(
405
402
  workspace: Optional[str] = None,
406
403
  target_workspace: Optional[str] = None,
407
404
  target_dataset: Optional[str] = None,
405
+ target_dataset_workspace: Optional[str] = None,
408
406
  ):
409
407
  """
410
408
  Clones a Power BI report.
@@ -426,6 +424,9 @@ def clone_report(
426
424
  target_dataset : str, default=None
427
425
  The name of the semantic model to be used by the cloned report.
428
426
  Defaults to None which resolves to the semantic model used by the initial report.
427
+ target_dataset_workspace : str, default=None
428
+ The workspace in which the semantic model to be used by the report resides.
429
+ Defaults to None which resolves to the semantic model used by the initial report.
429
430
  """
430
431
 
431
432
  # https://learn.microsoft.com/rest/api/power-bi/reports/clone-report-in-group
@@ -446,48 +447,25 @@ def clone_report(
446
447
  target_workspace = workspace
447
448
  target_workspace_id = workspace_id
448
449
  else:
449
- dfW = fabric.list_workspaces()
450
- dfW_filt = dfW[dfW["Name"] == target_workspace]
451
-
452
- if len(dfW_filt) == 0:
453
- raise ValueError(
454
- f"{icons.red_dot} The '{workspace}' is not a valid workspace."
455
- )
450
+ target_workspace_id = fabric.resolve_workspace_id(target_workspace)
456
451
 
457
- target_workspace_id = dfW_filt["Id"].iloc[0]
452
+ if target_dataset is not None:
453
+ if target_dataset_workspace is None:
454
+ target_dataset_workspace = workspace
455
+ target_dataset_id = resolve_dataset_id(target_dataset, target_dataset_workspace)
458
456
 
459
- if target_dataset is None:
460
- dfR = fabric.list_reports(workspace=target_workspace)
461
- dfR_filt = dfR[dfR["Name"] == report]
462
- target_dataset_id = dfR_filt["Dataset Id"].iloc[0]
463
- target_dataset = resolve_dataset_name(
464
- dataset_id=target_dataset_id, workspace=target_workspace
457
+ if report == cloned_report and workspace == target_workspace:
458
+ raise ValueError(
459
+ f"{icons.warning} The 'report' and 'cloned_report' parameters have the same value of '{report}. The 'workspace' and 'target_workspace' have the same value of '{workspace}'. Either the 'cloned_report' or the 'target_workspace' must be different from the original report."
465
460
  )
466
- else:
467
- dfD = fabric.list_datasets(workspace=target_workspace)
468
- dfD_filt = dfD[dfD["Dataset Name"] == target_dataset]
469
-
470
- if len(dfD_filt) == 0:
471
- raise ValueError(
472
- f"{icons.red_dot} The '{target_dataset}' target dataset does not exist in the '{target_workspace}' workspace."
473
- )
474
-
475
- target_dataset_id = dfD_filt["Dataset Id"].iloc[0]
476
461
 
477
462
  client = fabric.PowerBIRestClient()
478
463
 
479
- if target_workspace is None and target_dataset is None:
480
- request_body = {"name": cloned_report}
481
- elif target_workspace is not None and target_dataset is None:
482
- request_body = {"name": cloned_report, "targetWorkspaceId": target_workspace_id}
483
- elif target_workspace is not None and target_dataset is not None:
484
- request_body = {
485
- "name": cloned_report,
486
- "targetModelId": target_dataset_id,
487
- "targetWorkspaceId": target_workspace_id,
488
- }
489
- elif target_workspace is None and target_dataset is not None:
490
- request_body = {"name": cloned_report, "targetModelId": target_dataset_id}
464
+ request_body = {"name": cloned_report}
465
+ if target_dataset is not None:
466
+ request_body["targetModelId"] = target_dataset_id
467
+ if target_workspace != workspace:
468
+ request_body["targetWorkspaceId"] = target_workspace_id
491
469
 
492
470
  response = client.post(
493
471
  f"/v1.0/myorg/groups/{workspace_id}/reports/{reportId}/Clone", json=request_body
@@ -496,8 +474,7 @@ def clone_report(
496
474
  if response.status_code != 200:
497
475
  raise FabricHTTPException(response)
498
476
  print(
499
- f"{icons.green_dot} The '{report}' report has been successfully cloned as the '{cloned_report}' report within the"
500
- f" '{target_workspace}' workspace using the '{target_dataset}' semantic model."
477
+ f"{icons.green_dot} The '{report}' report has been successfully cloned as the '{cloned_report}' report within the '{target_workspace}' workspace."
501
478
  )
502
479
 
503
480
 
@@ -756,6 +733,8 @@ def translate_report_titles(
756
733
  Defaults to None which resolves to the workspace of the attached lakehouse
757
734
  or if no lakehouse attached, resolves to the workspace of the notebook.
758
735
  """
736
+ from synapse.ml.services import Translate
737
+ from pyspark.sql import SparkSession
759
738
 
760
739
  if isinstance(languages, str):
761
740
  languages = [languages]
@@ -101,6 +101,11 @@ def report_rebind_all(
101
101
 
102
102
  from sempy_labs._list_functions import list_reports_using_semantic_model
103
103
 
104
+ if dataset == new_dataset:
105
+ raise ValueError(
106
+ f"{icons.red_dot} The 'dataset' and 'new_dataset' parameters are both set to '{dataset}'. These parameters must be set to different values."
107
+ )
108
+
104
109
  dataset_workspace = fabric.resolve_workspace_name(dataset_workspace)
105
110
 
106
111
  if new_dataset_workpace is None:
sempy_labs/tom/_model.py CHANGED
@@ -230,6 +230,7 @@ class TOMWrapper:
230
230
  description: Optional[str] = None,
231
231
  display_folder: Optional[str] = None,
232
232
  format_string_expression: Optional[str] = None,
233
+ source_lineage_tag: Optional[str] = None,
233
234
  ):
234
235
  """
235
236
  Adds a measure to the semantic model.
@@ -252,6 +253,8 @@ class TOMWrapper:
252
253
  The display folder in which the measure will reside.
253
254
  format_string_expression : str, default=None
254
255
  The format string expression.
256
+ source_lineage_tag : str, default=None
257
+ A tag that represents the lineage of the source for the object.
255
258
  """
256
259
  import Microsoft.AnalysisServices.Tabular as TOM
257
260
 
@@ -269,6 +272,8 @@ class TOMWrapper:
269
272
  fsd = TOM.FormatStringDefinition()
270
273
  fsd.Expression = format_string_expression
271
274
  obj.FormatStringDefinition = fsd
275
+ if source_lineage_tag is not None:
276
+ obj.SourceLineageTag = source_lineage_tag
272
277
 
273
278
  self.model.Tables[table_name].Measures.Add(obj)
274
279
 
@@ -285,6 +290,7 @@ class TOMWrapper:
285
290
  data_category: Optional[str] = None,
286
291
  key: Optional[bool] = False,
287
292
  summarize_by: Optional[str] = None,
293
+ source_lineage_tag: Optional[str] = None,
288
294
  ):
289
295
  """
290
296
  Adds a calculated table column to a calculated table within a semantic model.
@@ -314,6 +320,8 @@ class TOMWrapper:
314
320
  summarize_by : str, default=None
315
321
  Sets the value for the Summarize By property of the column.
316
322
  Defaults to None resolves to 'Default'.
323
+ source_lineage_tag : str, default=None
324
+ A tag that represents the lineage of the source for the object.
317
325
  """
318
326
  import Microsoft.AnalysisServices.Tabular as TOM
319
327
  import System
@@ -346,6 +354,8 @@ class TOMWrapper:
346
354
  obj.DisplayFolder = display_folder
347
355
  if data_category is not None:
348
356
  obj.DataCategory = data_category
357
+ if source_lineage_tag is not None:
358
+ obj.SourceLineageTag = source_lineage_tag
349
359
  self.model.Tables[table_name].Columns.Add(obj)
350
360
 
351
361
  def add_data_column(
@@ -361,6 +371,7 @@ class TOMWrapper:
361
371
  data_category: Optional[str] = None,
362
372
  key: Optional[bool] = False,
363
373
  summarize_by: Optional[str] = None,
374
+ source_lineage_tag: Optional[str] = None,
364
375
  ):
365
376
  """
366
377
  Adds a data column to a table within a semantic model.
@@ -390,6 +401,8 @@ class TOMWrapper:
390
401
  summarize_by : str, default=None
391
402
  Sets the value for the Summarize By property of the column.
392
403
  Defaults to None resolves to 'Default'.
404
+ source_lineage_tag : str, default=None
405
+ A tag that represents the lineage of the source for the object.
393
406
  """
394
407
  import Microsoft.AnalysisServices.Tabular as TOM
395
408
  import System
@@ -422,6 +435,8 @@ class TOMWrapper:
422
435
  obj.DisplayFolder = display_folder
423
436
  if data_category is not None:
424
437
  obj.DataCategory = data_category
438
+ if source_lineage_tag is not None:
439
+ obj.SourceLineageTag = source_lineage_tag
425
440
  self.model.Tables[table_name].Columns.Add(obj)
426
441
 
427
442
  def add_calculated_column(
@@ -437,6 +452,7 @@ class TOMWrapper:
437
452
  data_category: Optional[str] = None,
438
453
  key: Optional[bool] = False,
439
454
  summarize_by: Optional[str] = None,
455
+ source_lineage_tag: Optional[str] = None,
440
456
  ):
441
457
  """
442
458
  Adds a calculated column to a table within a semantic model.
@@ -466,6 +482,8 @@ class TOMWrapper:
466
482
  summarize_by : str, default=None
467
483
  Sets the value for the Summarize By property of the column.
468
484
  Defaults to None which resolves to 'Default'.
485
+ source_lineage_tag : str, default=None
486
+ A tag that represents the lineage of the source for the object.
469
487
  """
470
488
  import Microsoft.AnalysisServices.Tabular as TOM
471
489
  import System
@@ -498,6 +516,8 @@ class TOMWrapper:
498
516
  obj.DisplayFolder = display_folder
499
517
  if data_category is not None:
500
518
  obj.DataCategory = data_category
519
+ if source_lineage_tag is not None:
520
+ obj.SourceLineageTag = source_lineage_tag
501
521
  self.model.Tables[table_name].Columns.Add(obj)
502
522
 
503
523
  def add_calculation_item(
@@ -657,6 +677,7 @@ class TOMWrapper:
657
677
  levels: Optional[List[str]] = None,
658
678
  hierarchy_description: Optional[str] = None,
659
679
  hierarchy_hidden: Optional[bool] = False,
680
+ source_lineage_tag: Optional[str] = None,
660
681
  ):
661
682
  """
662
683
  Adds a `hierarchy <https://learn.microsoft.com/dotnet/api/microsoft.analysisservices.hierarchy?view=analysisservices-dotnet>`_ to a table within a semantic model.
@@ -675,6 +696,8 @@ class TOMWrapper:
675
696
  A description of the hierarchy.
676
697
  hierarchy_hidden : bool, default=False
677
698
  Whether the hierarchy is visible or hidden.
699
+ source_lineage_tag : str, default=None
700
+ A tag that represents the lineage of the source for the object.
678
701
  """
679
702
  import Microsoft.AnalysisServices.Tabular as TOM
680
703
 
@@ -701,6 +724,8 @@ class TOMWrapper:
701
724
  obj.IsHidden = hierarchy_hidden
702
725
  if hierarchy_description is not None:
703
726
  obj.Description = hierarchy_description
727
+ if source_lineage_tag is not None:
728
+ obj.SourceLineageTag = source_lineage_tag
704
729
  self.model.Tables[table_name].Hierarchies.Add(obj)
705
730
 
706
731
  for col in columns:
@@ -846,7 +871,11 @@ class TOMWrapper:
846
871
  self.model.Tables.Add(tbl)
847
872
 
848
873
  def add_expression(
849
- self, name: str, expression: str, description: Optional[str] = None
874
+ self,
875
+ name: str,
876
+ expression: str,
877
+ description: Optional[str] = None,
878
+ source_lineage_tag: Optional[str] = None,
850
879
  ):
851
880
  """
852
881
  Adds an `expression <https://learn.microsoft.com/dotnet/api/microsoft.analysisservices.tabular.namedexpression?view=analysisservices-dotnet>`_ to a semantic model.
@@ -859,6 +888,8 @@ class TOMWrapper:
859
888
  The M expression of the expression.
860
889
  description : str, default=None
861
890
  A description of the expression.
891
+ source_lineage_tag : str, default=None
892
+ A tag that represents the lineage of the source for the object.
862
893
  """
863
894
  import Microsoft.AnalysisServices.Tabular as TOM
864
895
 
@@ -866,6 +897,8 @@ class TOMWrapper:
866
897
  exp.Name = name
867
898
  if description is not None:
868
899
  exp.Description = description
900
+ if source_lineage_tag is not None:
901
+ exp.SourceLineageTag = source_lineage_tag
869
902
  exp.Kind = TOM.ExpressionKind.M
870
903
  exp.Expression = expression
871
904
 
@@ -2495,6 +2528,7 @@ class TOMWrapper:
2495
2528
  description: Optional[str] = None,
2496
2529
  data_category: Optional[str] = None,
2497
2530
  hidden: Optional[bool] = False,
2531
+ source_lineage_tag: Optional[str] = None,
2498
2532
  ):
2499
2533
  """
2500
2534
  Adds a table to the semantic model.
@@ -2509,6 +2543,8 @@ class TOMWrapper:
2509
2543
  The data category for the table.
2510
2544
  hidden : bool, default=False
2511
2545
  Whether the table is hidden or visible.
2546
+ source_lineage_tag : str, default=None
2547
+ A tag that represents the lineage of the source for the object.
2512
2548
  """
2513
2549
  import Microsoft.AnalysisServices.Tabular as TOM
2514
2550
 
@@ -2518,6 +2554,8 @@ class TOMWrapper:
2518
2554
  t.Description = description
2519
2555
  if data_category is not None:
2520
2556
  t.DataCategory = data_category
2557
+ if source_lineage_tag is not None:
2558
+ t.SourceLineageTag = source_lineage_tag
2521
2559
  t.Hidden = hidden
2522
2560
  self.model.Tables.Add(t)
2523
2561
 
@@ -2707,27 +2745,17 @@ class TOMWrapper:
2707
2745
  Saves Vertipaq Analyzer statistics as annotations on objects in the semantic model.
2708
2746
  """
2709
2747
 
2710
- dfT = fabric.list_tables(
2748
+ from sempy_labs._list_functions import list_tables
2749
+
2750
+ dfT = list_tables(
2711
2751
  dataset=self._dataset, workspace=self._workspace, extended=True
2712
2752
  )
2713
2753
  dfC = fabric.list_columns(
2714
2754
  dataset=self._dataset, workspace=self._workspace, extended=True
2715
2755
  )
2716
- # intList = ['Total Size']#, 'Data Size', 'Dictionary Size', 'Hierarchy Size']
2717
- dfCSum = dfC.groupby(["Table Name"])["Total Size"].sum().reset_index()
2718
- dfTable = pd.merge(
2719
- dfT[["Name", "Type", "Row Count"]],
2720
- dfCSum[["Table Name", "Total Size"]],
2721
- left_on="Name",
2722
- right_on="Table Name",
2723
- how="inner",
2724
- )
2725
2756
  dfP = fabric.list_partitions(
2726
2757
  dataset=self._dataset, workspace=self._workspace, extended=True
2727
2758
  )
2728
- dfP["Records per Segment"] = round(
2729
- dfP["Record Count"] / dfP["Segment Count"], 2
2730
- )
2731
2759
  dfH = fabric.list_hierarchies(
2732
2760
  dataset=self._dataset, workspace=self._workspace, extended=True
2733
2761
  )
@@ -2736,58 +2764,73 @@ class TOMWrapper:
2736
2764
  )
2737
2765
 
2738
2766
  for t in self.model.Tables:
2739
- dfT_filt = dfTable[dfTable["Name"] == t.Name]
2740
- rowCount = str(dfT_filt["Row Count"].iloc[0])
2741
- totalSize = str(dfT_filt["Total Size"].iloc[0])
2742
- self.set_annotation(object=t, name="Vertipaq_RowCount", value=rowCount)
2743
- self.set_annotation(object=t, name="Vertipaq_TableSize", value=totalSize)
2767
+ dfT_filt = dfT[dfT["Name"] == t.Name]
2768
+ if len(dfT_filt) > 0:
2769
+ row = dfT_filt.iloc[0]
2770
+ rowCount = str(row["Row Count"])
2771
+ totalSize = str(row["Total Size"])
2772
+ self.set_annotation(object=t, name="Vertipaq_RowCount", value=rowCount)
2773
+ self.set_annotation(
2774
+ object=t, name="Vertipaq_TableSize", value=totalSize
2775
+ )
2744
2776
  for c in t.Columns:
2745
2777
  dfC_filt = dfC[
2746
2778
  (dfC["Table Name"] == t.Name) & (dfC["Column Name"] == c.Name)
2747
2779
  ]
2748
- totalSize = str(dfC_filt["Total Size"].iloc[0])
2749
- dataSize = str(dfC_filt["Data Size"].iloc[0])
2750
- dictSize = str(dfC_filt["Dictionary Size"].iloc[0])
2751
- hierSize = str(dfC_filt["Hierarchy Size"].iloc[0])
2752
- card = str(dfC_filt["Column Cardinality"].iloc[0])
2753
- self.set_annotation(
2754
- object=c, name="Vertipaq_TotalSize", value=totalSize
2755
- )
2756
- self.set_annotation(object=c, name="Vertipaq_DataSize", value=dataSize)
2757
- self.set_annotation(
2758
- object=c, name="Vertipaq_DictionarySize", value=dictSize
2759
- )
2760
- self.set_annotation(
2761
- object=c, name="Vertipaq_HierarchySize", value=hierSize
2762
- )
2763
- self.set_annotation(object=c, name="Vertipaq_Cardinality", value=card)
2780
+ if len(dfC_filt) > 0:
2781
+ row = dfC_filt.iloc[0]
2782
+ totalSize = str(row["Total Size"])
2783
+ dataSize = str(row["Data Size"])
2784
+ dictSize = str(row["Dictionary Size"])
2785
+ hierSize = str(row["Hierarchy Size"])
2786
+ card = str(row["Column Cardinality"])
2787
+ self.set_annotation(
2788
+ object=c, name="Vertipaq_TotalSize", value=totalSize
2789
+ )
2790
+ self.set_annotation(
2791
+ object=c, name="Vertipaq_DataSize", value=dataSize
2792
+ )
2793
+ self.set_annotation(
2794
+ object=c, name="Vertipaq_DictionarySize", value=dictSize
2795
+ )
2796
+ self.set_annotation(
2797
+ object=c, name="Vertipaq_HierarchySize", value=hierSize
2798
+ )
2799
+ self.set_annotation(
2800
+ object=c, name="Vertipaq_Cardinality", value=card
2801
+ )
2764
2802
  for p in t.Partitions:
2765
2803
  dfP_filt = dfP[
2766
2804
  (dfP["Table Name"] == t.Name) & (dfP["Partition Name"] == p.Name)
2767
2805
  ]
2768
- recordCount = str(dfP_filt["Record Count"].iloc[0])
2769
- segmentCount = str(dfP_filt["Segment Count"].iloc[0])
2770
- rpS = str(dfP_filt["Records per Segment"].iloc[0])
2771
- self.set_annotation(
2772
- object=p, name="Vertipaq_RecordCount", value=recordCount
2773
- )
2774
- self.set_annotation(
2775
- object=p, name="Vertipaq_SegmentCount", value=segmentCount
2776
- )
2777
- self.set_annotation(
2778
- object=p, name="Vertipaq_RecordsPerSegment", value=rpS
2779
- )
2806
+ if len(dfP_filt) > 0:
2807
+ row = dfP_filt.iloc[0]
2808
+ recordCount = str(row["Record Count"])
2809
+ segmentCount = str(row["Segment Count"])
2810
+ rpS = str(row["Records per Segment"])
2811
+ self.set_annotation(
2812
+ object=p, name="Vertipaq_RecordCount", value=recordCount
2813
+ )
2814
+ self.set_annotation(
2815
+ object=p, name="Vertipaq_SegmentCount", value=segmentCount
2816
+ )
2817
+ self.set_annotation(
2818
+ object=p, name="Vertipaq_RecordsPerSegment", value=rpS
2819
+ )
2780
2820
  for h in t.Hierarchies:
2781
2821
  dfH_filt = dfH[
2782
2822
  (dfH["Table Name"] == t.Name) & (dfH["Hierarchy Name"] == h.Name)
2783
2823
  ]
2784
- usedSize = str(dfH_filt["Used Size"].iloc[0])
2785
- self.set_annotation(object=h, name="Vertipaq_UsedSize", value=usedSize)
2824
+ if len(dfH_filt) > 0:
2825
+ usedSize = str(dfH_filt["Used Size"].iloc[0])
2826
+ self.set_annotation(
2827
+ object=h, name="Vertipaq_UsedSize", value=usedSize
2828
+ )
2786
2829
  for r in self.model.Relationships:
2787
2830
  dfR_filt = dfR[dfR["Relationship Name"] == r.Name]
2788
- relSize = str(dfR_filt["Used Size"].iloc[0])
2789
- self.set_annotation(object=r, name="Vertipaq_UsedSize", value=relSize)
2790
-
2831
+ if len(dfR_filt) > 0:
2832
+ relSize = str(dfR_filt["Used Size"].iloc[0])
2833
+ self.set_annotation(object=r, name="Vertipaq_UsedSize", value=relSize)
2791
2834
  try:
2792
2835
  runId = self.get_annotation_value(object=self.model, name="Vertipaq_Run")
2793
2836
  runId = str(int(runId) + 1)
@@ -1,111 +0,0 @@
1
- sempy_labs/__init__.py,sha256=RHVPI2-N-m4tiNOEqMHwWmHoXtTec9-hr3ls-8MGeQ0,5675
2
- sempy_labs/_ai.py,sha256=CjlFebT35Rzbw90BmsDy7PjLiAZMZ-B7wZ_EoI444bw,16271
3
- sempy_labs/_clear_cache.py,sha256=NckXmtDCgRqlNL5FvLTut2XWLI0Hft3O4sAaXS1tPfo,1743
4
- sempy_labs/_connections.py,sha256=w1dFC4WeTNFmLGD2EL_Syk0Wb1Eij18we2FVn_VaCD8,7641
5
- sempy_labs/_dax.py,sha256=dt1GgHceyM7f6phRBPxRKnmQy_KYKpcgFQHuOjGbpLo,2029
6
- sempy_labs/_generate_semantic_model.py,sha256=igKsVX-5Nqpipjg0taLFro8OsD3ogwSwKsyVAmuRwG4,8647
7
- sempy_labs/_helper_functions.py,sha256=DFfThu8nIvRTGACP8gCJ4tObyzsCrd4Ox9Tk3CmIwyk,24909
8
- sempy_labs/_icons.py,sha256=UK7chr_tEkZd4Y7Es_KyTc4dFgtYS4f31ggWxyqC9uY,853
9
- sempy_labs/_list_functions.py,sha256=MKw5JLHnRVRiOwzsvUmyesyOWUpatcPB8WHg1QXS83w,92070
10
- sempy_labs/_model_auto_build.py,sha256=fX3bCLFCOMQHuheKIoB48fUABG7XAT7qqsMbUiWSrY0,5071
11
- sempy_labs/_model_bpa.py,sha256=U9rHoGzuAmV1dtJvgSVk3BiUwDp6WTFt1l0CbkmKcdE,20439
12
- sempy_labs/_model_bpa_bulk.py,sha256=b0Y6XbzKQawExSW6yEpwgBlptFe7Y7rFtY3mombBun4,15023
13
- sempy_labs/_model_bpa_rules.py,sha256=jujUiwUbIJW16UR3tUgxmj21PdSUxjzfiEFEEf-w40Q,48095
14
- sempy_labs/_model_dependencies.py,sha256=nZdqq2iMhZejnS_LCd2rpK6r1B7jWpa3URkxobRPifY,12986
15
- sempy_labs/_one_lake_integration.py,sha256=eIuLxlw8eXfUH2avKhsyLmXZbTllSwGsz2j_HMAikpQ,6234
16
- sempy_labs/_query_scale_out.py,sha256=tF4xxWr2WhD7SsIYZelH7iL2C8mn4cJhHq1j2cOamSk,14407
17
- sempy_labs/_refresh_semantic_model.py,sha256=2qzP9KqmwA20RuL1o6Lt9bIjC-KtdX8ZgcTvJParg-w,7157
18
- sempy_labs/_translations.py,sha256=BcrVIrBNSKtbFz4Y9t1Dh1SZCu0K4NHu7n01Z6O76IY,19665
19
- sempy_labs/_vertipaq.py,sha256=zMKtcCQ2gpgoDLisTbTjFNe60Cg2PlAQ6HvkSlbpKPo,33660
20
- sempy_labs/_bpa_translation/_translations_am-ET.po,sha256=XW0Djm-jlLZRXEnhZvk8r1aWd2I36mr97XxFt9yZ-N0,36831
21
- sempy_labs/_bpa_translation/_translations_ar-AE.po,sha256=mPQR83IulMmT2qSXTSOXWahjwqy7dg3AjtFmAxbraOI,34753
22
- sempy_labs/_bpa_translation/_translations_cs-CZ.po,sha256=D3WiV3LVbAQzy9hjszOEA2GtOsrtUjBYJfF_7a0N0jU,29695
23
- sempy_labs/_bpa_translation/_translations_da-DK.po,sha256=f-6mncit2OkEJR73_kZTu8CfEXvpEZMrKcPSVGGZMVU,28680
24
- sempy_labs/_bpa_translation/_translations_de-DE.po,sha256=SEoAyp72awJlboDMRKaZEu-BhOGlRTLCne1P3H7IT6M,30917
25
- sempy_labs/_bpa_translation/_translations_el-GR.po,sha256=BDlrTp3MvI_NzHG67QVxdwK3LG1NUdrLJiqvn8Yj0Dk,43355
26
- sempy_labs/_bpa_translation/_translations_es-ES.po,sha256=JlxqiFF7HYEBhmgqddy5HmvJb6o9OjQLpaZqehgh69U,30023
27
- sempy_labs/_bpa_translation/_translations_fa-IR.po,sha256=kWXO5Oe1_YJ_HK231Co14EaSJS3zuiHUp97_Zt9FDOw,36620
28
- sempy_labs/_bpa_translation/_translations_fr-FR.po,sha256=lwAPshENCPwZzbwgQk_WNc1UDkXvTOk9jkbEK6wL2bs,31551
29
- sempy_labs/_bpa_translation/_translations_ga-IE.po,sha256=W_ed6zTDa7BpnOI9QtDS3NmmGaRgKwUiKow89JRrxGY,30786
30
- sempy_labs/_bpa_translation/_translations_he-IL.po,sha256=amaKGtkie9qDWIxT-Jz_EnDP5VveMRt9oVBNENBMLwU,33492
31
- sempy_labs/_bpa_translation/_translations_hi-IN.po,sha256=skaR59KMw__cgO7e77ejIW7_ZG2ztuyeb-J-Q3v6pzs,49292
32
- sempy_labs/_bpa_translation/_translations_hu-HU.po,sha256=vTEkRCJ0Dqy1kJzzKkvGU0y4Sf0HP9hulluK1NE-f9U,30973
33
- sempy_labs/_bpa_translation/_translations_is-IS.po,sha256=2565DYm_VfM6sXju4YwA7oOb9_JIXYkskSZVTyFj1VI,28992
34
- sempy_labs/_bpa_translation/_translations_it-IT.po,sha256=7SBempvRLlLWvd2WVb1927ph9RdqqrpbJLi4wsVafl4,30700
35
- sempy_labs/_bpa_translation/_translations_ja-JP.po,sha256=XJRbXywLBrlUubDACCWTDr37bcfluUdDVzOmI6DVZA8,33218
36
- sempy_labs/_bpa_translation/_translations_nl-NL.po,sha256=9tqJh81FHndDSa8ZR3kkQnWVvyEM4-s_WsCB3EOYN2M,30242
37
- sempy_labs/_bpa_translation/_translations_pl-PL.po,sha256=YQxixTn1AVT-ds20CJMpQweoO4qiHh6JxVuLIVarNh4,30393
38
- sempy_labs/_bpa_translation/_translations_pt-BR.po,sha256=o_fKzTd1AWAvZIM_Na0BC_DTkVQwoG0pcIwclwIEUBc,29644
39
- sempy_labs/_bpa_translation/_translations_pt-PT.po,sha256=CtAHtWmxCZ_nK2GS_9Y5y-DQVPqq0BfRKX8hj52m-VY,29583
40
- sempy_labs/_bpa_translation/_translations_ru-RU.po,sha256=pesyfVvCut22mCRxOSbpziy2T-4KCoAJXPoIjdXrhTc,41374
41
- sempy_labs/_bpa_translation/_translations_ta-IN.po,sha256=8xcyOLO3SVWXTxuwouLquINnA_QtgOH1kwhPLyraxPQ,56195
42
- sempy_labs/_bpa_translation/_translations_te-IN.po,sha256=j7Zk29lTWZmJoN8MPz1iEzv7rU9X7zcbIp-Ui_X4Q5Y,51377
43
- sempy_labs/_bpa_translation/_translations_th-TH.po,sha256=oleGJikyzARW36mq8hgwHqJKVZ5zkPPUgJVc1G_8BCc,47689
44
- sempy_labs/_bpa_translation/_translations_zh-CN.po,sha256=OVrLt1-mCGjeha-o3d7Nt5hq0H9nDq4fUHtZayp1oMw,25548
45
- sempy_labs/_bpa_translation/_translations_zu-ZA.po,sha256=ZpZTmhkRg7U7esS6ZxVxEgGldB0JhpfdhLE7daJyGSM,29609
46
- sempy_labs/directlake/__init__.py,sha256=R2AGiGFSQzHNMdeWHcr_bJT6tNPYWvKgCgi6s_vY_nc,1924
47
- sempy_labs/directlake/_directlake_schema_compare.py,sha256=lsuDsPG4xVNNrT2yhJmSuILyeMiuBxRKqdnmudcLA-c,4448
48
- sempy_labs/directlake/_directlake_schema_sync.py,sha256=NqciV_O0K7aJ8EbWxQVZIv2dbRuRDRONH5ttgmHr1cw,4380
49
- sempy_labs/directlake/_dl_helper.py,sha256=2Y6SVVCaE9uh1qv7lawYOdnOJ4gomAm0EEDXaXKIALU,8760
50
- sempy_labs/directlake/_get_directlake_lakehouse.py,sha256=sovI4ds2SEgkp4Fi465jtJ4seRvQxdYgcixRDvsUwNM,2321
51
- sempy_labs/directlake/_get_shared_expression.py,sha256=Xl2_GYqRll95cN7JjwLlULbcRXM71Ij9JkrYAp7cNJM,1943
52
- sempy_labs/directlake/_guardrails.py,sha256=0zqqkEDk02_jb4MzWJCKRNcDtfPGBcWUcxuQcDbgWns,2390
53
- sempy_labs/directlake/_list_directlake_model_calc_tables.py,sha256=_rpnbgsFAz2W16PpgIOB0Rj_Fs1ZKrDbz3DUaaR_bfU,2143
54
- sempy_labs/directlake/_show_unsupported_directlake_objects.py,sha256=QNj2wHzFGtjnsAICmlc7BuhCYkw0An0XnditDTCG2JM,3358
55
- sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py,sha256=b_Y5_GSfWC25wH6R7L37-AHO9fvKkmxRGaP6dVDC7-w,3233
56
- sempy_labs/directlake/_update_directlake_partition_entity.py,sha256=Pbx7LCdKyqEfX1npLvhw0WzFnOEbluwB3_xW0ELvHL4,8580
57
- sempy_labs/directlake/_warm_cache.py,sha256=ZgPricISRszx-yDERXihBDGVhEFB9yX-nBtLX0ZJTXI,8258
58
- sempy_labs/lakehouse/__init__.py,sha256=6LVQltQ3cjyiuxvjXTuNdJ163zSqi4h_tEZY4zsxuSw,647
59
- sempy_labs/lakehouse/_get_lakehouse_columns.py,sha256=Bb_iCTlNwl0wdN4dW_E7tVnfbHhHwQT_l0SUqvcbYpo,2582
60
- sempy_labs/lakehouse/_get_lakehouse_tables.py,sha256=1IXa_u1c4CJSlmP1rxBCMcOrQw-vmRXjqd5U5xsx_5c,8800
61
- sempy_labs/lakehouse/_lakehouse.py,sha256=qtCVr1cM0TWY6z5YS57w0nj3DEfXT5xmyDtr3676kAk,5172
62
- sempy_labs/lakehouse/_shortcuts.py,sha256=MT_Cqog5cTMz9fN3M_ZjAaQSjXXiyCyPWGY8LbaXZsI,6977
63
- sempy_labs/migration/__init__.py,sha256=w4vvGk6wTWXVfofJDmio2yIFvSSJsxOpjv6mvNGmrOI,1043
64
- sempy_labs/migration/_create_pqt_file.py,sha256=oYoKD78K9Ox1fqtkh-BfU_G5nUIoK_-5ChvCKDsYsWU,9257
65
- sempy_labs/migration/_migrate_calctables_to_lakehouse.py,sha256=p24PBg26gQHoj6VNcoK61o2ILJrVbVrJQ_n3PH4o0p0,17530
66
- sempy_labs/migration/_migrate_calctables_to_semantic_model.py,sha256=cm3ny8i4b6D-Ew22-WZKyEFPLDr0wovkrlqTazYSbR8,5982
67
- sempy_labs/migration/_migrate_model_objects_to_semantic_model.py,sha256=-JkxmM8PbEpLBeCssUgkIcnGHYnxHruqrMWp1CdiT6s,23123
68
- sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py,sha256=G5cfmaK5ThLJc49SV9JMr2mX0--an3fFDr44n8gI1WQ,6349
69
- sempy_labs/migration/_migration_validation.py,sha256=phbUUIYA5z4dZvEKrVbByMTPPwMscY7Dy9HVxE8z_HM,2483
70
- sempy_labs/migration/_refresh_calc_tables.py,sha256=eDj0OJQ07Tum4umZH0NsUW5Rx_YXEpGnAu8OVVoQ4yk,5190
71
- sempy_labs/report/_BPAReportTemplate.json,sha256=9Uh-7E6d2ooxQ7j5JRayv_ayEULc7Gzg42kZGKdOqH8,63920
72
- sempy_labs/report/__init__.py,sha256=GQcTHbB3SjLEeCH0id_jlmqQ7S1iPCpoISUQfAHI2T8,960
73
- sempy_labs/report/_generate_report.py,sha256=7H2xQ5nHDK1_2RjvNNHX3IwWyNSRbTGMpGWxMmmjdOk,12189
74
- sempy_labs/report/_report_functions.py,sha256=YK9UdpVDro_XC7ZAqNLHB4ZbAPwCwEm2YLn6RzJWkA8,29868
75
- sempy_labs/report/_report_rebind.py,sha256=t33liDvBitOhwxGPPLWJYzcccu9tBTjRFTAZkX6UYv8,4809
76
- sempy_labs/report/_bpareporttemplate/.platform,sha256=kWRa6B_KwSYLsvVFDx372mQriQO8v7dJ_YzQV_cfD-Q,303
77
- sempy_labs/report/_bpareporttemplate/definition.pbir,sha256=bttyHZYKqjA8OBb_cezGlX4H82cDvGZVCl1QB3fij4E,343
78
- sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json,sha256=kzjBlNdjbsSBBSHBwbQc298AJCr9Vp6Ex0D5PemUuT0,1578
79
- sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json,sha256=4N6sT5nLlYBobGmZ1Xb68uOMVVCBEyheR535js_et28,13467
80
- sempy_labs/report/_bpareporttemplate/definition/report.json,sha256=-8BK5blTE-nc0Y4-M0pTHD8Znt3pHZ-u2veRppxPDBQ,3975
81
- sempy_labs/report/_bpareporttemplate/definition/version.json,sha256=yL3ZZqhfHqq0MS0glrbXtQgkPk17xaTSWvPPyxBWpOc,152
82
- sempy_labs/report/_bpareporttemplate/definition/pages/pages.json,sha256=jBLscHaA4wAQwusHXA3oYFaTsk3LL6S--k6wvvehJhk,311
83
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json,sha256=5qfUCQXMdeDAKtfdLxQZt06-e111OTSP07gsmG1dfpY,313
84
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json,sha256=wyB8w15elLuJorCx3lnQYD7OOXqNsoVgqNaDdukO4G8,4455
85
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json,sha256=v-DCEtln1r6EVG7-KlfWBCbxnWzk9LyjycHjAmowObs,10977
86
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json,sha256=3cg4bTS_7OAMuWYKtPFqZeBbZoNczLg59zQClNqgAw8,2858
87
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json,sha256=ynOggnusTsTBxaXh9Q1n3zmsixHNhIohwku2y40Z-Js,14453
88
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json,sha256=DU_t1cr5eczWFy9EI0R1v7S-cbNIdSyll0az5jKJRf4,5090
89
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json,sha256=0HnplDEjDGa3htdufUksOxzC7iZGERNxgf3k81_kJ7E,12829
90
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json,sha256=kl45g9-GF8wNrQRM2PrsS-Rf0cYhP5b3-lqAeXJfmN8,2866
91
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json,sha256=id6U55GALhCx5BwtM_aCFjMkiVkhSvR79o2pbrMwNyA,12981
92
- sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json,sha256=7pk03j28AwlE2HIwxei08Pz5VseRPO8eziOC6dgEJfs,249
93
- sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json,sha256=7ZqozO6t9Ossms8Y20xGea3tdSAESSkxkejqTDRW15E,2982
94
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json,sha256=dNExLBlxFRHASVCz8DUZ2Voq_ZCCuGu1YZmw2HdwCww,314
95
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json,sha256=nZaj33KCp6bqxG0_nplUyi8-AGavN1iOp2lVkI0gLvw,12928
96
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json,sha256=xaykDc6T5qwe8qENlAaAd-Ivw8oF1dderfrhSbUKGW4,10102
97
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json,sha256=Fk7MWX8LhbftzHe_6KCFkSp2jYzRMYnZSWeElnFWLbw,915
98
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json,sha256=O4wgVQuf-tAGDjVuzlnoOGi8GLPG2Vxz6y-JubTRQfY,14305
99
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json,sha256=twzhLrEcCzUikeiKJ5sSEmQZ1otKXxgTtdz0uX4AKes,5445
100
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json,sha256=3dS2XcsYWMEity0zFs0hxrv_w0Tnwe50iZFYvotfsWY,2856
101
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json,sha256=Y59BS3bx16gzmZn-3-JqJZ_BRxeqVuoaVlysZvVAZAQ,14451
102
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json,sha256=zOVrg0CaoOSxedwwyD8Msm94sqFVM0l-6IXX51EMRZY,2866
103
- sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json,sha256=wBVuNc8S2NaUA0FC708w6stmR2djNZp8nAsHMqesgsc,293
104
- sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json,sha256=mlY6t9OlSe-Y6_QmXJpS1vggU6Y3FjISUKECL8FVSg8,931
105
- sempy_labs/tom/__init__.py,sha256=Qbs8leW0fjzvWwOjyWK3Hjeehu7IvpB1beASGsi28bk,121
106
- sempy_labs/tom/_model.py,sha256=M-es2bES3Usj5uVmt5vwNmtm9vWzeqtVtKREpxjnjiI,151050
107
- semantic_link_labs-0.7.2.dist-info/LICENSE,sha256=ws_MuBL-SCEBqPBFl9_FqZkaaydIJmxHrJG2parhU4M,1141
108
- semantic_link_labs-0.7.2.dist-info/METADATA,sha256=LYlyxmPO3esRALDADbyyQR5Fvk8G_uSgmY4cCE6q3qY,11241
109
- semantic_link_labs-0.7.2.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
110
- semantic_link_labs-0.7.2.dist-info/top_level.txt,sha256=kiQX1y42Dbein1l3Q8jMUYyRulDjdlc2tMepvtrvixQ,11
111
- semantic_link_labs-0.7.2.dist-info/RECORD,,