Skip to content

Commit 89073ad

Browse files
Merge pull request #414 from Crunch-io/ZC-2037-add-table-code
ZC-2037: Add table code
2 parents 63f0ed7 + 2d5fe3a commit 89073ad

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

src/cr/cube/cubepart.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,6 +1630,26 @@ def table_name(self):
16301630
return f"{title}: {table_name}"
16311631
return None
16321632

1633+
@lazyproperty
1634+
def table_label(self):
1635+
"""Optional table label for this Slice"""
1636+
if self._cube.ndim < 3:
1637+
return None
1638+
valid_elements = self._cube.dimensions[0].valid_elements
1639+
if valid_elements.element_ids:
1640+
return valid_elements[self._slice_idx].label
1641+
return None
1642+
1643+
@lazyproperty
1644+
def table_code(self):
1645+
"""Optional table code for this Slice"""
1646+
if self._cube.ndim < 3:
1647+
return None
1648+
valid_elements = self._cube.dimensions[0].valid_elements
1649+
if valid_elements.element_ids:
1650+
return valid_elements[self._slice_idx].element_id
1651+
return None
1652+
16331653
@lazyproperty
16341654
def table_percentages(self):
16351655
return self.table_proportions * 100
@@ -2436,6 +2456,28 @@ def table_name(self):
24362456
return f"{title}: {table_name}"
24372457
return None
24382458

