def test_condition_pass(self): matrix_type = MatrixDfBuilder("T").verify( lambda d: len(d) == 2).build() df = pd.DataFrame([[11, float("NaN")], [21, 22]], columns=["b", "a"], index=["b", "a"]) matrix_type.convert(df)
def test_condition_fail(self): matrix_type = MatrixDfBuilder("T").verify( lambda d: len(d) == 4).build() df = pd.DataFrame([[11, float("NaN")], [21, 22]], columns=["b", "a"], index=["b", "a"]) with pytest.raises(VerificationFailedError): matrix_type.convert(df)
def test_matrix_bad_inf(self): matrix_type = MatrixDfBuilder("T").dtype(np.int32).build() df = pd.DataFrame([[11, float("inf")], [21, 22]], columns=["b", "a"], index=["b", "a"]) matrix_type(df) with pytest.raises(IntCastingNaNError): matrix_type.convert(df)
def test_io(self): matrix_type = MatrixDfBuilder("T").build() df = pd.DataFrame([[11, 12], [21, 22]], columns=["b", "a"], index=["b", "a"]) df = matrix_type.convert(df) for s in [".feather", ".snappy", ".csv.gz", ".tsv"]: with tmpfile(s) as path: df.write_file(path) df2 = matrix_type.read_file(path) assert df2.flatten().tolist() == [11, 12, 21, 22]
def test_shuffle(self): matrix_type = MatrixDfBuilder("T").build() df: MatrixDf = matrix_type.of([[11, 12], [21, 22]], columns=["b", "a"], index=["b", "a"]) for _ in range(10): df2 = df.shuffle(rand=0) assert df2.values.tolist() == [[21, 22], [12, 11]] df2 = df.shuffle(rand=1) assert df2.values.tolist() == [[22, 21], [11, 12]] df2 = df.shuffle(rand=None) assert len(df2.values.tolist()) == 2
def test_matrix_dtype(self): matrix_type = (MatrixDfBuilder("T").dtype(np.float16)).build() df = pd.DataFrame([[11, 12], [21, 22]], columns=["b", "a"], index=["b", "a"]) df = matrix_type.convert(df) assert isinstance(df, MatrixDf) assert df.dtypes.tolist() == [np.float16, np.float16]
def matrix(cls, name: str, doc: Optional[str] = None) -> MatrixDfBuilder: """ Creates a new subclass of an :class:`typeddfs.matrix_dfs.MatrixDf`. Args: name: The name that will be used for the new class doc: The docstring for the new class Returns: A builder instance (builder pattern) to be used with chained calls """ return MatrixDfBuilder(name, doc)
def test_matrix(self): matrix_type = MatrixDfBuilder("T").build() df = pd.DataFrame([[11, 12], [21, 22]], columns=["b", "a"], index=["b", "a"]) df = matrix_type.convert(df) assert isinstance(df, MatrixDf) assert len(df) == 2 assert df.cols == ["b", "a"] assert df.rows == ["b", "a"] assert not df.is_symmetric() ltr = df.triangle() assert [str(x) for x in ltr.flatten().tolist() ] == [str(x) for x in [11.0, np.nan, 21.0, 22.0]] srt = df.sort_alphabetical() assert srt.cols == ["a", "b"] assert srt.rows == ["a", "b"] long = df.long_form() assert long.columns.tolist() == ["row", "column", "value"] assert long["value"].map(str).tolist() == [ str(x) for x in [11, 12, 21, 22] ]
def test_matrix_subclass(self): t1 = MatrixDfBuilder("t1").build() t2 = MatrixDfBuilder("t2").subclass(t1).build() assert issubclass(t2, t1) assert not issubclass(t1, t2)