def test_dropping_data_source_from_different_project_works(self):
     # create three data items, two in the first project, one in the second project.
     # create the computation with the first two. then simulate a drag and drop from
     # the second project. recompute and make sure no error occur.
     with create_memory_profile_context() as profile_context:
         profile = profile_context.create_profile()
         profile.add_project_memory()
         document_model = DocumentModel.DocumentModel(profile=profile)
         document_controller = DocumentController.DocumentController(self.app.ui, document_model, workspace_id="library")
         with contextlib.closing(document_controller):
             data1 = ((numpy.abs(numpy.random.randn(8, 8)) + 1) * 10).astype(numpy.uint32)
             data2 = ((numpy.abs(numpy.random.randn(8, 8)) + 1) * 10).astype(numpy.uint32)
             data3 = ((numpy.abs(numpy.random.randn(8, 8)) + 1) * 10).astype(numpy.uint32)
             data_item1 = DataItem.DataItem(data1)
             data_item2 = DataItem.DataItem(data2)
             data_item3 = DataItem.DataItem(data3)
             document_model.append_data_item(data_item1, project=document_model.profile.projects[0])
             document_model.append_data_item(data_item2, project=document_model.profile.projects[0])
             document_model.append_data_item(data_item3, project=document_model.profile.projects[1])
             display_item1 = document_model.get_display_item_for_data_item(data_item1)
             display_item2 = document_model.get_display_item_for_data_item(data_item2)
             display_item3 = document_model.get_display_item_for_data_item(data_item3)
             document_controller.select_display_items_in_data_panel([display_item1, display_item2])
             document_controller.perform_action("processing.cross_correlate")
             computation = document_model.computations[-1]
             document_model.recompute_all()
             self.assertIsNone(document_model.computations[0].error_text)
             mime_data = self.app.ui.create_mime_data()
             MimeTypes.mime_data_put_data_source(mime_data, display_item3, None)
             ComputationPanel.drop_mime_data(document_controller, computation, computation.variables[1], mime_data, 0, 0)
             document_model.recompute_all()
             self.assertIsNone(document_model.computations[0].error_text)
