@@ -2607,21 +2607,37 @@ def param_filter(p):
2607
2607
np .dtype (type_name )
2608
2608
for type_name in np .core .numerictypes .genericTypeRank
2609
2609
})
2610
- assert type (init_param .default ) in allowed_types
2610
+ assert type (init_param .default ) in allowed_types , (
2611
+ f"Parameter '{ init_param .name } ' of estimator "
2612
+ f"'{ Estimator .__name__ } ' is of type "
2613
+ f"{ type (init_param .default ).__name__ } which is not "
2614
+ f"allowed. All init parameters have to be immutable to "
2615
+ f"make cloning possible. Therefore we restrict the set of "
2616
+ f"legal types to "
2617
+ f"{ set (type .__name__ for type in allowed_types )} ."
2618
+ )
2611
2619
if init_param .name not in params .keys ():
2612
2620
# deprecated parameter, not in get_params
2613
- assert init_param .default is None
2621
+ assert init_param .default is None , (
2622
+ f"Estimator parameter '{ init_param .name } ' of estimator "
2623
+ f"'{ Estimator .__name__ } ' is not returned by get_params. "
2624
+ f"If it is deprecated, set its default value to None."
2625
+ )
2614
2626
continue
2615
2627
2616
2628
param_value = params [init_param .name ]
2617
2629
if isinstance (param_value , np .ndarray ):
2618
2630
assert_array_equal (param_value , init_param .default )
2619
2631
else :
2632
+ failure_text = (
2633
+ f"Parameter { init_param .name } was mutated on init. All "
2634
+ f"parameters must be stored unchanged."
2635
+ )
2620
2636
if is_scalar_nan (param_value ):
2621
2637
# Allows to set default parameters to np.nan
2622
- assert param_value is init_param .default , init_param . name
2638
+ assert param_value is init_param .default , failure_text
2623
2639
else :
2624
- assert param_value == init_param .default , init_param . name
2640
+ assert param_value == init_param .default , failure_text
2625
2641
2626
2642
2627
2643
def _enforce_estimator_tags_y (estimator , y ):
0 commit comments