Skip to content

NaT inheritance #17435

Closed
Closed
@jbrockmendel

Description

@jbrockmendel

pd.NaT is an instance of NaTType. NaTType inherits from _NaT, which inherits from _Timestamp, which inherits from datetime.

How would people feel about taking _Timestamp out of that chain? Note that _Timestamp is not exported, so no users should be checking e.g. isinstance(x, _Timestamp).

The motivation: if we can take _Timestamp out of the inheritance chain, then the entire NaT hierarchy along with the instance itself can be defined in its own dedicated module, with no intra-pandas dependencies other than util. This comes out to a little over 500 lines.

This opens up opportunities for simplification elsewhere, since there are a bunch of modules that import NaT but don't care about most of the rest of tslib (the same applies to the timezones functions in #17274). Of particular interest are _libs.lib, _libs.period, tseries.frequencies, and tseries.offsets.

The other upside is that with few dependencies, the module becomes much easier to test/benchmark/maintain.

Without _NaT inheriting from _Timestamp, a methods in _Timestamp become eligible for the @cython.final decorator. My (limited) understanding is that this provides a small performance improvement.

The main downside I see is that the docstring pinning done by _make_error_func, _make_nat_func, and _make_nan_func is a bit of a hassle.

Metadata

Metadata

Assignees

No one assigned

    Labels

    CleanInternalsRelated to non-user accessible pandas implementation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions