def __init__(self): self.experiment_multiselect = widgets.SelectMultiple( options=list(DataReader.find_experiments()), description="Experiments:", disabled=False, value=[], ) self.policy_comparison = PolicyComparison() def experiment_multiselect_change_callback(change): if change.name == "value" and change.new is not None: self.policy_comparison.update(change.new) self.experiment_multiselect.observe( experiment_multiselect_change_callback, type="change") super(PolicyComparisonTab, self).__init__( [self.experiment_multiselect, self.policy_comparison])
def __init__(self, level, callback=None, widget=None): """ Args: level: int, EXPERIMENT_LEVEL, MODEL_LEVEL, or EPISODE_LEVEL. speicifes what this picker should pick. callback: if not none, when the user picks all the values the callback will be called. Note that for different levels the number of parameters passed to callback is different. widget: if not none, when the user picks all the values widget.update(*args) will be called. Note that for different levels the number of parameters passed to update is different. """ children = [] self.experiment_dropdown = widgets.Dropdown( options=list(DataReader.find_experiments()), description="Experiment:", disabled=False, value=None, ) self.callback = callback self.widget = widget children.append(self.experiment_dropdown) if level >= Picker.MODEL_LEVEL: self.version_dropdown = widgets.Dropdown( description="Seed:", disabled=True, ) children.append(self.version_dropdown) self.checkpoint_dropdown = widgets.Dropdown( description="Checkpoint:", disabled=True, ) children.append(self.checkpoint_dropdown) if level >= Picker.EPISODE_LEVEL: self.episode_dropdown = widgets.Dropdown( description="Episode:", disabled=True, ) children.append(self.episode_dropdown) self.ignore_updates = False def experiment_dropdown_change_callback(change): if change.name == "value" and change.new is not None: self.ignore_updates = True if level >= Picker.MODEL_LEVEL: self.version_dropdown.options = DataReader.find_experiment_versions( # noqa: E501 experiment=self.experiment_dropdown.value, ) self.version_dropdown.value = None self.version_dropdown.disabled = False self.checkpoint_dropdown.disabled = True self.checkpoint_dropdown.value = None self.ignore_updates = False if level == Picker.EXPERIMENT_LEVEL: self.call_callback(self.experiment_dropdown.value) def version_dropdown_change_callback(change): if self.ignore_updates: return if change.name == "value" and change.new is not None: self.ignore_updates = True self.checkpoint_dropdown.options = DataReader.find_version_checkpoints( # noqa: E501 experiment=self.experiment_dropdown.value, version=self.version_dropdown.value, ) self.checkpoint_dropdown.value = None self.checkpoint_dropdown.disabled = False self.ignore_updates = False def checkpoint_dropdown_change_callback(change): if self.ignore_updates: return if change.name == "value" and change.new is not None: self.ignore_updates = True if level >= Picker.EPISODE_LEVEL: self.episode_dropdown.options = DataReader.find_checkpoint_episodes( # noqa: E501 experiment=self.experiment_dropdown.value, version=self.version_dropdown.value, checkpoint=self.checkpoint_dropdown.value, ) self.episode_dropdown.value = None self.episode_dropdown.disabled = False self.ignore_updates = False if level == Picker.MODEL_LEVEL: self.call_callback( self.experiment_dropdown.value, self.version_dropdown.value, self.checkpoint_dropdown.value, ) def episode_dropdown_change_callback(change): if self.ignore_updates: return if change.name == "value" and change.new is not None: if level == Picker.EPISODE_LEVEL: self.call_callback( self.experiment_dropdown.value, self.version_dropdown.value, self.checkpoint_dropdown.value, self.episode_dropdown.value, ) self.experiment_dropdown.observe( experiment_dropdown_change_callback, type="change" ) self.experiment_dropdown.observe( experiment_dropdown_change_callback, type="change" ) if level >= Picker.MODEL_LEVEL: self.version_dropdown.observe( version_dropdown_change_callback, type="change" ) self.checkpoint_dropdown.observe( checkpoint_dropdown_change_callback, type="change" ) if level >= Picker.EPISODE_LEVEL: self.episode_dropdown.observe( episode_dropdown_change_callback, type="change" ) super(Picker, self).__init__(children)