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"))
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"))
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)
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)
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)
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)
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'")
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)
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'")