diff --git a/formulaic/materializers/types/factor_values.py b/formulaic/materializers/types/factor_values.py index 6d68701..cc01d43 100644 --- a/formulaic/materializers/types/factor_values.py +++ b/formulaic/materializers/types/factor_values.py @@ -13,16 +13,16 @@ Union, ) -try: - from typing import SupportsIndex -except ImportError: # pragma: no cover - from typing_extensions import SupportsIndex - import wrapt from formulaic.parser.types import Factor from formulaic.utils.sentinels import MISSING, MissingType +try: + from typing import SupportsIndex +except ImportError: # pragma: no cover + from typing_extensions import SupportsIndex + if TYPE_CHECKING: # pragma: no cover from formulaic.model_spec import ModelSpec diff --git a/formulaic/transforms/contrasts.py b/formulaic/transforms/contrasts.py index ab36b16..e3ae0a4 100644 --- a/formulaic/transforms/contrasts.py +++ b/formulaic/transforms/contrasts.py @@ -69,7 +69,10 @@ def encoder( encoder_state: dict[str, Any], model_spec: ModelSpec, ) -> FactorValues: - values = pandas.Series(values) + # wrapped numpy arrays are problematic + values = pandas.Series( + values.__wrapped__ if isinstance(values, FactorValues) else values + ) values = values.drop(index=values.index[drop_rows]) return encode_contrasts( values, @@ -129,6 +132,8 @@ def encode_contrasts( # pylint: disable=dangerous-default-value # always repla levels = ( levels if levels is not None else _state.get("categories") ) # TODO: Is this too early to provide useful feedback to users? + if isinstance(data, FactorValues): # wrapped numpy arrays are problematic + data = data.__wrapped__ if contrasts is None: contrasts = TreatmentContrasts()