@@ -35,8 +35,28 @@ def read_partitioning_by_end(robject: dict, **kwargs):
3535 return Partitioning (ends = np .asarray (ends ))
3636
3737
38+ def _get_compressed_common_attrs (robject , ** kwargs ):
39+ if "unlistData" not in robject ["attributes" ]:
40+ raise ValueError ("Object does not contain unlistData, is it really a `CompressedList`?" )
41+ unlist_data = _dispatcher (robject ["attributes" ]["unlistData" ], ** kwargs )
42+
43+ element_metadata = None
44+ if "elementMetadata" in robject ["attributes" ]:
45+ element_metadata = _dispatcher (robject ["attributes" ]["elementMetadata" ], ** kwargs )
46+
47+ metadata = None
48+ if "metadata" in robject ["attributes" ]:
49+ metadata = _dispatcher (robject ["attributes" ]["metadata" ], ** kwargs )
50+
51+ partition = None
52+ if "partitioning" in robject ["attributes" ]:
53+ partition = _dispatcher (robject ["attributes" ]["partitioning" ], ** kwargs )
54+
55+ return unlist_data , element_metadata , metadata , partition
56+
57+
3858def read_compressed_integer_list (robject : dict , ** kwargs ):
39- """Read an R compressed list.
59+ """Read an R compressed integer list.
4060
4161 Args:
4262 robject:
@@ -53,24 +73,134 @@ def read_compressed_integer_list(robject: dict, **kwargs):
5373 if _cls not in ["CompressedIntegerList" ]:
5474 raise RuntimeError (f"`robject` does not contain not a compressed integer list object, contains `{ _cls } `." )
5575
56- if "unlistData" not in robject ["attributes" ]:
57- raise ValueError ("Object does not contain unlistData, is it really a `compressedList`?" )
58- unlist_data = _dispatcher (robject ["attributes" ]["unlistData" ], ** kwargs )
76+ unlist_data , element_metadata , metadata , partition = _get_compressed_common_attrs (robject = robject , ** kwargs )
5977
60- element_metadata = None
61- if "elementMetadata" in robject ["attributes" ]:
62- element_metadata = _dispatcher (robject ["attributes" ]["elementMetadata" ], ** kwargs )
78+ from compressed_lists import CompressedIntegerList
6379
64- metadata = None
65- if "metadata" in robject [ "attributes" ]:
66- metadata = _dispatcher ( robject [ "attributes" ][ "metadata" ], ** kwargs )
80+ return CompressedIntegerList (
81+ unlist_data = unlist_data , partitioning = partition , element_metadata = element_metadata , metadata = metadata
82+ )
6783
68- partition = None
69- if "partitioning" in robject ["attributes" ]:
70- partition = _dispatcher (robject ["attributes" ]["partitioning" ], ** kwargs )
7184
72- from compressed_lists import CompressedIntegerList
85+ def read_compressed_string_list (robject : dict , ** kwargs ):
86+ """Read an R compressed string/character list.
7387
74- return CompressedIntegerList (
88+ Args:
89+ robject:
90+ Dictionary containing parsed compressed list.
91+
92+ **kwargs:
93+ Additional arguments.
94+
95+ Returns:
96+ A `CompressedList` from the 'compressed_lists' package.
97+ """
98+ _cls = get_class (robject )
99+
100+ if _cls not in ["CompressedCharacterList" ]:
101+ raise RuntimeError (f"`robject` does not contain not a compressed string list object, contains `{ _cls } `." )
102+
103+ unlist_data , element_metadata , metadata , partition = _get_compressed_common_attrs (robject = robject , ** kwargs )
104+
105+ from compressed_lists import CompressedCharacterList
106+
107+ return CompressedCharacterList (
108+ unlist_data = unlist_data , partitioning = partition , element_metadata = element_metadata , metadata = metadata
109+ )
110+
111+
112+ def read_compressed_character_list (robject : dict , ** kwargs ):
113+ """Read an R compressed string/character list.
114+
115+ Args:
116+ robject:
117+ Dictionary containing parsed compressed string list.
118+
119+ **kwargs:
120+ Additional arguments.
121+
122+ Returns:
123+ A `CompressedList` from the 'compressed_lists' package.
124+ """
125+ return read_compressed_string_list (robject , ** kwargs )
126+
127+
128+ def read_compressed_boolean_list (robject : dict , ** kwargs ):
129+ """Read an R compressed boolean list.
130+
131+ Args:
132+ robject:
133+ Dictionary containing parsed compressed list.
134+
135+ **kwargs:
136+ Additional arguments.
137+
138+ Returns:
139+ A `CompressedList` from the 'compressed_lists' package.
140+ """
141+ _cls = get_class (robject )
142+
143+ if _cls not in ["CompressedLogicalList" ]:
144+ raise RuntimeError (f"`robject` does not contain not a compressed boolean list object, contains `{ _cls } `." )
145+
146+ unlist_data , element_metadata , metadata , partition = _get_compressed_common_attrs (robject = robject , ** kwargs )
147+
148+ from compressed_lists import CompressedBooleanList
149+
150+ return CompressedBooleanList (
151+ unlist_data = unlist_data , partitioning = partition , element_metadata = element_metadata , metadata = metadata
152+ )
153+
154+
155+ def read_compressed_float_list (robject : dict , ** kwargs ):
156+ """Read an R compressed float list.
157+
158+ Args:
159+ robject:
160+ Dictionary containing parsed compressed list.
161+
162+ **kwargs:
163+ Additional arguments.
164+
165+ Returns:
166+ A `CompressedList` from the 'compressed_lists' package.
167+ """
168+ _cls = get_class (robject )
169+
170+ if _cls not in ["CompressedNumericList" ]:
171+ raise RuntimeError (f"`robject` does not contain not a compressed float list object, contains `{ _cls } `." )
172+
173+ unlist_data , element_metadata , metadata , partition = _get_compressed_common_attrs (robject = robject , ** kwargs )
174+
175+ from compressed_lists import CompressedFloatList
176+
177+ return CompressedFloatList (
178+ unlist_data = unlist_data , partitioning = partition , element_metadata = element_metadata , metadata = metadata
179+ )
180+
181+
182+ def read_compressed_frame_list (robject : dict , ** kwargs ):
183+ """Read an R compressed dataframe list.
184+
185+ Args:
186+ robject:
187+ Dictionary containing parsed compressed list.
188+
189+ **kwargs:
190+ Additional arguments.
191+
192+ Returns:
193+ A `CompressedList` from the 'compressed_lists' package.
194+ """
195+ _cls = get_class (robject )
196+
197+ if _cls not in ["CompressedSplitDataFrameList" , "CompressedSplitDFrameList" ]:
198+ raise RuntimeError (f"`robject` does not contain not a compressed dataframe list object, contains `{ _cls } `." )
199+
200+ unlist_data , element_metadata , metadata , partition = _get_compressed_common_attrs (robject = robject , ** kwargs )
201+
202+ from compressed_lists import CompressedSplitBiocFrameList
203+
204+ return CompressedSplitBiocFrameList (
75205 unlist_data = unlist_data , partitioning = partition , element_metadata = element_metadata , metadata = metadata
76206 )
0 commit comments