| 646 | |
| 647 | |
| 648 | class MapPartitions(Blockwise): |
| 649 | _parameters = [ |
| 650 | "frame", |
| 651 | "func", |
| 652 | "meta", |
| 653 | "enforce_metadata", |
| 654 | "transform_divisions", |
| 655 | "clear_divisions", |
| 656 | "align_dataframes", |
| 657 | "parent_meta", |
| 658 | "required_columns", |
| 659 | "token", |
| 660 | "kwargs", |
| 661 | "nargs", |
| 662 | ] |
| 663 | _defaults: dict = { |
| 664 | "kwargs": None, |
| 665 | "align_dataframes": True, |
| 666 | "parent_meta": None, |
| 667 | "required_columns": None, |
| 668 | "token": None, |
| 669 | "nargs": 0, |
| 670 | } |
| 671 | |
| 672 | @functools.cached_property |
| 673 | def token(self): |
| 674 | if "token" in self._parameters: |
| 675 | return self.operand("token") |
| 676 | return None |
| 677 | |
| 678 | def __str__(self): |
| 679 | return f"MapPartitions({funcname(self.func)})" |
| 680 | |
| 681 | @functools.cached_property |
| 682 | def _name(self): |
| 683 | if self.token is not None: |
| 684 | head = self.token |
| 685 | else: |
| 686 | head = funcname(self.func).lower() |
| 687 | return head + "-" + self.deterministic_token |
| 688 | |
| 689 | def _broadcast_dep(self, dep: Expr): |
| 690 | # Always broadcast single-partition dependencies in MapPartitions |
| 691 | return dep.npartitions == 1 |
| 692 | |
| 693 | @functools.cached_property |
| 694 | def args(self): |
| 695 | return [self.frame] + self.operands[ |
| 696 | len(self._parameters) : len(self._parameters) + self.nargs |
| 697 | ] |
| 698 | |
| 699 | @functools.cached_property |
| 700 | def _meta(self): |
| 701 | meta = self.operand("meta") |
| 702 | return _get_meta_map_partitions( |
| 703 | self.args, |
| 704 | [ |
| 705 | e |