(self, ax: PeriodIndex)
| 2732 | return binner, bins, labels |
| 2733 | |
| 2734 | def _get_period_bins(self, ax: PeriodIndex): |
| 2735 | if not isinstance(ax, PeriodIndex): |
| 2736 | raise TypeError( |
| 2737 | "axis must be a PeriodIndex, but got " |
| 2738 | f"an instance of {type(ax).__name__}" |
| 2739 | ) |
| 2740 | |
| 2741 | memb = ax.asfreq(self.freq, how=self.convention) |
| 2742 | |
| 2743 | # NaT handling as in pandas._lib.lib.generate_bins_dt64() |
| 2744 | nat_count = 0 |
| 2745 | if memb.hasnans: |
| 2746 | # error: Incompatible types in assignment (expression has type |
| 2747 | # "bool_", variable has type "int") [assignment] |
| 2748 | nat_count = np.sum(memb._isnan) # type: ignore[assignment] |
| 2749 | memb = memb[~memb._isnan] |
| 2750 | |
| 2751 | if not len(memb): |
| 2752 | # index contains no valid (non-NaT) values |
| 2753 | bins = np.array([], dtype=np.int64) |
| 2754 | binner = labels = PeriodIndex(data=[], freq=self.freq, name=ax.name) |
| 2755 | if len(ax) > 0: |
| 2756 | # index is all NaT |
| 2757 | binner, bins, labels = _insert_nat_bin(binner, bins, labels, len(ax)) |
| 2758 | return binner, bins, labels |
| 2759 | |
| 2760 | freq_mult = self.freq.n |
| 2761 | |
| 2762 | start = ax.min().asfreq(self.freq, how=self.convention) |
| 2763 | end = ax.max().asfreq(self.freq, how="end") |
| 2764 | bin_shift = 0 |
| 2765 | |
| 2766 | if isinstance(self.freq, Tick): |
| 2767 | # GH 23882 & 31809: get adjusted bin edge labels with 'origin' |
| 2768 | # and 'origin' support. This call only makes sense if the freq is a |
| 2769 | # Tick since offset and origin are only used in those cases. |
| 2770 | # Not doing this check could create an extra empty bin. |
| 2771 | p_start, end = _get_period_range_edges( |
| 2772 | start, |
| 2773 | end, |
| 2774 | self.freq, |
| 2775 | closed=self.closed, |
| 2776 | origin=self.origin, |
| 2777 | offset=self.offset, |
| 2778 | ) |
| 2779 | |
| 2780 | # Get offset for bin edge (not label edge) adjustment |
| 2781 | start_offset = Period(start, self.freq) - Period(p_start, self.freq) |
| 2782 | # error: Item "Period" of "Union[Period, Any]" has no attribute "n" |
| 2783 | bin_shift = start_offset.n % freq_mult # type: ignore[union-attr] |
| 2784 | start = p_start |
| 2785 | |
| 2786 | labels = binner = period_range( |
| 2787 | start=start, end=end, freq=self.freq, name=ax.name |
| 2788 | ) |
| 2789 | |
| 2790 | i8 = memb.asi8 |
| 2791 |
no test coverage detected