nkululeko 0.83.3__py3-none-any.whl → 0.84.1__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.
- nkululeko/augmenting/resampler.py +9 -4
- nkululeko/constants.py +1 -1
- nkululeko/demo.py +6 -7
- nkululeko/demo_predictor.py +4 -3
- nkululeko/experiment.py +15 -12
- nkululeko/explore.py +29 -23
- nkululeko/feat_extract/feats_analyser.py +33 -0
- nkululeko/glob_conf.py +5 -0
- nkululeko/models/finetune_model.py +181 -0
- nkululeko/models/model.py +1 -0
- nkululeko/models/model_bayes.py +1 -0
- nkululeko/models/model_cnn.py +6 -9
- nkululeko/models/model_gmm.py +2 -3
- nkululeko/models/model_knn.py +1 -0
- nkululeko/models/model_knn_reg.py +1 -0
- nkululeko/models/model_lin_reg.py +1 -0
- nkululeko/models/model_mlp.py +17 -7
- nkululeko/models/model_mlp_regression.py +7 -12
- nkululeko/models/model_svm.py +1 -0
- nkululeko/models/model_svr.py +1 -0
- nkululeko/models/model_tree.py +1 -0
- nkululeko/models/model_tree_reg.py +1 -0
- nkululeko/models/model_xgb.py +5 -3
- nkululeko/models/model_xgr.py +6 -4
- nkululeko/resample.py +76 -54
- nkululeko/test_pretrain.py +294 -0
- nkululeko/utils/util.py +81 -35
- {nkululeko-0.83.3.dist-info → nkululeko-0.84.1.dist-info}/METADATA +10 -1
- {nkululeko-0.83.3.dist-info → nkululeko-0.84.1.dist-info}/RECORD +32 -30
- {nkululeko-0.83.3.dist-info → nkululeko-0.84.1.dist-info}/LICENSE +0 -0
- {nkululeko-0.83.3.dist-info → nkululeko-0.84.1.dist-info}/WHEEL +0 -0
- {nkululeko-0.83.3.dist-info → nkululeko-0.84.1.dist-info}/top_level.txt +0 -0
nkululeko/utils/util.py
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# util.py
|
2
|
-
import pandas as pd
|
3
2
|
import ast
|
3
|
+
import configparser
|
4
|
+
import os.path
|
5
|
+
import pickle
|
4
6
|
import sys
|
7
|
+
|
5
8
|
import numpy as np
|
6
|
-
import
|
7
|
-
|
9
|
+
import pandas as pd
|
10
|
+
|
8
11
|
import audeer
|
9
12
|
import audformat
|
10
13
|
|
@@ -30,43 +33,58 @@ class Util:
|
|
30
33
|
else:
|
31
34
|
self.caller = ""
|
32
35
|
if has_config:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
36
|
+
try:
|
37
|
+
import nkululeko.glob_conf as glob_conf
|
38
|
+
self.config = glob_conf.config
|
39
|
+
self.got_data_roots = self.config_val(
|
40
|
+
"DATA", "root_folders", False)
|
41
|
+
if self.got_data_roots:
|
42
|
+
# if there is a global data rootfolder file, read from there
|
43
|
+
if not os.path.isfile(self.got_data_roots):
|
44
|
+
self.error(f"no such file: {self.got_data_roots}")
|
45
|
+
self.data_roots = configparser.ConfigParser()
|
46
|
+
self.data_roots.read(self.got_data_roots)
|
47
|
+
except (ModuleNotFoundError, AttributeError):
|
48
|
+
self.config = None
|
49
|
+
self.got_data_roots = False
|
44
50
|
|
45
51
|
def get_path(self, entry):
|
46
52
|
"""
|
47
53
|
This method allows the user to get the directory path for the given argument.
|
48
54
|
"""
|
49
|
-
|
50
|
-
|
51
|
-
try:
|
52
|
-
entryn = self.config["EXP"][entry]
|
53
|
-
except KeyError:
|
54
|
-
# some default values
|
55
|
+
if self.config is None:
|
56
|
+
# If no configuration file is provided, use default paths
|
55
57
|
if entry == "fig_dir":
|
56
|
-
|
58
|
+
dir_name = "./images/"
|
57
59
|
elif entry == "res_dir":
|
58
|
-
|
60
|
+
dir_name = "./results/"
|
59
61
|
elif entry == "model_dir":
|
60
|
-
|
62
|
+
dir_name = "./models/"
|
61
63
|
else:
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
dir_name = "./store/"
|
65
|
+
else:
|
66
|
+
root = os.path.join(self.config["EXP"]["root"], "")
|
67
|
+
name = self.config["EXP"]["name"]
|
68
|
+
try:
|
69
|
+
entryn = self.config["EXP"][entry]
|
70
|
+
except KeyError:
|
71
|
+
# some default values
|
72
|
+
if entry == "fig_dir":
|
73
|
+
entryn = "./images/"
|
74
|
+
elif entry == "res_dir":
|
75
|
+
entryn = "./results/"
|
76
|
+
elif entry == "model_dir":
|
77
|
+
entryn = "./models/"
|
78
|
+
else:
|
79
|
+
entryn = "./store/"
|
80
|
+
|
81
|
+
# Expand image, model and result directories with run index
|
82
|
+
if entry == "fig_dir" or entry == "res_dir" or entry == "model_dir":
|
83
|
+
run = self.config_val("EXP", "run", 0)
|
84
|
+
entryn = entryn + f"run_{run}/"
|
85
|
+
|
86
|
+
dir_name = f"{root}{name}/{entryn}"
|
68
87
|
|
69
|
-
dir_name = f"{root}{name}/{entryn}"
|
70
88
|
audeer.mkdir(dir_name)
|
71
89
|
return dir_name
|
72
90
|
|
@@ -98,7 +116,8 @@ class Util:
|
|
98
116
|
)
|
99
117
|
return default
|
100
118
|
if not default in self.stopvals:
|
101
|
-
self.debug(
|
119
|
+
self.debug(
|
120
|
+
f"value for {key} not found, using default: {default}")
|
102
121
|
return default
|
103
122
|
|
104
123
|
def set_config(self, config):
|
@@ -135,7 +154,8 @@ class Util:
|
|
135
154
|
if len(df) == 0:
|
136
155
|
return df
|
137
156
|
if not isinstance(df.index, pd.MultiIndex):
|
138
|
-
df.index = audformat.utils.to_segmented_index(
|
157
|
+
df.index = audformat.utils.to_segmented_index(
|
158
|
+
df.index, allow_nat=False)
|
139
159
|
return df
|
140
160
|
|
141
161
|
def _get_value_descript(self, section, name):
|
@@ -240,11 +260,14 @@ class Util:
|
|
240
260
|
print(df.head(1))
|
241
261
|
|
242
262
|
def config_val(self, section, key, default):
|
263
|
+
if self.config is None:
|
264
|
+
return default
|
243
265
|
try:
|
244
266
|
return self.config[section][key]
|
245
267
|
except KeyError:
|
246
|
-
if not
|
247
|
-
self.debug(
|
268
|
+
if default not in self.stopvals:
|
269
|
+
self.debug(
|
270
|
+
f"value for {key} not found, using default: {default}")
|
248
271
|
return default
|
249
272
|
|
250
273
|
def config_val_list(self, section, key, default):
|
@@ -252,7 +275,8 @@ class Util:
|
|
252
275
|
return ast.literal_eval(self.config[section][key])
|
253
276
|
except KeyError:
|
254
277
|
if not default in self.stopvals:
|
255
|
-
self.debug(
|
278
|
+
self.debug(
|
279
|
+
f"value for {key} not found, using default: {default}")
|
256
280
|
return default
|
257
281
|
|
258
282
|
def continuous_to_categorical(self, series):
|
@@ -295,6 +319,28 @@ class Util:
|
|
295
319
|
f" {vals.argmax()}"
|
296
320
|
)
|
297
321
|
|
322
|
+
def exist_pickle(self, name):
|
323
|
+
store = self.get_path("store")
|
324
|
+
name = "/".join([store, name]) + ".pkl"
|
325
|
+
if os.path.isfile(name):
|
326
|
+
return True
|
327
|
+
return False
|
328
|
+
|
329
|
+
def to_pickle(self, anyobject, name):
|
330
|
+
store = self.get_path("store")
|
331
|
+
name = "/".join([store, name]) + ".pkl"
|
332
|
+
self.debug(f"saving {name}")
|
333
|
+
with open(name, "wb") as handle:
|
334
|
+
pickle.dump(anyobject, handle)
|
335
|
+
|
336
|
+
def from_pickle(self, name):
|
337
|
+
store = self.get_path("store")
|
338
|
+
name = "/".join([store, name]) + ".pkl"
|
339
|
+
self.debug(f"loading {name}")
|
340
|
+
with open(name, "rb") as handle:
|
341
|
+
any_opject = pickle.load(handle)
|
342
|
+
return any_opject
|
343
|
+
|
298
344
|
def write_store(self, df, storage, format):
|
299
345
|
if format == "pkl":
|
300
346
|
df.to_pickle(storage)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: nkululeko
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.84.1
|
4
4
|
Summary: Machine learning audio prediction experiments based on templates
|
5
5
|
Home-page: https://github.com/felixbur/nkululeko
|
6
6
|
Author: Felix Burkhardt
|
@@ -333,6 +333,15 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
|
|
333
333
|
Changelog
|
334
334
|
=========
|
335
335
|
|
336
|
+
Version 0.84.1
|
337
|
+
--------------
|
338
|
+
* made resample independent of config file
|
339
|
+
|
340
|
+
Version 0.84.0
|
341
|
+
--------------
|
342
|
+
* added SHAP analysis
|
343
|
+
* started with finetuning
|
344
|
+
|
336
345
|
Version 0.83.3
|
337
346
|
--------------
|
338
347
|
* fixed a naming error in trill features that prevented storage of experiment
|
@@ -2,35 +2,36 @@ nkululeko/__init__.py,sha256=62f8HiEzJ8rG2QlTFJXUCMpvuH3fKI33DoJSj33mscc,63
|
|
2
2
|
nkululeko/aug_train.py,sha256=YhuZnS_WVWnun9G-M6g5n6rbRxoVREz6Zh7k6qprFNQ,3194
|
3
3
|
nkululeko/augment.py,sha256=4MG0apTAG5RgkuJrYEjGgDdbodZWi_HweSPNI1JJ5QA,3051
|
4
4
|
nkululeko/cacheddataset.py,sha256=lIJ6hUo5LoxSrzXtWV8mzwO7wRtUETWnOQ4ws2XfL1E,969
|
5
|
-
nkululeko/constants.py,sha256=
|
6
|
-
nkululeko/demo.py,sha256=
|
5
|
+
nkululeko/constants.py,sha256=31GQXyAN-nrfQCNIt6_aSkBVeE_J3GO-PklTEy6EgBg,39
|
6
|
+
nkululeko/demo.py,sha256=8bl15Kitoesnz8oa8yrs52T6YCSOhWbbq9PnZ8Hj6D0,3232
|
7
7
|
nkululeko/demo_feats.py,sha256=sAeGFojhEj9WEDFtG3SzPBmyYJWLF2rkbpp65m8Ujo4,2025
|
8
|
-
nkululeko/demo_predictor.py,sha256
|
9
|
-
nkululeko/experiment.py,sha256=
|
10
|
-
nkululeko/explore.py,sha256=
|
8
|
+
nkululeko/demo_predictor.py,sha256=es56xbT8ifkS_vnrlb5NTZT54gNmeUtNlA4zVA_gnN8,4757
|
9
|
+
nkululeko/experiment.py,sha256=mYdHfInMkuOI3frkZo7oaEe9viO-Qa1ZShyF6MPozcU,30225
|
10
|
+
nkululeko/explore.py,sha256=lDzRoW_Taa5u4BBABZLD89BcQWnYlrftJR4jgt1yyj0,2609
|
11
11
|
nkululeko/export.py,sha256=mHeEAAmtZuxdyebLlbSzPrHSi9OMgJHbk35d3DTxRBc,4632
|
12
12
|
nkululeko/feature_extractor.py,sha256=8mssYKmo4LclVI-hiLmJEDZ0ZPyDavFG2YwtXcrGzwM,3976
|
13
13
|
nkululeko/file_checker.py,sha256=LoLnL8aHpW-axMQ46qbqrManTs5otG9ShpEZuz9iRSk,3474
|
14
14
|
nkululeko/filter_data.py,sha256=w-X2mhKdYr5DxDIz50E5yzO6Jmzk4jjDBoXsgOOVtcA,7222
|
15
|
-
nkululeko/glob_conf.py,sha256=
|
15
|
+
nkululeko/glob_conf.py,sha256=KL9YJQTHvTztxo1vr25qRRgaPnx4NTg0XrdbovKGMmw,525
|
16
16
|
nkululeko/modelrunner.py,sha256=GwDXcE2gDQXat4W0-HhHQ1BcUNCRBXMBQ4QycfHp_5c,9288
|
17
17
|
nkululeko/multidb.py,sha256=fG3VukEWP1vreVN4gB1IRXxwwg4jLftsSEYtu0o1f78,5634
|
18
18
|
nkululeko/nkuluflag.py,sha256=PGWSmZz-PiiHLgcZJAoGOI_Y-sZDVI1ksB8p5r7riWM,3725
|
19
19
|
nkululeko/nkululeko.py,sha256=Kn3s2E3yyH8cJ7z6lkMxrnqtCxTu7-qfe9Zr_ONTD5g,1968
|
20
20
|
nkululeko/plots.py,sha256=nd9tF_61DyAx7oGZF8gTrHXazkgFjFe4eClxu1nQ_XU,23276
|
21
21
|
nkululeko/predict.py,sha256=sF091sSSLnEWcISx9ZcULLie3tY5XeFsQJd6b3vrxFg,2409
|
22
|
-
nkululeko/resample.py,sha256=
|
22
|
+
nkululeko/resample.py,sha256=IPtYqU0nhZ-CqO_O1jJN0EvpfjxHZdFRwdTpEJOVuaQ,3354
|
23
23
|
nkululeko/runmanager.py,sha256=eTM1DNQKt1lxYhzt4vZyZluPXW9sWlIJHNQzex4lkJU,7624
|
24
24
|
nkululeko/scaler.py,sha256=4nkIqoajkIkuTPK0Z02ifMN_awl6fP_i-GBYdoGYgGM,4101
|
25
25
|
nkululeko/segment.py,sha256=YLKckX44tbvTb3LrdgYw9X4guzuF27sutl92z9DkpZU,4835
|
26
26
|
nkululeko/syllable_nuclei.py,sha256=Sky-C__MeUDaxqHnDl2TGLLYOYvsahD35TUjWGeG31k,10047
|
27
27
|
nkululeko/test.py,sha256=1w624vo5KTzmFC8BUStGlLDmIEAFuJUz7J0W-gp7AxI,1677
|
28
28
|
nkululeko/test_predictor.py,sha256=_w5J8CxH6hmW3mLTKbdfmywl5QpdNAnW1Y8TE5GtlfE,3237
|
29
|
+
nkululeko/test_pretrain.py,sha256=4b_39l01dySei_e0ys2NKo9Gipf1Fukp1GvhQllFHt8,8131
|
29
30
|
nkululeko/augmenting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
31
|
nkululeko/augmenting/augmenter.py,sha256=XAt0dpmlnKxqyysqCgV3rcz-pRIvOz7rU7dmGDCVAzs,2905
|
31
32
|
nkululeko/augmenting/randomsplicer.py,sha256=Z5rxdKKUpuncLWuTS6xVfVKUeVbeiYU_dLRHQ5fcg4Y,2669
|
32
33
|
nkululeko/augmenting/randomsplicing.py,sha256=ldym9vZNsZIU5BAAaJVaOmAgmVHNs4a5i5K3bW-WAQU,1791
|
33
|
-
nkululeko/augmenting/resampler.py,sha256=
|
34
|
+
nkululeko/augmenting/resampler.py,sha256=nOBsiQpX6p4jXsP7x6wak78F3B5YYYRmC_iHX8iuOXs,3542
|
34
35
|
nkululeko/autopredict/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
36
|
nkululeko/autopredict/ap_age.py,sha256=2Wn5E-Jd49sTn40WqaMcYtUEl4zEq3OY75XmjOpdxsA,1095
|
36
37
|
nkululeko/autopredict/ap_arousal.py,sha256=ymt0diu4v1osw3VxJbSglsVKDAJYRzebQ2TTfFMKKxk,1024
|
@@ -49,7 +50,7 @@ nkululeko/data/dataset_csv.py,sha256=uLa7jW4w2ft299NkpXZMD361kPHF8oSYoIZ_ucxhuOM
|
|
49
50
|
nkululeko/feat_extract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
51
|
nkululeko/feat_extract/feats_agender.py,sha256=Qm69G4kqAyTVVk7wwRgrXlNwGaDMGRYyKGpuf0vOEgM,3113
|
51
52
|
nkululeko/feat_extract/feats_agender_agender.py,sha256=tgH2BnwcxpvuLmOkrMbVdBSX0Onfz2MG12FsddalRKI,3424
|
52
|
-
nkululeko/feat_extract/feats_analyser.py,sha256=
|
53
|
+
nkululeko/feat_extract/feats_analyser.py,sha256=Y9hMpZ9WsQOrxTP3B1diHnzMeOgwbVpVFWVlIyhHMJs,12722
|
53
54
|
nkululeko/feat_extract/feats_auddim.py,sha256=VlzKKXTXa5kjLgQBWyEFy-daIyU1SkOwCCOIhKsWCvE,3162
|
54
55
|
nkululeko/feat_extract/feats_audmodel.py,sha256=VjBNgAoxsHJhwr6Kwt9CxX6SaCM4RK_OV-GU2W5-bhU,3187
|
55
56
|
nkululeko/feat_extract/feats_clap.py,sha256=nR6eEIRdsMHcfmD1bNtt5WfDvkxKjvEbukSSrXHm-HU,3489
|
@@ -74,21 +75,22 @@ nkululeko/losses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
74
75
|
nkululeko/losses/loss_ccc.py,sha256=NOK0y0fxKUnU161B5geap6Fmn8QzoPl2MqtPiV8IuJE,976
|
75
76
|
nkululeko/losses/loss_softf1loss.py,sha256=5gW-PuiqeAZcRgfwjueIOQtMokOjZWgQnVIv59HKTCo,1309
|
76
77
|
nkululeko/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
|
-
nkululeko/models/
|
78
|
-
nkululeko/models/
|
79
|
-
nkululeko/models/
|
80
|
-
nkululeko/models/
|
81
|
-
nkululeko/models/
|
82
|
-
nkululeko/models/
|
83
|
-
nkululeko/models/
|
84
|
-
nkululeko/models/
|
85
|
-
nkululeko/models/
|
86
|
-
nkululeko/models/
|
87
|
-
nkululeko/models/
|
88
|
-
nkululeko/models/
|
89
|
-
nkululeko/models/
|
90
|
-
nkululeko/models/
|
91
|
-
nkululeko/models/
|
78
|
+
nkululeko/models/finetune_model.py,sha256=bx9NsFpEqf_mBohcrf-9lWjrC4AtOIJ7holNXwaFo2Y,4910
|
79
|
+
nkululeko/models/model.py,sha256=fL6LB6I9Oqo_OWUIptqiu6abuxVYYv8bW2a3m4XSLqU,11601
|
80
|
+
nkululeko/models/model_bayes.py,sha256=WJFZ8wFKwWATz6MhmjeZIi1Pal1viU549WL_PjXDSy8,406
|
81
|
+
nkululeko/models/model_cnn.py,sha256=bJxqwe6FnVR2hFeqN6EXexYGgvKYFED1VOhBXVlLWaE,9954
|
82
|
+
nkululeko/models/model_gmm.py,sha256=hZ9UO36KNf48qa3J-xkWIicIj9-TApmt21zNES2vEOs,649
|
83
|
+
nkululeko/models/model_knn.py,sha256=KlnrJfwiVnmXZrAaYGFrKA2f5sznvTzSJQ8-5etOP0k,599
|
84
|
+
nkululeko/models/model_knn_reg.py,sha256=j7YFfVm6xOR2d9yBYdQiwwqYfqkX0JynX_qLCvkr1fk,610
|
85
|
+
nkululeko/models/model_lin_reg.py,sha256=0D7mSnSwK82lNWDMwHYRyq3FmGa6y-DHDGg4qUe85q4,422
|
86
|
+
nkululeko/models/model_mlp.py,sha256=JtC83GYKtqCTW00rUm_xKSKjAsdMUAsqtnBfEFZBCwA,9854
|
87
|
+
nkululeko/models/model_mlp_regression.py,sha256=PO5qyfjgAJH8hawhmeXDaUThyXDYdM642dQHkO0NY7c,10204
|
88
|
+
nkululeko/models/model_svm.py,sha256=rsME3KvKvNG7bdE5lbvYUu85WZhaASZxxmdNDIVJRZ4,940
|
89
|
+
nkululeko/models/model_svr.py,sha256=_YZeksqB3eBENGlg3g9RwYFlk9rQQ-XCeNBKLlGGVoE,725
|
90
|
+
nkululeko/models/model_tree.py,sha256=rf16faUm4o2LJgkoYpeY998b8DQIvXZ73_m1IS3TnnE,417
|
91
|
+
nkululeko/models/model_tree_reg.py,sha256=IgQcPTE-304HQLYSKPF8Z4ot_Ur9dH01fZjS0nXke_M,428
|
92
|
+
nkululeko/models/model_xgb.py,sha256=Thgx5ESdIok4v72mKh4plxpo4smGcKALWNCJTDScY0M,447
|
93
|
+
nkululeko/models/model_xgr.py,sha256=aGBtNGLWjOE_2rICGYGFxmT8DtnHYsIl1lIpMtghHsY,418
|
92
94
|
nkululeko/reporting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
95
|
nkululeko/reporting/defines.py,sha256=IsY1YgKRMaABpylVKjBJgJ5bNCEbGCVA_E6pivraqSU,648
|
94
96
|
nkululeko/reporting/latex_writer.py,sha256=qiCRSmB4KOD_za4oHu5x-PhwjZohzfo8wecMOwlXZwc,1886
|
@@ -102,9 +104,9 @@ nkululeko/segmenting/seg_silero.py,sha256=lLytS38KzARS17omwv8VBw-zz60RVSXGSvZ5Ev
|
|
102
104
|
nkululeko/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
105
|
nkululeko/utils/files.py,sha256=UiGAtZRWYjHSvlmPaTMtzyNNGE6qaLaxQkybctS7iRM,4021
|
104
106
|
nkululeko/utils/stats.py,sha256=1yUq0FTOyqkU8TwUocJRYdJaqMU5SlOBBRUun9STo2M,2829
|
105
|
-
nkululeko/utils/util.py,sha256=
|
106
|
-
nkululeko-0.
|
107
|
-
nkululeko-0.
|
108
|
-
nkululeko-0.
|
109
|
-
nkululeko-0.
|
110
|
-
nkululeko-0.
|
107
|
+
nkululeko/utils/util.py,sha256=b1IHFucRNuF9Iyv5IJeK4AEg0Rga0xKG80UM5GWWdHA,13816
|
108
|
+
nkululeko-0.84.1.dist-info/LICENSE,sha256=0zGP5B_W35yAcGfHPS18Q2B8UhvLRY3dQq1MhpsJU_U,1076
|
109
|
+
nkululeko-0.84.1.dist-info/METADATA,sha256=Y647w-vkRjPG7fssLTEF_Aa_pP74aN-WPCGv6r0_NcE,36420
|
110
|
+
nkululeko-0.84.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
111
|
+
nkululeko-0.84.1.dist-info/top_level.txt,sha256=DPFNNSHPjUeVKj44dVANAjuVGRCC3MusJ08lc2a8xFA,10
|
112
|
+
nkululeko-0.84.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|