Skip to content

Addition of "conjugate" Duration to TimePoint - order of operations #214

@MetRonnie

Description

@MetRonnie

From cylc/cylc-flow#4908

When you add a conjugate Duration such as P1M1D to a TimePoint, it seems isodatetime does + P1D + P1M internally, which I think is confusing.

This can be argued either way (I don't think ISO 8601 specifies what order is supposed to happen), but I think the order should be as is written from left to right, i.e. + P1M + P1D.

Why does the order matter, you ask? For nominal (inexact) units, addition is not associative:

>>> 2021-02-28 + P1M + P1D
2021-03-29
>>> 2021-02-28 + P1D + P1M
2021-04-01
>>> 2021-02-28 + P1M1D
2021-04-01

(I've used shorthand to represent the metomi.isodatetime.data objects)

The other side of the argument is that we should stick with the existing behaviour to avoid a breaking, possibly-painful change.

Note: If users want the addition to take place in a specific order, they should use separate Duration objects and add them to the TimePoint object in the desired order, not add Duration objects together.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions