Xmipp  v3.23.11-Nereus
python_metadata.h
Go to the documentation of this file.
1 /***************************************************************************
2  *
3  * Authors: J.M. De la Rosa Trevin (jmdelarosa@cnb.csic.es)
4  * Roberto Marabini (roberto@cnb.csic.es)
5  *
6  * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21  * 02111-1307 USA
22  *
23  * All comments concerning this program package may be sent to the
24  * e-mail address 'xmipp@cnb.csic.es'
25  ***************************************************************************/
26 
27 #ifndef _PYTHON_METADATA_H
28 #define _PYTHON_METADATA_H
29 
30 #include "core/metadata_db.h"
31 #include "core/metadata_object.h"
32 #include "Python.h"
33 
34 class MDQuery;
35 class MDObject;
36 extern PyObject * PyXmippError;
37 
38 //#define MetaData_Check(v) (((v)->ob_type == &MetaDataType))
39 #define MetaData_Check(v) (((v)->ob_type == &MetaDataType))
40 #define MetaData_Value(v) ((*((MetaDataObject*)(v))->metadata))
41 
42 #define MDQuery_Check(v) (((v)->ob_type == &MDQueryType))
43 #define MDQuery_Value(v) ((*((MDQueryObject*)(v))->query))
44 
45 #define RETURN_MDOBJECT(value) return std::make_unique<MDObject>((MDLabel)label, value)
46 
47 /***************************************************************/
48 /* MDQuery */
49 /***************************************************************/
50 
51 /*MDQuery Object*/
52 typedef struct
53 {
54  PyObject_HEAD
55  std::unique_ptr<MDQuery> query;
56 }
58 
59 /* Destructor */
60 void MDQuery_dealloc(MDQueryObject* self);
61 /* Constructor */
62 PyObject *
63 MDQuery_new(PyTypeObject *type, PyObject *args, PyObject *kwargs);
64 
65 /* String representation */
66 PyObject *
67 MDQuery_repr(PyObject * obj);
68 
69 /* Helper function to create relational queries */
70  PyObject *
71 createMDValueRelational(PyObject *args, int op);
72 
73 /* MDValue Relational */
74  PyObject *
75 xmipp_MDValueRelational(PyObject *obj, PyObject *args, PyObject *kwargs);
76 
77 /* MDValueEQ */
78  PyObject *
79 xmipp_MDValueEQ(PyObject *obj, PyObject *args, PyObject *kwargs);
80 
81 /* MDValueEQ */
82  PyObject *
83 xmipp_MDValueNE(PyObject *obj, PyObject *args, PyObject *kwargs);
84 
85 /* MDValueLT */
86  PyObject *
87 xmipp_MDValueLT(PyObject *obj, PyObject *args, PyObject *kwargs);
88 
89 /* MDValueLE */
90  PyObject *
91 xmipp_MDValueLE(PyObject *obj, PyObject *args, PyObject *kwargs);
92 
93 /* MDValueLT */
94  PyObject *
95 xmipp_MDValueGT(PyObject *obj, PyObject *args, PyObject *kwargs);
96 
97 /* MDValueLE */
98  PyObject *
99 xmipp_MDValueGE(PyObject *obj, PyObject *args, PyObject *kwargs);
100 
101  /* MDValueRange */
102  PyObject *
103 xmipp_MDValueRange(PyObject *obj, PyObject *args, PyObject *kwargs);
104 
105  /* addLabelAlias */
106  PyObject *
107 xmipp_addLabelAlias(PyObject *obj, PyObject *args, PyObject *kwargs);
108 
109  /* add new labels at runtime */
110  PyObject *
111 xmipp_getNewAlias(PyObject *obj, PyObject *args, PyObject *kwargs);
112 
113 /* MDQuery methods */
114 extern PyMethodDef MDQuery_methods[];
115 
116 /*MDQuery Type */
117 extern PyTypeObject MDQueryType;
118 
119 /***************************************************************/
120 /* MetaData */
121 /**************************************************************/
122 
123 /*MetaData Object*/
124 typedef struct
125 {
126  PyObject_HEAD
127  std::unique_ptr<MetaDataDb> metadata;
128  std::unique_ptr<MetaDataDb::id_iterator> iter;
129  std::unique_ptr<MetaDataDb::id_iterator> iter_end;
130 }
132 
133 /* Destructor */
134 void MetaData_dealloc(MetaDataObject* self);
135 /* Constructor */
136 PyObject *
137 MetaData_new(PyTypeObject *type, PyObject *args, PyObject *kwargs);
138 
139  PyObject *
140 MetaData_aggregate(PyObject *obj, PyObject *args, PyObject *kwargs);
141 
142  PyObject *
143 MetaData_aggregateMdGroupBy(PyObject *obj, PyObject *args, PyObject *kwargs);
144 
145  PyObject *
146 MetaData_aggregateSingle(PyObject *obj, PyObject *args, PyObject *kwargs);
147  PyObject *
148 MetaData_aggregateSingleInt(PyObject *obj, PyObject *args, PyObject *kwargs);
149  PyObject *
150 MetaData_addIndex(PyObject *obj, PyObject *args, PyObject *kwargs);
151 
152  PyObject *
153 MetaData_join1(PyObject *obj, PyObject *args, PyObject *kwargs);
154  PyObject *
155 MetaData_join2(PyObject *obj, PyObject *args, PyObject *kwargs);
156  PyObject *
157 MetaData_joinNatural(PyObject *obj, PyObject *args, PyObject *kwargs);
158 
159  PyObject *
160 MetaData_importObjects(PyObject *obj, PyObject *args, PyObject *kwargs);
161  PyObject *
162 MetaData_intersection(PyObject *obj, PyObject *args, PyObject *kwargs);
163  PyObject *
164 MetaData_merge(PyObject *obj, PyObject *args, PyObject *kwargs);
165 
166 
167  PyObject *
168 MetaData_operate(PyObject *obj, PyObject *args, PyObject *kwargs);
169  PyObject *
170 MetaData_replace(PyObject *obj, PyObject *args, PyObject *kwargs);
171  PyObject *
172 MetaData_readPlain(PyObject *obj, PyObject *args, PyObject *kwargs);
173  PyObject *
174 MetaData_addPlain(PyObject *obj, PyObject *args, PyObject *kwargs);
175  PyObject *
176 MetaData_setComment(PyObject *obj, PyObject *args, PyObject *kwargs);
177  PyObject *
178 MetaData_getComment(PyObject *obj, PyObject *args, PyObject *kwargs);
179 PyObject *
180 MetaData_unionAll(PyObject *obj, PyObject *args, PyObject *kwargs);
181 PyObject *
182 MetaData_randomize(PyObject *obj, PyObject *args, PyObject *kwargs);
183 PyObject *
184 MetaData_selectPart(PyObject *obj, PyObject *args, PyObject *kwargs);
185 
186 
187 int MetaData_print(PyObject *obj, FILE *fp, int flags);
188 
189 /* String representation */
190 PyObject *
191 MetaData_repr(PyObject * obj);
192 
193 /* MetaData compare function */
194 PyObject*
195 MetaData_RichCompareBool(PyObject * obj, PyObject * obj2, int opid);
196 
197 /* read */
198 PyObject *
199 MetaData_read(PyObject *obj, PyObject *args, PyObject *kwargs);
200 
201 /* read */
202 PyObject *
203 MetaData_readPlain(PyObject *obj, PyObject *args, PyObject *kwargs);
204 
205 /* read block */
206 PyObject *
207 MetaData_readBlock(PyObject *obj, PyObject *args, PyObject *kwargs);
208 
209 /* write */
210 PyObject *
211 MetaData_write(PyObject *obj, PyObject *args, PyObject *kwargs);
212 
213 /* append */
214 PyObject *
215 MetaData_append(PyObject *obj, PyObject *args, PyObject *kwargs);
216 
217 /* addObject */
218 PyObject *
219 MetaData_addObject(PyObject *obj, PyObject *args, PyObject *kwargs);
220 
221 /* firstObject */
222 PyObject *
223 MetaData_firstObject(PyObject *obj, PyObject *args, PyObject *kwargs);
224 
225 /* lastObject */
226 PyObject *
227 MetaData_lastObject(PyObject *obj, PyObject *args, PyObject *kwargs);
228 
229 /* size */
230 PyObject *
231 MetaData_size(PyObject *obj, PyObject *args, PyObject *kwargs);
232 
233 /* size */
234 PyObject *
235 MetaData_getParsedLines(PyObject *obj, PyObject *args, PyObject *kwargs);
236 
237 /* isEmpty */
238 PyObject *
239 MetaData_isEmpty(PyObject *obj, PyObject *args, PyObject *kwargs);
240 
241 /* getColumnFormat */
242 PyObject *
243 MetaData_getColumnFormat(PyObject *obj, PyObject *args, PyObject *kwargs);
244 
245 /* setColumnFormat */
246 PyObject *
247 MetaData_setColumnFormat(PyObject *obj, PyObject *args, PyObject *kwargs);
248 
249 /* setValue */
250 PyObject *
251 MetaData_setValue(PyObject *obj, PyObject *args, PyObject *kwargs);
252 
253 /* setValueCol */
254 PyObject *
255 MetaData_setValueCol(PyObject *obj, PyObject *args, PyObject *kwargs);
256 
257 /* drop column */
258 PyObject *
259 MetaData_removeLabel(PyObject *obj, PyObject *args, PyObject *kwargs);
260 
261 /* getValue */
262 PyObject *
263 MetaData_getValue(PyObject *obj, PyObject *args, PyObject *kwargs);
264 
265 PyObject *
266 MetaData_getRow(PyObject *obj, PyObject *args, PyObject *kwargs);
267 
268 PyObject *
269 MetaData_setRow(PyObject *obj, PyObject *args, PyObject *kwargs);
270 
271 PyObject *
272 MetaData_getColumnValues(PyObject *obj, PyObject *args, PyObject *kwargs);
273 
274 /* setValue */
275 PyObject *
276 MetaData_setColumnValues(PyObject *obj, PyObject *args, PyObject *kwargs);
277 
278 /* containsLabel */
279 PyObject *
280 MetaData_getActiveLabels(PyObject *obj, PyObject *args, PyObject *kwargs);
281 
282 /* containsLabel */
283 PyObject *
284 xmipp_getBlocksInMetaDataFile(PyObject *obj, PyObject *args);
285 
286 /* containsLabel */
287 PyObject *
288 MetaData_getMaxStringLength(PyObject *obj, PyObject *args, PyObject *kwargs);
289 
290 /* containsLabel */
291 PyObject *
292 MetaData_containsLabel(PyObject *obj, PyObject *args, PyObject *kwargs);
293 
294 /* addLabel */
295 PyObject *
296 MetaData_addLabel(PyObject *obj, PyObject *args, PyObject *kwargs);
297 
298 /* addLabel */
299 PyObject *
300 MetaData_addItemId(PyObject *obj, PyObject *args, PyObject *kwargs);
301 
302 /* fillConstant */
303 PyObject *
304 MetaData_fillConstant(PyObject *obj, PyObject *args, PyObject *kwargs);
305 
306 /* fillRandom */
307 PyObject *
308 MetaData_fillRandom(PyObject *obj, PyObject *args, PyObject *kwargs);
309 
310 /* fillExpand */
311 PyObject *
312 MetaData_fillExpand(PyObject *obj, PyObject *args, PyObject *kwargs);
313 
314 /* copyColumn */
315 PyObject *
316 MetaData_copyColumn(PyObject *obj, PyObject *args, PyObject *kwargs);
317 
318 /* copyColumn */
319 PyObject *
320 MetaData_renameColumn(PyObject *obj, PyObject *args, PyObject *kwargs);
321 
322 /* copyColumnTo */
323 PyObject *
324 MetaData_copyColumnTo(PyObject *obj, PyObject *args, PyObject *kwargs);
325 
326 /* removeObjects */
327 PyObject *
328 MetaData_removeObjects(PyObject *obj, PyObject *args, PyObject *kwargs);
329 
330 /* removeObjects */
331 PyObject *
332 MetaData_removeDisabled(PyObject *obj, PyObject *args, PyObject *kwargs);
333 
334 /* Make absolute path */
335 PyObject *
336 MetaData_makeAbsPath(PyObject *obj, PyObject *args, PyObject *kwargs);
337 
338 /* clear */
339 PyObject *
340 MetaData_clear(PyObject *obj, PyObject *args, PyObject *kwargs);
341 
342 
344 PyObject *
345 MetaData_iter(PyObject *obj);
346 
347 PyObject *
348 MetaData_iternext(PyObject *obj);
349 
351 PyObject *
352 MetaData_sort(PyObject *obj, PyObject *args, PyObject *kwargs);
353 
355 PyObject *
356 MetaData_removeDuplicates(PyObject *obj, PyObject *args, PyObject *kwargs);
357 
358 /* MetaData methods */
359 extern PyMethodDef MetaData_methods[];
360 
361 /*MetaData Type */
362 extern PyTypeObject MetaDataType;
363 
364 /*Helper function to create an MDObject from a PyObject */
365 std::unique_ptr<MDObject> createMDObject(int label, PyObject *pyValue);
366 
367 void setMDObjectValue(MDObject *obj, PyObject *pyValue);
368 
369 PyObject * getMDObjectValue(const MDObject * obj);
370 
371 #endif
PyObject * MetaData_setColumnFormat(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_size(PyObject *obj, PyObject *args, PyObject *kwargs)
PyTypeObject MetaDataType
void MDQuery_dealloc(MDQueryObject *self)
PyObject * xmipp_addLabelAlias(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject * MetaData_aggregateSingleInt(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getParsedLines(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_renameColumn(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_readPlain(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_addObject(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_lastObject(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * xmipp_MDValueEQ(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_fillRandom(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_unionAll(PyObject *obj, PyObject *args, PyObject *kwargs)
PyMethodDef MDQuery_methods[]
PyObject * MetaData_randomize(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_aggregate(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getComment(PyObject *obj, PyObject *args, PyObject *kwargs)
std::unique_ptr< MetaDataDb::id_iterator > iter_end
PyObject_HEAD std::unique_ptr< MDQuery > query
PyObject * MetaData_copyColumnTo(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_joinNatural(PyObject *obj, PyObject *args, PyObject *kwargs)
void MetaData_dealloc(MetaDataObject *self)
PyObject * MetaData_write(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_read(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_selectPart(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * xmipp_MDValueNE(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MDQuery_repr(PyObject *obj)
PyObject * xmipp_getNewAlias(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getActiveLabels(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_readBlock(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_importObjects(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_aggregateMdGroupBy(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_repr(PyObject *obj)
PyObject * xmipp_MDValueLE(PyObject *obj, PyObject *args, PyObject *kwargs)
MDLabel label
PyObject * MetaData_sort(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_fillConstant(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_setRow(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_clear(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_removeLabel(PyObject *obj, PyObject *args, PyObject *kwargs)
viol type
PyObject * xmipp_getBlocksInMetaDataFile(PyObject *obj, PyObject *args)
int MetaData_print(PyObject *obj, FILE *fp, int flags)
PyObject * MetaData_setComment(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_addItemId(PyObject *obj, PyObject *args, PyObject *kwargs)
std::unique_ptr< MetaDataDb::id_iterator > iter
PyObject * MetaData_removeDisabled(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_aggregateSingle(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * xmipp_MDValueLT(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_isEmpty(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * xmipp_MDValueGE(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_firstObject(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_containsLabel(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * xmipp_MDValueRelational(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_addPlain(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * getMDObjectValue(const MDObject *obj)
PyObject * MDQuery_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
PyObject * MetaData_addLabel(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getColumnFormat(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * xmipp_MDValueRange(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getMaxStringLength(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_setValueCol(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getColumnValues(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_removeObjects(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getValue(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_getRow(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
PyObject * MetaData_setValue(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_iter(PyObject *obj)
PyObject * MetaData_addIndex(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * createMDValueRelational(PyObject *args, int op)
PyObject * MetaData_setColumnValues(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_operate(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_join2(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_iternext(PyObject *obj)
PyObject * xmipp_MDValueGT(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
PyObject * MetaData_append(PyObject *obj, PyObject *args, PyObject *kwargs)
void(* obj)()
PyObject * MetaData_fillExpand(PyObject *obj, PyObject *args, PyObject *kwargs)
std::unique_ptr< MDObject > createMDObject(int label, PyObject *pyValue)
PyObject * MetaData_intersection(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_replace(PyObject *obj, PyObject *args, PyObject *kwargs)
void setMDObjectValue(MDObject *obj, PyObject *pyValue)
PyObject * MetaData_join1(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_makeAbsPath(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_copyColumn(PyObject *obj, PyObject *args, PyObject *kwargs)
PyMethodDef MetaData_methods[]
PyObject * MetaData_merge(PyObject *obj, PyObject *args, PyObject *kwargs)
PyObject * MetaData_RichCompareBool(PyObject *obj, PyObject *obj2, int opid)
PyTypeObject MDQueryType
PyObject * MetaData_removeDuplicates(PyObject *obj, PyObject *args, PyObject *kwargs)