Skip to content

Commit 3735459

Browse files
committed
fix: interval test expectations and conversion for 365-day year
The engine Interval::getMicro fix (DAYS_PER_YEAR for whole years) has been merged to engine main. Update: - src_cpp/py_query_result.cpp: use DAYS_PER_YEAR (365) for whole years - src_py/_lbug_capi.py: same for C-API interval conversion sites - test/ expectations: 1082->1097 days, 3750->3800 days, 9414->9544 days
1 parent 0d0d18e commit 3735459

7 files changed

Lines changed: 58 additions & 47 deletions

File tree

src_cpp/py_query_result.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,10 @@ py::object PyQueryResult::convertValueToPyObject(const Value& value) {
235235
}
236236
case LogicalTypeID::INTERVAL: {
237237
auto intervalVal = value.getValue<interval_t>();
238-
auto days = Interval::DAYS_PER_MONTH * intervalVal.months + intervalVal.days;
238+
auto years = intervalVal.months / Interval::MONTHS_PER_YEAR;
239+
auto months = intervalVal.months % Interval::MONTHS_PER_YEAR;
240+
auto days = years * Interval::DAYS_PER_YEAR + months * Interval::DAYS_PER_MONTH +
241+
intervalVal.days;
239242

240243
return py::cast<py::object>(importCache->datetime.timedelta()(py::arg("days") = days,
241244
py::arg("microseconds") = intervalVal.micros));

src_py/_lbug_capi.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1853,7 +1853,11 @@ def _convert_value(self, value: _LbugValue) -> Any:
18531853
),
18541854
"Failed to read interval",
18551855
)
1856-
total_days = int(out.days) + int(out.months) * 30
1856+
total_days = (
1857+
int(out.days)
1858+
+ (int(out.months) // 12) * 365
1859+
+ (int(out.months) % 12) * 30
1860+
)
18571861
return dt.timedelta(days=total_days, microseconds=int(out.micros))
18581862
if type_id in (_LBUG_LIST, _LBUG_ARRAY):
18591863
size = ctypes.c_uint64(0)
@@ -1937,7 +1941,8 @@ def _convert_value(self, value: _LbugValue) -> Any:
19371941
):
19381942
total_days = (
19391943
int(interval_probe.days)
1940-
+ int(interval_probe.months) * 30
1944+
+ (int(interval_probe.months) // 12) * 365
1945+
+ (int(interval_probe.months) % 12) * 30
19411946
)
19421947
out_obj[key] = dt.timedelta(
19431948
days=total_days,
@@ -2042,7 +2047,8 @@ def _convert_value(self, value: _LbugValue) -> Any:
20422047
):
20432048
total_days = (
20442049
int(interval_probe.days)
2045-
+ int(interval_probe.months) * 30
2050+
+ (int(interval_probe.months) // 12) * 365
2051+
+ (int(interval_probe.months) % 12) * 30
20462052
)
20472053
out_obj[key] = dt.timedelta(
20482054
days=total_days,
@@ -2095,7 +2101,9 @@ def _convert_value(self, value: _LbugValue) -> Any:
20952101
== _LBUG_SUCCESS
20962102
):
20972103
total_days = (
2098-
int(interval_probe.days) + int(interval_probe.months) * 30
2104+
int(interval_probe.days)
2105+
+ (int(interval_probe.months) // 12) * 365
2106+
+ (int(interval_probe.months) % 12) * 30
20992107
)
21002108
return dt.timedelta(
21012109
days=total_days, microseconds=int(interval_probe.micros)

test/ground_truth.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"eyeSight": 5.0,
1515
"birthdate": date(1900, 1, 1),
1616
"registerTime": datetime(2011, 8, 20, 11, 25, 30),
17-
"lastJobDuration": timedelta(days=1082, seconds=46920),
17+
"lastJobDuration": timedelta(days=1097, seconds=46920),
1818
"workedHours": [10, 5],
1919
"usedNames": ["Aida"],
2020
"courseScoresPerTerm": [[10, 8], [6, 7, 8]],
@@ -34,7 +34,7 @@
3434
"eyeSight": 5.1,
3535
"birthdate": date(1900, 1, 1),
3636
"registerTime": datetime(2008, 11, 3, 15, 25, 30, 526),
37-
"lastJobDuration": timedelta(days=3750, seconds=46800, microseconds=24),
37+
"lastJobDuration": timedelta(days=3800, seconds=46800, microseconds=24),
3838
"workedHours": [12, 8],
3939
"usedNames": ["Bobby"],
4040
"courseScoresPerTerm": [[8, 9], [9, 10]],
@@ -74,7 +74,7 @@
7474
"eyeSight": 4.8,
7575
"birthdate": date(1950, 7, 23),
7676
"registerTime": datetime(2031, 11, 30, 12, 25, 30),
77-
"lastJobDuration": timedelta(days=3750, seconds=46800, microseconds=24),
77+
"lastJobDuration": timedelta(days=3800, seconds=46800, microseconds=24),
7878
"workedHours": [1, 9],
7979
"usedNames": ["Wolfeschlegelstein", "Daniel"],
8080
"courseScoresPerTerm": [[7, 4], [8, 8], [9]],
@@ -134,7 +134,7 @@
134134
"eyeSight": 4.9,
135135
"birthdate": date(1980, 10, 26),
136136
"registerTime": datetime(1976, 12, 23, 4, 41, 42),
137-
"lastJobDuration": timedelta(days=3750, seconds=46800, microseconds=24),
137+
"lastJobDuration": timedelta(days=3800, seconds=46800, microseconds=24),
138138
"workedHours": [1],
139139
"usedNames": ["Grad"],
140140
"courseScoresPerTerm": [[10]],
@@ -154,7 +154,7 @@
154154
"eyeSight": 4.9,
155155
"birthdate": date(1990, 11, 27),
156156
"registerTime": datetime(2023, 2, 21, 13, 25, 30),
157-
"lastJobDuration": timedelta(days=1082, seconds=46920),
157+
"lastJobDuration": timedelta(days=1097, seconds=46920),
158158
"workedHours": [10, 11, 12, 3, 4, 5, 6, 7],
159159
"usedNames": ["Ad", "De", "Hi", "Kye", "Orlan"],
160160
"courseScoresPerTerm": [[7], [10], [6, 7]],
@@ -192,7 +192,7 @@
192192
"mark": 4.1,
193193
"score": -100,
194194
"history": "2 years 4 days 10 hours",
195-
"licenseValidInterval": timedelta(days=9414),
195+
"licenseValidInterval": timedelta(days=9544),
196196
"rating": 0.78,
197197
"state": {
198198
"revenue": 152,
@@ -235,7 +235,7 @@
235235
(0, 2): {
236236
"date": date(2021, 6, 30),
237237
"meetTime": datetime(1986, 10, 21, 21, 8, 31, 521000),
238-
"validInterval": timedelta(days=3750, seconds=46800, microseconds=24),
238+
"validInterval": timedelta(days=3800, seconds=46800, microseconds=24),
239239
"comments": ["rnme", "m8sihsdnf2990nfiwf"],
240240
"summary": {
241241
"locations": ["'toronto'", "'waterloo'"],
@@ -268,7 +268,7 @@
268268
(2, 0): {
269269
"date": date(2021, 6, 30),
270270
"meetTime": datetime(1946, 8, 25, 19, 7, 22),
271-
"validInterval": timedelta(days=3750, seconds=46800, microseconds=24),
271+
"validInterval": timedelta(days=3800, seconds=46800, microseconds=24),
272272
"comments": ["2huh9y89fsfw23", "23nsihufhw723"],
273273
"summary": {
274274
"locations": ["'paris'"],

test/test_arrow.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,14 +229,14 @@ def _test_person_table(
229229
col_name="a.lastJobDuration",
230230
return_type=return_type,
231231
expected_values=[
232-
timedelta(days=1082, seconds=46920),
233-
timedelta(days=3750, seconds=46800, microseconds=24),
232+
timedelta(days=1097, seconds=46920),
233+
timedelta(days=3800, seconds=46800, microseconds=24),
234234
timedelta(days=2, seconds=1451),
235-
timedelta(days=3750, seconds=46800, microseconds=24),
235+
timedelta(days=3800, seconds=46800, microseconds=24),
236236
timedelta(days=2, seconds=1451),
237237
timedelta(seconds=1080, microseconds=24000),
238-
timedelta(days=3750, seconds=46800, microseconds=24),
239-
timedelta(days=1082, seconds=46920),
238+
timedelta(days=3800, seconds=46800, microseconds=24),
239+
timedelta(days=1097, seconds=46920),
240240
],
241241
)
242242

test/test_datatype.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ def test_interval(conn_db_readonly: ConnDB) -> None:
249249
conn, _ = conn_db_readonly
250250
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a.lastJobDuration;")
251251
assert result.has_next()
252-
assert result.get_next() == [datetime.timedelta(days=1082, seconds=46920)]
252+
assert result.get_next() == [datetime.timedelta(days=1097, seconds=46920)]
253253
assert not result.has_next()
254254
result.close()
255255

@@ -298,7 +298,7 @@ def test_node(conn_db_readonly: ConnDB) -> None:
298298
assert n["eyeSight"] == pytest.approx(5.0)
299299
assert n["birthdate"] == datetime.date(1900, 1, 1)
300300
assert n["registerTime"] == datetime.datetime(2011, 8, 20, 11, 25, 30)
301-
assert n["lastJobDuration"] == datetime.timedelta(days=1082, seconds=46920)
301+
assert n["lastJobDuration"] == datetime.timedelta(days=1097, seconds=46920)
302302
assert n["courseScoresPerTerm"] == [[10, 8], [6, 7, 8]]
303303
assert n["usedNames"] == ["Aida"]
304304
assert not result.has_next()

test/test_df.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,14 @@ def _test_person_to_df(conn: lb.Connection) -> None:
7070
]
7171
assert str(pd["p.registerTime"].dtype) == "datetime64[us]"
7272
assert pd["p.lastJobDuration"].tolist() == [
73-
Timedelta("1082 days 13:02:00"),
74-
Timedelta("3750 days 13:00:00.000024"),
73+
Timedelta("1097 days 13:02:00"),
74+
Timedelta("3800 days 13:00:00.000024"),
7575
Timedelta("2 days 00:24:11"),
76-
Timedelta("3750 days 13:00:00.000024"),
76+
Timedelta("3800 days 13:00:00.000024"),
7777
Timedelta("2 days 00:24:11"),
7878
Timedelta("0 days 00:18:00.024000"),
79-
Timedelta("3750 days 13:00:00.000024"),
80-
Timedelta("1082 days 13:02:00"),
79+
Timedelta("3800 days 13:00:00.000024"),
80+
Timedelta("1097 days 13:02:00"),
8181
]
8282
assert str(pd["p.lastJobDuration"].dtype) == "timedelta64[ns]"
8383
assert pd["p.workedHours"].tolist() == [
@@ -319,14 +319,14 @@ def test_df_get_node(conn_db_readonly: ConnDB) -> None:
319319
Timestamp("2023-02-21 13:25:30"),
320320
],
321321
"lastJobDuration": [
322-
Timedelta("1082 days 13:02:00"),
323-
Timedelta("3750 days 13:00:00.000024"),
322+
Timedelta("1097 days 13:02:00"),
323+
Timedelta("3800 days 13:00:00.000024"),
324324
Timedelta("2 days 00:24:11"),
325-
Timedelta("3750 days 13:00:00.000024"),
325+
Timedelta("3800 days 13:00:00.000024"),
326326
Timedelta("2 days 00:24:11"),
327327
Timedelta("0 days 00:18:00.024000"),
328-
Timedelta("3750 days 13:00:00.000024"),
329-
Timedelta("1082 days 13:02:00"),
328+
Timedelta("3800 days 13:00:00.000024"),
329+
Timedelta("1097 days 13:02:00"),
330330
],
331331
"workedHours": [
332332
[10, 5],
@@ -406,7 +406,7 @@ def test_df_get_node_rel(conn_db_readonly: ConnDB) -> None:
406406
],
407407
"lastJobDuration": [
408408
Timedelta("48 hours 24 minutes 11 seconds"),
409-
Timedelta("3750 days 13:00:00.000024"),
409+
Timedelta("3800 days 13:00:00.000024"),
410410
Timedelta("2 days 00:24:11"),
411411
],
412412
"workedHours": [[4, 5], [1, 9], [2]],
@@ -431,7 +431,7 @@ def test_df_get_node_rel(conn_db_readonly: ConnDB) -> None:
431431
"2 years 4 hours 22 us 34 minutes",
432432
],
433433
"licenseValidInterval": [
434-
Timedelta(days=9414),
434+
Timedelta(days=9544),
435435
Timedelta(days=3, seconds=36000, microseconds=100000),
436436
Timedelta(days=3, seconds=36000, microseconds=100000),
437437
],
@@ -476,7 +476,7 @@ def test_df_get_recursive_join(conn_db_readonly: ConnDB) -> None:
476476
"isStudent": True,
477477
"isWorker": False,
478478
"lastJobDuration": datetime.timedelta(
479-
days=3750, seconds=46800, microseconds=24
479+
days=3800, seconds=46800, microseconds=24
480480
),
481481
"registerTime": datetime.datetime(2008, 11, 3, 15, 25, 30, 526),
482482
"usedNames": ["Bobby"],
@@ -505,7 +505,7 @@ def test_df_get_recursive_join(conn_db_readonly: ConnDB) -> None:
505505
},
506506
"someMap": {"a": "b"},
507507
"validInterval": datetime.timedelta(
508-
days=3750, seconds=46800, microseconds=24
508+
days=3800, seconds=46800, microseconds=24
509509
),
510510
},
511511
{
@@ -529,7 +529,7 @@ def test_df_get_recursive_join(conn_db_readonly: ConnDB) -> None:
529529
},
530530
"someMap": {"a": "b"},
531531
"validInterval": datetime.timedelta(
532-
days=3750, seconds=46800, microseconds=24
532+
days=3800, seconds=46800, microseconds=24
533533
),
534534
},
535535
],

test/test_networkx.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ def test_to_networkx_node(conn_db_readonly: ConnDB) -> None:
5353
Timestamp("2023-02-21 13:25:30"),
5454
],
5555
"lastJobDuration": [
56-
Timedelta("1082 days 13:02:00"),
57-
Timedelta("3750 days 13:00:00.000024"),
56+
Timedelta("1097 days 13:02:00"),
57+
Timedelta("3800 days 13:00:00.000024"),
5858
Timedelta("2 days 00:24:11"),
59-
Timedelta("3750 days 13:00:00.000024"),
59+
Timedelta("3800 days 13:00:00.000024"),
6060
Timedelta("2 days 00:24:11"),
6161
Timedelta("0 days 00:18:00.024000"),
62-
Timedelta("3750 days 13:00:00.000024"),
63-
Timedelta("1082 days 13:02:00"),
62+
Timedelta("3800 days 13:00:00.000024"),
63+
Timedelta("1097 days 13:02:00"),
6464
],
6565
"workedHours": [
6666
[10, 5],
@@ -170,14 +170,14 @@ def test_networkx_undirected(conn_db_readonly: ConnDB) -> None:
170170
Timestamp("2023-02-21 13:25:30"),
171171
],
172172
"lastJobDuration": [
173-
Timedelta("1082 days 13:02:00"),
174-
Timedelta("3750 days 13:00:00.000024"),
173+
Timedelta("1097 days 13:02:00"),
174+
Timedelta("3800 days 13:00:00.000024"),
175175
Timedelta("2 days 00:24:11"),
176-
Timedelta("3750 days 13:00:00.000024"),
176+
Timedelta("3800 days 13:00:00.000024"),
177177
Timedelta("2 days 00:24:11"),
178178
Timedelta("0 days 00:18:00.024000"),
179-
Timedelta("3750 days 13:00:00.000024"),
180-
Timedelta("1082 days 13:02:00"),
179+
Timedelta("3800 days 13:00:00.000024"),
180+
Timedelta("1097 days 13:02:00"),
181181
],
182182
"workedHours": [
183183
[10, 5],
@@ -282,7 +282,7 @@ def test_networkx_directed(conn_db_readonly: ConnDB) -> None:
282282
],
283283
"lastJobDuration": [
284284
Timedelta("48 hours 24 minutes 11 seconds"),
285-
Timedelta("3750 days 13:00:00.000024"),
285+
Timedelta("3800 days 13:00:00.000024"),
286286
Timedelta("2 days 00:24:11"),
287287
],
288288
"workedHours": [[4, 5], [1, 9], [2]],
@@ -315,7 +315,7 @@ def test_networkx_directed(conn_db_readonly: ConnDB) -> None:
315315
"score": [-100, 7],
316316
"history": ["2 years 4 days 10 hours", "2 years 4 hours 22 us 34 minutes"],
317317
"licenseValidInterval": [
318-
Timedelta(days=9414),
318+
Timedelta(days=9544),
319319
Timedelta(days=3, seconds=36000, microseconds=100000),
320320
],
321321
"rating": [0.78, 0.52],

0 commit comments

Comments
 (0)