def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ == "test_relations": _series_map = get_convert_map() all_relations_tested(_series_map) argsvalues = [] for item in _test_suite: for source_type, relation_type, series_list in _series_map: if item in relation_type: args = { "id": f"{item.name}: {relation_type} -> {source_type}" } if item.name not in series_list: args["marks"] = pytest.mark.xfail(raises=ValueError) argsvalues.append( pytest.param(source_type, relation_type, item, **args)) metafunc.parametrize( argnames=["source_type", "relation_type", "series"], argvalues=argsvalues) if metafunc.function.__name__ in [ "test_consistency", "test_side_effects", "test_multiple_inference", ]: argsvalues = [] for series in _test_suite: args = {"id": f"{series.name}"} argsvalues.append(pytest.param(series, **args)) metafunc.parametrize(argnames=["series"], argvalues=argsvalues)
def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ in [ "test_consistency", "test_traversal_mutex" ]: argsvalues = [] for series in _test_suite: args = {"id": series.name} argsvalues.append(pytest.param(series, **args)) metafunc.parametrize(argnames=["series"], argvalues=argsvalues) if metafunc.function.__name__ == "test_inference": argsvalues = [] inferred_series_type_map = infer_series_type_map() for series in _test_suite: expected_type = inferred_series_type_map[series.name] for test_type in typeset.types: args = { "id": "{name} x {type} expected {expected}".format( name=series.name, type=test_type, expected=test_type == expected_type, ) } difference = test_type != expected_type argsvalues.append( pytest.param(series, test_type, typeset, difference, **args)) metafunc.parametrize( argnames=["series", "expected_type", "typeset", "difference"], argvalues=argsvalues, )
def relations_transform_test(): convert_map = get_convert_map() relation_tests = { get_relation(*conversions[0:2]): conversions[2] for conversions in convert_map } series_dict = {s.name: s for s in get_series()} performance_list = [] for relation, names in relation_tests.items(): test_series = {name: series_dict[name] for name in names} performance_list.extend( profile_relation_transform(relation, test_series)) df = pd.DataFrame.from_records(performance_list) grouper = "relation" df[grouper] = df[grouper].astype(str) aggs = ["min", "max"] agg_labels = ["worst", "best"] summary_cols = ["series", "big O"] agg_df = df.groupby(grouper).agg(aggs).reset_index()[[grouper] + summary_cols] agg_df.columns = ["_".join(col).strip("_") for col in agg_df.columns] colrenames = { f"{name}_{agg}": f"{rename} {name}" for name in summary_cols for agg, rename in zip(aggs, agg_labels) } agg_df.rename(columns=colrenames, inplace=True) df["normed run time"] = df["average run time"] / df[ "average run time"].min() df = df.groupby(grouper)["normed run time"].describe().sort_values("50%") df = pd.merge(df, agg_df, on=grouper, how="left") return df
def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ in [ "test_consistency", "test_traversal_mutex" ]: argsvalues = [] for series in _test_suite: args = {"id": series.name} argsvalues.append(pytest.param(series, **args)) metafunc.parametrize(argnames=["series"], argvalues=argsvalues)
def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ in [ "test_consistency", "test_side_effects", "test_multiple_inference", ]: argsvalues = [] for series in _test_suite: args = {"id": str(series.name)} argsvalues.append(pytest.param(series, **args)) metafunc.parametrize(argnames=["series"], argvalues=argsvalues)
def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ == "test_contains": _series_map = get_contains_map() all_series_included(_test_suite, _series_map) argsvalues = [] for item in _test_suite: for type, series_list in _series_map.items(): args = { "id": "{item_name} x {item_type}".format(item_name=item.name, item_type=type) } member = item.name in series_list argsvalues.append(pytest.param(item, type, member, **args)) metafunc.parametrize(argnames=["series", "type", "member"], argvalues=argsvalues)
def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ == "test_contains": _series_map = get_contains_map() all_series_included(_test_suite, _series_map) argsvalues = [] for item in _test_suite: for type, series_list in _series_map.items(): args = { "id": "{item_name} x {item_type}".format(item_name=item.name, item_type=type) } if item.name not in series_list: args["marks"] = pytest.mark.xfail(raises=AssertionError) argsvalues.append(pytest.param(item, type, **args)) metafunc.parametrize(argnames=["series", "type"], argvalues=argsvalues)
def pytest_generate_tests(metafunc): _test_suite = get_series() if metafunc.function.__name__ == "test_relations": _series_map = get_convert_map() all_relations_tested(_series_map) argsvalues = [] for item in _test_suite: for source_type, relation_type, series_list in _series_map: if item in relation_type: args = { "id": "{name}: {relation_type} -> {source_type}".format( name=item.name, relation_type=relation_type, source_type=source_type, ) } member = item.name in series_list argsvalues.append( pytest.param(source_type, relation_type, item, member, **args)) metafunc.parametrize( argnames=["source_type", "relation_type", "series", "member"], argvalues=argsvalues, ) if metafunc.function.__name__ in [ "test_consistency", "test_side_effects", "test_multiple_inference", ]: argsvalues = [] for series in _test_suite: args = {"id": str(series.name)} argsvalues.append(pytest.param(series, **args)) metafunc.parametrize(argnames=["series"], argvalues=argsvalues)
def performance_report(membership=True): series_dict = {s.name: s for s in get_series()} conv_map = get_contains_map() performance_list = [] for type, series_names in conv_map.items(): if membership: # True: "series in type" test_series = {name: series_dict[name] for name in series_names} else: # False: "series in type" test_series = { s.name: s for s in series_dict.values() if s.name not in series_names } performance_list.extend(profile_type(type, test_series)) df = pd.DataFrame.from_records(performance_list) df["type"] = df["type"].astype(str) aggs = ["min", "max"] agg_labels = ["worst", "best"] summary_cols = ["series", "big O"] agg_df = df.groupby("type").agg(aggs).reset_index()[["type"] + summary_cols] agg_df.columns = ["_".join(col).strip("_") for col in agg_df.columns] colrenames = { f"{name}_{agg}": f"{rename} {name}" for name in summary_cols for agg, rename in zip(aggs, agg_labels) } agg_df.rename(columns=colrenames, inplace=True) df["normed run time"] = df["average run time"] / df[ "average run time"].min() df = df.groupby("type")["normed run time"].describe().sort_values("50%") df = pd.merge(df, agg_df, on="type", how="left") return df
File, Float, Generic, Geometry, Image, Integer, IPAddress, Object, Ordinal, Path, String, Time, TimeDelta, ) series = get_series() typeset = CompleteSet() contains_map = { Integer: { "int_series", "Int64_int_series", "int_range", "Int64_int_nan_series", "int_series_boolean", }, Count: {"np_uint32"}, Path: {"path_series_linux", "path_series_linux_missing", "path_series_windows"}, URL: {"url_series", "url_nan_series", "url_none_series"},