@@ -320,12 +320,12 @@ class Inputs:
320320 DEFAULT_PARAMETER_INDEX = 0
321321 DEFAULT_MINIMUM = 1
322322 DEFAULT_MAXIMUM = 9
323- parameter_index = Setting (DEFAULT_PARAMETER_INDEX , schema_only = True )
323+ parameter_index = Setting (DEFAULT_PARAMETER_INDEX )
324324 FROM_RANGE , MANUAL = range (2 )
325325 type : int = Setting (FROM_RANGE )
326- minimum : int = Setting (DEFAULT_MINIMUM , schema_only = True )
327- maximum : int = Setting (DEFAULT_MAXIMUM , schema_only = True )
328- manual_steps : str = Setting ("" , schema_only = True )
326+ minimum : int = Setting (DEFAULT_MINIMUM )
327+ maximum : int = Setting (DEFAULT_MAXIMUM )
328+ manual_steps : str = Setting ("" )
329329 auto_commit = Setting (True )
330330
331331 class Error (OWWidget .Error ):
@@ -345,13 +345,10 @@ def __init__(self):
345345 self ._data : Optional [Table ] = None
346346 self ._learner : Optional [Learner ] = None
347347 self .__parameters_model = QStandardItemModel ()
348-
349- self .__pending_parameter_index = self .parameter_index \
350- if self .parameter_index != self .DEFAULT_PARAMETER_INDEX else None
351- self .__pending_minimum = self .minimum \
352- if self .minimum != self .DEFAULT_MINIMUM else None
353- self .__pending_maximum = self .maximum \
354- if self .maximum != self .DEFAULT_MAXIMUM else None
348+ self .__initialize_settings = \
349+ self .parameter_index == self .DEFAULT_PARAMETER_INDEX and \
350+ self .minimum == self .DEFAULT_MINIMUM and \
351+ self .maximum == self .DEFAULT_MAXIMUM
355352
356353 self .setup_gui ()
357354 VisualSettingsDialog (
@@ -418,10 +415,13 @@ def _():
418415
419416 gui .auto_apply (self .buttonsArea , self , "auto_commit" )
420417
418+ self ._update_preview ()
419+
421420 def __on_type_changed (self ):
422421 self ._settings_changed ()
423422
424423 def __on_parameter_changed (self ):
424+ self .__initialize_settings = True
425425 self ._set_range_controls ()
426426 self ._settings_changed ()
427427
@@ -439,19 +439,16 @@ def _settings_changed(self):
439439
440440 @property
441441 def fitted_parameters (self ) -> list :
442- if not self ._learner \
443- or isinstance (self ._learner , Fitter ) and not self ._data :
442+ if not self ._learner :
444443 return []
445- return self ._learner .fitted_parameters ( self . _data )
444+ return self ._learner .fitted_parameters
446445
447446 @property
448447 def initial_parameters (self ) -> dict :
449448 if not self ._learner :
450449 return {}
451450 if isinstance (self ._learner , Fitter ):
452- if not self ._data :
453- return {}
454- return self ._learner .get_params (self ._data )
451+ return self ._learner .get_params (self ._data or "classification" )
455452 return self ._learner .params
456453
457454 @property
@@ -495,38 +492,32 @@ def _steps_from_manual(self) -> tuple[int, ...]:
495492 @Inputs .data
496493 @check_multiple_targets_input
497494 def set_data (self , data : Optional [Table ]):
495+ self .Error .not_enough_data .clear ()
496+ self .Error .missing_target .clear ()
498497 self ._data = data
498+ if self ._data and len (self ._data ) < N_FOLD :
499+ self .Error .not_enough_data ()
500+ self ._data = None
501+ if self ._data and len (self ._data .domain .class_vars ) < 1 :
502+ self .Error .missing_target ()
503+ self ._data = None
499504
500505 @Inputs .learner
501506 def set_learner (self , learner : Optional [Learner ]):
507+ if self ._learner :
508+ self .__initialize_settings = \
509+ not isinstance (self ._learner , type (learner ))
502510 self ._learner = learner
503511
504512 def handleNewSignals (self ):
505513 self .Warning .clear ()
506514 self .Error .unknown_err .clear ()
507- self .Error .not_enough_data .clear ()
508515 self .Error .incompatible_learner .clear ()
509516 self .Error .manual_steps_error .clear ()
510517 self .Error .min_max_error .clear ()
511- self .Error .missing_target .clear ()
512518 self .clear ()
513519
514- if self ._data is None or self ._learner is None :
515- return
516-
517- if self ._data and len (self ._data ) < N_FOLD :
518- self .Error .not_enough_data ()
519- self ._data = None
520- return
521-
522- if self ._data and len (self ._data .domain .class_vars ) < 1 :
523- self .Error .missing_target ()
524- self ._data = None
525- return
526-
527- reason = self ._learner .incompatibility_reason (self ._data .domain )
528- if reason :
529- self .Error .incompatible_learner (reason )
520+ if self ._learner is None :
530521 return
531522
532523 for param in self .fitted_parameters :
@@ -535,19 +526,22 @@ def handleNewSignals(self):
535526 if not self .fitted_parameters :
536527 self .Warning .no_parameters (self ._learner .name )
537528 else :
538- if self .__pending_parameter_index is not None :
539- self .parameter_index = self .__pending_parameter_index
529+ if self .__initialize_settings :
530+ self .parameter_index = 0
531+ else :
540532 self .__combo .setCurrentIndex (self .parameter_index )
541- self .__pending_parameter_index = None
542533 self ._set_range_controls ()
543- if self .__pending_minimum is not None :
544- self .minimum = self .__pending_minimum
545- self .__pending_minimum = None
546- if self .__pending_maximum is not None :
547- self .maximum = self .__pending_maximum
548- self .__pending_maximum = None
549534
550535 self ._update_preview ()
536+
537+ if self ._data is None :
538+ return
539+
540+ reason = self ._learner .incompatibility_reason (self ._data .domain )
541+ if reason :
542+ self .Error .incompatible_learner (reason )
543+ return
544+
551545 self .commit .now ()
552546
553547 def _set_range_controls (self ):
@@ -561,19 +555,24 @@ def _set_range_controls(self):
561555 if param .min is not None :
562556 self .__spin_min .setMinimum (param .min )
563557 self .__spin_max .setMinimum (param .min )
564- self .minimum = param .min
558+ if self .__initialize_settings :
559+ self .minimum = param .min
565560 else :
566561 self .__spin_min .setMinimum (- MIN_MAX_SPIN )
567562 self .__spin_max .setMinimum (- MIN_MAX_SPIN )
568- self .minimum = self .initial_parameters [param .name ]
563+ if self .__initialize_settings :
564+ self .minimum = self .initial_parameters [param .name ]
569565 if param .max is not None :
570566 self .__spin_min .setMaximum (param .max )
571567 self .__spin_max .setMaximum (param .max )
572- self .maximum = param .max
568+ if self .__initialize_settings :
569+ self .maximum = param .max
573570 else :
574571 self .__spin_min .setMaximum (MIN_MAX_SPIN )
575572 self .__spin_max .setMaximum (MIN_MAX_SPIN )
576- self .maximum = self .initial_parameters [param .name ]
573+ if self .__initialize_settings :
574+ self .maximum = self .initial_parameters [param .name ]
575+ self .__initialize_settings = False
577576
578577 tip = "Enter a list of values"
579578 if param .min is not None :
0 commit comments