def setUp(self):
     self.widget = self.create_widget(OWMDS,
                                      stored_settings={
                                          "__version__": 2,
                                          "max_iter": 10,
                                          "initialization": OWMDS.PCA,
                                      })  # type: OWMDS
     self.towns = DistMatrix.from_file(
         os.path.join(self.datasets_dir, "slovenian-towns.dst"))
Exemplo n.º 2
0
 def setUp(self):
     self.widget = self.create_widget(
         OWMDS, stored_settings={
             "__version__": 2,
             "max_iter": 10,
             "initialization": OWMDS.PCA,
         }
     )  # type: OWMDS
     self.towns = DistMatrix.from_file(
         os.path.join(self.datasets_dir, "slovenian-towns.dst"))
Exemplo n.º 3
0
    def _save_and_load(self):
        widget = self.widget
        widget.auto_save = False

        with named_file("", suffix=".dst") as filename:
            widget.get_save_filename = Mock(return_value=(filename,
                                                          widget.filters[0]))

            self.send_signal(widget.Inputs.distances, self.distances)
            widget.save_file_as()
            return DistMatrix.from_file(filename)
Exemplo n.º 4
0
    def test_save(self):
        with named_file(
            """3 axis=1 row_labels
                danny	0.12	3.45	6.78
                eve 	9.01	2.34	5.67
                frank	8.90""") as name:
            m = DistMatrix.from_file(name)
            m.save(name)
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 9.01, 8.90],
                                                        [9.01, 2.34, 0],
                                                        [8.90, 0, 0]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsNone(m.col_items)
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 1)

        with named_file(
            """3 axis=0 asymmetric col_labels row_labels
                         ann	bert	chad
                danny	0.12	3.45	6.78
                  eve	9.01	2.34	5.67
                frank	8.90	1.23	4.56""") as name:
            m = DistMatrix.from_file(name)
            m.save(name)
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 3.45, 6.78],
                                                        [9.01, 2.34, 5.67],
                                                        [8.90, 1.23, 4.56]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsInstance(m.col_items, Table)
            self.assertEqual([e.metas[0] for e in m.col_items],
                             ["ann", "bert", "chad"])
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 0)
Exemplo n.º 5
0
    def test_save(self):
        with named_file(
            """3 axis=1 row_labels
                danny	0.12	3.45	6.78
                eve 	9.01	2.34	5.67
                frank	8.90""") as name:
            m = DistMatrix.from_file(name)
            m.save(name)
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 9.01, 8.90],
                                                        [9.01, 2.34, 0],
                                                        [8.90, 0, 0]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsNone(m.col_items)
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 1)

        with named_file(
            """3 axis=0 asymmetric col_labels row_labels
                         ann	bert	chad
                danny	0.12	3.45	6.78
                  eve	9.01	2.34	5.67
                frank	8.90	1.23	4.56""") as name:
            m = DistMatrix.from_file(name)
            m.save(name)
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 3.45, 6.78],
                                                        [9.01, 2.34, 5.67],
                                                        [8.90, 1.23, 4.56]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsInstance(m.col_items, Table)
            self.assertEqual([e.metas[0] for e in m.col_items],
                             ["ann", "bert", "chad"])
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 0)
Exemplo n.º 6
0
    def open_file(self):
        self.error()
        self.warning()
        self.information()

        fn = self.last_path()
        if not fn:
            return
        if not os.path.exists(fn):
            dir_name, basename = os.path.split(fn)
            if os.path.exists(os.path.join(".", basename)):
                fn = os.path.join(".", basename)
                self.information("Loading '{}' from the current directory."
                                 .format(basename))
        if fn == "(none)":
            self.send("Distances", None)
            self.infoa.setText("No data loaded")
            self.infob.setText("")
            self.warnings.setText("")
            return

        self.loaded_file = ""

        try:
            distances = DistMatrix.from_file(fn)
            self.loaded_file = fn
        except Exception as exc:
            err_value = str(exc)
            self.error("Invalid file format")
            self.infoa.setText('Data was not loaded due to an error.')
            self.warnings.setText(err_value)
            distances = None

        if distances is not None:
            self.infoa.setText(
                "{} points(s), ".format(len(distances)) +
                (["unlabelled", "labelled"][distances.row_items is not None]))
            self.warnings.setText("")
            file_name = os.path.split(fn)[1]
            if "." in file_name:
                distances.name = file_name[:file_name.rfind('.')]
            else:
                distances.name = file_name

        self.send("Distances", distances)
