nkululeko 0.77.0__py3-none-any.whl → 0.77.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.
Files changed (62) hide show
  1. nkululeko/augment.py +1 -1
  2. nkululeko/augmenting/augmenter.py +1 -1
  3. nkululeko/augmenting/randomsplicer.py +1 -1
  4. nkululeko/augmenting/resampler.py +4 -9
  5. nkululeko/autopredict/ap_age.py +2 -4
  6. nkululeko/autopredict/ap_arousal.py +2 -4
  7. nkululeko/autopredict/ap_dominance.py +2 -4
  8. nkululeko/autopredict/ap_gender.py +2 -4
  9. nkululeko/autopredict/ap_mos.py +2 -4
  10. nkululeko/autopredict/ap_pesq.py +2 -4
  11. nkululeko/autopredict/ap_sdr.py +2 -4
  12. nkululeko/autopredict/ap_snr.py +2 -4
  13. nkululeko/autopredict/ap_stoi.py +2 -4
  14. nkululeko/autopredict/ap_valence.py +2 -4
  15. nkululeko/constants.py +1 -1
  16. nkululeko/data/dataset.py +1 -1
  17. nkululeko/demo.py +4 -10
  18. nkululeko/demo_predictor.py +1 -1
  19. nkululeko/experiment.py +1 -1
  20. nkululeko/explore.py +6 -13
  21. nkululeko/export.py +14 -25
  22. nkululeko/feat_extract/feats_analyser.py +110 -18
  23. nkululeko/feat_extract/feats_clap.py +4 -10
  24. nkululeko/feat_extract/feats_import.py +2 -4
  25. nkululeko/feat_extract/feats_mld.py +4 -9
  26. nkululeko/feat_extract/feats_mos.py +5 -13
  27. nkululeko/feat_extract/feats_oxbow.py +5 -12
  28. nkululeko/feat_extract/feats_snr.py +3 -7
  29. nkululeko/feat_extract/feats_squim.py +5 -13
  30. nkululeko/feat_extract/feats_trill.py +5 -13
  31. nkululeko/feat_extract/featureset.py +2 -4
  32. nkululeko/feat_extract/feinberg_praat.py +1 -1
  33. nkululeko/feature_extractor.py +1 -1
  34. nkululeko/file_checker.py +5 -5
  35. nkululeko/filter_data.py +6 -16
  36. nkululeko/modelrunner.py +1 -1
  37. nkululeko/models/model.py +1 -1
  38. nkululeko/models/model_cnn.py +1 -1
  39. nkululeko/models/model_mlp.py +1 -1
  40. nkululeko/models/model_mlp_regression.py +1 -1
  41. nkululeko/nkululeko.py +5 -13
  42. nkululeko/plots.py +8 -4
  43. nkululeko/predict.py +5 -13
  44. nkululeko/reporter.py +1 -1
  45. nkululeko/reporting/latex_writer.py +7 -2
  46. nkululeko/reporting/report.py +2 -1
  47. nkululeko/resample.py +5 -13
  48. nkululeko/runmanager.py +1 -1
  49. nkululeko/scaler.py +1 -1
  50. nkululeko/segment.py +1 -1
  51. nkululeko/segmenting/seg_silero.py +3 -5
  52. nkululeko/test.py +4 -10
  53. nkululeko/test_predictor.py +1 -1
  54. nkululeko/utils/stats.py +8 -0
  55. {nkululeko-0.77.0.dist-info → nkululeko-0.77.1.dist-info}/METADATA +6 -1
  56. nkululeko-0.77.1.dist-info/RECORD +104 -0
  57. nkululeko/balancer.py +0 -1
  58. nkululeko-0.77.0.dist-info/RECORD +0 -105
  59. /nkululeko/{util.py → utils/util.py} +0 -0
  60. {nkululeko-0.77.0.dist-info → nkululeko-0.77.1.dist-info}/LICENSE +0 -0
  61. {nkululeko-0.77.0.dist-info → nkululeko-0.77.1.dist-info}/WHEEL +0 -0
  62. {nkululeko-0.77.0.dist-info → nkululeko-0.77.1.dist-info}/top_level.txt +0 -0
