Source code for mlprodict.tools.filename_helper

"""
A couple of tools related to filenames.


:githublink:`%|py|5`
"""
import os


[docs]def extract_information_from_filename(name): """ Returns a dictionary with information extracted from a filename. An example is better: .. runpython:: :showcode: from mlprodict.tools.filename_helper import extract_information_from_filename candidates = [ 'bench_DecisionTreeClassifier_default_b_cl_1_4_12_float_.py', 'bench_DecisionTreeClassifier_default_b_cl_64_10_20_12_double_.py', 'bench_DecisionTreeClassifier_default_b_cl_64_100_4_12_float_.py', 'bench_AdaBoostClassifier_default_b_cl_1000_50_12_float__fct.svg', 'bench_AdaBoostClassifier_default_m_cl_1_4_12_float__line.svg', 'bench_LogisticRegression_liblinear_b_cl_solverliblinear_1_4_12_float_nozipmap_fct.svg', ] for name in candidates: d = extract_information_from_filename(name) print(d) :githublink:`%|py|31` """ spl = os.path.splitext(os.path.split(name)[-1])[0].split('_') res = {} for v in spl: if v == "bench": continue if not v: continue if "A" <= v[0] <= "Z": res['model'] = v continue try: i = int(v) except ValueError: i = None if i is not None: if i == 64: res['double'] = True continue if 'N' not in res: res['N'] = i continue if 'nf' not in res: res['nf'] = i continue if 'opset' not in res: res['opset'] = i continue raise ValueError( # pragma: no cover "Unable to parse '{}'.".format(name)) if 'scenario' not in res: res['scenario'] = v continue if 'N' in res: if v in ('fct', 'line'): res['profile'] = v continue res['opt'] = res.get('opt', '') + '_' + v continue if len(v) <= 4: res['problem'] = res.get('problem', '') + '_' + v else: res['opt'] = res.get('opt', '') + '_' + v for k in res: if isinstance(res[k], str): res[k] = res[k].strip('_') rep = { 'LinReg': 'LinearRegression', 'LinRegressor': 'LinearRegression', 'LogReg': 'LogisticRegression', 'HGB': 'HistGradientBoosting', } if 'model' in res: if res['model'].endswith('Clas'): res['model'] += "sifier" elif res['model'].endswith('Reg'): res['model'] += "ressor" if res['model'].startswith('HGB'): res['model'] = "HistGradientBoosting" + \ res['model'][3:] # pragma: no cover res['model'] = rep.get(res['model'], res['model']) return res
[docs]def make_readable_title(infos): """ Creates a readable title based on the test information. :githublink:`%|py|103` """ sp = [infos['model']] if 'problem' in infos: sp.append('[{}]'.format(infos['problem'])) if 'scenario' in infos: sp.append('[{}]'.format(infos['scenario'])) if 'N' in infos: sp.append('N={}'.format(infos['N'])) if 'nf' in infos: sp.append('nf={}'.format(infos['nf'])) if 'opset' in infos: sp.append('ops={}'.format(infos['opset'])) if 'double' in infos: if infos['double']: sp.append('x64') if 'opt' in infos: sp.append('[{}]'.format(infos['opt'])) if 'profile' in infos: sp.append('by {}'.format(infos['profile'])) return " ".join(sp)