xpk 0.14.0__py3-none-any.whl → 0.14.2__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.
Files changed (41) hide show
  1. integration/__init__.py +15 -0
  2. integration/docker_manager_test.py +102 -0
  3. integration/gcluster_a3mega_test.py +204 -0
  4. integration/gcluster_a3ultra_test.py +176 -0
  5. integration/gcluster_a4_test.py +176 -0
  6. integration/gcluster_test.py +107 -0
  7. xpk/commands/cluster.py +17 -4
  8. xpk/commands/cluster_gcluster.py +4 -0
  9. xpk/commands/cluster_test.py +92 -0
  10. xpk/commands/common.py +6 -0
  11. xpk/commands/kind.py +1 -0
  12. xpk/commands/workload.py +41 -7
  13. xpk/commands/workload_test.py +81 -0
  14. xpk/core/blueprint/testing/__init__.py +15 -0
  15. xpk/core/cluster.py +1 -1
  16. xpk/core/config.py +1 -1
  17. xpk/core/kueue_manager.py +62 -22
  18. xpk/core/kueue_manager_test.py +53 -21
  19. xpk/core/system_characteristics.py +16 -4
  20. xpk/core/system_characteristics_test.py +73 -0
  21. xpk/templates/cluster_preheat.yaml.j2 +31 -0
  22. xpk/templates/filestore-pv.yaml +17 -0
  23. xpk/templates/filestore-pvc.yaml +11 -0
  24. xpk/templates/filestore-sc.yaml +10 -0
  25. xpk/templates/fuse-pv.yaml +17 -0
  26. xpk/templates/fuse-pvc.yaml +13 -0
  27. xpk/templates/kueue_config.yaml.j2 +95 -0
  28. xpk/templates/kueue_gke_default_topology.yaml.j2 +10 -0
  29. xpk/templates/kueue_sub_slicing_topology.yaml.j2 +14 -0
  30. xpk/templates/mtc-cpc.yaml +15 -0
  31. xpk/templates/volume_bundle.yaml +7 -0
  32. xpk/utils/templates.py +14 -1
  33. xpk/utils/topology.py +9 -0
  34. xpk/utils/topology_test.py +21 -1
  35. {xpk-0.14.0.dist-info → xpk-0.14.2.dist-info}/METADATA +1 -1
  36. {xpk-0.14.0.dist-info → xpk-0.14.2.dist-info}/RECORD +40 -19
  37. xpk-0.14.2.dist-info/top_level.txt +2 -0
  38. xpk-0.14.0.dist-info/top_level.txt +0 -1
  39. {xpk-0.14.0.dist-info → xpk-0.14.2.dist-info}/WHEEL +0 -0
  40. {xpk-0.14.0.dist-info → xpk-0.14.2.dist-info}/entry_points.txt +0 -0
  41. {xpk-0.14.0.dist-info → xpk-0.14.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,10 @@
1
+ apiVersion: kueue.x-k8s.io/v1alpha1
2
+ kind: Topology
3
+ metadata:
4
+ name: "gke-default"
5
+ spec:
6
+ levels:
7
+ - nodeLabel: "cloud.google.com/gce-topology-block"
8
+ - nodeLabel: "cloud.google.com/gce-topology-subblock"
9
+ - nodeLabel: "cloud.google.com/gce-topology-host"
10
+ - nodeLabel: "kubernetes.io/hostname"
@@ -0,0 +1,14 @@
1
+ apiVersion: kueue.x-k8s.io/v1beta1
2
+ kind: Topology
3
+ metadata:
4
+ name: {{ sub_slice_topology_name }}
5
+ spec:
6
+ levels:
7
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-16x16-id"
8
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-8x16-id"
9
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-8x8-id"
10
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-4x8-id"
11
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-4x4-id"
12
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-2x4-id"
13
+ - nodeLabel: "cloud.google.com/gke-tpu-slice-2x2-id"
14
+ - nodeLabel: "kubernetes.io/hostname"
@@ -0,0 +1,15 @@
1
+ apiVersion: checkpointing.gke.io/v1
2
+ kind: CheckpointConfiguration
3
+ metadata:
4
+ name: my-checkpointconfiguration
5
+ spec:
6
+ cloudStorageBucketName:
7
+ # This field is optional
8
+ nodeSelector:
9
+ node.kubernetes.io/instance-type:
10
+ # This field is optional
11
+ tolerations:
12
+ - key:
13
+ operator: Exists
14
+ effect: NoSchedule
15
+ inMemoryVolumeSize:
@@ -0,0 +1,7 @@
1
+ apiVersion: kjobctl.x-k8s.io/v1alpha1
2
+ kind: VolumeBundle
3
+ metadata:
4
+ name: $NAME
5
+ spec:
6
+ volumes: []
7
+ containerVolumeMounts: []
xpk/utils/templates.py CHANGED
@@ -18,7 +18,7 @@ import os
18
18
 
19
19
  import ruamel.yaml
20
20
 
21
- TEMPLATE_PATH = "src/xpk/templates/"
21
+ TEMPLATE_PATH = "templates"
22
22
 
23
23
  yaml = ruamel.yaml.YAML()
24
24
 
@@ -28,3 +28,16 @@ def load(path: str) -> dict:
28
28
  with open(template_path, "r", encoding="utf-8") as file:
29
29
  data: dict = yaml.load(file)
30
30
  return data
31
+
32
+
33
+ def get_templates_absolute_path(templates_path: str = TEMPLATE_PATH) -> str:
34
+ """
35
+ Return the absolute path to the templates folder
36
+
37
+ Args:
38
+ templates_path: The path to the templates folder relative to the src/xpk directory
39
+ """
40
+ current_file_path = os.path.abspath(__file__)
41
+ current_dir = os.path.dirname(current_file_path)
42
+ xpk_package_dir = os.path.dirname(current_dir)
43
+ return os.path.join(xpk_package_dir, templates_path)
xpk/utils/topology.py CHANGED
@@ -35,3 +35,12 @@ def parse_topology(topology: str) -> list[int]:
35
35
  raise ValueError("Topology is an empty string")
36
36
 
37
37
  return [int(el) for el in topology.lower().split("x")]
38
+
39
+
40
+ def is_topology_contained(contained: str, container: str) -> bool:
41
+ contained_parsed = parse_topology(contained)
42
+ container_parsed = parse_topology(container)
43
+ return len(contained_parsed) == len(container_parsed) and all(
44
+ contained <= container
45
+ for contained, container in zip(contained_parsed, container_parsed)
46
+ )
@@ -15,7 +15,7 @@ limitations under the License.
15
15
  """
16
16
 
17
17
  import pytest
18
- from .topology import is_topology_valid, get_topology_product, parse_topology
18
+ from .topology import is_topology_valid, get_topology_product, parse_topology, is_topology_contained
19
19
 
20
20
 
21
21
  def test_is_topology_valid_with_invalid_topology():
@@ -41,3 +41,23 @@ def test_parse_topology_with_empty_input():
41
41
  def test_get_topology_product():
42
42
  result = get_topology_product("1x2x3")
43
43
  assert result == 6
44
+
45
+
46
+ def test_is_topology_contained_with_container_smaller_than_contained_returns_false():
47
+ result = is_topology_contained(contained="3x3x3", container="2x2x2")
48
+ assert result is False
49
+
50
+
51
+ def test_is_topology_contained_with_container_larger_than_contained_returns_true():
52
+ result = is_topology_contained(contained="1x1x1", container="2x2x2")
53
+ assert result is True
54
+
55
+
56
+ def test_is_topology_contained_with_container_equal_to_contained_returns_true():
57
+ result = is_topology_contained(contained="2x2x2", container="2x2x2")
58
+ assert result is True
59
+
60
+
61
+ def test_is_topology_contained_with_different_topologies_dimensions_returns_false():
62
+ result = is_topology_contained(contained="2x2", container="2x2x2")
63
+ assert result is False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xpk
3
- Version: 0.14.0
3
+ Version: 0.14.2
4
4
  Summary: xpk helps Cloud developers to orchestrate training jobs on accelerators on GKE.
5
5
  Author-email: XPK team <xpk-code-reviewers@google.com>
6
6
  License: Apache-2.0
@@ -1,30 +1,38 @@
1
+ integration/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlLY,561
2
+ integration/docker_manager_test.py,sha256=J2xijy6crRtrwQXrEvtOEY7mo1kEJYhcIYMZ7w0OGa4,2514
3
+ integration/gcluster_a3mega_test.py,sha256=KRxgAsTbo6QBVvhhaEHSis_EvTPi2B-ZIlhEoGClcFs,6046
4
+ integration/gcluster_a3ultra_test.py,sha256=8wEtlQN1_uIBUsidvH_l7Ab-ikDpnABrlu9k1TIBz4Q,5846
5
+ integration/gcluster_a4_test.py,sha256=GCe6BujHCvM62kIGOd-9Wvz-IrR0BY5d83bGD1cmsQ0,5754
6
+ integration/gcluster_test.py,sha256=3GSOMszzNW6Yr4T4PFIpmszonwDAAGpSdKutUA77O-g,3304
1
7
  xpk/__init__.py,sha256=7mu-VQDQMyxM5To0KOhuYe4y2TYGsEkfV7hXZmUyih4,561
2
8
  xpk/main.py,sha256=7YBpzpHxV61c2Js0-uUHUXxTW7cWhLLdMc263rYRW3E,2416
3
9
  xpk/api/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlLY,561
4
10
  xpk/api/storage_crd.yaml,sha256=r4WFXnSJJ25EUF-t4Ljfbl-cJoSaiFiZkP8451eTub4,1260
5
11
  xpk/commands/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlLY,561
6
12
  xpk/commands/batch.py,sha256=Cj1bDpzPMoPdhaKKrOJJLJ3JzRvJrCMn8huQoHHIZJI,4192
7
- xpk/commands/cluster.py,sha256=plS9p9PW-NPdNgvf30K9fdKo-0VyDk5gd6BX8tizcpM,41219
8
- xpk/commands/cluster_gcluster.py,sha256=YWNC-ljRJfZG-T1ttkPEklplMsYlBXwJ7JpGpJfdKuE,12918
13
+ xpk/commands/cluster.py,sha256=CG4Ieg3QADNUAwyPzZh0P3mop4Pv1DILrNMJVLvgbi8,41682
14
+ xpk/commands/cluster_gcluster.py,sha256=MOxQfQ19sxaDtDBfIzUdrxw4FpboDIiGFKEtFLwfEgQ,13080
9
15
  xpk/commands/cluster_gcluster_test.py,sha256=MoMlHbHnCI4ZrnMai1Zw71IP1ORxVVh23cMD5qgXOtQ,6136
10
- xpk/commands/common.py,sha256=wGsZH9qhV4rgzZ5oMvMgrU7i4Z3orNjFU-OgymLs9Lc,2308
16
+ xpk/commands/cluster_test.py,sha256=tT1oEUXqNkzElgHZ-UXJGkJEGyakuaPb1cLHjV-eeM0,2800
17
+ xpk/commands/common.py,sha256=nxLKPhXuAMW7wq-5xL2YeOgDTMUDcLGMujatOUHJ3s4,2504
11
18
  xpk/commands/config.py,sha256=gFNkf3ibsvZmcPpkpKXe-KJmHO5IKucNwLCXNgKvaDc,836
12
19
  xpk/commands/info.py,sha256=uhv5mPfgg9N-5JhQw4dT2jujL9ZC5kzGA18h9NFfm5A,7429
13
20
  xpk/commands/inspector.py,sha256=JruseZl9ZIlR9-Lv_pn8YHfLdyiMgHHSf7xPGBAtXTM,12616
14
21
  xpk/commands/job.py,sha256=rPIfWvgm5mLz7K7YDLK721ZcUcg5OEmYVAPAtRtB5Ag,6718
15
- xpk/commands/kind.py,sha256=8z9B80Xc-D8bt9iDdWPlqZqzmGFYpqdwokhmySQ5zLY,7619
22
+ xpk/commands/kind.py,sha256=NM2CoKJXrYtY9DHZ2yM097WGcI1kno_G2b23tlLVIEI,7658
16
23
  xpk/commands/kjob_common.py,sha256=bRaORiGVjPAdN0T3aRmbcQgXYe-EtjoVKePdWzQ5xU4,1928
17
24
  xpk/commands/run.py,sha256=D0zgmnGeBLATphYhzQj29EScxrMmAKqPRhP6nfWuYcY,4085
18
25
  xpk/commands/shell.py,sha256=mRHMwm3Izzsue4bocekm82Rg_cPUaGMClSlvNzNXQ-o,4467
19
26
  xpk/commands/storage.py,sha256=90nz84_ut-uwdIVrxnLYq0K4uYpZWncKM-ZZ_2bRzcI,11505
20
27
  xpk/commands/version.py,sha256=k30rdLP9clUM8eeSwRFhpfzSb1qwcQImTfuC59Ed6CA,771
21
- xpk/commands/workload.py,sha256=Lx1BZx_PsQ7llML4VomurJRSTO4fC9Ohf_DolotiSoA,27894
28
+ xpk/commands/workload.py,sha256=S6g2B8bzhM_XNGY4NJUYVODcIuvutKQmdl0VV7jwGzw,29239
29
+ xpk/commands/workload_test.py,sha256=e6D1j2Akewq50_76oD84gSCdcW44PEOsIxLPjaL11s8,2344
22
30
  xpk/core/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlLY,561
23
31
  xpk/core/capacity.py,sha256=ohrVvguNwSv7HufdhAhp9dEtf49QT9eXPaPuI9BuAck,7401
24
- xpk/core/cluster.py,sha256=H5-x0xYijQbgINbAIXovu6JoR-9iKnuVQrMVy1xrEP0,26359
32
+ xpk/core/cluster.py,sha256=BoZzQO7j6Q5vfooFPCv72KDg7zYL_RFLLjxVEMKQsus,26359
25
33
  xpk/core/cluster_private.py,sha256=RLi0C7bV0NEUXl6QKQzvUT0weN9EdqPvjuuOQsNO0DY,6868
26
34
  xpk/core/commands.py,sha256=mtkT_ZsuHj5HTvFAj7mMd8kMXsWoWSA4zqHjlRiFL4o,10369
27
- xpk/core/config.py,sha256=JCvW7vetC9-VLEOkeGkydiSklupBRl20imP8zqjR5S4,3407
35
+ xpk/core/config.py,sha256=EBGJC2MEmkks-9RpRsW7HFyfa4k-W-8geFIlkm3y44c,3407
28
36
  xpk/core/config_test.py,sha256=v1qfyFRzLkYSQ7Wn4nx1N0dBSOFXidLWDfhkeHDZOVM,1847
29
37
  xpk/core/docker_container.py,sha256=GvkCJ2S5UKn8uh3pZhRd3X7iS0-PsQpRO8l7QhywVGc,7604
30
38
  xpk/core/docker_image.py,sha256=MIU397IGIPwkTZFK-ZGEWuc3RmUIF3sQQZUiUj2gLqA,6775
@@ -37,8 +45,8 @@ xpk/core/gcluster_manager.py,sha256=lyv_MvdnkByy9_PEBj_ugAEBwnCbFNiWTSrEFjrMlPc,
37
45
  xpk/core/gcsfuse.py,sha256=kg5pgxdTjgiqquuGjev9fXzJPb8oiWPTK6wzCddzheQ,2125
38
46
  xpk/core/jobset.py,sha256=PJ4Fd8TNNLuYKNOMehoMYRIUEXyc5jsbHctJGqfW_8Y,4037
39
47
  xpk/core/kjob.py,sha256=symYO3DQfSNP6MAJE54QZuCPDF2kseaxZ-_mmsoBQjo,14478
40
- xpk/core/kueue_manager.py,sha256=ujEvPLhnnNiHAB0Bosl28OXR3WpWvOOS0K7oP1sVSMc,12129
41
- xpk/core/kueue_manager_test.py,sha256=BBJLPoTAB0oIA4DGL0MYx08BKcnYXUQMxoQ_8ORQShs,18623
48
+ xpk/core/kueue_manager.py,sha256=PjZ1vjEfKvFdB5Tg5gK2qOm4J6LoHrpaafn5TizUo1A,13292
49
+ xpk/core/kueue_manager_test.py,sha256=xN2viTlwrd5pPwn0OSn8RlD_gy13t3vpQfuN7jYFZWo,20062
42
50
  xpk/core/monitoring.py,sha256=__bzTq_DIDAK8yIaN4F3MJh-yjYw5X1OlxmRgYOpf1g,4332
43
51
  xpk/core/mtc.py,sha256=pO7p3l-EzLFdTE8MdwWV8i0Zu-7epGql_kPoksVofIU,6259
44
52
  xpk/core/nap.py,sha256=uA33XccGjEF5RZRO5IpUMMzCf-u6D73cwwPEj4q1qvc,12820
@@ -51,7 +59,8 @@ xpk/core/resources.py,sha256=HlYNPQlaJa5y-pb70aVJzdiiOLDnoACF-wJXePM4ejs,8077
51
59
  xpk/core/scheduling.py,sha256=_o8QkQxVM-8z5K5ATslM_qQ87f5dzYE0ZeBcwQ6Oqic,9702
52
60
  xpk/core/scheduling_test.py,sha256=m9KcglAbg0qly095PmrUOZxJYUE2UeQmkBNIWn5nFyk,979
53
61
  xpk/core/storage.py,sha256=NILvVAcLNMLmp4wKx_TEKbMMF5X1oL-FrQV46PT0_ds,16902
54
- xpk/core/system_characteristics.py,sha256=kRNWwQ6vcLyfII-VcWP1Q3Pvgpo5GRUDTcDHq9e_sPQ,22206
62
+ xpk/core/system_characteristics.py,sha256=qHgqyQF6RVjU059YU0eB66_ia74tV-ogDyZbqCTUfw0,22589
63
+ xpk/core/system_characteristics_test.py,sha256=MWvbaEQRoepYNZKOQcs73ppcTKW8plYQ9FQBotfA27I,2250
55
64
  xpk/core/vertex.py,sha256=orIZAVwZruRJQ6-vgc1wShuTsiipdH-zHQ9O4ie_HSA,3638
56
65
  xpk/core/workload.py,sha256=6TVZM15n8W7046VgmmH9Jv54MrhExtLQH3GaiwlV8Xs,8959
57
66
  xpk/core/workload_test.py,sha256=tVTvrwDRXD3O1GCoftgEBWilCYTN74ayP1KRP0vptx0,857
@@ -59,6 +68,7 @@ xpk/core/blueprint/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlL
59
68
  xpk/core/blueprint/blueprint_definitions.py,sha256=5i331XA-2yP_ALyB6XU5tP2Tf9iHcIX5g0TilxQi8zE,1800
60
69
  xpk/core/blueprint/blueprint_generator.py,sha256=VWhp89upY7vqVFUqcpWR6zwTBoFUSahX2sQxXEdUpSk,36393
61
70
  xpk/core/blueprint/blueprint_test.py,sha256=T058Dq-x4wQQqjs33BWhjHdT4qJLDwsIcc7vareHh_c,7204
71
+ xpk/core/blueprint/testing/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlLY,561
62
72
  xpk/core/remote_state/__init__.py,sha256=PkV8D9WOtlJHH5AIxsQaKeIBcmupT_Ol_bwJgN6G2I8,561
63
73
  xpk/core/remote_state/fuse_remote_state.py,sha256=3Dx4ZZd0NFF5-MlqGWHzz8H4bjYiPOWdF_YSEnKUPQ8,3246
64
74
  xpk/core/remote_state/remote_state_client.py,sha256=6PcR92Xy_RMjlF4AscanQ1jXNHnewLWGNC2v53jbzD4,1077
@@ -87,7 +97,18 @@ xpk/parser/version.py,sha256=eJo4PAbbmRQZulgKBs_ytbVgV9zAaaXeNzMMxmgFMVY,769
87
97
  xpk/parser/workload.py,sha256=oI6y66Old_z6PxFPTZ3LvektUsOZ7U8f6g6cscuzh9g,27208
88
98
  xpk/parser/workload_test.py,sha256=t0aAqEsAMz1U3xTMrBcm773d9kwYOcvLtQk5n4jqWPw,2075
89
99
  xpk/templates/__init__.py,sha256=7mu-VQDQMyxM5To0KOhuYe4y2TYGsEkfV7hXZmUyih4,561
100
+ xpk/templates/cluster_preheat.yaml.j2,sha256=1e8jYagQE6O7BjAfuwmEqGG1b8AOsLRlQm4V68ZnGNs,721
101
+ xpk/templates/filestore-pv.yaml,sha256=FxKZkAXa2czIYblq77iewQjCjOjs-FptuF3YLOByfLo,316
102
+ xpk/templates/filestore-pvc.yaml,sha256=Rf80UNYs3XTUdOJuWCeFq80TKXq5FhfafRE89hq7y9o,161
103
+ xpk/templates/filestore-sc.yaml,sha256=vHzcU7jk0B5z7EgTfQmMM1m2TIzR70ny6MvthyYdqhE,213
104
+ xpk/templates/fuse-pv.yaml,sha256=-CM6AYAy4HKOErd9ogiM-6vWIuWS5yXoXyBAp2EoZsM,321
105
+ xpk/templates/fuse-pvc.yaml,sha256=heGWvRIetukAI9pH9auXxnU2H-G_8pL_wRIzoWDLVH8,218
106
+ xpk/templates/kueue_config.yaml.j2,sha256=ZAZwzZ28piwlXi9Offo2CvrQ3K9gv1r9BJTPavnUEdY,2055
107
+ xpk/templates/kueue_gke_default_topology.yaml.j2,sha256=GDFUf0DUnVTVjjSVRqfyEhQoDj2sEoL2YWhHYJZU9N4,300
108
+ xpk/templates/kueue_sub_slicing_topology.yaml.j2,sha256=Lv54uS3fC7sJNJdk4DFtnOiLSgq4wq38n_BQCx4Tz6Q,542
109
+ xpk/templates/mtc-cpc.yaml,sha256=MPx75tog09kjRAvHoNOPCEobigQ17d7pYCUnZCevSDQ,340
90
110
  xpk/templates/storage.yaml,sha256=AykdyMtDnKZF8Y_0BYxoYP03hEIzEk6iNalXAQHgAls,163
111
+ xpk/templates/volume_bundle.yaml,sha256=sqeag7GPWqGNQ5doZtO9IVAX_vKYRO73-aBE7waEtSY,129
91
112
  xpk/utils/__init__.py,sha256=YPwWBbgLAu7L-YlTVGB2r8ZV4TzypURMRBcehSHHlLY,561
92
113
  xpk/utils/console.py,sha256=hRbvtog_VAzuxt5GfwK5GZdd5SWaa7kvWG8zo_qFRQc,1519
93
114
  xpk/utils/execution_context.py,sha256=WYxm6NExBIP6iLAWaL5aV858riGJbAHn0Zs6fmKlmzE,784
@@ -98,15 +119,15 @@ xpk/utils/kubectl.py,sha256=WKB9UhpouPN9G4n2ejRi_PgsYLI0R01gzkS1WGU6mJA,1828
98
119
  xpk/utils/kueue.py,sha256=P1Pu_crGuOgYxjl8CczTgtQoum0w1sbSLGPOaEZ5180,713
99
120
  xpk/utils/network.py,sha256=dGS5rxIm_zaayDElHNlzalaf09M99by5ckL_lGDl_yQ,4293
100
121
  xpk/utils/objects.py,sha256=OwMNxB4TGX21qnJPdZo2YBMPMbQPqOtHMh19QhoRNRY,2498
101
- xpk/utils/templates.py,sha256=mH7up63_-vev7TQF_n2IwhEZHarbzSqCKPRDVP51gVc,845
102
- xpk/utils/topology.py,sha256=heKgMQxeTEYCD-PVp8m_c7rscdGcGVLx2_kHCDQca50,1039
103
- xpk/utils/topology_test.py,sha256=UiCurxYGTDrqVlGlAeg-I95-ScOEZQq3roSSwtdG10U,1196
122
+ xpk/utils/templates.py,sha256=5VAUtv-F6ICL5mxZ3Xtzdh8FEc0-86jFbqhgwW-QtcM,1277
123
+ xpk/utils/topology.py,sha256=WcAG3kzA8krlbyiZpTRDI2TteNozn3r1GH914Lykcp8,1374
124
+ xpk/utils/topology_test.py,sha256=jDXCPgBPfByqjhi0W9A5c8uOHOYjRav53nNlg71ipjk,1943
104
125
  xpk/utils/validation.py,sha256=-Qd5jqkVzQHkJvmQnGjHjtAcfvz064Vbo6_sl4EnYKw,3497
105
126
  xpk/utils/validation_test.py,sha256=PEDSMUqZdt_Lx1FSR-LOTXKKtsJ47JH1fxugM0Gfz6Y,1168
106
127
  xpk/utils/yaml.py,sha256=j8xuAJ9yAAwnQi6ozwZ-nMnDyDnc3xWkeBZMtSuP4RU,844
107
- xpk-0.14.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
108
- xpk-0.14.0.dist-info/METADATA,sha256=Y2-MopqRDfoUx-owouglTHeDP-88ruOPr4o6oWIBmSE,71934
109
- xpk-0.14.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
110
- xpk-0.14.0.dist-info/entry_points.txt,sha256=mzEtiIesFkT1kmcTUVDA1o3uOhiniX6tIz2wmOlMu1M,38
111
- xpk-0.14.0.dist-info/top_level.txt,sha256=aDe4N0jicmuWExx_6w0TxWQJaEuPSs9BnLU-3aF1GLo,4
112
- xpk-0.14.0.dist-info/RECORD,,
128
+ xpk-0.14.2.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
129
+ xpk-0.14.2.dist-info/METADATA,sha256=XP5pIZaZR0oSR9WDn_vbpq5zHRURGHGJ8kRuVw4-s0I,71934
130
+ xpk-0.14.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
131
+ xpk-0.14.2.dist-info/entry_points.txt,sha256=mzEtiIesFkT1kmcTUVDA1o3uOhiniX6tIz2wmOlMu1M,38
132
+ xpk-0.14.2.dist-info/top_level.txt,sha256=TQKZWgV7LSElvmunYT9V_627qOMoxq3qYzWAFzKudB8,16
133
+ xpk-0.14.2.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ integration
2
+ xpk
@@ -1 +0,0 @@
1
- xpk
File without changes