nkululeko/augment.py CHANGED
@@ -7,7 +7,7 @@ import os
7
7
  import ast
8
8
  from nkululeko.experiment import Experiment
9
9
  import configparser
10
- from nkululeko.util import Util
10
+ from nkululeko.utils.util import Util
11
11
  from nkululeko.constants import VERSION
12
12
 
13
13
 
@@ -14,7 +14,7 @@ from audiomentations import (
14
14
  Shift,
15
15
  TimeStretch,
16
16
  )
17
- from nkululeko.util import Util
17
+ from nkululeko.utils.util import Util
18
18
  from tqdm import tqdm
19
19
 
20
20
 
@@ -20,7 +20,7 @@ import numpy as np
20
20
  import audiofile as af
21
21
  from audformat.utils import map_file_path
22
22
  import audeer
23
- from nkululeko.util import Util
23
+ from nkululeko.utils.util import Util
24
24
  import nkululeko.augmenting.randomsplicing as rsp
25
25
 
26
26
 
@@ -8,7 +8,7 @@ import shutil
8
8
  import audformat
9
9
  import pandas as pd
10
10
  import torchaudio
11
- from nkululeko.util import Util
11
+ from nkululeko.utils.util import Util
12
12
 
13
13
 
14
14
  class Resampler:
@@ -42,9 +42,7 @@ class Resampler:
42
42
  continue
43
43
  if org_sr != self.SAMPLING_RATE:
44
44
  self.util.debug(f"resampling {f} (sr = {org_sr})")
45
- resampler = torchaudio.transforms.Resample(
46
- org_sr, self.SAMPLING_RATE
47
- )
45
+ resampler = torchaudio.transforms.Resample(org_sr, self.SAMPLING_RATE)
48
46
  signal = resampler(signal)
49
47
  if replace:
50
48
  torchaudio.save(
@@ -61,9 +59,7 @@ class Resampler:
61
59
  self.df = self.df.set_index(
62
60
  self.df.index.set_levels(new_files, level="file")
63
61
  )
64
- target_file = self.util.config_val(
65
- "RESAMPLE", "target", "resampled.csv"
66
- )
62
+ target_file = self.util.config_val("RESAMPLE", "target", "resampled.csv")
67
63
  # remove encoded labels
68
64
  target = self.util.config_val("DATA", "target", "emotion")
69
65
  if "class_label" in self.df.columns:
@@ -72,8 +68,7 @@ class Resampler:
72
68
  # save file
73
69
  self.df.to_csv(target_file)
74
70
  self.util.debug(
75
- "saved resampled list of files to"
76
- f" {os.path.abspath(target_file)}"
71
+ "saved resampled list of files to" f" {os.path.abspath(target_file)}"
77
72
  )
78
73
  self.util.debug(f"resampled {succes} files, {error} errors")
79
74
 
@@ -2,7 +2,7 @@
2
2
  A predictor for age.
3
3
  Currently based on audEERING's agender model.
4
4
  """
5
- from nkululeko.util import Util
5
+ from nkululeko.utils.util import Util
6
6
  from nkululeko.feature_extractor import FeatureExtractor
7
7
  import ast
8
8
  import nkululeko.glob_conf as glob_conf
@@ -21,9 +21,7 @@ class AgePredictor:
21
21
 
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"predicting age for {split_selection} samples")
24
- feats_name = "_".join(
25
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
26
- )
24
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
27
25
  self.feature_extractor = FeatureExtractor(
28
26
  self.df, ["agender_agender"], feats_name, split_selection
29
27
  )
@@ -2,7 +2,7 @@
2
2
  A predictor for emotional arousal.
3
3
  Currently based on audEERING's emotional dimension model.
4
4
  """
5
- from nkululeko.util import Util
5
+ from nkululeko.utils.util import Util
6
6
  from nkululeko.feature_extractor import FeatureExtractor
7
7
  import ast
8
8
  import nkululeko.glob_conf as glob_conf
@@ -21,9 +21,7 @@ class ArousalPredictor:
21
21
 
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"predicting arousal for {split_selection} samples")
24
- feats_name = "_".join(
25
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
26
- )
24
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
27
25
  self.feature_extractor = FeatureExtractor(
28
26
  self.df, ["auddim"], feats_name, split_selection
29
27
  )
