@@ -14,67 +14,76 @@ use crate::error::IntoPyResult;
14
14
#[ pyfunction]
15
15
#[ pyo3( signature = ( stringarray, set_failing_to_invalid = false ) ) ]
16
16
pub ( crate ) fn cells_parse (
17
+ py : Python < ' _ > ,
17
18
stringarray : PyArray ,
18
19
set_failing_to_invalid : bool ,
19
20
) -> PyResult < PyObject > {
20
21
let ( boxed_array, _field) = stringarray. into_inner ( ) ;
21
- let cells = if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < StringArray > ( ) {
22
- CellIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
23
- . into_pyresult ( ) ?
24
- } else if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < LargeStringArray > ( ) {
25
- CellIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
26
- . into_pyresult ( ) ?
27
- } else {
28
- return Err ( PyValueError :: new_err (
29
- "unsupported array type to parse cells from" ,
30
- ) ) ;
31
- } ;
22
+ let cells = py. allow_threads ( || {
23
+ if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < StringArray > ( ) {
24
+ CellIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
25
+ . into_pyresult ( )
26
+ } else if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < LargeStringArray > ( ) {
27
+ CellIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
28
+ . into_pyresult ( )
29
+ } else {
30
+ Err ( PyValueError :: new_err (
31
+ "unsupported array type to parse cells from" ,
32
+ ) )
33
+ }
34
+ } ) ?;
32
35
33
- Python :: with_gil ( |py| h3array_to_pyarray ( cells, py) )
36
+ h3array_to_pyarray ( cells, py)
34
37
}
35
38
36
39
#[ pyfunction]
37
40
#[ pyo3( signature = ( stringarray, set_failing_to_invalid = false ) ) ]
38
41
pub ( crate ) fn vertexes_parse (
42
+ py : Python < ' _ > ,
39
43
stringarray : PyArray ,
40
44
set_failing_to_invalid : bool ,
41
45
) -> PyResult < PyObject > {
42
46
let ( boxed_array, _field) = stringarray. into_inner ( ) ;
43
- let vertexes = if let Some ( utf8array) = boxed_array. as_any ( ) . downcast_ref :: < StringArray > ( ) {
44
- VertexIndexArray :: parse_genericstringarray ( utf8array, set_failing_to_invalid)
45
- . into_pyresult ( ) ?
46
- } else if let Some ( utf8array) = boxed_array. as_any ( ) . downcast_ref :: < LargeStringArray > ( ) {
47
- VertexIndexArray :: parse_genericstringarray ( utf8array, set_failing_to_invalid)
48
- . into_pyresult ( ) ?
49
- } else {
50
- return Err ( PyValueError :: new_err (
51
- "unsupported array type to parse vertexes from" ,
52
- ) ) ;
53
- } ;
47
+ let vertexes = py. allow_threads ( || {
48
+ if let Some ( utf8array) = boxed_array. as_any ( ) . downcast_ref :: < StringArray > ( ) {
49
+ VertexIndexArray :: parse_genericstringarray ( utf8array, set_failing_to_invalid)
50
+ . into_pyresult ( )
51
+ } else if let Some ( utf8array) = boxed_array. as_any ( ) . downcast_ref :: < LargeStringArray > ( ) {
52
+ VertexIndexArray :: parse_genericstringarray ( utf8array, set_failing_to_invalid)
53
+ . into_pyresult ( )
54
+ } else {
55
+ Err ( PyValueError :: new_err (
56
+ "unsupported array type to parse vertexes from" ,
57
+ ) )
58
+ }
59
+ } ) ?;
54
60
55
- Python :: with_gil ( |py| h3array_to_pyarray ( vertexes, py) )
61
+ h3array_to_pyarray ( vertexes, py)
56
62
}
57
63
58
64
#[ pyfunction]
59
65
#[ pyo3( signature = ( stringarray, set_failing_to_invalid = false ) ) ]
60
66
pub ( crate ) fn directededges_parse (
67
+ py : Python < ' _ > ,
61
68
stringarray : PyArray ,
62
69
set_failing_to_invalid : bool ,
63
70
) -> PyResult < PyObject > {
64
71
let ( boxed_array, _field) = stringarray. into_inner ( ) ;
65
- let edges = if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < StringArray > ( ) {
66
- DirectedEdgeIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
67
- . into_pyresult ( ) ?
68
- } else if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < LargeStringArray > ( ) {
69
- DirectedEdgeIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
70
- . into_pyresult ( ) ?
71
- } else {
72
- return Err ( PyValueError :: new_err (
73
- "unsupported array type to parse directededges from" ,
74
- ) ) ;
75
- } ;
72
+ let edges = py. allow_threads ( || {
73
+ if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < StringArray > ( ) {
74
+ DirectedEdgeIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
75
+ . into_pyresult ( )
76
+ } else if let Some ( stringarray) = boxed_array. as_any ( ) . downcast_ref :: < LargeStringArray > ( ) {
77
+ DirectedEdgeIndexArray :: parse_genericstringarray ( stringarray, set_failing_to_invalid)
78
+ . into_pyresult ( )
79
+ } else {
80
+ Err ( PyValueError :: new_err (
81
+ "unsupported array type to parse directededges from" ,
82
+ ) )
83
+ }
84
+ } ) ?;
76
85
77
- Python :: with_gil ( |py| h3array_to_pyarray ( edges, py) )
86
+ h3array_to_pyarray ( edges, py)
78
87
}
79
88
80
89
#[ pyfunction]
0 commit comments