Exemplo n.º 7
0
    def open_file(self):
        self.clear_messages()
        fn = self.last_path()
        if not fn:
            return
        if not os.path.exists(fn):
            dir_name, basename = os.path.split(fn)
            if os.path.exists(os.path.join(".", basename)):
                fn = os.path.join(".", basename)
                self.information(
                    "Loading '{}' from the current directory.".format(
                        basename))
        if fn == "(none)":
            self.Outputs.distances.send(None)
            self.infoa.setText("No data loaded")
            self.infob.setText("")
            self.warnings.setText("")
            return

        self.loaded_file = ""

        try:
            distances = DistMatrix.from_file(fn)
            self.loaded_file = fn
        except Exception as exc:
            err_value = str(exc)
            self.error("Invalid file format")
            self.infoa.setText('错误,数据未加载。')
            self.warnings.setText(err_value)
            distances = None

        if distances is not None:
            self.infoa.setText("{}  个点, ".format(len(distances)) + (
                ["未标记", "已标记"][distances.row_items is not None]))
            self.warnings.setText("")
            file_name = os.path.split(fn)[1]
            if "." in file_name:
                distances.name = file_name[:file_name.rfind('.')]
            else:
                distances.name = file_name

        self.Outputs.distances.send(distances)
Exemplo n.º 8
0
    def test_from_file(self):
        with named_file("""3 axis=0 asymmetric col_labels row_labels
                    ann	bert	chad
                    danny	0.12	3.45	6.78
                    eve	9.01	2.34	5.67
                    frank	8.90	1.23	4.56""") as name:
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(
                m,
                np.array([[0.12, 3.45, 6.78], [9.01, 2.34, 5.67],
                          [8.90, 1.23, 4.56]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsInstance(m.col_items, Table)
            self.assertEqual([e.metas[0] for e in m.col_items],
                             ["ann", "bert", "chad"])
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 0)

        with named_file("""3 axis=1 row_labels
                    danny	0.12	3.45	6.78
                    eve 	9.01	2.34	5.67
                    frank	8.90""") as name:
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(
                m, np.array([[0.12, 9.01, 8.90], [9.01, 2.34, 0], [8.90, 0,
                                                                   0]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsNone(m.col_items)
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 1)

        with named_file("""3 axis=1 symmetric
                0.12	3.45	6.78
                9.01	2.34	5.67
                8.90""") as name:
            m = DistMatrix.from_file(name)
        np.testing.assert_almost_equal(
            m, np.array([[0.12, 9.01, 8.90], [9.01, 2.34, 0], [8.90, 0, 0]]))

        with named_file("""3 row_labels
                starič	0.12	3.45	6.78
                aleš	9.01	2.34	5.67
                anže	8.90""",
                        encoding="utf-8"
                        "") as name:
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(
                m, np.array([[0.12, 9.01, 8.90], [9.01, 2.34, 0], [8.90, 0,
                                                                   0]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsNone(m.col_items)
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["starič", "aleš", "anže"])
            self.assertEqual(m.axis, 1)

        def assertErrorMsg(content, msg):
            with named_file(content) as name:
                with self.assertRaises(ValueError) as cm:
                    DistMatrix.from_file(name)
                self.assertEqual(str(cm.exception), msg)

        assertErrorMsg("", "empty file")
        assertErrorMsg("axis=1\n1\t3\n4",
                       "distance file must begin with dimension")
        assertErrorMsg("3 col_labels\na\tb\n1\n\2\n3",
                       "mismatching number of column labels")
        assertErrorMsg("3 col_labels\na\tb\tc\td\n1\n\2\n3",
                       "mismatching number of column labels")
        assertErrorMsg("2\n  1\t2\t3\n  5", "too many columns in matrix row 1")
        assertErrorMsg("2 row_labels\na\t1\t2\t3\nb\t5",
                       "too many columns in matrix row 'a'")
        assertErrorMsg("2 noflag\n  1\t2\t3\n  5", "invalid flag 'noflag'")
        assertErrorMsg("2 noflag=5\n  1\t2\t3\n  5", "invalid flag 'noflag=5'")
        assertErrorMsg("2\n1\n2\n3", "too many rows")
        assertErrorMsg("2\n1\nasd", "invalid element at row 2, column 1")
        assertErrorMsg("2 row_labels\na\t1\nb\tasd",
                       "invalid element at row 'b', column 1")
        assertErrorMsg("2 col_labels row_labels\nd\te\na\t1\nb\tasd",
                       "invalid element at row 'b', column 'd'")
        assertErrorMsg("2 col_labels\nd\te\n1\nasd",
                       "invalid element at row 2, column 'd'")
Exemplo n.º 9
0
 def assertErrorMsg(content, msg):
     with named_file(content) as name:
         with self.assertRaises(ValueError) as cm:
             DistMatrix.from_file(name)
         self.assertEqual(str(cm.exception), msg)
Exemplo n.º 10
0
    def test_from_file(self):
        with named_file(
                """3 axis=0 asymmetric col_labels row_labels
                    ann	bert	chad
                    danny	0.12	3.45	6.78
                    eve	9.01	2.34	5.67
                    frank	8.90	1.23	4.56""") as name:
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 3.45, 6.78],
                                                        [9.01, 2.34, 5.67],
                                                        [8.90, 1.23, 4.56]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsInstance(m.col_items, Table)
            self.assertEqual([e.metas[0] for e in m.col_items],
                             ["ann", "bert", "chad"])
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 0)

        with named_file(
                """3 axis=1 row_labels
                    danny	0.12	3.45	6.78
                    eve 	9.01	2.34	5.67
                    frank	8.90""") as name:
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 9.01, 8.90],
                                                        [9.01, 2.34, 0],
                                                        [8.90, 0, 0]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsNone(m.col_items)
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["danny", "eve", "frank"])
            self.assertEqual(m.axis, 1)

        with named_file(
            """3 axis=1 symmetric
                0.12	3.45	6.78
                9.01	2.34	5.67
                8.90""") as name:
            m = DistMatrix.from_file(name)
        np.testing.assert_almost_equal(m, np.array([[0.12, 9.01, 8.90],
                                                    [9.01, 2.34, 0],
                                                    [8.90, 0, 0]]))

        with named_file(
            """3 row_labels
                starič	0.12	3.45	6.78
                aleš	9.01	2.34	5.67
                anže	8.90""", encoding="utf-8""") as name:
            m = DistMatrix.from_file(name)
            np.testing.assert_almost_equal(m, np.array([[0.12, 9.01, 8.90],
                                                        [9.01, 2.34, 0],
                                                        [8.90, 0, 0]]))
            self.assertIsInstance(m.row_items, Table)
            self.assertIsNone(m.col_items)
            self.assertEqual([e.metas[0] for e in m.row_items],
                             ["starič", "aleš", "anže"])
            self.assertEqual(m.axis, 1)

        def assertErrorMsg(content, msg):
            with named_file(content) as name:
                with self.assertRaises(ValueError) as cm:
                    DistMatrix.from_file(name)
                self.assertEqual(str(cm.exception), msg)

        assertErrorMsg("",
                       "empty file")
        assertErrorMsg("axis=1\n1\t3\n4",
                       "distance file must begin with dimension")
        assertErrorMsg("3 col_labels\na\tb\n1\n\2\n3",
                       "mismatching number of column labels")
        assertErrorMsg("3 col_labels\na\tb\tc\td\n1\n\2\n3",
                       "mismatching number of column labels")
        assertErrorMsg("2\n  1\t2\t3\n  5",
                       "too many columns in matrix row 1")
        assertErrorMsg("2 row_labels\na\t1\t2\t3\nb\t5",
                       "too many columns in matrix row 'a'")
        assertErrorMsg("2 noflag\n  1\t2\t3\n  5",
                       "invalid flag 'noflag'")
        assertErrorMsg("2 noflag=5\n  1\t2\t3\n  5",
                       "invalid flag 'noflag=5'")
        assertErrorMsg("2\n1\n2\n3",
                       "too many rows")
        assertErrorMsg("2\n1\nasd",
                       "invalid element at row 2, column 1")
        assertErrorMsg("2 row_labels\na\t1\nb\tasd",
                       "invalid element at row 'b', column 1")
        assertErrorMsg("2 col_labels row_labels\nd\te\na\t1\nb\tasd",
                       "invalid element at row 'b', column 'd'")
        assertErrorMsg("2 col_labels\nd\te\n1\nasd",
                       "invalid element at row 2, column 'd'")
Exemplo n.º 11
0
 def assertErrorMsg(content, msg):
     with named_file(content) as name:
         with self.assertRaises(ValueError) as cm:
             DistMatrix.from_file(name)
         self.assertEqual(str(cm.exception), msg)