def gen_tables(basedir, datasets):


    mock_h = LogisticRegression(),
    methods = [method for method, _ in gen_CAP(mock_h, None)] + [method for method, _ in gen_CAP_cont_table(mock_h)]
    classifiers = [classifier for classifier, _ in gen_classifiers()]

    os.makedirs('./tables', exist_ok=True)

    with_oracle = 'oracle' in basedir

    tex_doc = """
    \\documentclass[10pt,a4paper]{article}
    \\usepackage[utf8]{inputenc}
    \\usepackage{amsmath}
    \\usepackage{amsfonts}
    \\usepackage{amssymb}
    \\usepackage{graphicx}
    \\usepackage{tabularx}
    \\usepackage{color}
    \\usepackage{colortbl}
    \\usepackage{xcolor}
    \\begin{document}
    """

    for classifier in classifiers:
        for metric in [measure for measure, _ in gen_acc_measure()]:

            table = Table(datasets, methods, prec_mean=5, clean_zero=True)
            for method, dataset in itertools.product(methods, datasets):
                path = getpath(basedir, classifier, metric, dataset, method)
                if not os.path.exists(path):
                    print('missing ', path)
                    continue
                results = json.load(open(path, 'r'))
                true_acc = results['true_acc']
                estim_acc = np.asarray(results['estim_acc'])
                if any(np.isnan(estim_acc)):
                    print(f'nan values found in {method=} {dataset=}')
                    continue
                if any(estim_acc>1.00001):
                    print(f'values >1 found in {method=} {dataset=} [max={estim_acc.max()}]')
                    continue
                if any(estim_acc<-0.00001):
                    print(f'values <0 found in {method=} {dataset=} [min={estim_acc.min()}]')
                    continue
                errors = cap_errors(true_acc, estim_acc)
                table.add(dataset, method, errors)

            tex = table.latexTabular()
            table_name = f'{basedir}_{classifier}_{metric}.tex'
            table_name = table_name.replace('/', '_')
            with open(f'./tables/{table_name}', 'wt') as foo:
                foo.write('\\begin{table}[h]\n')
                foo.write('\\centering\n')
                foo.write('\\resizebox{\\textwidth}{!}{%\n')
                foo.write('\\begin{tabular}{c|'+('c'*len(methods))+'}\n')
                foo.write(tex)
                foo.write('\\end{tabular}%\n')
                foo.write('}\n')
                foo.write('\\caption{Classifier ' + classifier.replace('_', ' ') + ('(oracle)' if with_oracle else '') +
                          ' evaluated in terms of ' + metric.replace('_', ' ') + '}\n')
                foo.write('\\end{table}\n')

            tex_doc += "\input{" + table_name + "}\n\n"

    tex_doc += """
    \\end{document}
    """
    with open(f'./tables/main.tex', 'wt') as foo:
        foo.write(tex_doc)

    print("[Tables Done] runing latex")
    os.chdir('./tables/')
    os.system('pdflatex main.tex')
    os.system('rm main.aux main.log')