| 103 | |
| 104 | |
| 105 | class SeriesQuantileDask(SeriesQuantile): |
| 106 | def _layer(self) -> dict: |
| 107 | from dask.array.dispatch import percentile_lookup as _percentile |
| 108 | from dask.array.percentile import merge_percentiles |
| 109 | |
| 110 | dsk = {} |
| 111 | # Add 0 and 100 during calculation for more robust behavior (hopefully) |
| 112 | calc_qs = np.pad(self.q * 100, 1, mode="constant") |
| 113 | calc_qs[-1] = 100 |
| 114 | |
| 115 | for i in range(self.frame.npartitions): |
| 116 | dsk[("chunk-" + self._name, i)] = ( |
| 117 | _percentile, |
| 118 | (self.frame._name, i), |
| 119 | calc_qs, |
| 120 | ) |
| 121 | dsk[(self._name, 0)] = self._finalizer( |
| 122 | ( |
| 123 | merge_percentiles, |
| 124 | self.q * 100, |
| 125 | [calc_qs] * self.frame.npartitions, |
| 126 | sorted(dsk), |
| 127 | "lower", |
| 128 | None, |
| 129 | False, |
| 130 | ) |
| 131 | ) |
| 132 | return dsk |
| 133 | |
| 134 | def _lower(self): |
| 135 | return None |