Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/cr/cube/cubepart.py
Original file line number Diff line number Diff line change
Expand Up @@ -1630,6 +1630,16 @@ def table_name(self):
return f"{title}: {table_name}"
return None

@lazyproperty
def table_code(self):
"""Optional table code for this Slice"""
if self._cube.ndim < 3:
return None
valid_elements = self._cube.dimensions[0].valid_elements
if valid_elements.element_ids:
return valid_elements[self._slice_idx].element_id
return None

@lazyproperty
def table_percentages(self):
return self.table_proportions * 100
Expand Down Expand Up @@ -2436,6 +2446,17 @@ def table_name(self):
return f"{title}: {table_name}"
return None

@lazyproperty
def table_code(self):
"""Optional table code for this strand

Only for CA-as-0th case, provides differentiated codes for stacked tables.
"""
valid_elements = self._cube.dimensions[0].valid_elements
if valid_elements.element_ids:
return valid_elements[self._slice_idx].element_id
return None

@lazyproperty
def table_percentages(self):
"""1D np.float64 ndarray of table-percentage for each row.
Expand Down Expand Up @@ -2586,6 +2607,10 @@ def table_base(self):
def table_name(self):
return None

@lazyproperty
def table_code(self):
return None

@lazyproperty
def unweighted_count(self):
"""Integer scalar of total unweighted count of the table"""
Expand Down
7 changes: 7 additions & 0 deletions tests/integration/test_cubepart.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ def test_it_provides_values_for_cat_x_cat(self):
assert slice_.tab_alias == ""
assert slice_.table_margin == 15
assert slice_.table_name is None
assert slice_.table_code is None
assert pytest.approx(slice_.table_percentages) == [
[33.33333, 13.33333],
[33.33333, 20.00000],
Expand Down Expand Up @@ -270,6 +271,7 @@ def test_it_provides_values_for_cat_hs_mt_x_cat_hs_mt(self):
)
assert slice_.table_base == 91
assert slice_.table_name is None
assert slice_.table_code is None
np.testing.assert_almost_equal(
slice_.table_std_dev,
[
Expand Down Expand Up @@ -2203,6 +2205,7 @@ def test_it_provides_values_for_ca_as_0th(self):
assert strand.tab_alias == "Q1_1"
assert strand.tab_label == "ATP Men's T"
assert strand.table_name == "Level of in: ATP Men's T"
assert strand.table_code == "Q1_1"
assert strand.weighted_bases == pytest.approx([27292.0] * 4)

def test_it_provides_values_for_univariate_cat(self):
Expand Down Expand Up @@ -2271,6 +2274,7 @@ def test_it_provides_values_for_univariate_cat(self):
assert strand.table_base_range.tolist() == [15, 15]
assert strand.table_margin_range.tolist() == [15, 15]
assert strand.table_name == "v7: C"
assert strand.table_code == 1
assert strand.table_percentages == pytest.approx([66.66667, 33.33333])
assert strand.table_proportion_moes == pytest.approx([0.2385592, 0.2385592])
assert strand.table_proportion_stddevs == pytest.approx([0.4714045, 0.4714045])
Expand Down Expand Up @@ -2365,6 +2369,7 @@ def test_it_provides_values_for_univariate_mr_hs(self):
assert strand.rows_dimension_type == DT.MR
assert strand.scale_mean is None
assert strand.table_name == "Paid for ne: A newspaper"
assert strand.table_code == "Q17_1"
assert strand.table_proportion_stddevs == pytest.approx(
[
0.4642672,
Expand Down Expand Up @@ -2684,6 +2689,7 @@ def test_mean_no_dims(self):
np.testing.assert_almost_equal(nub.table_base, np.array([49.095]))
np.testing.assert_array_equal(nub.unweighted_count, 1000)
assert nub.table_name is None
assert nub.table_code is None


class Test_LegacySlice:
Expand Down Expand Up @@ -3910,6 +3916,7 @@ def test_ca_x_mr_margin_prune(self):
slice_.columns_base, np.array([504, 215, 224, 76, 8, 439])
)
assert slice_.table_name == "q1. Aftensmad: K\xf8d (svin/lam/okse)"
assert slice_.table_code == "q1_1"

def test_mr_x_cat_x_mr_pruning(self):
# No pruning
Expand Down
6 changes: 4 additions & 2 deletions tests/unit/test_cubepart.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ def test_it_knows_its_selected_category_labels(
assert slice_.selected_category_labels == expected_value

@pytest.mark.parametrize("ndim, element_ids", ((2, (1, 2, 3)), (3, ())))
def test_it_knows_when_its_table_name_is_None(
def test_it_knows_when_its_table_name_and_code_are_None(
self, request, dimension_, _dimensions_prop_, cube_, ndim, element_ids
):
valid_elements_ = instance_mock(request, Elements)
Expand All @@ -319,6 +319,7 @@ def test_it_knows_when_its_table_name_is_None(
slice_ = _Slice(cube_, 0, None, None, None)

assert slice_.table_name is None
assert slice_.table_code is None

# fixture components ---------------------------------------------

Expand Down Expand Up @@ -423,7 +424,7 @@ def test_it_knows_its_selected_categories_labels(self, _dimensions_prop_):

assert strand_.selected_category_labels == ()

def test_it_knows_when_its_table_name_is_None(
def test_it_knows_when_its_table_name_and_code_are_None(
self, request, dimension_, _dimensions_prop_, cube_
):
valid_elements_ = instance_mock(request, Elements)
Expand All @@ -433,6 +434,7 @@ def test_it_knows_when_its_table_name_is_None(
strand = _Strand(cube_, 0, None, None, None, None)

assert strand.table_name is None
assert strand.table_code is None

# fixture components ---------------------------------------------

Expand Down
Loading