Example #1
0
    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])
Example #2
0
    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)