Skip to content

[Types] Add timedelta64 support #571

Description

@Nucs

Overview

Add support for timedelta64 type to NumSharp for duration arithmetic and time series operations.

Problem

NumSharp lacks timedelta support, needed for datetime arithmetic:

>>> import numpy as np
>>> np.timedelta64(30, 'D')
numpy.timedelta64(30,'D')

>>> np.timedelta64(2, 'h') + np.timedelta64(30, 'm')
numpy.timedelta64(150,'m')

>>> np.datetime64('2024-01-15') + np.timedelta64(30, 'D')
numpy.datetime64('2024-02-14')

>>> np.array([1, 2, 3], dtype='timedelta64[D]')
array([1, 2, 3], dtype='timedelta64[D]')

Use cases:

  • Duration arithmetic — Add/subtract time periods
  • Time differencesdatetime64 - datetime64 = timedelta64
  • Time series — Intervals, sampling rates
  • Data science — Age calculations, time-to-event

Proposal

Task List

  • Create TimeDelta64 struct with unit awareness:
    public readonly struct TimeDelta64
    {
        public readonly long Value;  // Duration in units
        public readonly DateTimeUnit Unit;  // ns, us, ms, s, m, h, D, W, M, Y
    }
  • Add NPTypeCode.TimeDelta64 to NPTypeCode.cs
  • Implement unit conversion logic (shared with datetime64)
  • Implement arithmetic:
    • timedelta + timedelta → timedelta
    • timedelta - timedelta → timedelta
    • timedelta * scalar → timedelta
    • timedelta / scalar → timedelta
    • timedelta / timedelta → float
  • Implement comparison operators
  • Integrate with datetime64:
    • datetime + timedelta → datetime
    • datetime - timedelta → datetime
    • datetime - datetime → timedelta
  • Add np.timedelta64() constructor
  • Update type promotion tables
  • Add tests with NumPy verification

Units (matching NumPy)

Same as datetime64: Y, M, W, D, h, m, s, ms, us, ns

C# Type Mapping

NumPy C# Notes
timedelta64 TimeDelta64 struct Custom with unit
timedelta64 TimeSpan Limited to 100ns, no unit tracking

Implementation Effort

MEDIUM — Similar to datetime64, with additional arithmetic operations.

Estimated: ~300 lines for struct and operations.

Related

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

coreInternal engine: Shape, Storage, TensorEngine, iteratorsdocumentation-neededFeature requires documentation after implementation or depiction of lack of documentationenhancementNew feature or requestmissing feature/sNumPy function not yet implemented in NumSharp

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions