def __init__(self, mainwindow, result_manager):
        QWidget.__init__(self, mainwindow)
        #mainwindow is an OpusGui
        self.mainwindow = mainwindow
        self.result_manager = result_manager
        self.toolboxBase = self.result_manager.mainwindow.toolboxBase

        self.inGui = False
        self.logFileKey = 0

        self.xml_helper = ResultsManagerXMLHelper(toolboxBase=self.toolboxBase)
        self.result_generator = OpusResultGenerator(
            toolboxBase=self.toolboxBase)

        self.result_generator.guiElement = self

        self.tabIcon = QIcon(':/Images/Images/cog.png')
        self.tabLabel = 'Advanced Visualization'

        self.widgetLayout = QVBoxLayout(self)
        self.widgetLayout.setAlignment(Qt.AlignTop)

        self.resultsGroupBox = QGroupBox(self)
        self.widgetLayout.addWidget(self.resultsGroupBox)

        self.dataGroupBox = QGroupBox(self)
        self.widgetLayout.addWidget(self.dataGroupBox)

        self.optionsGroupBox = QGroupBox(self)
        self.widgetLayout.addWidget(self.optionsGroupBox)

        self._setup_definition_widget()

        self._setup_buttons()
        self._setup_tabs()
    def _test_generate_results(self, indicator_name, dataset_name, expression,
                               source):

        # grab the first base_year_data in results_manager/simulation_runs and
        # fetch the year for it
        base_year = self.project.find(
            "results_manager/simulation_runs/run[@name='base_year_data']/end_year"
        )
        if base_year is None:
            return False, "Project doesn't have any base year data to check against"

        start_year = int(base_year.text)
        result_generator = OpusResultGenerator(self.project)
        result_generator.set_data(source_data_name='base_year_data',
                                  indicator_name=indicator_name,
                                  dataset_name=dataset_name,
                                  years=[
                                      start_year,
                                  ],
                                  indicator_definition=(expression, source))

        interface = IndicatorFrameworkInterface(self.project)
        src_data = interface.get_source_data(source_data_name='base_year_data',
                                             years=[
                                                 start_year,
                                             ])
        SimulationState().set_current_time(start_year)
        SimulationState().set_cache_directory(src_data.cache_directory)
        SessionConfiguration(
            new_instance=True,
            package_order=src_data.dataset_pool_configuration.package_order,
            in_storage=AttributeCache())

        dataset = SessionConfiguration().get_dataset_from_pool(dataset_name)
        if isinstance(dataset, InteractionDataset):
            #create a subset if its an interaction dataset...
            dataset_arguments = {
                'index1':
                numpy.random.randint(0, dataset.dataset1.size(), size=100),
                'index2':
                numpy.random.randint(0, dataset.dataset2.size(), size=100)
            }
            SessionConfiguration().delete_datasets()
            dataset = SessionConfiguration().get_dataset_from_pool(
                dataset_name, dataset_arguments=dataset_arguments)

        try:
            dataset.compute_variables(names=[expression])
            return True, None
        except Exception, e:
            type, value, tb = sys.exc_info()
            stack_dump = ''.join(traceback.format_exception(type, value, tb))
            errors = "{}\n\n{}".format(e, stack_dump)
            return False, errors
    def __init__(self,
                 project,
                 kwargs = None):

        self.generator = OpusResultGenerator(project)

        self.visualizer = OpusResultVisualizer(
           project = project,
           indicator_type = None,
           indicators = None,
           kwargs = kwargs
        )
        self.finishedCallback = None
        self.errorCallback = None