Skip to content

[Types] Add timedelta64 support #571

@Nucs

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

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