@@ -3,7 +3,7 @@ A predictor for emotional dominance.
3
3
  Currently based on audEERING's emotional dimension model.
4
4
  """
5
5
 
6
- from nkululeko.util import Util
6
+ from nkululeko.utils.util import Util
7
7
  from nkululeko.feature_extractor import FeatureExtractor
8
8
  import ast
9
9
  import nkululeko.glob_conf as glob_conf
@@ -21,9 +21,7 @@ class DominancePredictor:
21
21
 
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"predicting dominance for {split_selection} samples")
24
- feats_name = "_".join(
25
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
26
- )
24
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
27
25
  self.feature_extractor = FeatureExtractor(
28
26
  self.df, ["auddim"], feats_name, split_selection
29
27
  )
@@ -2,7 +2,7 @@
2
2
  A predictor for biological sex.
3
3
  Currently based on audEERING's agender model.
4
4
  """
5
- from nkululeko.util import Util
5
+ from nkululeko.utils.util import Util
6
6
  from nkululeko.feature_extractor import FeatureExtractor
7
7
  import ast
8
8
  import nkululeko.glob_conf as glob_conf
@@ -21,9 +21,7 @@ class GenderPredictor:
21
21
 
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"predicting gender for {split_selection} samples")
24
- feats_name = "_".join(
25
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
26
- )
24
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
27
25
  self.feature_extractor = FeatureExtractor(
28
26
  self.df, ["agender_agender"], feats_name, split_selection
29
27
  )
@@ -1,7 +1,7 @@
1
1
  """"
2
2
  A predictor for MOS - mean opinion score.
3
3
  """
4
- from nkululeko.util import Util
4
+ from nkululeko.utils.util import Util
5
5
  import ast
6
6
  import nkululeko.glob_conf as glob_conf
7
7
  from nkululeko.feature_extractor import FeatureExtractor
@@ -22,9 +22,7 @@ class MOSPredictor:
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"estimating MOS for {split_selection} samples")
24
24
  return_df = self.df.copy()
25
- feats_name = "_".join(
26
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
27
- )
25
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
28
26
  self.feature_extractor = FeatureExtractor(
29
27
  self.df, ["mos"], feats_name, split_selection
30
28
  )
@@ -1,7 +1,7 @@
1
1
  """"
2
2
  A predictor for PESQ - Perceptual Evaluation of Speech Quality.
3
3
  """
4
- from nkululeko.util import Util
4
+ from nkululeko.utils.util import Util
5
5
  import ast
6
6
  import nkululeko.glob_conf as glob_conf
7
7
  from nkululeko.feature_extractor import FeatureExtractor
@@ -22,9 +22,7 @@ class PESQPredictor:
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"estimating PESQ for {split_selection} samples")
24
24
  return_df = self.df.copy()
25
- feats_name = "_".join(
26
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
27
- )
25
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
28
26
  self.feature_extractor = FeatureExtractor(
29
27
  self.df, ["squim"], feats_name, split_selection
30
28
  )
@@ -2,7 +2,7 @@
2
2
  A predictor for SDR - Signal to Distortion Ratio.
3
3
  as estimated by Scale-Invariant Signal-to-Distortion Ratio (SI-SDR)
