@@ -376,45 +376,46 @@ def _fit_transform(self, X, y, func, fitted=False):
376
376
else :
377
377
raise
378
378
379
- def _calculate_inverse_indices (self , X ):
379
+ def _calculate_inverse_indices (self , X , Xs ):
380
380
"""
381
381
Private function to calcuate indicies for inverse_transform
382
382
"""
383
383
# checks for overlap
384
- all_indexes = set ()
384
+ all_indices = set ()
385
385
input_indices = []
386
386
for name , trans , cols in self .transformers :
387
387
col_indices = _get_column_indices (X , cols )
388
388
col_indices_set = set (col_indices )
389
- if not all_indexes .isdisjoint (col_indices_set ):
390
- self ._invert_error = ("Unable to invert: transformers "
391
- " contain overlaping columns" )
389
+ if not all_indices .isdisjoint (col_indices_set ):
390
+ self ._invert_error = (
391
+ "transformers contain overlapping columns" )
392
392
return
393
393
if trans == 'drop' :
394
- self ._invert_error = "'{}' drops columns" .format (name )
394
+ self ._invert_error = ("dropping columns is not supported. "
395
+ "'{}' drops columns" .format (name ))
395
396
return
396
397
input_indices .append (col_indices )
397
- all_indexes .update (col_indices_set )
398
+ all_indices .update (col_indices_set )
398
399
399
400
# check remainder
400
401
remainder_indices = self ._remainder .indices
401
402
if (remainder_indices is not None
402
403
and self ._remainder .transformer == 'drop' ):
403
- self ._invert_error = "remainder drops columns"
404
+ self ._invert_error = ("dropping columns is not supported. "
405
+ "remainder drops columns" )
404
406
return
405
407
406
408
if remainder_indices is not None :
407
409
input_indices .append (remainder_indices )
408
410
409
411
self ._input_indices = input_indices
410
412
self ._n_features_in = X .shape [1 ]
411
- self ._X_columns = X . columns if hasattr (X , 'columns' ) else None
413
+ self ._X_columns = getattr (X , 'columns' , None )
412
414
self ._X_is_sparse = sparse .issparse (X )
413
415
self ._invert_error = ""
414
416
self ._output_indices = []
415
417
cur_index = 0
416
418
417
- Xs = self ._fit_transform (X [0 :1 ], None , _transform_one , fitted = True )
418
419
for X_transform in Xs :
419
420
X_features = X_transform .shape [- 1 ]
420
421
self ._output_indices .append (
@@ -492,7 +493,7 @@ def fit_transform(self, X, y=None):
492
493
self .sparse_output_ = False
493
494
494
495
self ._update_fitted_transformers (transformers )
495
- self ._calculate_inverse_indices (X )
496
+ self ._calculate_inverse_indices (X , Xs )
496
497
self ._validate_output (Xs )
497
498
498
499
return _hstack (list (Xs ), self .sparse_output_ )
@@ -555,12 +556,12 @@ def inverse_transform(self, X):
555
556
trans = FunctionTransformer (
556
557
validate = False , accept_sparse = True , check_inverse = False )
557
558
558
- inv_transformers .append ((name , trans , sub , get_weight (name )))
559
+ inv_transformers .append ((trans , sub , get_weight (name )))
559
560
560
561
Xs = Parallel (n_jobs = self .n_jobs )(
561
562
delayed (_inverse_transform_one )(
562
563
trans , X_sel , weight )
563
- for _ , trans , X_sel , weight in inv_transformers )
564
+ for trans , X_sel , weight in inv_transformers )
564
565
565
566
if not Xs :
566
567
# All transformers are None
@@ -570,7 +571,7 @@ def inverse_transform(self, X):
570
571
inverse_Xs = sparse .lil_matrix ((Xs [0 ].shape [0 ],
571
572
self ._n_features_in ))
572
573
else :
573
- inverse_Xs = np .zeros ((Xs [0 ].shape [0 ], self ._n_features_in ))
574
+ inverse_Xs = np .empty ((Xs [0 ].shape [0 ], self ._n_features_in ))
574
575
for indices , inverse_X in zip (self ._input_indices , Xs ):
575
576
if sparse .issparse (inverse_X ):
576
577
if self ._X_is_sparse :
0 commit comments