(
buckets: Sequence[ExposureBucket],
)
| 193 | |
| 194 | |
| 195 | def _timeseries_points( |
| 196 | buckets: Sequence[ExposureBucket], |
| 197 | ) -> list[ExposuresTimeseriesPoint]: |
| 198 | new_identities_by_bucket: dict[datetime, dict[str, int]] = {} |
| 199 | for b in buckets: |
| 200 | new_identities_by_bucket.setdefault(b.bucket, {})[b.variant] = ( |
| 201 | b.first_exposed_identities |
| 202 | ) |
| 203 | return [ |
| 204 | ExposuresTimeseriesPoint( |
| 205 | bucket=bucket_start.isoformat(), |
| 206 | new_identities=new_identities_by_bucket[bucket_start], |
| 207 | ) |
| 208 | for bucket_start in sorted(new_identities_by_bucket) |
| 209 | ] |
| 210 | |
| 211 | |
| 212 | def _select_exposure_granularity( |
no test coverage detected
searching dependent graphs…