4
4
  """
5
- from nkululeko.util import Util
5
+ from nkululeko.utils.util import Util
6
6
  import ast
7
7
  import nkululeko.glob_conf as glob_conf
8
8
  from nkululeko.feature_extractor import FeatureExtractor
@@ -23,9 +23,7 @@ class SDRPredictor:
23
23
  def predict(self, split_selection):
24
24
  self.util.debug(f"estimating SDR for {split_selection} samples")
25
25
  return_df = self.df.copy()
26
- feats_name = "_".join(
27
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
28
- )
26
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
29
27
  self.feature_extractor = FeatureExtractor(
30
28
  self.df, ["squim"], feats_name, split_selection
31
29
  )
@@ -1,7 +1,7 @@
1
1
  """"
2
2
  A predictor for SNR - signal-to-noise ratio.
3
3
  """
4
- from nkululeko.util import Util
4
+ from nkululeko.utils.util import Util
5
5
  import ast
6
6
  import nkululeko.glob_conf as glob_conf
7
7
  from nkululeko.feature_extractor import FeatureExtractor
@@ -22,9 +22,7 @@ class SNRPredictor:
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"estimating SNR for {split_selection} samples")
24
24
  return_df = self.df.copy()
25
- feats_name = "_".join(
26
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
27
- )
25
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
28
26
  self.feature_extractor = FeatureExtractor(
29
27
  self.df, ["snr"], feats_name, split_selection
30
28
  )
@@ -1,7 +1,7 @@
1
1
  """"
2
2
  A predictor for STOI - Short-Time Objective Intelligibility (STOI)
3
3
  """
4
- from nkululeko.util import Util
4
+ from nkululeko.utils.util import Util
5
5
  import ast
6
6
  import nkululeko.glob_conf as glob_conf
7
7
  from nkululeko.feature_extractor import FeatureExtractor
@@ -22,9 +22,7 @@ class STOIPredictor:
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"estimating STOI for {split_selection} samples")
24
24
  return_df = self.df.copy()
25
- feats_name = "_".join(
26
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
27
- )
25
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
28
26
  self.feature_extractor = FeatureExtractor(
29
27
  self.df, ["squim"], feats_name, split_selection
30
28
  )
@@ -2,7 +2,7 @@
2
2
  A predictor for emotional valence.
3
3
  Currently based on audEERING's emotional dimension model.
4
4
  """
5
- from nkululeko.util import Util
5
+ from nkululeko.utils.util import Util
6
6
  from nkululeko.feature_extractor import FeatureExtractor
7
7
  import ast
8
8
  import nkululeko.glob_conf as glob_conf
@@ -21,9 +21,7 @@ class ValencePredictor:
21
21
 
22
22
  def predict(self, split_selection):
23
23
  self.util.debug(f"predicting valence for {split_selection} samples")
24
- feats_name = "_".join(
25
- ast.literal_eval(glob_conf.config["DATA"]["databases"])
26
- )
24
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
27
25
  self.feature_extractor = FeatureExtractor(
28
26
  self.df, ["auddim"], feats_name, split_selection
29
27
  )
nkululeko/constants.py CHANGED
@@ -1,2 +1,2 @@
1
- VERSION="0.77.0"
1
+ VERSION="0.77.1"
2
2
  SAMPLING_RATE = 16000
nkululeko/data/dataset.py CHANGED
@@ -14,7 +14,7 @@ import nkululeko.glob_conf as glob_conf
14
14
  from nkululeko.filter_data import DataFilter
15
15
  from nkululeko.plots import Plots
16
16
  from nkululeko.reporting.report_item import ReportItem
17
- from nkululeko.util import Util
17
+ from nkululeko.utils.util import Util
18
18
 
19
19
 
20
20
  class Dataset:
nkululeko/demo.py CHANGED
@@ -5,19 +5,15 @@
5
5
 
6
6
  from nkululeko.experiment import Experiment
7
7
  import configparser
8
- from nkululeko.util import Util
8
+ from nkululeko.utils.util import Util
9
9
  from nkululeko.constants import VERSION
10
10
  import argparse
11
11
  import os
12
12
 
13
13
 
14
14
  def main(src_dir):
15
- parser = argparse.ArgumentParser(
16
- description="Call the nkululeko framework."
17
- )
18
- parser.add_argument(
19
- "--config", default="exp.ini", help="The base configuration"
20
- )
15
+ parser = argparse.ArgumentParser(description="Call the nkululeko framework.")
16
+ parser.add_argument("--config", default="exp.ini", help="The base configuration")
21
17
  parser.add_argument(
22
18
  "--file", help="A file that should be processed (16kHz mono wav)"
23
19
  )
@@ -66,6 +62,4 @@ def main(src_dir):
66
62
 
67
63
  if __name__ == "__main__":
68
64
  cwd = os.path.dirname(os.path.abspath(__file__))
69
- main(
70
- cwd
71
- ) # use this if you want to state the config file path on command line
65
+ main(cwd) # use this if you want to state the config file path on command line
@@ -1,5 +1,5 @@
1
1
  import nkululeko.glob_conf as glob_conf
2
- from nkululeko.util import Util
2
+ from nkululeko.utils.util import Util
3
3
  import numpy as np
4
4
  import sounddevice as sd
5
5
  import audiofile
nkululeko/experiment.py CHANGED
@@ -25,7 +25,7 @@ from nkululeko.reporting.report import Report
25
25
  from nkululeko.runmanager import Runmanager
26
26
  from nkululeko.scaler import Scaler
27
27
  from nkululeko.test_predictor import Test_predictor
28
- from nkululeko.util import Util
28
+ from nkululeko.utils.util import Util
29
29
 
30
30
 
31
31
  class Experiment:
nkululeko/explore.py CHANGED
@@ -3,18 +3,15 @@
3
3
 
4
4
  from nkululeko.experiment import Experiment
5
5
  import configparser
6
- from nkululeko.util import Util
6
+ from nkululeko.utils.util import Util
7
7
  from nkululeko.constants import VERSION
8
8
  import argparse
9
9
  import os
10
10
 
11
+
11
12
  def main(src_dir):
12
- parser = argparse.ArgumentParser(
13
- description="Call the nkululeko framework."
14
- )
15
- parser.add_argument(
16
- "--config", default="exp.ini", help="The base configuration"
17
- )
13
+ parser = argparse.ArgumentParser(description="Call the nkululeko framework.")
14
+ parser.add_argument("--config", default="exp.ini", help="The base configuration")
18
15
  args = parser.parse_args()
19
16
  if args.config is not None:
20
17
  config_file = args.config
@@ -47,9 +44,7 @@ def main(src_dir):
47
44
 
48
45
  # split into train and test
49
46
  expr.fill_train_and_tests()
50
- util.debug(
51
- f"train shape : {expr.df_train.shape}, test shape:{expr.df_test.shape}"
52
- )
47
+ util.debug(f"train shape : {expr.df_train.shape}, test shape:{expr.df_test.shape}")
53
48
 
54
49
  plot_feats = eval(util.config_val("EXPL", "feature_distributions", "False"))
55
50
  tsne = eval(util.config_val("EXPL", "tsne", "False"))
@@ -70,6 +65,4 @@ def main(src_dir):
70
65
 
71
66
  if __name__ == "__main__":
72
67
  cwd = os.path.dirname(os.path.abspath(__file__))
73
- main(
74
- cwd
75
- ) # use this if you want to state the config file path on command line
68
+ main(cwd) # use this if you want to state the config file path on command line
nkululeko/export.py CHANGED
@@ -8,18 +8,14 @@ import audeer
8
8
  import argparse
9
9
  import audiofile
10
10
  from nkululeko.experiment import Experiment
11
- from nkululeko.util import Util
11
+ from nkululeko.utils.util import Util
12
12
  from nkululeko.constants import VERSION
