def test_configurable__benchmark(): """ Test if `@configurable` is within the ballpark of a native decorator in performance. """ def baseline(function): @wraps(function) def decorator(*args, **kwargs): return function(*args, **kwargs) return decorator lambda_ = lambda arg: arg other_lambda_ = lambda arg: arg native = baseline(lambda_) configured = configurable(other_lambda_) add_config({configured: HParams(arg='')}) samples = 10000 # NOTE: The timer decisions are inspired by the native `timeit` module. gc.disable() iterator = itertools.repeat(None, samples) start = time.perf_counter() for _ in iterator: native('') native_elapsed = time.perf_counter() - start iterator = itertools.repeat(None, samples) start = time.perf_counter() for _ in iterator: configured() configured_elapsed = time.perf_counter() - start gc.enable() assert (configured_elapsed / samples) - (native_elapsed / samples) < 3e-05
def test__resolve_configuration__external_internal_library(): """ Test resolution for an internal api of an external library. """ _pytest.python_api.approx = configurable(_pytest.python_api.approx) parsed = _parse_configuration({'pytest.approx': HParams(expected='')}) function_signature = _get_function_signature(pytest.approx.__wrapped__) assert isinstance( _resolve_configuration(parsed)[function_signature], HParams)
def test__resolve_configuration__external_library(): """ Test resolution for an external library and with a none-empty `HParams`. """ pytest.approx = configurable(pytest.approx) parsed = _parse_configuration({'pytest.approx': HParams(expected='')}) function_signature = _get_function_signature(pytest.approx.__wrapped__) assert isinstance( _resolve_configuration(parsed)[function_signature], HParams)
def test__resolve_configuration__built_in_function(): """ Test resolution for an built in function. """ builtins.open = configurable(builtins.open) function_name = 'builtins.open' parsed = _parse_configuration({function_name: HParams()}) function_signature = _get_function_signature(builtins.open.__wrapped__) assert isinstance(_resolve_configuration(parsed)[function_signature], HParams)
def test__resolve_configuration__lambda_function(): """ Test resolution for an lambda function. """ configured = configurable(lambda: None) function_name = ('tests.test_hparams.test__resolve_configuration__lambda_function' '.<locals>.<lambda>') parsed = _parse_configuration({function_name: HParams()}) function_signature = _get_function_signature(configured.__wrapped__) assert isinstance(_resolve_configuration(parsed)[function_signature], HParams)
def test__configurable__regression(): """ Test if `@configurable` fails with a none-overridden `__init__` function for a global class. TODO: Support this use case. Curiously, this works for none-global classes though. """ _test__resolve_configuration__super_class.__init__ = configurable( _test__resolve_configuration__super_class.__init__) with pytest.raises(TypeError): add_config({_test__resolve_configuration__super_class.__init__: HParams()})
def test__configurable__regression(warnings_mock): """ Test if `@configurable` fails with a none-overridden `__init__` function for a global class. TODO: Support this use case. Curiously, this works for none-global classes though. """ _test__resolve_configuration__super_class.__init__ = configurable( _test__resolve_configuration__super_class.__init__) add_config({_test__resolve_configuration__super_class.__init__: HParams()}) assert warnings_mock.warn.call_count == 1