2459+
@lazyproperty
2460+
def table_label(self):
2461+
"""Optional table label for this strand
2462+
2463+
Only for CA-as-0th case, provides differentiated labels for stacked tables.
2464+
"""
2465+
valid_elements = self._cube.dimensions[0].valid_elements
2466+
if valid_elements.element_ids:
2467+
return valid_elements[self._slice_idx].label
2468+
return None
2469+
2470+
@lazyproperty
2471+
def table_code(self):
2472+
"""Optional table code for this strand
2473+
2474+
Only for CA-as-0th case, provides differentiated codes for stacked tables.
2475+
"""
2476+
valid_elements = self._cube.dimensions[0].valid_elements
2477+
if valid_elements.element_ids:
2478+
return valid_elements[self._slice_idx].element_id
2479+
return None
2480+
24392481
@lazyproperty
24402482
def table_percentages(self):
24412483
"""1D np.float64 ndarray of table-percentage for each row.
@@ -2586,6 +2628,14 @@ def table_base(self):
25862628
def table_name(self):
25872629
return None
25882630

2631+
@lazyproperty
2632+
def table_label(self):
2633+
return None
2634+
2635+
@lazyproperty
2636+
def table_code(self):
2637+
return None
2638+
25892639
@lazyproperty
25902640
def unweighted_count(self):
25912641
"""Integer scalar of total unweighted count of the table"""

tests/integration/test_cubepart.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ def test_it_provides_values_for_cat_x_cat(self):
139139
assert slice_.tab_alias == ""
140140
assert slice_.table_margin == 15
141141
assert slice_.table_name is None
142+
assert slice_.table_code is None
143+
assert slice_.table_label is None
142144
assert pytest.approx(slice_.table_percentages) == [
143145
[33.33333, 13.33333],
144146
[33.33333, 20.00000],
@@ -270,6 +272,8 @@ def test_it_provides_values_for_cat_hs_mt_x_cat_hs_mt(self):
270272
)
271273
assert slice_.table_base == 91
272274
assert slice_.table_name is None
275+
assert slice_.table_code is None
276+
assert slice_.table_label is None
273277
np.testing.assert_almost_equal(
274278
slice_.table_std_dev,
275279
[
@@ -2203,6 +2207,8 @@ def test_it_provides_values_for_ca_as_0th(self):
22032207
assert strand.tab_alias == "Q1_1"
22042208
assert strand.tab_label == "ATP Men's T"
22052209
assert strand.table_name == "Level of in: ATP Men's T"
2210+
assert strand.table_code == "Q1_1"
2211+
assert strand.table_label == "ATP Men's T"
22062212
assert strand.weighted_bases == pytest.approx([27292.0] * 4)
22072213

22082214
def test_it_provides_values_for_univariate_cat(self):
@@ -2271,6 +2277,8 @@ def test_it_provides_values_for_univariate_cat(self):
22712277
assert strand.table_base_range.tolist() == [15, 15]
22722278
assert strand.table_margin_range.tolist() == [15, 15]
22732279
assert strand.table_name == "v7: C"
2280+
assert strand.table_code == 1
2281+
assert strand.table_label == "C"
22742282
assert strand.table_percentages == pytest.approx([66.66667, 33.33333])
22752283
assert strand.table_proportion_moes == pytest.approx([0.2385592, 0.2385592])
22762284
assert strand.table_proportion_stddevs == pytest.approx([0.4714045, 0.4714045])
@@ -2365,6 +2373,8 @@ def test_it_provides_values_for_univariate_mr_hs(self):
23652373
assert strand.rows_dimension_type == DT.MR
23662374
assert strand.scale_mean is None
23672375
assert strand.table_name == "Paid for ne: A newspaper"
2376+
assert strand.table_code == "Q17_1"
2377+
assert strand.table_label == "A newspaper"
23682378
assert strand.table_proportion_stddevs == pytest.approx(
23692379
[
23702380
0.4642672,
@@ -2684,6 +2694,8 @@ def test_mean_no_dims(self):
26842694
np.testing.assert_almost_equal(nub.table_base, np.array([49.095]))
26852695
np.testing.assert_array_equal(nub.unweighted_count, 1000)
26862696
assert nub.table_name is None
2697+
assert nub.table_code is None
2698+
assert nub.table_label is None
26872699

26882700

26892701
class Test_LegacySlice:
@@ -3910,6 +3922,8 @@ def test_ca_x_mr_margin_prune(self):
39103922
slice_.columns_base, np.array([504, 215, 224, 76, 8, 439])
39113923
)
39123924
assert slice_.table_name == "q1. Aftensmad: K\xf8d (svin/lam/okse)"
3925+
assert slice_.table_code == "q1_1"
3926+
assert slice_.table_label == "K\xf8d (svin/lam/okse)"
39133927

39143928
def test_mr_x_cat_x_mr_pruning(self):
39153929
# No pruning

tests/unit/test_cubepart.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ def test_it_knows_its_selected_category_labels(
308308
assert slice_.selected_category_labels == expected_value
309309

310310
@pytest.mark.parametrize("ndim, element_ids", ((2, (1, 2, 3)), (3, ())))
311-
def test_it_knows_when_its_table_name_is_None(
311+
def test_it_knows_when_its_table_name_code_and_label_are_None(
312312
self, request, dimension_, _dimensions_prop_, cube_, ndim, element_ids
313313
):
314314
valid_elements_ = instance_mock(request, Elements)
@@ -319,6 +319,8 @@ def test_it_knows_when_its_table_name_is_None(
319319
slice_ = _Slice(cube_, 0, None, None, None)
320320

321321
assert slice_.table_name is None
322+
assert slice_.table_code is None
323+
assert slice_.table_label is None
322324

323325
# fixture components ---------------------------------------------
324326

@@ -423,7 +425,7 @@ def test_it_knows_its_selected_categories_labels(self, _dimensions_prop_):
423425

424426
assert strand_.selected_category_labels == ()
425427

426-
def test_it_knows_when_its_table_name_is_None(
428+
def test_it_knows_when_its_table_name_code_and_code_are_None(
427429
self, request, dimension_, _dimensions_prop_, cube_
428430
):
429431
valid_elements_ = instance_mock(request, Elements)
@@ -433,6 +435,8 @@ def test_it_knows_when_its_table_name_is_None(
433435
strand = _Strand(cube_, 0, None, None, None, None)
434436

435437
assert strand.table_name is None
438+
assert strand.table_code is None
439+
assert strand.table_label is None
436440

437441
# fixture components ---------------------------------------------
438442

0 commit comments

Comments
 (0)