diff --git a/chainladder/core/tests/test_grain.py b/chainladder/core/tests/test_grain.py index 701a07d1..362c848a 100644 --- a/chainladder/core/tests/test_grain.py +++ b/chainladder/core/tests/test_grain.py @@ -6,7 +6,7 @@ def test_grain(qtr): - #this is a dense only test, as grain() follows auto_sparse + #this test is dense only in practice, since grain() applies auto_sparse, which is True by default actual = qtr.iloc[0, 0].grain("OYDY") nan = np.nan expected = np.array( diff --git a/chainladder/core/tests/test_triangle.py b/chainladder/core/tests/test_triangle.py index b43fe9b8..9b7514fa 100644 --- a/chainladder/core/tests/test_triangle.py +++ b/chainladder/core/tests/test_triangle.py @@ -440,8 +440,8 @@ def test_auto_sparse_disabled_returns_self(prism_convert: Triangle) -> None: Parameters ---------- - prism : Triangle - The prism sample data set Triangle. + prism_convert : Triangle + The prism sample data set Triangle, reduced for test speed. Returns ------- diff --git a/chainladder/development/tests/test_development.py b/chainladder/development/tests/test_development.py index d88f67a8..9adb39c7 100644 --- a/chainladder/development/tests/test_development.py +++ b/chainladder/development/tests/test_development.py @@ -22,7 +22,7 @@ def __init__(self,dev): def fit(self, X, y: None = None, sample_weight: None = None): if hasattr(X,'age_to_age'): - #following precedent _set_fit_groups() from DevelopmentBase + #following precedent set by _set_fit_groups() from DevelopmentBase to force triangle to be dense backend = "numpy" if X.array_backend in ["sparse", "numpy"] else "cupy" obj = X.set_backend(backend) super().fit(obj.incr_to_cum().age_to_age) diff --git a/chainladder/methods/mack.py b/chainladder/methods/mack.py index e6556df0..4ded3f87 100644 --- a/chainladder/methods/mack.py +++ b/chainladder/methods/mack.py @@ -494,6 +494,7 @@ def summary_(self): # This might be better as a dataframe obj = self.ultimate_.copy() backend = obj.array_backend + # forcing these four triangles to the same backend cols = ( self.X_.latest_diagonal.set_backend(backend).values, self.ibnr_.set_backend(backend).values, diff --git a/chainladder/utils/tests/test_sparse.py b/chainladder/utils/tests/test_sparse.py index d92cdbf3..344c8850 100644 --- a/chainladder/utils/tests/test_sparse.py +++ b/chainladder/utils/tests/test_sparse.py @@ -4,9 +4,11 @@ array, floor, COO, - where + where, + nanquantile ) +from sparse import all as sparse_all def test_array_from_list_default_fill_value() -> None: """ @@ -111,3 +113,26 @@ def test_floor_returns_copy() -> None: assert result is not a np.testing.assert_array_equal(result.todense(), [1.0, 2.0, -1.0]) np.testing.assert_array_equal(a.todense(), [1.2, 2.7, -0.3]) + +def test_1D_nanquantile() -> None: + """ + Checks that nanquantile performs in 1D special case. + + Returns + ------- + None + """ + a = COO(np.array([1,2,3,4])) + assert nanquantile(a,0.5) == 2.5 + assert sparse_all(nanquantile(a,0.5,keepdims = True) == COO(np.array([2.5]))) + +def test_keepdims_nanquantile() -> None: + """ + Checks that nanquantile keeps dimension when instructed. + + Returns + ------- + None + """ + a = COO(np.array([[1,2,3,4],[3,4,5,6]])) + assert sparse_all(nanquantile(a,0.5,keepdims = True) == COO(np.array([[2,3,4,5]]))) \ No newline at end of file