I. The cheap surface: 40 names that are ten minutes each
- Dominant language
- Mojo
- Stars
- 1
- Forks
- 0
- Avg merge
- 1h 31m
- Merged PRs (30d)
- 640
Description
These are the names that are individually trivial and collectively worth more than any other single day in M6. Nobody will ever prioritise `rtruediv` on its own, which is exactly why they are one issue and one pull request. Doing them early also stops the conformance suite reporting `AttributeError` for things that are trivially present, which makes every other number in the milestone readable.
### What it covers
**The 25 arithmetic and comparison spellings on both `DataFrame` and `Series`.** `add`, `sub`, `mul`, `div`, `truediv`, `floordiv`, `mod`, `pow`, `radd`, `rsub`, `rmul`, `rdiv`, `rtruediv`, `rfloordiv`, `rmod`, `rpow`, `eq`, `ne`, `lt`, `gt`, `le`, `ge`, `dot`, `divmod`, `rdivmod`. Most of these are the operator that already exists with a `fill_value` and an `axis` parameter attached, and the reflected forms are the same function with the arguments the other way round. The `fill_value` parameter is the part that is real work and it is one implementation shared by all of them.
**The methods document 06 does not mention at all.** `Series.case_when`, `from_arrow` on both types, `iterrows`, `itertuples`, `str.isascii`, `GroupBy.ohlc`, and the `method` and `on` parameters of `rolling`.
`iterrows` and `itertuples` deserve a note. They are slow by construction and every performance guide tells people not to use them, and they are also in an enormous amount of existing code. A port that fails on `itertuples` fails on line one of a script somebody wrote in 2019, and the fact that we would rather they used something else does not help them.
### Done when
- [ ] All 40 names resolve, accept what pandas accepts, and return what pandas returns on the corpus
- [ ] `fill_value` works on every arithmetic spelling that takes it, including the reflected forms
- [ ] `itertuples` returns a named tuple with the same field names pandas uses, including the renaming rules for invalid identifiers
- [ ] L1 and L3 both at 100 percent for the workstream in the compat scoreboard
### How this is measured
The target above is an L3 rate over this workstream's callables, reported by `pixi run conformance` in [firepanda-compat](https://github.com/tamnd/firepanda-compat) and enforced by the CI ratchet rather than by a person ticking a box. L3 means every parameter takes every one of its values and the combinations that interact are enumerated. The levels are defined in [01-what-100-percent-means.md](https://github.com/tamnd/firepanda-compat/blob/main/docs/specs/01-what-100-percent-means.md), the counts come from [02-the-surface.md](https://github.com/tamnd/firepanda-compat/blob/main/docs/specs/02-the-surface.md), and the ordering argument for this milestone is in [08-m6.md](https://github.com/tamnd/firepanda-compat/blob/main/docs/specs/08-m6.md).
Anything we deliberately will not do goes in the divergence registry with a reason before this issue closes, and a registered divergence still runs and still has to diverge.
Part of #8, milestone M6.
Contributor guide
Research direction
Start by running `pixi run conformance` and read the linked compatibility specifications, especially `01-what-100-percent-means.md`, `02-the-surface.md`, and `08-m6.md`. Locate the existing DataFrame, Series, and GroupBy implementations for the listed names, then use the corpus and CI ratchet to verify all names, parameters, reflected arithmetic, tuple naming rules, L1/L3 rates, and any documented divergences.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- pandas, python
- Domain
- api, data, testing
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100