Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions feature_engine/_check_init_parameters/check_variables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from typing import Any, List, Union

Variables = Union[None, int, str, List[Union[str, int]]]


def _check_variables_input_value(variables: Variables) -> Any:
"""
Checks that the input value for the `variables` parameter located in the init of
all Feature-engine transformers is of the correct type.
Allowed values are None, int, str or list of strings and integers.

Parameters
----------
variables : string, int, list of strings, list of integers. Default=None

Returns
-------
variables: same as input
"""

msg = (
"`variables` should contain a string, an integer or a list of strings or "
f"integers. Got {variables} instead."
)
msg_dupes = "The list entered in `variables` contains duplicated variable names."
msg_empty = "The list of `variables` is empty."

if variables is not None:
if isinstance(variables, list):
if not all(isinstance(i, (str, int)) for i in variables):
raise ValueError(msg)
if len(variables) == 0:
raise ValueError(msg_empty)
if len(variables) != len(set(variables)):
raise ValueError(msg_dupes)
else:
if not isinstance(variables, (str, int)):
raise ValueError(msg)
return variables
6 changes: 3 additions & 3 deletions feature_engine/_prediction/base_predictor.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
)
from feature_engine.encoding import MeanEncoder
from feature_engine.tags import _return_tags
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import (
find_categorical_and_numerical_variables,
Expand Down Expand Up @@ -98,7 +98,7 @@ def __init__(
f"Got {strategy} instead."
)

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.bins = bins
self.strategy = strategy

Expand Down
2 changes: 1 addition & 1 deletion feature_engine/creation/base_creation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from sklearn.utils.validation import check_is_fitted

from feature_engine._base_transformers.mixins import GetFeatureNamesOutMixin
from feature_engine._check_input_parameters.check_init_input_params import (
from feature_engine._check_init_parameters.check_init_input_params import (
_check_param_drop_original,
_check_param_missing_values,
)
Expand Down
12 changes: 6 additions & 6 deletions feature_engine/creation/cyclical_features.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
FitFromDictMixin,
GetFeatureNamesOutMixin,
)
from feature_engine._check_input_parameters.check_init_input_params import (
from feature_engine._check_init_parameters.check_init_input_params import (
_check_param_drop_original,
)
from feature_engine._check_input_parameters.check_input_dictionary import (
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine._check_init_parameters.check_input_dictionary import (
_check_numerical_dict,
)
from feature_engine._docstrings.fit_attributes import (
Expand All @@ -28,9 +31,6 @@
_transform_creation_docstring,
)
from feature_engine._docstrings.substitute import Substitution
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
)


@Substitution(
Expand Down Expand Up @@ -129,7 +129,7 @@ def __init__(
_check_numerical_dict(max_values)
_check_param_drop_original(drop_original)

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.max_values = max_values
self.drop_original = drop_original

Expand Down
6 changes: 3 additions & 3 deletions feature_engine/datetime/datetime.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
FEATURES_SUFFIXES,
FEATURES_SUPPORTED,
)
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling._variable_type_checks import (
_is_categorical_and_is_datetime,
Expand Down Expand Up @@ -219,7 +219,7 @@ def __init__(
if utc is not None and not isinstance(utc, bool):
raise ValueError("utc takes only booleans or None. " f"Got {utc} instead.")

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.drop_original = drop_original
self.missing_values = missing_values
self.dayfirst = dayfirst
Expand Down
8 changes: 4 additions & 4 deletions feature_engine/datetime/datetime_subtraction.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
check_X,
)
from feature_engine.variable_handling import find_or_check_datetime_variables
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)

_example = """
Expand Down Expand Up @@ -198,8 +198,8 @@ def __init__(
)

super().__init__(missing_values, drop_original)
self.variables = _check_init_parameter_variables(variables)
self.reference = _check_init_parameter_variables(reference)
self.variables = _check_variables_input_value(variables)
self.reference = _check_variables_input_value(reference)
self.new_variables_names = new_variables_names
self.output_unit = output_unit
self.dayfirst = dayfirst
Expand Down
6 changes: 3 additions & 3 deletions feature_engine/discretisation/decision_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
from feature_engine._docstrings.methods import _fit_transform_docstring
from feature_engine._docstrings.substitute import Substitution
from feature_engine.tags import _return_tags
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)


Expand Down Expand Up @@ -172,7 +172,7 @@ def __init__(
self.cv = cv
self.scoring = scoring
self.regression = regression
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.param_grid = param_grid
self.random_state = random_state

Expand Down
6 changes: 3 additions & 3 deletions feature_engine/discretisation/equal_frequency.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
)
from feature_engine._docstrings.substitute import Substitution
from feature_engine.discretisation.base_discretiser import BaseDiscretiser
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)


Expand Down Expand Up @@ -143,7 +143,7 @@ def __init__(
super().__init__(return_object, return_boundaries, precision)

self.q = q
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)

def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
"""
Expand Down
6 changes: 3 additions & 3 deletions feature_engine/discretisation/equal_width.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
)
from feature_engine._docstrings.substitute import Substitution
from feature_engine.discretisation.base_discretiser import BaseDiscretiser
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)


Expand Down Expand Up @@ -151,7 +151,7 @@ def __init__(
super().__init__(return_object, return_boundaries, precision)

self.bins = bins
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)

def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
"""
Expand Down
8 changes: 4 additions & 4 deletions feature_engine/discretisation/geometric_width.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
_transform_discretiser_docstring,
)
from feature_engine._docstrings.substitute import Substitution
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.discretisation.base_discretiser import BaseDiscretiser

Expand All @@ -42,7 +42,7 @@
n_features_in_=_n_features_in_docstring,
fit_transform=_fit_transform_docstring,
power="{1/n}",
subindex="{i+1}"
subindex="{i+1}",
)
class GeometricWidthDiscretiser(BaseDiscretiser):
"""
Expand Down Expand Up @@ -142,7 +142,7 @@ def __init__(
super().__init__(return_object, return_boundaries, precision)

self.bins = bins
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)

def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
"""
Expand Down
8 changes: 4 additions & 4 deletions feature_engine/encoding/base_encoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
check_X,
)
from feature_engine.tags import _return_tags
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import (
find_all_variables,
Expand Down Expand Up @@ -54,7 +54,7 @@ def __init__(
f"Got {ignore_format} instead."
)

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.ignore_format = ignore_format


Expand Down Expand Up @@ -95,7 +95,7 @@ def __init__(
f"Got {ignore_format} instead."
)

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.ignore_format = ignore_format
self.missing_values = missing_values

Expand Down
8 changes: 4 additions & 4 deletions feature_engine/imputation/arbitrary_number.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import pandas as pd

from feature_engine._check_input_parameters.check_input_dictionary import (
from feature_engine._check_init_parameters.check_input_dictionary import (
_check_numerical_dict,
)
from feature_engine._docstrings.fit_attributes import (
Expand All @@ -22,8 +22,8 @@
from feature_engine._docstrings.substitute import Substitution
from feature_engine.dataframe_checks import check_X
from feature_engine.imputation.base_imputer import BaseImputer
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import (
find_or_check_numerical_variables,
Expand Down Expand Up @@ -125,7 +125,7 @@ def __init__(

_check_numerical_dict(imputer_dict)

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)

self.imputer_dict = imputer_dict

Expand Down
6 changes: 3 additions & 3 deletions feature_engine/imputation/categorical.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
from feature_engine.dataframe_checks import check_X
from feature_engine.imputation.base_imputer import BaseImputer
from feature_engine.tags import _return_tags
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import (
find_all_variables,
Expand Down Expand Up @@ -144,7 +144,7 @@ def __init__(

self.imputation_method = imputation_method
self.fill_value = fill_value
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.return_object = return_object
self.ignore_format = ignore_format

Expand Down
6 changes: 3 additions & 3 deletions feature_engine/imputation/drop_missing_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
from feature_engine.dataframe_checks import check_X
from feature_engine.imputation.base_imputer import BaseImputer
from feature_engine.tags import _return_tags
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import find_all_variables

Expand Down Expand Up @@ -122,7 +122,7 @@ def __init__(
f"Got {threshold} instead."
)

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.missing_only = missing_only
self.threshold = threshold

Expand Down
6 changes: 3 additions & 3 deletions feature_engine/imputation/end_tail.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
from feature_engine._docstrings.substitute import Substitution
from feature_engine.dataframe_checks import check_X
from feature_engine.imputation.base_imputer import BaseImputer
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import (
find_or_check_numerical_variables,
Expand Down Expand Up @@ -157,7 +157,7 @@ def __init__(
self.imputation_method = imputation_method
self.tail = tail
self.fold = fold
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)

def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
"""
Expand Down
6 changes: 3 additions & 3 deletions feature_engine/imputation/mean_median.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
from feature_engine._docstrings.substitute import Substitution
from feature_engine.dataframe_checks import check_X
from feature_engine.imputation.base_imputer import BaseImputer
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import (
find_or_check_numerical_variables,
Expand Down Expand Up @@ -106,7 +106,7 @@ def __init__(
raise ValueError("imputation_method takes only values 'median' or 'mean'")

self.imputation_method = imputation_method
self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)

def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
"""
Expand Down
6 changes: 3 additions & 3 deletions feature_engine/imputation/missing_indicator.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
from feature_engine.dataframe_checks import check_X
from feature_engine.imputation.base_imputer import BaseImputer
from feature_engine.tags import _return_tags
from feature_engine.variable_handling._init_parameter_checks import (
_check_init_parameter_variables,
from feature_engine._check_init_parameters.check_variables import (
_check_variables_input_value,
)
from feature_engine.variable_handling.variable_type_selection import find_all_variables

Expand Down Expand Up @@ -108,7 +108,7 @@ def __init__(
if not isinstance(missing_only, bool):
raise ValueError("missing_only takes values True or False")

self.variables = _check_init_parameter_variables(variables)
self.variables = _check_variables_input_value(variables)
self.missing_only = missing_only

def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
Expand Down
Loading