在scikit-learn中,有一个函数parametrize_with_checks()被用作pytest夹具工厂--它返回一个pytest.mark.parametrize夹具,并被称为带有可迭代的估计量的装饰器。
@parameterize_with_checks(list_of_estimators)我的问题是,我的估算者列表可能会改变(或者我可能有多个列表),而我在一个固定设置中设置的每个列表。
这里是一个M(N)我们:
import pytest
from sklearn.linear_model import LinearRegression
from sklearn.utils.estimator_checks import parametrize_with_checks
@pytest.fixture
def models():
return (LinearRegression(fit_intercept=flag) for flag in (False, True))
class TestModels:
@parametrize_with_checks(models)
def test_1(self, estimator, check):
check(estimator)
print("Do other stuff...")
def test_2(self, models):
print("Do even more stuff...")但是,当models传递给parametrize_with_checks时,它仍然是一个函数对象,因此它会抛出一个错误。我怎么才能避开这一切?
发布于 2022-11-02 07:23:51
parametrize_with_checks()无法处理由固定装置设置的值。它只是作为一个函数来处理models,而不是一个固定设备。您只能从测试函数访问夹具。
因此,您需要将models设置为一个列表,或者调用parametrize_with_checks()中的模型函数。
import pytest
from sklearn.linear_model import LinearRegression
from sklearn.utils.estimator_checks import parametrize_with_checks
MODELS = [LinearRegression(fit_intercept=flag) for flag in (False, True)]
@pytest.fixture()
def models():
return [LinearRegression(fit_intercept=flag) for flag in (False, True)]
class TestModels:
@parametrize_with_checks(MODELS)
# OR
# @parametrize_with_checks(estimators=models())
def test_1(self, estimator, check):
check(estimator)
print("Do other stuff...")
def test_2(self, models):
print("Do even more stuff...")https://stackoverflow.com/questions/74281521
复制相似问题