13
13
  import shutil
14
14
 
15
15
 
16
16
  def main(src_dir):
17
- parser = argparse.ArgumentParser(
18
- description="Call the nkululeko framework."
19
- )
20
- parser.add_argument(
21
- "--config", default="exp.ini", help="The base configuration"
22
- )
17
+ parser = argparse.ArgumentParser(description="Call the nkululeko framework.")
18
+ parser.add_argument("--config", default="exp.ini", help="The base configuration")
23
19
  args = parser.parse_args()
24
20
  if args.config is not None:
25
21
  config_file = args.config
@@ -52,9 +48,7 @@ def main(src_dir):
52
48
 
53
49
  # split into train and test
54
50
  expr.fill_train_and_tests()
55
- util.debug(
56
- f"train shape : {expr.df_train.shape}, test shape:{expr.df_test.shape}"
57
- )
51
+ util.debug(f"train shape : {expr.df_train.shape}, test shape:{expr.df_test.shape}")
58
52
 
59
53
  # export
60
54
  df_train = expr.df_train
@@ -62,9 +56,7 @@ def main(src_dir):
62
56
  target_root = util.config_val("EXPORT", "root", "./exported_data/")
63
57
  orig_root = util.config_val("EXPORT", "orig_root", None)
64
58
  data_name = util.config_val("EXPORT", "data_name", "export")
65
- segments_as_files = eval(
66
- util.config_val("EXPORT", "segments_as_files", "False")
67
- )
59
+ segments_as_files = eval(util.config_val("EXPORT", "segments_as_files", "False"))
68
60
  audeer.mkdir(target_root)
69
61
  splits = {"train": df_train, "test": df_test}
70
62
  df_all = pd.DataFrame()
@@ -81,12 +73,11 @@ def main(src_dir):
81
73
  always_2d=True,
82
74
  )
83
75
  file_name = (
84
- os.path.splitext(file)[0]
85
- + "_"
86
- + start.total_seconds()
87
- + ".wav"
76
+ os.path.splitext(file)[0] + "_" + start.total_seconds() + ".wav"
77
+ )
78
+ wav_folder = (
79
+ f"{target_root}/{os.path.basename(os.path.normpath(orig_root))}"
88
80
  )
89
- wav_folder = f"{target_root}/{os.path.basename(os.path.normpath(orig_root))}"
90
81
  audeer.mkdir(wav_folder)
91
82
  new_rel_path = file_dir[
92
83
  file_dir.index(orig_root) + 1 + len(orig_root) :
@@ -99,7 +90,9 @@ def main(src_dir):
99
90
  files.append(new_file_name)
100
91
  else:
101
92
  file_name = os.path.basename(file)
102
- wav_folder = f"{target_root}/{os.path.basename(os.path.normpath(orig_root))}"
93
+ wav_folder = (
94
+ f"{target_root}/{os.path.basename(os.path.normpath(orig_root))}"
95
+ )
103
96
  audeer.mkdir(wav_folder)
104
97
  new_rel_path = file_dir[
105
98
  file_dir.index(orig_root) + 1 + len(orig_root) :
@@ -121,15 +114,11 @@ def main(src_dir):
121
114
  df_all = df_all.rename(columns={"class_label": target})
122
115
 
123
116
  df_all.to_csv(f"{target_root}/{data_name}.csv")
124
- util.debug(
125
- f"saved {data_name}.csv to {target_root}, {df.shape[0]} samples."
126
- )
117
+ util.debug(f"saved {data_name}.csv to {target_root}, {df.shape[0]} samples.")
127
118
 
128
119
  print("DONE")
129
120
 
130
121
 
131
122
  if __name__ == "__main__":
132
123
  cwd = os.path.dirname(os.path.abspath(__file__))
133
- main(
134
- cwd
135
- ) # use this if you want to state the config file path on command line
124
+ main(cwd) # use this if you want to state the config file path on command line