@@ -90,11 +90,10 @@ def to_ibis(cls, typ: pa.DataType, nullable=True) -> dt.DataType:
90
90
return dt .Interval (typ .unit , nullable = nullable )
91
91
elif pa .types .is_interval (typ ):
92
92
raise ValueError ("Arrow interval type is not supported" )
93
- elif (
94
- pa .types .is_list (typ )
95
- or pa .types .is_large_list (typ )
96
- or pa .types .is_fixed_size_list (typ )
97
- ):
93
+ elif pa .types .is_fixed_size_list (typ ):
94
+ value_dtype = cls .to_ibis (typ .value_type , typ .value_field .nullable )
95
+ return dt .Array (value_dtype , length = typ .list_size , nullable = nullable )
96
+ elif pa .types .is_list (typ ) or pa .types .is_large_list (typ ):
98
97
value_dtype = cls .to_ibis (typ .value_type , typ .value_field .nullable )
99
98
return dt .Array (value_dtype , nullable = nullable )
100
99
elif pa .types .is_struct (typ ):
@@ -196,7 +195,10 @@ def from_ibis(cls, dtype: dt.DataType) -> pa.DataType:
196
195
cls .from_ibis (dtype .value_type ),
197
196
nullable = dtype .value_type .nullable ,
198
197
)
199
- return pa .list_ (value_field )
198
+ if dtype .length is None :
199
+ return pa .list_ (value_field )
200
+ else :
201
+ return pa .list_ (value_field , dtype .length )
200
202
elif dtype .is_struct ():
201
203
fields = [
202
204
pa .field (name , cls .from_ibis (dtype ), nullable = dtype .nullable )
0 commit comments