@@ -9,6 +9,76 @@ function (::pyconvert_rule_numpysimplevalue{R,SAFE})(::Type{T}, x::Py) where {R,
99 end
1010end
1111
12+ function pyconvert_rule_datetime64 (:: Type{DateTime64} , x:: Py )
13+ pyconvert_return (C. PySimpleObject_GetValue (DateTime64, x))
14+ end
15+
16+ function pyconvert_rule_datetime64 (:: Type{T} , x:: Py ) where {T<: InlineDateTime64 }
17+ pyconvert_tryconvert (T, C. PySimpleObject_GetValue (DateTime64, x))
18+ end
19+
20+ function pyconvert_rule_datetime64 (:: Type{T} , x:: Py ) where {T<: NumpyDates.DatesInstant }
21+ d = C. PySimpleObject_GetValue (DateTime64, x)
22+ if isnan (d)
23+ pyconvert_unconverted ()
24+ else
25+ pyconvert_tryconvert (T, d)
26+ end
27+ end
28+
29+ function pyconvert_rule_datetime64 (:: Type{Missing} , x:: Py )
30+ d = C. PySimpleObject_GetValue (DateTime64, x)
31+ if isnan (d)
32+ pyconvert_return (missing )
33+ else
34+ pyconvert_unconverted ()
35+ end
36+ end
37+
38+ function pyconvert_rule_datetime64 (:: Type{Nothing} , x:: Py )
39+ d = C. PySimpleObject_GetValue (DateTime64, x)
40+ if isnan (d)
41+ pyconvert_return (nothing )
42+ else
43+ pyconvert_unconverted ()
44+ end
45+ end
46+
47+ function pyconvert_rule_timedelta64 (:: Type{TimeDelta64} , x:: Py )
48+ pyconvert_return (C. PySimpleObject_GetValue (TimeDelta64, x))
49+ end
50+
51+ function pyconvert_rule_timedelta64 (:: Type{T} , x:: Py ) where {T<: InlineTimeDelta64 }
52+ pyconvert_tryconvert (T, C. PySimpleObject_GetValue (TimeDelta64, x))
53+ end
54+
55+ function pyconvert_rule_timedelta64 (:: Type{T} , x:: Py ) where {T<: NumpyDates.DatesPeriod }
56+ d = C. PySimpleObject_GetValue (TimeDelta64, x)
57+ if isnan (d)
58+ pyconvert_unconverted ()
59+ else
60+ pyconvert_tryconvert (T, d)
61+ end
62+ end
63+
64+ function pyconvert_rule_timedelta64 (:: Type{Missing} , x:: Py )
65+ d = C. PySimpleObject_GetValue (TimeDelta64, x)
66+ if isnan (d)
67+ pyconvert_return (missing )
68+ else
69+ pyconvert_unconverted ()
70+ end
71+ end
72+
73+ function pyconvert_rule_timedelta64 (:: Type{Nothing} , x:: Py )
74+ d = C. PySimpleObject_GetValue (TimeDelta64, x)
75+ if isnan (d)
76+ pyconvert_return (missing )
77+ else
78+ pyconvert_unconverted ()
79+ end
80+ end
81+
1282const NUMPY_SIMPLE_TYPES = [
1383 (" bool_" , Bool),
1484 (" int8" , Int8),
@@ -28,6 +98,7 @@ const NUMPY_SIMPLE_TYPES = [
2898]
2999
30100function init_numpy ()
101+ # simple numeric scalar types
31102 for (t, T) in NUMPY_SIMPLE_TYPES
32103 isbool = occursin (" bool" , t)
33104 isint = occursin (" int" , t) || isbool
@@ -54,4 +125,36 @@ function init_numpy()
54125 iscomplex && pyconvert_add_rule (name, Complex, rule)
55126 isnumber && pyconvert_add_rule (name, Number, rule)
56127 end
128+
129+ # datetime64
130+ pyconvert_add_rule (
131+ " numpy:datetime64" ,
132+ DateTime64,
133+ pyconvert_rule_datetime64,
134+ PYCONVERT_PRIORITY_ARRAY,
135+ )
136+ pyconvert_add_rule (" numpy:datetime64" , InlineDateTime64, pyconvert_rule_datetime64)
137+ pyconvert_add_rule (
138+ " numpy:datetime64" ,
139+ NumpyDates. DatesInstant,
140+ pyconvert_rule_datetime64,
141+ )
142+ pyconvert_add_rule (" numpy:datetime64" , Missing, pyconvert_rule_datetime64)
143+ pyconvert_add_rule (" numpy:datetime64" , Nothing, pyconvert_rule_datetime64)
144+
145+ # timedelta64
146+ pyconvert_add_rule (
147+ " numpy:timedelta64" ,
148+ TimeDelta64,
149+ pyconvert_rule_timedelta64,
150+ PYCONVERT_PRIORITY_ARRAY,
151+ )
152+ pyconvert_add_rule (" numpy:timedelta64" , InlineTimeDelta64, pyconvert_rule_timedelta64)
153+ pyconvert_add_rule (
154+ " numpy:timedelta64" ,
155+ NumpyDates. DatesPeriod,
156+ pyconvert_rule_timedelta64,
157+ )
158+ pyconvert_add_rule (" numpy:timedelta64" , Missing, pyconvert_rule_timedelta64)
159+ pyconvert_add_rule (" numpy:timedelta64" , Nothing, pyconvert_rule_timedelta64)
57160end
0 commit comments