Beispiel #2
0
 def test_variables_get_updates_when_switching_data_items(self):
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(
         self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation(
             "target.xdata = a.xdata + x")
         computation.create_object(
             "a", document_model.get_object_specifier(data_item1))
         computation.create_variable("x", value_type="integral", value=5)
         document_model.set_data_item_computation(data_item2, computation)
         panel1 = ComputationPanel.EditComputationDialog(
             document_controller, data_item1)
         document_controller.periodic()  # execute queue
         self.assertEqual(len(panel1._sections_for_testing), 0)
         panel2 = ComputationPanel.EditComputationDialog(
             document_controller, data_item2)
         document_controller.periodic()  # execute queue
         self.assertEqual(len(panel2._sections_for_testing), 2)
         document_controller.periodic()  # execute queue
         self.assertEqual(len(panel1._sections_for_testing), 0)
Beispiel #3
0
 def test_variables_get_updates_when_switching_data_items(self):
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation(
             "target.xdata = a.xdata + x")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         computation.create_variable("x", value_type="integral", value=5)
         document_model.set_data_item_computation(data_item2, computation)
         panel1 = ComputationPanel.EditComputationDialog(
             document_controller, data_item1)
         with contextlib.closing(panel1):
             document_controller.periodic()  # execute queue
             self.assertEqual(len(panel1._sections_for_testing), 0)
             panel2 = ComputationPanel.EditComputationDialog(
                 document_controller, data_item2)
             with contextlib.closing(panel2):
                 document_controller.periodic()  # execute queue
                 self.assertEqual(len(panel2._sections_for_testing), 2)
                 document_controller.periodic()  # execute queue
                 self.assertEqual(len(panel1._sections_for_testing), 0)
 def test_invalid_expression_shows_error_and_clears_it(self):
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation("target.xdata = -a.xdata")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         document_model.set_data_item_computation(data_item2, computation)
         panel = ComputationPanel.EditComputationDialog(document_controller, data_item2)
         document_controller.periodic()  # let the inspector see the computation
         document_controller.periodic()  # and update the computation
         expression = panel._text_edit_for_testing.text
         self.assertFalse(panel._error_label_for_testing.text.strip())
         panel._text_edit_for_testing.text = "target.xdata = xyz(a.xdata)"
         panel._update_button.on_clicked()
         # the sequence of periodic/recompute_all is intentional, to test various computation states
         document_controller.periodic()
         document_model.recompute_all()
         document_model.recompute_all()
         document_controller.periodic()
         self.assertEqual(panel._text_edit_for_testing.text, "target.xdata = xyz(a.xdata)")
         self.assertTrue(len(panel._error_label_for_testing.text) > 0)
         panel._text_edit_for_testing.text = expression
         panel._update_button.on_clicked()
         # the sequence of periodic/recompute_all is intentional, to test various computation states
         document_controller.periodic()
         document_model.recompute_all()
         document_model.recompute_all()
         document_controller.periodic()
         self.assertEqual(panel._text_edit_for_testing.text, expression)
         self.assertIsNone(panel._error_label_for_testing.text)
 def test_remove_computation_undo_redo_cycle(self):
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         data_item = DataItem.DataItem(numpy.zeros((2, 2)))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         fft_display_item = document_model.get_fft_new(
             display_item, data_item)
         self.assertEqual(2, len(document_model.data_items))
         self.assertEqual(2, len(document_model.display_items))
         self.assertEqual(1, len(document_model.computations))
         # remove computation
         command = ComputationPanel.RemoveComputationCommand(
             document_controller, document_model.computations[0])
         command.perform()
         document_controller.push_undo_command(command)
         self.assertEqual(1, len(document_model.data_items))
         self.assertEqual(1, len(document_model.display_items))
         self.assertEqual(0, len(document_model.computations))
         # undo and check
         document_controller.handle_undo()
         self.assertEqual(2, len(document_model.data_items))
         self.assertEqual(2, len(document_model.display_items))
         self.assertEqual(1, len(document_model.computations))
         # redo and check
         document_controller.handle_redo()
         self.assertEqual(1, len(document_model.data_items))
         self.assertEqual(1, len(document_model.display_items))
         self.assertEqual(0, len(document_model.computations))
 def test_expression_updates_when_node_is_changed(self):
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation("target.xdata = -a.xdata")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         document_model.set_data_item_computation(data_item2, computation)
         panel = ComputationPanel.EditComputationDialog(document_controller, data_item2)
         document_controller.periodic()  # execute queue
         text1 = panel._text_edit_for_testing.text
         document_model.get_data_item_computation(data_item2).expression = "target.xdata = -a.xdata + 1"
         document_controller.periodic()  # execute queue
         text2 = panel._text_edit_for_testing.text
         self.assertNotEqual(text2, text1)
Beispiel #7
0
    def test_computation_inspector_panel_handles_computation_being_removed_implicitly(
            self):
        with TestContext.create_memory_context() as test_context:
            document_controller = test_context.create_document_controller()
            document_model = document_controller.document_model
            data_item = DataItem.DataItem(numpy.zeros((10, )))
            document_model.append_data_item(data_item)
            display_item = document_model.get_display_item_for_data_item(
                data_item)

            interval = Graphics.IntervalGraphic()
            display_item.add_graphic(interval)
            interval2 = Graphics.IntervalGraphic()
            display_item.add_graphic(interval2)

            data_item2 = DataItem.DataItem(numpy.zeros((10, )))
            document_model.append_data_item(data_item2)
            display_item2 = document_model.get_display_item_for_data_item(
                data_item2)
            data_item3 = DataItem.DataItem(numpy.zeros((10, )))
            document_model.append_data_item(data_item3)
            display_item3 = document_model.get_display_item_for_data_item(
                data_item3)

            computation = document_model.create_computation()
            computation.create_input_item("src", Symbolic.make_item(data_item))
            computation.create_input_item("interval",
                                          Symbolic.make_item(interval))
            computation.create_input_item("interval2",
                                          Symbolic.make_item(interval2))
            computation.create_output_item("dst",
                                           Symbolic.make_item(data_item2))
            computation.create_output_item("dst2",
                                           Symbolic.make_item(data_item3))
            document_model.append_computation(computation)
            interval2.source = interval
            display_item.append_display_data_channel_for_data_item(data_item2)
            display_item.append_display_data_channel_for_data_item(data_item3)

            with contextlib.closing(
                    ComputationPanel.InspectComputationDialog(
                        document_controller, computation)):
                display_item.remove_graphic(interval)
 def test_clearing_computation_clears_text_and_unbinds_or_whatever(self):
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation("target.xdata = -a.xdata")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         document_model.set_data_item_computation(data_item2, computation)
         panel = ComputationPanel.EditComputationDialog(document_controller, data_item2)
         document_controller.periodic()  # execute queue
         panel._text_edit_for_testing.text = ""
         panel._update_button.on_clicked()
         document_controller.periodic()
         self.assertIsNone(document_model.get_data_item_computation(data_item2))
         text2 = panel._text_edit_for_testing.text
         self.assertFalse(text2)
Beispiel #9
0
 def test_expression_updates_when_node_is_changed(self):
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation(
             "target.xdata = -a.xdata")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         document_model.set_data_item_computation(data_item2, computation)
         panel = ComputationPanel.EditComputationDialog(
             document_controller, data_item2)
         document_controller.periodic()  # execute queue
         text1 = panel._text_edit_for_testing.text
         document_model.get_data_item_computation(
             data_item2).expression = "target.xdata = -a.xdata + 1"
         document_controller.periodic()  # execute queue
         text2 = panel._text_edit_for_testing.text
         self.assertNotEqual(text2, text1)
Beispiel #10
0
 def test_clearing_computation_clears_text_and_unbinds_or_whatever(self):
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation(
             "target.xdata = -a.xdata")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         document_model.set_data_item_computation(data_item2, computation)
         panel = ComputationPanel.EditComputationDialog(
             document_controller, data_item2)
         document_controller.periodic()  # execute queue
         panel._text_edit_for_testing.text = ""  # no longer clears the computation. cm 2020-08.
         panel._update_button.on_clicked()
         document_controller.periodic()
         self.assertIsNotNone(
             document_model.get_data_item_computation(data_item2))
         text2 = panel._text_edit_for_testing.text
         self.assertFalse(text2)
Beispiel #11
0
 def test_error_text_cleared_after_invalid_script_becomes_valid(self):
     # similar to test_invalid_expression_shows_error_and_clears_it except periodic occurs before recompute at end
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         data_item1 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item1)
         data_item2 = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item2)
         computation = document_model.create_computation(
             "target.xdata = -a.xdata")
         computation.create_input_item("a", Symbolic.make_item(data_item1))
         document_model.set_data_item_computation(data_item2, computation)
         panel = ComputationPanel.EditComputationDialog(
             document_controller, data_item2)
         document_controller.periodic(
         )  # let the inspector see the computation
         document_controller.periodic()  # and update the computation
         expression = panel._text_edit_for_testing.text
         self.assertFalse(panel._error_label_for_testing.text.strip())
         panel._text_edit_for_testing.text = "target.xdata = xyz(a.xdata)"
         panel._update_button.on_clicked()
         # the sequence of periodic/recompute_all is intentional, to test various computation states
         document_controller.periodic()
         document_model.recompute_all()
         document_model.recompute_all()
         document_controller.periodic()
         self.assertEqual(panel._text_edit_for_testing.text,
                          "target.xdata = xyz(a.xdata)")
         self.assertTrue(len(panel._error_label_for_testing.text) > 0)
         panel._text_edit_for_testing.text = expression
         panel._update_button.on_clicked()
         # the sequence of periodic/recompute_all is intentional, to test various computation states
         document_controller.periodic()
         document_model.recompute_all()
         document_model.recompute_all()
         document_controller.periodic()
         self.assertEqual(panel._text_edit_for_testing.text, expression)
         self.assertIsNone(panel._error_label_for_testing.text)