konfai 1.1.7__py3-none-any.whl → 1.1.9__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 konfai might be problematic. Click here for more details.

Files changed (36) hide show
  1. konfai/__init__.py +59 -14
  2. konfai/data/augmentation.py +457 -286
  3. konfai/data/data_manager.py +509 -290
  4. konfai/data/patching.py +300 -183
  5. konfai/data/transform.py +384 -277
  6. konfai/evaluator.py +309 -68
  7. konfai/main.py +71 -22
  8. konfai/metric/measure.py +341 -222
  9. konfai/metric/schedulers.py +24 -13
  10. konfai/models/classification/convNeXt.py +187 -81
  11. konfai/models/classification/resnet.py +272 -58
  12. konfai/models/generation/cStyleGan.py +233 -59
  13. konfai/models/generation/ddpm.py +348 -121
  14. konfai/models/generation/diffusionGan.py +757 -358
  15. konfai/models/generation/gan.py +177 -53
  16. konfai/models/generation/vae.py +140 -40
  17. konfai/models/registration/registration.py +135 -52
  18. konfai/models/representation/representation.py +57 -23
  19. konfai/models/segmentation/NestedUNet.py +339 -68
  20. konfai/models/segmentation/UNet.py +140 -30
  21. konfai/network/blocks.py +331 -187
  22. konfai/network/network.py +781 -423
  23. konfai/predictor.py +645 -240
  24. konfai/trainer.py +527 -216
  25. konfai/utils/ITK.py +191 -106
  26. konfai/utils/config.py +152 -95
  27. konfai/utils/dataset.py +326 -455
  28. konfai/utils/utils.py +495 -249
  29. {konfai-1.1.7.dist-info → konfai-1.1.9.dist-info}/METADATA +1 -3
  30. konfai-1.1.9.dist-info/RECORD +38 -0
  31. konfai/utils/registration.py +0 -199
  32. konfai-1.1.7.dist-info/RECORD +0 -39
  33. {konfai-1.1.7.dist-info → konfai-1.1.9.dist-info}/WHEEL +0 -0
  34. {konfai-1.1.7.dist-info → konfai-1.1.9.dist-info}/entry_points.txt +0 -0
  35. {konfai-1.1.7.dist-info → konfai-1.1.9.dist-info}/licenses/LICENSE +0 -0
  36. {konfai-1.1.7.dist-info → konfai-1.1.9.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: konfai
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: Modular and configurable Deep Learning framework with YAML and PyTorch
5
5
  Author-email: Valentin Boussot <boussot.v@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -27,8 +27,6 @@ Provides-Extra: lpips
27
27
  Requires-Dist: lpips; extra == "lpips"
28
28
  Provides-Extra: cluster
29
29
  Requires-Dist: submitit; extra == "cluster"
30
- Provides-Extra: plot
31
- Requires-Dist: matplotlib; extra == "plot"
32
30
  Dynamic: license-file
33
31
 
34
32
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/vboussot/KonfAI/blob/main/LICENSE)
@@ -0,0 +1,38 @@
1
+ konfai/__init__.py,sha256=qjE9Rqxo1sMrkqGS8I5xlGQMZnjIfU-CGgSI5Wmbmbs,1231
2
+ konfai/evaluator.py,sha256=jsRzVSFjK-V1rZVK9kmN0Gh5-F2JhJrJv291UGNm8CM,16736
3
+ konfai/main.py,sha256=Fc4HcJEhPmgunj_f-QYyvQNvjHrKHSUv27Okgu6V5_A,3842
4
+ konfai/predictor.py,sha256=k9S-AH-wGvmr4YQF2IczJ2Nb9_aTZwNd9f6iu4s9v78,34591
5
+ konfai/trainer.py,sha256=wNHgDh0LtxTi0-aWCkT90hjjpJFaX_zRWyA5esVrsLY,28072
6
+ konfai/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ konfai/data/augmentation.py,sha256=vcJE7mosvUkwbpbTN_lGP0S1uJrJYGjlLrt9VnDdJYY,27792
8
+ konfai/data/data_manager.py,sha256=FOxpmL56-Cgqsms2rdPk1NML5OiuuIQW49-G0j3O2Os,31564
9
+ konfai/data/patching.py,sha256=jS35OxnJagKNUnJu7TzuGZpVj9fP-6H4nc2OEYOGgt8,16494
10
+ konfai/data/transform.py,sha256=MmA1vgXAj1V-e-8RNa1XAaHbWI5i85NoVyCp7yZ2-kg,26816
11
+ konfai/metric/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ konfai/metric/measure.py,sha256=7CHpLWCuuNNk3cYvGiNql6nt_pq6PA5SHIVNiSpeolk,28144
13
+ konfai/metric/schedulers.py,sha256=TpYMA24FMpxRnqfhMGb0i_Mm-bzT9kySbBgvkYk-6wM,1327
14
+ konfai/models/classification/convNeXt.py,sha256=Ha9QYd1-JEYUwL7zgNNAWeuJLbUT7LCNUkLcsdySAHM,10060
15
+ konfai/models/classification/resnet.py,sha256=4-l7HtpP_OqApDT8XjTH94fXIuiSzz833SUWXP2oFJo,10813
16
+ konfai/models/generation/cStyleGan.py,sha256=jnpJQ6mtQS5n7CGJ0_mdvnM5lluuyMt1TzC7lzjU1A0,10557
17
+ konfai/models/generation/ddpm.py,sha256=S2xceH_VHBuzrCwWMkCVW6Pt9sk_WxXg66I3KS3DxMU,16659
18
+ konfai/models/generation/diffusionGan.py,sha256=wrp_gDQG-DWW0faK2MclISt7KYwBTHw7RGrD4X2hyRc,33399
19
+ konfai/models/generation/gan.py,sha256=oYTrbyVkEaO91kIl-bnsJRraXbGur9eIQTbUvU7JmoE,9457
20
+ konfai/models/generation/vae.py,sha256=riZwhkS9qSDH9h6ELa2kiLL3yh-ihoeBhfFPeCcssqQ,6255
21
+ konfai/models/registration/registration.py,sha256=IlaeZgrO4Cqur-yzp5SN_Lkc7CroxRfXBXWk-FQ5zek,7147
22
+ konfai/models/representation/representation.py,sha256=79ccCmpSTTaQzrEucN3FhK3qzzo86TGQ1jnNbvccn7I,2953
23
+ konfai/models/segmentation/NestedUNet.py,sha256=W4uauwF0HY8ybi49iYiTlKLdJEyD7SaC967JHzHf6ZA,14885
24
+ konfai/models/segmentation/UNet.py,sha256=Pu_LiQdO4Mrzyn0HRE6rwxUjHGH4OG-JpzWB_U1K46g,5602
25
+ konfai/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ konfai/network/blocks.py,sha256=l70_oOcz5Hmol2xmxruG0kke_2SVgO3rXYXVTMSdAS8,15645
27
+ konfai/network/network.py,sha256=FPv3i3pnyThFMd1KgMk3wNz41btE5_Kby95dUwG7PsM,54458
28
+ konfai/utils/ITK.py,sha256=HVed4Z96X1jTaWrrQNdoBMqOtVK9InAPlDBJu-5uv3g,15476
29
+ konfai/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ konfai/utils/config.py,sha256=a7t44CYMUT5oCDdjL94IswhCVfFbQ5FCgDWZktDDkc4,14347
31
+ konfai/utils/dataset.py,sha256=Au22fcADKyDJMfS8Z9q8kEXLtKkoufJsH7Pwly6pALo,28288
32
+ konfai/utils/utils.py,sha256=AtPWHJh_RdAGK2m9Cv3BXvUZTpspVHRTPXXvRfn5dZg,28366
33
+ konfai-1.1.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
34
+ konfai-1.1.9.dist-info/METADATA,sha256=6PaWz831mjixz5kTN_-wBtDNGVBk0SjwayD4AGyUC5o,2451
35
+ konfai-1.1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
36
+ konfai-1.1.9.dist-info/entry_points.txt,sha256=fG82HRN5-g39ACSOCtij_I3N6EHxfYnMR0D7TI_8pW8,81
37
+ konfai-1.1.9.dist-info/top_level.txt,sha256=xF470dkIlFoFqTZEOlRehKJr4WU_8OKGXrJqYm9vWKs,7
38
+ konfai-1.1.9.dist-info/RECORD,,
@@ -1,199 +0,0 @@
1
- import SimpleITK as sitk
2
- from typing import Union
3
- import numpy as np
4
- import sys
5
- import scipy
6
-
7
- def parameterMap_to_transform(path_src: str) -> Union[sitk.Transform, list[sitk.Transform]]:
8
- transform = sitk.ReadParameterFile(path_src)
9
- format = lambda x: [float(i) for i in x]
10
- dimension = int(transform["FixedImageDimension"][0])
11
-
12
- if transform["Transform"][0] == "EulerTransform":
13
- if dimension == 2:
14
- result = sitk.Euler2DTransform()
15
- else:
16
- result = sitk.Euler3DTransform()
17
- parameters = format(transform["TransformParameters"])
18
- fixedParameters = format(transform["CenterOfRotationPoint"])+[0]
19
- elif transform["Transform"][0] == "TranslationTransform":
20
- result = sitk.TranslationTransform(dimension)
21
- parameters = format(transform["TransformParameters"])
22
- fixedParameters = []
23
- elif transform["Transform"][0] == "AffineTransform":
24
- result = sitk.AffineTransform(dimension)
25
- parameters = format(transform["TransformParameters"])
26
- fixedParameters = format(transform["CenterOfRotationPoint"])+[0]
27
- elif transform["Transform"][0] == "BSplineStackTransform":
28
- parameters = format(transform["TransformParameters"])
29
- GridSize = format(transform["GridSize"])
30
- GridOrigin = format(transform["GridOrigin"])
31
- GridSpacing = format(transform["GridSpacing"])
32
- GridDirection = np.asarray(format(transform["GridDirection"])).reshape((dimension, dimension)).T.flatten()
33
- fixedParameters = np.concatenate([GridSize, GridOrigin, GridSpacing, GridDirection])
34
-
35
- nb = int(format(transform["Size"])[-1])
36
- sub = int(np.prod(GridSize))*dimension
37
- results = []
38
- for i in range(nb):
39
- result = sitk.BSplineTransform(dimension)
40
- sub_parameters = np.asarray(parameters[i*sub:(i+1)*sub])
41
- result.SetFixedParameters(fixedParameters)
42
- result.SetParameters(sub_parameters)
43
- results.append(result)
44
- return results
45
- elif transform["Transform"][0] == "AffineLogStackTransform":
46
- parameters = format(transform["TransformParameters"])
47
- fixedParameters = format(transform["CenterOfRotationPoint"])+[0]
48
-
49
- nb = int(transform["NumberOfSubTransforms"][0])
50
- sub = dimension*4
51
- results = []
52
- for i in range(nb):
53
- result = sitk.AffineTransform(dimension)
54
- sub_parameters = np.asarray(parameters[i*sub:(i+1)*sub])
55
-
56
- result.SetFixedParameters(fixedParameters)
57
- result.SetParameters(np.concatenate([scipy.linalg.expm(sub_parameters[:dimension*dimension].reshape((dimension,dimension))).flatten(), sub_parameters[-dimension:]]))
58
- results.append(result)
59
- return results
60
- else:
61
- result = sitk.BSplineTransform(dimension)
62
-
63
- parameters = format(transform["TransformParameters"])
64
- GridSize = format(transform["GridSize"])
65
- GridOrigin = format(transform["GridOrigin"])
66
- GridSpacing = format(transform["GridSpacing"])
67
- GridDirection = np.array(format(transform["GridDirection"])).reshape((dimension,dimension)).T.flatten()
68
- fixedParameters = np.concatenate([GridSize, GridOrigin, GridSpacing, GridDirection])
69
-
70
- result.SetFixedParameters(fixedParameters)
71
- result.SetParameters(parameters)
72
- return result
73
-
74
- if __name__ == "__main__":
75
- out_path = sys.argv[1]
76
- finename = sys.argv[2]
77
- finename_dest = sys.argv[3]
78
- transform = parameterMap_to_transform("{}/{}".format(out_path, finename))
79
- sitk.WriteTransform(transform, "{}/{}".format(out_path, finename_dest))
80
-
81
- def getFlatLabel(mask: sitk.Image, labels: list[int]) -> sitk.Image:
82
- data = sitk.GetArrayFromImage(mask)
83
- result_data = np.zeros_like(data, np.uint8)
84
-
85
- for label in labels:
86
- result_data[data == label] = 1
87
-
88
- result = sitk.GetImageFromArray(result_data)
89
- result.CopyInformation(mask)
90
- return result
91
-
92
- def rampFilterHistogram(image: sitk.Image, rampStart: float, rampEnd: float) -> sitk.Image:
93
- imageData = sitk.GetArrayFromImage(image)
94
- filter = np.logical_and(imageData > rampStart, imageData < rampEnd)
95
- rampWidth = rampEnd - rampStart
96
- imageData[filter] = (1/rampWidth) * (imageData[filter] - rampStart) * imageData[filter]
97
- filteredImage = sitk.GetImageFromArray(imageData)
98
- filteredImage.CopyInformation(image)
99
- return filteredImage
100
-
101
- def elastic_registration( fixed_image : sitk.Image,
102
- moving_image : sitk.Image,
103
- fixed_mask : Union[sitk.Image, None],
104
- moving_mask : Union[sitk.Image, None],
105
- name_parameterMap : str,
106
- outputDir: str) -> sitk.Transform:
107
- labels = np.unique(sitk.GetArrayFromImage(fixed_mask))
108
- fixed_mask = getFlatLabel(fixed_mask, labels[1:])
109
- moving_mask = getFlatLabel(moving_mask, labels[1:])
110
-
111
- fixed_mask.CopyInformation(fixed_image)
112
- moving_mask.CopyInformation(moving_image)
113
-
114
- fixed_mask_dillated = sitk.BinaryDilate(fixed_mask, [5,5,5])
115
- moving_mask_dillated = sitk.BinaryDilate(moving_mask, [5,5,5])
116
-
117
- fixed_image = sitk.Mask(fixed_image, fixed_mask)
118
- moving_image = sitk.Mask(moving_image, moving_mask)
119
-
120
-
121
- minGradientMagnitude = 50
122
- fixed_image_gradient = rampFilterHistogram(sitk.VectorMagnitude(sitk.Gradient(fixed_image)), 0, minGradientMagnitude)
123
- moving_image_gradient = rampFilterHistogram(sitk.VectorMagnitude(sitk.Gradient(moving_image)), 0, minGradientMagnitude)
124
-
125
- elastixImageFilter = sitk.ElastixImageFilter()
126
- elastixImageFilter.SetFixedImage(fixed_image_gradient)
127
- elastixImageFilter.AddFixedImage(fixed_image)
128
- elastixImageFilter.AddFixedImage(fixed_image)
129
-
130
- if fixed_mask is not None:
131
- elastixImageFilter.SetFixedMask(fixed_mask)
132
- elastixImageFilter.AddFixedMask(fixed_mask_dillated)
133
- elastixImageFilter.AddFixedMask(fixed_mask_dillated)
134
-
135
-
136
- elastixImageFilter.SetMovingImage(moving_image_gradient)
137
- elastixImageFilter.AddMovingImage(moving_image)
138
- elastixImageFilter.AddMovingImage(moving_image)
139
-
140
- if moving_mask is not None:
141
- elastixImageFilter.SetMovingMask(moving_mask)
142
- elastixImageFilter.AddMovingMask(moving_mask_dillated)
143
- elastixImageFilter.AddMovingMask(moving_mask_dillated)
144
-
145
- elastixImageFilter.SetParameterMap(sitk.ReadParameterFile("{}.txt".format(name_parameterMap)))
146
- elastixImageFilter.LogToConsoleOn()
147
- elastixImageFilter.SetOutputDirectory(outputDir)
148
-
149
- elastixImageFilter.Execute()
150
-
151
- transform = parameterMap_to_transform("{}TransformParameters".format(outputDir))
152
-
153
- return transform
154
-
155
- def registration( fixed_image : sitk.Image,
156
- moving_image : sitk.Image,
157
- fixed_mask : Union[sitk.Image, None],
158
- moving_mask : Union[sitk.Image, None],
159
- name_parameterMap : str,
160
- outputDir: str) -> sitk.Transform:
161
- elastixImageFilter = sitk.ElastixImageFilter()
162
- elastixImageFilter.SetFixedImage(fixed_image)
163
- if fixed_mask is not None:
164
- elastixImageFilter.SetFixedMask(fixed_mask)
165
-
166
- elastixImageFilter.SetMovingImage(moving_image)
167
- if moving_mask is not None:
168
- elastixImageFilter.SetMovingMask(moving_mask)
169
-
170
- elastixImageFilter.SetParameterMap(sitk.ReadParameterFile("{}.txt".format(name_parameterMap)))
171
- elastixImageFilter.LogToConsoleOn()
172
- elastixImageFilter.SetOutputDirectory(outputDir)
173
- elastixImageFilter.Execute()
174
-
175
- transform = parameterMap_to_transform("{}TransformParameters".format(outputDir))
176
-
177
- return transform
178
-
179
- def registration_groupewise(images_1: sitk.Image, masks: sitk.Image, images_2: sitk.Image, name_parameterMap : str, output_dir: str):
180
- elastixImageFilter = sitk.ElastixImageFilter()
181
- elastixImageFilter.SetFixedImage(images_1)
182
- elastixImageFilter.SetMovingImage(images_1)
183
- elastixImageFilter.SetFixedMask(masks)
184
- elastixImageFilter.SetMovingMask(masks)
185
-
186
- if images_2 is not None:
187
- elastixImageFilter.AddFixedImage(images_2)
188
- elastixImageFilter.AddMovingImage(images_2)
189
- #elastixImageFilter.AddFixedImage(images_2)
190
- #elastixImageFilter.AddMovingImage(images_2)
191
-
192
- elastixImageFilter.SetParameterMap(sitk.ReadParameterFile("{}.txt".format(name_parameterMap)))
193
- elastixImageFilter.LogToConsoleOn()
194
- elastixImageFilter.SetOutputDirectory(output_dir)
195
- elastixImageFilter.LogToFileOn()
196
- elastixImageFilter.Execute()
197
-
198
- transforms = parameterMap_to_transform("{}TransformParameters".format(output_dir))
199
- return transforms
@@ -1,39 +0,0 @@
1
- konfai/__init__.py,sha256=YXG-wpSEXWs6Jt3BDI77V4r89gEUNX-6lxW9btj5VYI,851
2
- konfai/evaluator.py,sha256=WM78NGydV0iqKElahr-WpOCZLEJXHjjPq-LS-gi23rk,8401
3
- konfai/main.py,sha256=kr7Iie_f67NF6G3dAAj9G6Z9dhn9RzbdLYpzy2WvIh8,2573
4
- konfai/predictor.py,sha256=6zFGjQhG5-3hF10pvCn58UDLB6ZQ_UhMlxkOCzpM4tM,23053
5
- konfai/trainer.py,sha256=Edi8l8OOfCewYM-Cd5C5rCqCaprvlfxzohd4iLkK5u0,20632
6
- konfai/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- konfai/data/augmentation.py,sha256=mFVMpbJ8WBKGbMILdmTZYBA8k7kRDQVPOEy1A9t5QP4,32281
8
- konfai/data/data_manager.py,sha256=yphkTjk4_gyr_vOGodfhu9ImDHplRe2KR6dL2ORXzCw,29000
9
- konfai/data/patching.py,sha256=zAm6jjUW--lsqTBlDFICVlj7O_QOlSxStFAHS9S9H8I,14753
10
- konfai/data/transform.py,sha256=yZ6aALtVEqTYghREPH8Z1deglU7M4t4OiQqMY6gpjjA,26559
11
- konfai/metric/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- konfai/metric/measure.py,sha256=S65WGBRYMoalkwI_Le3C6K0tQmT4Qft82nUTBwhpvFU,26907
13
- konfai/metric/schedulers.py,sha256=VPp7zEwD0AtQz51XG0TlutD_NrsTZs4fstC5h8A8f8U,1309
14
- konfai/models/classification/convNeXt.py,sha256=hZQ_9I1lJW7DX8QnoeZ9L1br-98apV9VXGrsTAN25ds,9261
15
- konfai/models/classification/resnet.py,sha256=eBoS_zNczfa1EnECKKLr0Ow26ekR_4W5eji6p9cPfHk,7978
16
- konfai/models/generation/cStyleGan.py,sha256=7D8zZveDEZapFeaaDTe3wVhuDCCHLqq6cpXtl2-QaJA,8059
17
- konfai/models/generation/ddpm.py,sha256=jXb0eOU3i_gMHvj9pawVAWQDjMGl6SPfCc5m2Jzdrik,13175
18
- konfai/models/generation/diffusionGan.py,sha256=ZFKdRHvlajEPyw9_HCLo0Q92iChCtZd2dvi2nEF_tBI,33218
19
- konfai/models/generation/gan.py,sha256=RzpGNu8BlBVDCxFR5CCmEFYUzVBs2YrDl7trIos3ssw,7861
20
- konfai/models/generation/vae.py,sha256=zH8qk04z2lXDhXAVxTHiRIVMfRi3brB61lHGmEsE3kM,4675
21
- konfai/models/registration/registration.py,sha256=EAE3w8aic2fPWiJz0ilqrs2kCGUQD6NWvysVfHXxA_g,6329
22
- konfai/models/representation/representation.py,sha256=TiYcBBqZYySpwsRlnnBQh0QVW29Rcvb9GUjsqnCKKLM,2689
23
- konfai/models/segmentation/NestedUNet.py,sha256=hDSE7BJ17IqaiHWAD5zlVG7G_KvQzuQmVnAVsiYVE6E,10248
24
- konfai/models/segmentation/UNet.py,sha256=BktCRfAcCDtvGCw8wGfyZvBtT4G0Oy8teIcVgDFOurk,4078
25
- konfai/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- konfai/network/blocks.py,sha256=C_dOLmXovxANWCx7P439FzR_95Zisy2I1F7FEwwz7AE,14412
27
- konfai/network/network.py,sha256=LHeA7HtsVYO7BJu2_kqh23q2GIANn5ZSa4LhKMt7dJg,48642
28
- konfai/utils/ITK.py,sha256=OxTieDNNYHGkn7zxJsAG-6ecRG1VYMvn1dlBbBe1DOs,13955
29
- konfai/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- konfai/utils/config.py,sha256=f7o83ix5_oNbr2pki-Czqr-yHi-8n92ZL64nlo0XGwA,12514
31
- konfai/utils/dataset.py,sha256=6ZzevdhJ7e5zlXATAVwSh9O6acKXM7gYNxkMAa5DrmM,36351
32
- konfai/utils/registration.py,sha256=v1srEBOcgDnHrx0YtsK6bcj0yCMH7wNeaQ3wC7gEvOw,8898
33
- konfai/utils/utils.py,sha256=mQQ6FB0Jw7Odg5GxYeTApR6lvFhXn_iz-GVGZRngGQA,24934
34
- konfai-1.1.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
35
- konfai-1.1.7.dist-info/METADATA,sha256=DJ2n6Rc9NF018KsJPQxFHpQmlDazUnrrP4zHtgE4_Ew,2515
36
- konfai-1.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
- konfai-1.1.7.dist-info/entry_points.txt,sha256=fG82HRN5-g39ACSOCtij_I3N6EHxfYnMR0D7TI_8pW8,81
38
- konfai-1.1.7.dist-info/top_level.txt,sha256=xF470dkIlFoFqTZEOlRehKJr4WU_8OKGXrJqYm9vWKs,7
39
- konfai-1.1.7.dist-info/RECORD,,
File without changes