Encode value labels.
(self)
| 591 | self._prepare_value_labels() |
| 592 | |
| 593 | def _prepare_value_labels(self) -> None: |
| 594 | """Encode value labels.""" |
| 595 | |
| 596 | self.text_len = 0 |
| 597 | self.txt: list[bytes] = [] |
| 598 | self.n = 0 |
| 599 | # Offsets (length of categories), converted to int32 |
| 600 | self.off = np.array([], dtype=np.int32) |
| 601 | # Values, converted to int32 |
| 602 | self.val = np.array([], dtype=np.int32) |
| 603 | self.len = 0 |
| 604 | |
| 605 | # Compute lengths and setup lists of offsets and labels |
| 606 | offsets: list[int] = [] |
| 607 | values: list[float] = [] |
| 608 | for vl in self.value_labels: |
| 609 | category: str | bytes = vl[1] |
| 610 | if not isinstance(category, str): |
| 611 | category = str(category) |
| 612 | warnings.warn( |
| 613 | value_label_mismatch_doc.format(self.labname), |
| 614 | ValueLabelTypeMismatch, |
| 615 | stacklevel=find_stack_level(), |
| 616 | ) |
| 617 | category = category.encode(self._encoding) |
| 618 | offsets.append(self.text_len) |
| 619 | self.text_len += len(category) + 1 # +1 for the padding |
| 620 | values.append(vl[0]) |
| 621 | self.txt.append(category) |
| 622 | self.n += 1 |
| 623 | |
| 624 | # Ensure int32 |
| 625 | self.off = np.array(offsets, dtype=np.int32) |
| 626 | self.val = np.array(values, dtype=np.int32) |
| 627 | |
| 628 | # Total length |
| 629 | self.len = 4 + 4 + 4 * self.n + 4 * self.n + self.text_len |
| 630 | |
| 631 | def generate_value_label(self, byteorder: str) -> bytes: |
| 632 | """ |