Xmipp  v3.23.11-Nereus
Classes | Macros | Functions | Variables
python_metadata.h File Reference
#include "core/metadata_db.h"
#include "core/metadata_object.h"
#include "Python.h"
Include dependency graph for python_metadata.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  MDQueryObject
 
struct  MetaDataObject
 

Macros

#define MetaData_Check(v)   (((v)->ob_type == &MetaDataType))
 
#define MetaData_Value(v)   ((*((MetaDataObject*)(v))->metadata))
 
#define MDQuery_Check(v)   (((v)->ob_type == &MDQueryType))
 
#define MDQuery_Value(v)   ((*((MDQueryObject*)(v))->query))
 
#define RETURN_MDOBJECT(value)   return std::make_unique<MDObject>((MDLabel)label, value)
 

Functions

void MDQuery_dealloc (MDQueryObject *self)
 
PyObject * MDQuery_new (PyTypeObject *type, PyObject *args, PyObject *kwargs)
 
PyObject * MDQuery_repr (PyObject *obj)
 
PyObject * createMDValueRelational (PyObject *args, int op)
 
PyObject * xmipp_MDValueRelational (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueEQ (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueNE (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueLT (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueLE (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueGT (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueGE (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_MDValueRange (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_addLabelAlias (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_getNewAlias (PyObject *obj, PyObject *args, PyObject *kwargs)
 
void MetaData_dealloc (MetaDataObject *self)
 
PyObject * MetaData_new (PyTypeObject *type, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_aggregate (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_aggregateMdGroupBy (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_aggregateSingle (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_aggregateSingleInt (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_addIndex (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_join1 (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_join2 (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_joinNatural (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_importObjects (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_intersection (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_merge (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_operate (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_replace (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_readPlain (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_addPlain (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_setComment (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_getComment (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_unionAll (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_randomize (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_selectPart (PyObject *obj, PyObject *args, PyObject *kwargs)
 
int MetaData_print (PyObject *obj, FILE *fp, int flags)
 
PyObject * MetaData_repr (PyObject *obj)
 
PyObject * MetaData_RichCompareBool (PyObject *obj, PyObject *obj2, int opid)
 
PyObject * MetaData_read (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_readBlock (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_write (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_append (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_addObject (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_firstObject (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_lastObject (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_size (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_getParsedLines (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_isEmpty (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_getColumnFormat (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_setColumnFormat (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_setValue (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_setValueCol (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_removeLabel (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_setRow (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_getColumnValues (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_setColumnValues (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_getActiveLabels (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * xmipp_getBlocksInMetaDataFile (PyObject *obj, PyObject *args)
 
PyObject * MetaData_getMaxStringLength (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_containsLabel (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_addLabel (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_addItemId (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_fillConstant (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_fillRandom (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_fillExpand (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_copyColumn (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_renameColumn (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_copyColumnTo (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_removeObjects (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_removeDisabled (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_makeAbsPath (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_clear (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_iter (PyObject *obj)
 
PyObject * MetaData_iternext (PyObject *obj)
 
PyObject * MetaData_sort (PyObject *obj, PyObject *args, PyObject *kwargs)
 
PyObject * MetaData_removeDuplicates (PyObject *obj, PyObject *args, PyObject *kwargs)
 
std::unique_ptr< MDObjectcreateMDObject (int label, PyObject *pyValue)
 
void setMDObjectValue (MDObject *obj, PyObject *pyValue)
 
PyObject * getMDObjectValue (const MDObject *obj)
 

Variables

PyObject * PyXmippError
 
PyMethodDef MDQuery_methods []
 
PyTypeObject MDQueryType
 
PyMethodDef MetaData_methods []
 
PyTypeObject MetaDataType
 

Macro Definition Documentation

◆ MDQuery_Check

#define MDQuery_Check (   v)    (((v)->ob_type == &MDQueryType))

Definition at line 42 of file python_metadata.h.

◆ MDQuery_Value

#define MDQuery_Value (   v)    ((*((MDQueryObject*)(v))->query))

Definition at line 43 of file python_metadata.h.

◆ MetaData_Check

#define MetaData_Check (   v)    (((v)->ob_type == &MetaDataType))

Definition at line 39 of file python_metadata.h.

◆ MetaData_Value

#define MetaData_Value (   v)    ((*((MetaDataObject*)(v))->metadata))

Definition at line 40 of file python_metadata.h.

◆ RETURN_MDOBJECT

#define RETURN_MDOBJECT (   value)    return std::make_unique<MDObject>((MDLabel)label, value)

Definition at line 45 of file python_metadata.h.

Function Documentation

◆ createMDObject()

std::unique_ptr<MDObject> createMDObject ( int  label,
PyObject *  pyValue 
)

Definition at line 2246 of file python_metadata.cpp.

2247 {
2248  try
2249  {
2250  if (PyBool_Check(pyValue))
2251  {
2252  bool bValue = (pyValue == Py_True);
2253  RETURN_MDOBJECT(bValue);
2254  }
2255  if (PyLong_Check(pyValue) && MDL::isInt((MDLabel)label))
2256  {
2257  int iValue = PyLong_AS_LONG(pyValue);
2258  RETURN_MDOBJECT(iValue);
2259  }
2260  if (PyLong_Check(pyValue) && MDL::isLong((MDLabel)label))
2261  {
2262  size_t value = PyLong_AsUnsignedLong(pyValue);
2263  RETURN_MDOBJECT(value);
2264  }
2265  if (PyUnicode_Check(pyValue))
2266  {
2267  const char * str = PyUnicode_AsUTF8(PyObject_Str(pyValue));
2268  RETURN_MDOBJECT(std::string(str));
2269  }
2270  if (FileName_Check(pyValue))
2271  {
2272  RETURN_MDOBJECT(*((FileNameObject*)pyValue)->filename);
2273  }
2274  if (PyFloat_Check(pyValue))
2275  {
2276  double dValue = PyFloat_AS_DOUBLE(pyValue);
2277  RETURN_MDOBJECT(double(dValue));
2278  }
2279  if (PyList_Check(pyValue))
2280  {
2281  size_t size = PyList_Size(pyValue);
2282  PyObject * item = nullptr;
2283  double dValue = 0.;
2284  std::vector<double> vValue(size);
2285  for (size_t i = 0; i < size; ++i)
2286  {
2287  item = PyList_GetItem(pyValue, i);
2288  if (!PyFloat_Check(item))
2289  {
2290  PyErr_SetString(PyExc_TypeError,
2291  "Vectors are only supported for double");
2292  return nullptr;
2293  }
2294  dValue = PyFloat_AS_DOUBLE(item);
2295  vValue[i] = dValue;
2296  }
2297  RETURN_MDOBJECT(vValue);
2298  }
2299  PyErr_SetString(PyExc_TypeError, "Unrecognized type to create MDObject");
2300  }
2301  catch (XmippError &xe)
2302  {
2303  PyErr_SetString(PyXmippError, xe.what());
2304  }
2305  return nullptr;
2306 }
static bool isInt(const MDLabel label)
#define FileName_Check(v)
#define RETURN_MDOBJECT(value)
#define i
static bool isLong(const MDLabel label)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
MDLabel

◆ createMDValueRelational()

PyObject* createMDValueRelational ( PyObject *  args,
int  op 
)

Definition at line 114 of file python_metadata.cpp.

115 {
116  int label;
117  int limit = -1;
118  int offset = 0;
119  auto orderLabel = (int) MDL_OBJID;
120  PyObject *pyValue; //Only used to skip label and value
121 
122  if ((op == -1 && PyArg_ParseTuple(args, "iO|iiii", &label, &pyValue, &op,
123  &limit, &offset, &orderLabel)) || PyArg_ParseTuple(args, "iO|iii",
124  &label, &pyValue, &limit, &offset, &orderLabel))
125  {
126  auto object = createMDObject(label, pyValue);
127  if (!object)
128  return nullptr;
129  auto *pyQuery = (MDQueryObject*)PyObject_CallFunction((PyObject*)&MDQueryType, "");
130  pyQuery->query = std::make_unique<MDValueRelational>(*object, (RelationalOp) op,
131  limit, offset, (MDLabel) orderLabel);
132  return (PyObject *) pyQuery;
133  }
134  return nullptr;
135 }
object id (int), NOTE: This label is special and shouldn&#39;t be used
PyTypeObject MDQueryType
std::unique_ptr< MDObject > createMDObject(int label, PyObject *pyValue)
RelationalOp
MDLabel

◆ getMDObjectValue()

PyObject* getMDObjectValue ( const MDObject obj)

Definition at line 2381 of file python_metadata.cpp.

2382 {
2383  if (obj->label == MDL_UNDEFINED) //if undefine label, store as a literal string
2384  return nullptr;
2385  switch (MDL::labelType(obj->label))
2386  {
2387  case LABEL_BOOL: //bools are int in sqlite3
2388  if (obj->data.boolValue)
2389  Py_RETURN_TRUE;
2390  else
2391  Py_RETURN_FALSE;
2392  case LABEL_INT:
2393  return PyLong_FromLong(obj->data.intValue);
2394  case LABEL_SIZET:
2395  return PyLong_FromLong(obj->data.longintValue);
2396  case LABEL_DOUBLE:
2397  return PyFloat_FromDouble(obj->data.doubleValue);
2398  case LABEL_STRING:
2399  return PyUnicode_FromString(obj->data.stringValue->c_str());
2400  case LABEL_VECTOR_DOUBLE:
2401  {
2402  std::vector<double> & vector = *(obj->data.vectorValue);
2403  int size = vector.size();
2404  PyObject * list = PyList_New(size);
2405  for (int i = 0; i < size; ++i)
2406  PyList_SetItem(list, i, PyFloat_FromDouble(vector[i]));
2407  return list;
2408  }
2409  default:
2410  return nullptr;
2411  }//close switch
2412  return nullptr;
2413 }
#define i
static MDLabelType labelType(const MDLabel label)
MDLabel label
size_t longintValue
std::vector< double > * vectorValue
ObjectData data
double doubleValue
String * stringValue

◆ MDQuery_dealloc()

void MDQuery_dealloc ( MDQueryObject self)

Definition at line 81 of file python_metadata.cpp.

82 {
83  self->~MDQueryObject(); // Call the destructor
84  Py_TYPE(self)->tp_free((PyObject*)self);
85 }
#define Py_TYPE(op)
Definition: frm_wrap.cpp:761

◆ MDQuery_new()

PyObject* MDQuery_new ( PyTypeObject *  type,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 89 of file python_metadata.cpp.

90 {
91  auto *self = (MDQueryObject*)type->tp_alloc(type, 0);
92  return (PyObject *)self;
93 }
viol type

◆ MDQuery_repr()

PyObject* MDQuery_repr ( PyObject *  obj)

Definition at line 97 of file python_metadata.cpp.

98 {
99  auto *self = (MDQueryObject*) obj;
100  if (self->query)
101  {
102  String s = self->query->whereString() + self->query->limitString()
103  + self->query->orderByString();
104  return PyUnicode_FromString(s.c_str());
105  }
106  else
107  return PyUnicode_FromString("");
108 }
std::string String
Definition: xmipp_strings.h:34
void(* obj)()

◆ MetaData_addIndex()

PyObject* MetaData_addIndex ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1971 of file python_metadata.cpp.

1972 {
1973  int label;
1974  if (PyArg_ParseTuple(args, "i", &label))
1975  {
1976  try
1977  {
1978  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1979  self->metadata->addIndex((MDLabel)label);
1980  Py_RETURN_NONE;
1981  }
1982  catch (XmippError &xe)
1983  {
1984  PyErr_SetString(PyXmippError, xe.what());
1985  }
1986  }
1987  return nullptr;
1988 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_addItemId()

PyObject* MetaData_addItemId ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1343 of file python_metadata.cpp.

1344 {
1345  try
1346  {
1347  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1348  self->metadata->addItemId();
1349  Py_RETURN_NONE;
1350  }
1351  catch (XmippError &xe)
1352  {
1353  PyErr_SetString(PyXmippError, xe.what());
1354  }
1355  return nullptr;
1356 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_addLabel()

PyObject* MetaData_addLabel ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1321 of file python_metadata.cpp.

1322 {
1323  int label;
1324  int pos = -1;
1325  if (PyArg_ParseTuple(args, "i|i", &label, &pos))
1326  {
1327  try
1328  {
1329  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1330  self->metadata->addLabel((MDLabel) label, pos);
1331  Py_RETURN_TRUE;
1332  }
1333  catch (XmippError &xe)
1334  {
1335  PyErr_SetString(PyXmippError, xe.what());
1336  }
1337  }
1338  return nullptr;
1339 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_addObject()

PyObject* MetaData_addObject ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 863 of file python_metadata.cpp.

864 {
865  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
866  return PyLong_FromUnsignedLong(self->metadata->addObject());
867 }
void(* obj)()

◆ MetaData_addPlain()

PyObject* MetaData_addPlain ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 712 of file python_metadata.cpp.

713 {
714  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
715 
716  if (self != NULL)
717  {
718  PyObject *input = NULL;
719  PyObject *input2 = NULL;
720  PyObject *pyStr = NULL;
721  PyObject *pyLabels = NULL;
722  PyObject *pySep = NULL;
723  const char *str = NULL;
724  const char *labels = NULL;
725 
726  if (PyArg_ParseTuple(args, "OO|O", &input, &input2, &pySep))
727  {
728  try
729  {
730  pyStr = PyObject_Str(input);
731  pyLabels = PyObject_Str(input2);
732  if ((NULL != pyStr) && (NULL != pyLabels))
733  {
734  str = PyUnicode_AsUTF8(pyStr);
735  labels = PyUnicode_AsUTF8(pyLabels);
736  self->metadata->addPlain(str, labels);
737  Py_RETURN_NONE;
738  }
739  else
740  return NULL;
741  }
742  catch (XmippError &xe)
743  {
744  PyErr_SetString(PyXmippError, xe.what());
745  return NULL;
746  }
747  }
748  }
749  return NULL;
750 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_aggregate()

PyObject* MetaData_aggregate ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1790 of file python_metadata.cpp.

1791 {
1792 
1793  AggregateOperation op;
1794  MDLabel aggregateLabel;
1795  MDLabel operateLabel;
1796  MDLabel resultLabel;
1797  PyObject *pyMd = nullptr;
1798 
1799  if (PyArg_ParseTuple(args, "Oiiii", &pyMd, &op, &aggregateLabel,
1800  &operateLabel, &resultLabel))
1801  {
1802  try
1803  {
1804  if (!MetaData_Check(pyMd))
1805  {
1806  PyErr_SetString(PyExc_TypeError,
1807  "MetaData::aggregate: Expecting MetaData as first argument");
1808  return nullptr;
1809  }
1810  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1811  self->metadata->aggregate(MetaData_Value(pyMd),
1812  op, aggregateLabel,
1813  operateLabel, resultLabel);
1814  Py_RETURN_NONE;
1815  }
1816  catch (XmippError &xe)
1817  {
1818  PyErr_SetString(PyXmippError, xe.what());
1819  }
1820  }
1821  return nullptr;
1822 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_aggregateMdGroupBy()

PyObject* MetaData_aggregateMdGroupBy ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1826 of file python_metadata.cpp.

1827 {
1828 
1829  AggregateOperation op;
1830  PyObject *aggregateLabel= nullptr;
1831  MDLabel operateLabel;
1832  MDLabel resultLabel;
1833  PyObject *pyMd = nullptr;
1834 
1835  if (PyArg_ParseTuple(args, "OiOii", &pyMd, &op, &aggregateLabel,
1836  &operateLabel, &resultLabel))
1837  {
1838  try
1839  {
1840  if (!MetaData_Check(pyMd))
1841  {
1842  PyErr_SetString(PyExc_TypeError,
1843  "MetaData::aggregateMdGroupBy: Expecting MetaData as first argument");
1844  return nullptr;
1845  }
1846  if (!PyList_Check(aggregateLabel))
1847  {
1848  PyErr_SetString(PyExc_TypeError,
1849  "MetaData::aggregateMdGroupBy: Input must be a mdl List not a mdl label");
1850  return nullptr;
1851 
1852  }
1853  size_t size = PyList_Size(aggregateLabel);
1854  std::vector<MDLabel> vaggregateLabel(size);
1855  PyObject * item = nullptr;
1856  int iValue = 0;
1857  for (size_t i = 0; i < size; ++i)
1858  {
1859  item = PyList_GetItem(aggregateLabel, i);
1860  if (!PyLong_Check(item))
1861  {
1862  PyErr_SetString(PyExc_TypeError,
1863  "MDL labels must be integers (MDLABEL)");
1864  return nullptr;
1865  }
1866  iValue = PyLong_AsLong(item);
1867  vaggregateLabel[i] = (MDLabel)iValue;
1868  }
1869 
1870  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1871  self->metadata->aggregateGroupBy(MetaData_Value(pyMd),
1872  (AggregateOperation) op, vaggregateLabel,
1873  operateLabel, resultLabel);
1874  Py_RETURN_NONE;
1875  }
1876  catch (XmippError &xe)
1877  {
1878  PyErr_SetString(PyXmippError, xe.what());
1879  }
1880  }
1881  return nullptr;
1882 }
#define i
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_aggregateSingle()

PyObject* MetaData_aggregateSingle ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1738 of file python_metadata.cpp.

1739 {
1740  AggregateOperation op;
1741  MDLabel label;
1742  PyObject *pyValue;
1743 
1744  if (PyArg_ParseTuple(args, "ii", &op, &label))
1745  {
1746  try
1747  {
1748  auto object = MDObject(label);
1749  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1750  self->metadata->aggregateSingle(object, op, label);
1751  pyValue = getMDObjectValue(&object);
1752  return pyValue;
1753  }
1754  catch (XmippError &xe)
1755  {
1756  PyErr_SetString(PyXmippError, xe.what());
1757  }
1758  }
1759  return nullptr;
1760 }
PyObject * getMDObjectValue(const MDObject *obj)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_aggregateSingleInt()

PyObject* MetaData_aggregateSingleInt ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1764 of file python_metadata.cpp.

1765 {
1766  AggregateOperation op;
1767  MDLabel label;
1768  PyObject *pyValue;
1769 
1770  if (PyArg_ParseTuple(args, "ii", &op, &label))
1771  {
1772  try
1773  {
1774  auto object = MDObject(label);
1775  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1776  self->metadata->aggregateSingleInt(object, op, label);
1777  pyValue = getMDObjectValue(&object);
1778  return pyValue;
1779  }
1780  catch (XmippError &xe)
1781  {
1782  PyErr_SetString(PyXmippError, xe.what());
1783  }
1784  }
1785  return nullptr;
1786 }
PyObject * getMDObjectValue(const MDObject *obj)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_append()

PyObject* MetaData_append ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 830 of file python_metadata.cpp.

831 {
832  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
833 
834  if (self != nullptr)
835  {
836  PyObject *input = nullptr;
837  if (PyArg_ParseTuple(args, "O", &input))
838  {
839  try
840  {
841  if (PyUnicode_Check(input))
842  {
843  const char *str = PyUnicode_AsUTF8(input);
844  self->metadata->append(str);
845  }
846  else if (FileName_Check(input))
847  self->metadata->append(FileName_Value(input));
848  else
849  return nullptr;
850  Py_RETURN_NONE;
851  }
852  catch (XmippError &xe)
853  {
854  PyErr_SetString(PyXmippError, xe.what());
855  return nullptr;
856  }
857  }
858  }
859  return nullptr;
860 }
#define FileName_Check(v)
#define FileName_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_clear()

PyObject* MetaData_clear ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1594 of file python_metadata.cpp.

1595 {
1596  try
1597  {
1598  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1599  self->metadata->clear();
1600  Py_RETURN_NONE;
1601  }
1602  catch (XmippError &xe)
1603  {
1604  PyErr_SetString(PyXmippError, xe.what());
1605  return nullptr;
1606  }
1607 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_containsLabel()

PyObject* MetaData_containsLabel ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1298 of file python_metadata.cpp.

1299 {
1300  int label;
1301  if (PyArg_ParseTuple(args, "i", &label))
1302  {
1303  try
1304  {
1305  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1306  if (self->metadata->containsLabel((MDLabel) label))
1307  Py_RETURN_TRUE;
1308  else
1309  Py_RETURN_FALSE;
1310  }
1311  catch (XmippError &xe)
1312  {
1313  PyErr_SetString(PyXmippError, xe.what());
1314  }
1315  }
1316  return nullptr;
1317 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_copyColumn()

PyObject* MetaData_copyColumn ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1448 of file python_metadata.cpp.

1449 {
1450  int labelDst;
1451  int labelSrc;
1452  if (PyArg_ParseTuple(args, "ii", &labelDst, &labelSrc))
1453  {
1454  try
1455  {
1456  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1457  self->metadata->copyColumn((MDLabel)labelDst, (MDLabel)labelSrc);
1458  Py_RETURN_TRUE;
1459  }
1460  catch (XmippError &xe)
1461  {
1462  PyErr_SetString(PyXmippError, xe.what());
1463  }
1464  }
1465  return nullptr;
1466 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_copyColumnTo()

PyObject* MetaData_copyColumnTo ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2310 of file python_metadata.cpp.

2311 {
2312  int labelDst;
2313  int labelSrc;
2314  PyObject * pyMd;
2315  if (PyArg_ParseTuple(args, "Oii", &pyMd, &labelDst, &labelSrc))
2316  {
2317  try
2318  {
2319  if (MetaData_Check(pyMd))
2320  {
2321  MetaData_Value(obj).copyColumnTo(MetaData_Value(pyMd), (MDLabel)labelDst, (MDLabel)labelSrc);
2322  Py_RETURN_TRUE;
2323  }
2324  }
2325  catch (XmippError &xe)
2326  {
2327  PyErr_SetString(PyXmippError, xe.what());
2328  }
2329  }
2330  return nullptr;
2331 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_dealloc()

void MetaData_dealloc ( MetaDataObject self)

Definition at line 490 of file python_metadata.cpp.

491 {
492  self->~MetaDataObject(); // Call the destructor
493  Py_TYPE(self)->tp_free((PyObject*)self);
494 }
#define Py_TYPE(op)
Definition: frm_wrap.cpp:761

◆ MetaData_fillConstant()

PyObject* MetaData_fillConstant ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1360 of file python_metadata.cpp.

1361 {
1362  int label;
1363  PyObject *pyValue = nullptr;
1364  PyObject *pyStr = nullptr;
1365  if (PyArg_ParseTuple(args, "i|O", &label, &pyValue))
1366  {
1367  try
1368  {
1369  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1370  if ((pyStr = PyObject_Str(pyValue)) != nullptr)
1371  {
1372  const char * str = PyUnicode_AsUTF8(pyStr);
1373  if (str != nullptr)
1374  {
1375  self->metadata->fillConstant((MDLabel) label, str);
1376  Py_RETURN_TRUE;
1377  }
1378  }
1379  PyErr_SetString(PyXmippError, "MetaData.fillConstant: couldn't convert second argument to string");
1380  }
1381  catch (XmippError &xe)
1382  {
1383  PyErr_SetString(PyXmippError, xe.what());
1384  }
1385  }
1386  return nullptr;
1387 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_fillExpand()

PyObject* MetaData_fillExpand ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1391 of file python_metadata.cpp.

1392 {
1393  int label;
1394 
1395  if (PyArg_ParseTuple(args, "i", &label))
1396  {
1397  try
1398  {
1399  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1400  self->metadata->fillExpand((MDLabel) label);
1401  Py_RETURN_NONE;
1402  }
1403  catch (XmippError &xe)
1404  {
1405  PyErr_SetString(PyXmippError, xe.what());
1406  }
1407  }
1408  return nullptr;
1409 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_fillRandom()

PyObject* MetaData_fillRandom ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1413 of file python_metadata.cpp.

1414 {
1415  int label;
1416  double op1 = 0.;
1417  double op2 = 0.;
1418  double op3 = 0.;
1419  PyObject *pyValue = nullptr;
1420  PyObject *pyStr = nullptr;
1421 
1422  if (PyArg_ParseTuple(args, "iOdd|d", &label, &pyValue, &op1, &op2, &op3))
1423  {
1424  try
1425  {
1426  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1427  if ((pyStr = PyObject_Str(pyValue)) != nullptr)
1428  {
1429  const char * str = PyUnicode_AsUTF8(pyStr);
1430  if (str != nullptr)
1431  {
1432  self->metadata->fillRandom((MDLabel) label, str, op1, op2, op3);
1433  Py_RETURN_TRUE;
1434  }
1435  }
1436  PyErr_SetString(PyXmippError, "MetaData.fillRandom: couldn't convert second argument to string");
1437  }
1438  catch (XmippError &xe)
1439  {
1440  PyErr_SetString(PyXmippError, xe.what());
1441  }
1442  }
1443  return nullptr;
1444 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_firstObject()

PyObject* MetaData_firstObject ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 870 of file python_metadata.cpp.

871 {
872  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
873  return PyLong_FromUnsignedLong(self->metadata->firstRowId());
874 }
void(* obj)()

◆ MetaData_getActiveLabels()

PyObject* MetaData_getActiveLabels ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1213 of file python_metadata.cpp.

1214 {
1215  try
1216  {
1217  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1218  std::vector<MDLabel> labels = self->metadata->getActiveLabels();
1219  int size = labels.size();
1220  PyObject * list = PyList_New(size);
1221 
1222  for (int i = 0; i < size; ++i)
1223  PyList_SetItem(list, i, PyLong_FromLong(labels.at(i)));
1224 
1225  return list;
1226 
1227  }
1228  catch (XmippError &xe)
1229  {
1230  PyErr_SetString(PyXmippError, xe.what());
1231  }
1232  return nullptr;
1233 }
#define i
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_getColumnFormat()

PyObject* MetaData_getColumnFormat ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 934 of file python_metadata.cpp.

935 {
936  try
937  {
938  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
939  if (self->metadata->isColumnFormat())
940  Py_RETURN_TRUE;
941  else
942  Py_RETURN_FALSE;
943  }
944  catch (XmippError &xe)
945  {
946  PyErr_SetString(PyXmippError, xe.what());
947  }
948  return nullptr;
949 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_getColumnValues()

PyObject* MetaData_getColumnValues ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1139 of file python_metadata.cpp.

1140 {
1141  int label;
1142  if (PyArg_ParseTuple(args, "i", &label))
1143  {
1144  try
1145  {
1146  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1147 
1148  std::vector<MDObject> v;
1149  self->metadata->getColumnValues((MDLabel) label,v);
1150 
1151  size_t size=v.size();
1152  PyObject * list = PyList_New(size);
1153 
1154  for (size_t i = 0; i < size; ++i)
1155  PyList_SetItem(list, i, getMDObjectValue(&(v[i])));
1156 
1157  return list;
1158  }
1159  catch (XmippError &xe)
1160  {
1161  PyErr_SetString(PyXmippError, xe.what());
1162  }
1163  }
1164  return nullptr;
1165 }
#define i
PyObject * getMDObjectValue(const MDObject *obj)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_getComment()

PyObject* MetaData_getComment ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1963 of file python_metadata.cpp.

1964 {
1965  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1966  return PyUnicode_FromString(self->metadata->getComment().c_str());
1967 }
void(* obj)()

◆ MetaData_getMaxStringLength()

PyObject* MetaData_getMaxStringLength ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1276 of file python_metadata.cpp.

1277 {
1278  int label;
1279  if (PyArg_ParseTuple(args, "i", &label))
1280  {
1281  try
1282  {
1283  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1284  int length = self->metadata->getMaxStringLength((MDLabel) label);
1285 
1286  return PyLong_FromLong(length);
1287  }
1288  catch (XmippError &xe)
1289  {
1290  PyErr_SetString(PyXmippError, xe.what());
1291  }
1292  }
1293  return nullptr;
1294 }
__host__ __device__ float length(float2 v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_getParsedLines()

PyObject* MetaData_getParsedLines ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 900 of file python_metadata.cpp.

901 {
902  try
903  {
904  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
905  return PyLong_FromUnsignedLong(self->metadata->getParsedLines());
906  }
907  catch (XmippError &xe)
908  {
909  PyErr_SetString(PyXmippError, xe.what());
910  }
911  return nullptr;
912 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_getRow()

PyObject* MetaData_getRow ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1114 of file python_metadata.cpp.

1115 {
1116  if (size_t objectId = BAD_OBJID; PyArg_ParseTuple(args, "k", &objectId))
1117  {
1118  try
1119  {
1120  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1121  const auto row = self->metadata->getRowSql(objectId);
1122  PyObject *d = PyODict_New();
1123  for (const auto *o : row) {
1124  PyODict_SetItem(d, PyLong_FromLong(o->label), getMDObjectValue(o));
1125  }
1126  return d;
1127  }
1128  catch (const XmippError &xe)
1129  {
1130  PyErr_SetString(PyXmippError, xe.what());
1131  }
1132  }
1133  return nullptr;
1134 }
doublereal * d
PyObject * getMDObjectValue(const MDObject *obj)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
#define BAD_OBJID
Definition: metadata_base.h:55

◆ MetaData_getValue()

PyObject* MetaData_getValue ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1083 of file python_metadata.cpp.

1084 {
1085  int label;
1086  size_t objectId = BAD_OBJID;
1087  PyObject *pyValue;
1088 
1089  if (PyArg_ParseTuple(args, "ik", &label, &objectId))
1090  {
1091  try
1092  {
1093  auto object = MDObject((MDLabel) label);
1094  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1095  if (self->metadata->getValue(object, objectId))
1096  {
1097  pyValue = getMDObjectValue(&object);
1098  return pyValue;
1099  }
1100  else
1101  {
1102  Py_RETURN_NONE;
1103  }
1104  }
1105  catch (XmippError &xe)
1106  {
1107  PyErr_SetString(PyXmippError, xe.what());
1108  }
1109  }
1110  return nullptr;
1111 }
PyObject * getMDObjectValue(const MDObject *obj)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel
#define BAD_OBJID
Definition: metadata_base.h:55

◆ MetaData_importObjects()

PyObject* MetaData_importObjects ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1702 of file python_metadata.cpp.

1703 {
1704  PyObject *pyMd = nullptr;
1705  PyObject *pyQuery = nullptr;
1706 
1707  if (PyArg_ParseTuple(args, "OO", &pyMd, &pyQuery))
1708  {
1709  try
1710  {
1711  if (!MetaData_Check(pyMd))
1712  {
1713  PyErr_SetString(PyExc_TypeError,
1714  "MetaData::importObjects: Expecting MetaData as first argument");
1715  return nullptr;
1716  }
1717  if (!MDQuery_Check(pyQuery))
1718  {
1719  PyErr_SetString(PyExc_TypeError,
1720  "MetaData::importObjects: Expecting MDQuery as second argument");
1721  return nullptr;
1722  }
1723  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1724  self->metadata->importObjects(MetaData_Value(pyMd),
1725  MDQuery_Value(pyQuery));
1726  Py_RETURN_NONE;
1727  }
1728  catch (XmippError &xe)
1729  {
1730  PyErr_SetString(PyXmippError, xe.what());
1731  }
1732  }
1733  return nullptr;
1734 }
#define MDQuery_Check(v)
#define MDQuery_Value(v)
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_intersection()

PyObject* MetaData_intersection ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2108 of file python_metadata.cpp.

2109 {
2110  int label;
2111  PyObject *pyMd = nullptr;
2112 
2113  if (PyArg_ParseTuple(args, "Oi", &pyMd, &label))
2114  {
2115  try
2116  {
2117  if (!MetaData_Check(pyMd))
2118  {
2119  PyErr_SetString(PyExc_TypeError,
2120  "MetaData::intersection: Expecting MetaData as first argument");
2121  return nullptr;
2122  }
2123  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2124  self->metadata->intersection(MetaData_Value(pyMd), (MDLabel) label);
2125  Py_RETURN_NONE;
2126  }
2127  catch (XmippError &xe)
2128  {
2129  PyErr_SetString(PyXmippError, xe.what());
2130  }
2131  }
2132  return nullptr;
2133 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_isEmpty()

PyObject* MetaData_isEmpty ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 916 of file python_metadata.cpp.

917 {
918  try
919  {
920  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
921  if (self->metadata->isEmpty())
922  Py_RETURN_TRUE;
923  else
924  Py_RETURN_FALSE;
925  }
926  catch (XmippError &xe)
927  {
928  PyErr_SetString(PyXmippError, xe.what());
929  }
930  return nullptr;
931 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_iter()

PyObject* MetaData_iter ( PyObject *  obj)

Iteration functions

Definition at line 1611 of file python_metadata.cpp.

1612 {
1613  try
1614  {
1615  auto *self = reinterpret_cast<MetaDataObject*>(obj);
1616  self->iter = std::make_unique<MetaDataDb::id_iterator>(self->metadata->ids().begin());
1617  self->iter_end = std::make_unique<MetaDataDb::id_iterator>(self->metadata->ids().end());
1618  Py_INCREF(self);
1619  return (PyObject *) self;
1620  //return Py_BuildValue("l", self->metadata->iteratorBegin());
1621  }
1622  catch (XmippError &xe)
1623  {
1624  PyErr_SetString(PyXmippError, xe.what());
1625  }
1626  return nullptr;
1627 }
std::unique_ptr< MetaDataDb::id_iterator > iter
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_iternext()

PyObject* MetaData_iternext ( PyObject *  obj)

Definition at line 1629 of file python_metadata.cpp.

1630 {
1631  try
1632  {
1633  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1634  if (*(self->iter) == *(self->iter_end))
1635  return nullptr;
1636  size_t objId = **(self->iter);
1637  ++(*self->iter);
1638  //type format should be "n" instead of "i" but I put i since python 2.4 does not support n
1639  return Py_BuildValue("i", objId);
1640  }
1641  catch (XmippError &xe)
1642  {
1643  PyErr_SetString(PyXmippError, xe.what());
1644  }
1645  return nullptr;
1646 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_join1()

PyObject* MetaData_join1 ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1991 of file python_metadata.cpp.

1992 {
1993  int labelLeft;
1994  PyObject *pyMdLeft = nullptr;
1995  PyObject *pyMdright = nullptr;
1996  JoinType jt=LEFT;
1997 
1998  if (PyArg_ParseTuple(args, "OOi|i", &pyMdLeft, &pyMdright, &labelLeft, &jt))
1999  {
2000  try
2001  {
2002  if (!MetaData_Check(pyMdLeft))
2003  {
2004  PyErr_SetString(PyExc_TypeError,
2005  "MetaData::join: Expecting MetaData as first argument");
2006  return nullptr;
2007  }
2008  if (!MetaData_Check(pyMdright))
2009  {
2010  PyErr_SetString(PyExc_TypeError,
2011  "MetaData::join: Expecting MetaData as second argument");
2012  return nullptr;
2013  }
2014  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2015  self->metadata->join1(MetaData_Value(pyMdLeft),
2016  MetaData_Value(pyMdright),
2017  (MDLabel) labelLeft,
2018  (JoinType) jt);
2019  Py_RETURN_NONE;
2020  }
2021  catch (XmippError &xe)
2022  {
2023  PyErr_SetString(PyXmippError, xe.what());
2024  }
2025  }
2026  return nullptr;
2027 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_join2()

PyObject* MetaData_join2 ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2031 of file python_metadata.cpp.

2032 {
2033  int labelLeft;
2034  int labelRight;
2035  PyObject *pyMdLeft = nullptr;
2036  PyObject *pyMdright = nullptr;
2037  JoinType jt=LEFT;
2038 
2039  if (PyArg_ParseTuple(args, "OOii|i", &pyMdLeft, &pyMdright, &labelLeft,&labelRight, &jt))
2040  {
2041  try
2042  {
2043  if (!MetaData_Check(pyMdLeft))
2044  {
2045  PyErr_SetString(PyExc_TypeError,
2046  "MetaData::join: Expecting MetaData as first argument");
2047  return nullptr;
2048  }
2049  if (!MetaData_Check(pyMdright))
2050  {
2051  PyErr_SetString(PyExc_TypeError,
2052  "MetaData::join: Expecting MetaData as second argument");
2053  return nullptr;
2054  }
2055  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2056  self->metadata->join2(MetaData_Value(pyMdLeft),
2057  MetaData_Value(pyMdright),
2058  (MDLabel) labelLeft,
2059  (MDLabel) labelRight, (JoinType) jt);
2060  Py_RETURN_NONE;
2061  }
2062  catch (XmippError &xe)
2063  {
2064  PyErr_SetString(PyXmippError, xe.what());
2065  }
2066  }
2067  return nullptr;
2068 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_joinNatural()

PyObject* MetaData_joinNatural ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2072 of file python_metadata.cpp.

2073 {
2074  PyObject *pyMdLeft = nullptr;
2075  PyObject *pyMdright = nullptr;
2076 
2077  if (PyArg_ParseTuple(args, "OO", &pyMdLeft, &pyMdright))
2078  {
2079  try
2080  {
2081  if (!MetaData_Check(pyMdLeft))
2082  {
2083  PyErr_SetString(PyExc_TypeError,
2084  "MetaData::joinNatural: Expecting MetaData as first argument");
2085  return nullptr;
2086  }
2087  if (!MetaData_Check(pyMdright))
2088  {
2089  PyErr_SetString(PyExc_TypeError,
2090  "MetaData::joinNatural: Expecting MetaData as second argument");
2091  return nullptr;
2092  }
2093  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2094  self->metadata->joinNatural(MetaData_Value(pyMdLeft),
2095  MetaData_Value(pyMdright));
2096  Py_RETURN_NONE;
2097  }
2098  catch (XmippError &xe)
2099  {
2100  PyErr_SetString(PyXmippError, xe.what());
2101  }
2102  }
2103  return nullptr;
2104 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_lastObject()

PyObject* MetaData_lastObject ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 877 of file python_metadata.cpp.

878 {
879  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
880  return PyLong_FromUnsignedLong(self->metadata->lastRowId());
881 }
void(* obj)()

◆ MetaData_makeAbsPath()

PyObject* MetaData_makeAbsPath ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1573 of file python_metadata.cpp.

1574 {
1575  int label = (MDLabel) MDL_IMAGE;
1576  if (PyArg_ParseTuple(args, "|i", &label))
1577  {
1578  try
1579  {
1580  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1581  self->metadata->makeAbsPath((MDLabel) label);
1582  Py_RETURN_NONE;
1583  }
1584  catch (XmippError &xe)
1585  {
1586  PyErr_SetString(PyXmippError, xe.what());
1587  }
1588  }
1589  return nullptr;
1590 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
Name of an image (std::string)
MDLabel

◆ MetaData_merge()

PyObject* MetaData_merge ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1914 of file python_metadata.cpp.

1915 {
1916  PyObject *pyMd = nullptr;
1917 
1918  if (PyArg_ParseTuple(args, "O", &pyMd))
1919  {
1920  try
1921  {
1922  if (!MetaData_Check(pyMd))
1923  {
1924  PyErr_SetString(PyExc_TypeError,
1925  "MetaData::merge: Expecting MetaData as first argument");
1926  return nullptr;
1927  }
1928  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1929  self->metadata->merge(MetaData_Value(pyMd));
1930  Py_RETURN_NONE;
1931  }
1932  catch (XmippError &xe)
1933  {
1934  PyErr_SetString(PyXmippError, xe.what());
1935  }
1936  }
1937  return nullptr;
1938 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_new()

PyObject* MetaData_new ( PyTypeObject *  type,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 498 of file python_metadata.cpp.

499 {
500  auto *self = (MetaDataObject*)type->tp_alloc(type, 0);
501 
502  if (self != nullptr)
503  {
504  PyObject *input = nullptr;
505  PyObject *pyStr = nullptr;
506  PyArg_ParseTuple(args, "|O", &input);
507  if (input != nullptr)
508  {
509  try
510  {
511  if (MetaData_Check(input))
512  self->metadata = std::make_unique<MetaDataDb>(MetaData_Value(input));
513  else if ((pyStr = PyObject_Str(input)) != nullptr)
514  {
515  const char *str = PyUnicode_AsUTF8(pyStr);
516  self->metadata = std::make_unique<MetaDataDb>(str);
517  }
518  else
519  {
520  PyErr_SetString(PyExc_TypeError,
521  "MetaData_new: Bad string value for reading metadata");
522  return nullptr;
523  }
524  }
525  catch (XmippError &xe)
526  {
527  PyErr_SetString(PyXmippError, xe.what());
528  return nullptr;
529  }
530  }
531  else
532  {
533  self->metadata = std::make_unique<MetaDataDb>();
534  }
535  }
536  return (PyObject *)self;
537 }
viol type
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47

◆ MetaData_operate()

PyObject* MetaData_operate ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2137 of file python_metadata.cpp.

2138 {
2139  char * str = nullptr;
2140 
2141  if (PyArg_ParseTuple(args, "s", &str))
2142  {
2143  try
2144  {
2145  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2146  self->metadata->operate(str);
2147  //free(str);
2148  Py_RETURN_NONE;
2149  }
2150  catch (XmippError &xe)
2151  {
2152  PyErr_SetString(PyXmippError, xe.what());
2153  }
2154  }
2155  // free(str);
2156  return nullptr;
2157 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_print()

int MetaData_print ( PyObject *  obj,
FILE *  fp,
int  flags 
)

Definition at line 539 of file python_metadata.cpp.

540 {
541  try
542  {
543  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
544  std::stringstream ss;
545  self->metadata->write(ss);
546  fprintf(fp, "%s", ss.str().c_str());
547  }
548  catch (XmippError &xe)
549  {
550  PyErr_SetString(PyXmippError, xe.what());
551  return -1;
552  }
553  return 0;
554 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
fprintf(glob_prnt.io, "\)
void(* obj)()

◆ MetaData_randomize()

PyObject* MetaData_randomize ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2188 of file python_metadata.cpp.

2189 {
2190  PyObject *pyMd = nullptr;
2191 
2192  if (PyArg_ParseTuple(args, "O", &pyMd))
2193  {
2194  try
2195  {
2196  if (!MetaData_Check(pyMd))
2197  {
2198  PyErr_SetString(PyExc_TypeError,
2199  "MetaData::randomize: Expecting MetaData as first argument");
2200  return nullptr;
2201  }
2202  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2203  self->metadata->randomize(MetaData_Value(pyMd));
2204  Py_RETURN_NONE;
2205  }
2206  catch (XmippError &xe)
2207  {
2208  PyErr_SetString(PyXmippError, xe.what());
2209  }
2210  }
2211  return nullptr;
2212 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_read()

PyObject* MetaData_read ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 604 of file python_metadata.cpp.

605 {
606  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
607 
608  if (self != nullptr)
609  {
610  PyObject *list = nullptr; //list can be a list of labels or maxRows
611  PyObject *input = nullptr;
612  PyObject *pyStr = nullptr;
613  const char *str = nullptr;
614  if (PyArg_ParseTuple(args, "O|O", &input, &list))
615  {
616  try
617  {
618  if ((pyStr = PyObject_Str(input)) != nullptr)
619  {
620  str = PyUnicode_AsUTF8(pyStr);
621  if (list != nullptr)
622  {
623  if (PyList_Check(list))
624  {
625  size_t size = PyList_Size(list);
626  PyObject * item = nullptr;
627  int iValue = 0;
628  MDLabelVector vValue(size);
629  for (size_t i = 0; i < size; ++i)
630  {
631  item = PyList_GetItem(list, i);
632  if (!PyLong_Check(item))
633  {
634  PyErr_SetString(PyExc_TypeError,
635  "MDL labels must be integers (MDLABEL)");
636  return nullptr;
637  }
638  iValue = PyLong_AsLong(item);
639  vValue[i] = (MDLabel)iValue;
640  }
641  self->metadata->read(str,&vValue);
642  }
643  else if (PyLong_Check(list)){
644  auto maxRows = (size_t) PyLong_AsLong(list);
645  self->metadata->setMaxRows(maxRows);
646  self->metadata->read(str);
647  }
648  }
649  else
650  self->metadata->read(str);
651  Py_RETURN_NONE;
652  }
653  else
654  return nullptr;
655  }
656  catch (XmippError &xe)
657  {
658  PyErr_SetString(PyXmippError, xe.what());
659  return nullptr;
660  }
661  }
662  }
663  return nullptr;
664 }
#define i
std::vector< MDLabel > MDLabelVector
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_readBlock()

PyObject* MetaData_readBlock ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 754 of file python_metadata.cpp.

755 {
756  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
757 
758  if (self != NULL)
759  {
760  PyObject *input = NULL;
761  PyObject *blockName = NULL;
762  PyObject *pyStr = NULL;
763  PyObject *pyStrBlock = NULL;
764  const char *str = NULL;
765  const char *strBlock = NULL;
766  if (PyArg_ParseTuple(args, "OO", &input, &blockName))
767  {
768  try
769  {
770  pyStr = PyObject_Str(input);
771  pyStrBlock = PyObject_Str(blockName);
772  if ((NULL != pyStr) && (NULL != pyStrBlock))
773  {
774  str = PyUnicode_AsUTF8(pyStr);
775  strBlock = PyUnicode_AsUTF8(pyStrBlock);
776  self->metadata->read((std::string) strBlock + "@" + str,
777  NULL);
778  Py_RETURN_NONE;
779  }
780  else
781  return NULL;
782  }
783  catch (XmippError &xe)
784  {
785  PyErr_SetString(PyXmippError, xe.what());
786  return NULL;
787  }
788  }
789  }
790  return NULL;
791 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_readPlain()

PyObject* MetaData_readPlain ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 668 of file python_metadata.cpp.

669 {
670  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
671 
672  if (self != NULL)
673  {
674  PyObject *input = NULL;
675  PyObject *input2 = NULL;
676  PyObject *pyStr = NULL;
677  PyObject *pyLabels = NULL;
678  PyObject *pySep = NULL;
679  const char *str = NULL;
680  const char *labels = NULL;
681 
682  if (PyArg_ParseTuple(args, "OO|O", &input, &input2, &pySep))
683  {
684  try
685  {
686  pyStr = PyObject_Str(input);
687  pyLabels = PyObject_Str(input2);
688 
689  if ((NULL != pyStr) && (NULL != pyLabels))
690  {
691  str = PyUnicode_AsUTF8(pyStr);
692  labels = PyUnicode_AsUTF8(pyLabels);
693 
694  self->metadata->readPlain(str, labels);
695  Py_RETURN_NONE;
696  }
697  else
698  return NULL;
699  }
700  catch (XmippError &xe)
701  {
702  PyErr_SetString(PyXmippError, xe.what());
703  return NULL;
704  }
705  }
706  }
707  return NULL;
708 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_removeDisabled()

PyObject* MetaData_removeDisabled ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1556 of file python_metadata.cpp.

1557 {
1558  try
1559  {
1560  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1561  self->metadata->removeDisabled();
1562  Py_RETURN_NONE;
1563  }
1564  catch (XmippError &xe)
1565  {
1566  PyErr_SetString(PyXmippError, xe.what());
1567  }
1568  return nullptr;
1569 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_removeDuplicates()

PyObject* MetaData_removeDuplicates ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

remove Duplicate rows Metadata

Definition at line 1678 of file python_metadata.cpp.

1679 {
1680  int label = MDL_UNDEFINED;
1681 
1682  if (PyArg_ParseTuple(args, "|i", &label))
1683  {
1684  try
1685  {
1686  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1687  MetaDataDb MDaux = *(self->metadata);
1688  self->metadata->clear();
1689  self->metadata->removeDuplicates(MDaux, (MDLabel)label);
1690  Py_RETURN_NONE;
1691  }
1692  catch (XmippError &xe)
1693  {
1694  PyErr_SetString(PyXmippError, xe.what());
1695  }
1696  }
1697  return nullptr;
1698 }
void clear() override
Definition: metadata_db.cpp:54
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_removeLabel()

PyObject* MetaData_removeLabel ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1060 of file python_metadata.cpp.

1061 {
1062  int label;
1063  if (PyArg_ParseTuple(args, "i", &label))
1064  {
1065  try
1066  {
1067  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1068  if (self->metadata->removeLabel((MDLabel) label))
1069  Py_RETURN_TRUE;
1070  else
1071  Py_RETURN_FALSE;
1072  }
1073  catch (XmippError &xe)
1074  {
1075  PyErr_SetString(PyXmippError, xe.what());
1076  }
1077  }
1078  return nullptr;
1079 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_removeObjects()

PyObject* MetaData_removeObjects ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1528 of file python_metadata.cpp.

1529 {
1530  PyObject *pyQuery = nullptr;
1531 
1532  if (PyArg_ParseTuple(args, "O", &pyQuery))
1533  {
1534  try
1535  {
1536  if (!MDQuery_Check(pyQuery))
1537  {
1538  PyErr_SetString(PyExc_TypeError,
1539  "MetaData::removeObjects: Expecting MDQuery as second arguments");
1540  return nullptr;
1541  }
1542  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1543  self->metadata->removeObjects(MDQuery_Value(pyQuery));
1544  Py_RETURN_NONE;
1545  }
1546  catch (XmippError &xe)
1547  {
1548  PyErr_SetString(PyXmippError, xe.what());
1549  }
1550  }
1551  return nullptr;
1552 }
#define MDQuery_Check(v)
#define MDQuery_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_renameColumn()

PyObject* MetaData_renameColumn ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1470 of file python_metadata.cpp.

1471 {
1472  PyObject * oldLabel = nullptr;
1473  PyObject * newLabel = nullptr;
1474  if (PyArg_ParseTuple(args, "OO", &oldLabel, &newLabel))
1475  {
1476  try
1477  {
1478  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1479  if(PyLong_Check ( oldLabel ) && PyLong_Check ( newLabel ))
1480  {
1481  self->metadata->renameColumn((MDLabel) PyLong_AsLong (oldLabel),
1482  (MDLabel) PyLong_AsLong (newLabel));
1483  }
1484  else if (PyList_Check(oldLabel)&& PyList_Check ( newLabel ))
1485  {
1486  size_t size = PyList_Size(oldLabel);
1487  PyObject * itemOld = nullptr;
1488  PyObject * itemNew = nullptr;
1489  int iOldValue = 0;
1490  int iNewValue = 0;
1491  std::vector<MDLabel> vOldValue(size);
1492  std::vector<MDLabel> vNewValue(size);
1493  for (size_t i = 0; i < size; ++i)
1494  {
1495  itemOld = PyList_GetItem(oldLabel, i);
1496  itemNew = PyList_GetItem(newLabel, i);
1497  if (!PyLong_Check(itemOld) || !PyLong_Check(itemNew))
1498  {
1499  PyErr_SetString(PyExc_TypeError,
1500  "MDL labels must be integers (MDLABEL)");
1501  return nullptr;
1502  }
1503  iOldValue = PyLong_AsLong(itemOld);
1504  iNewValue = PyLong_AsLong(itemNew);
1505  vOldValue[i] = (MDLabel)iOldValue;
1506  vNewValue[i] = (MDLabel)iNewValue;
1507  }
1508  //self->metadata->read(str,&vValue);
1509  self->metadata->renameColumn(vOldValue,vNewValue);
1510  }
1511 
1512  Py_RETURN_TRUE;
1513  }
1514  catch (XmippError &xe)
1515  {
1516  PyErr_SetString(PyXmippError, xe.what());
1517  }
1518  }
1519  return nullptr;
1520 }
#define i
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_replace()

PyObject* MetaData_replace ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2161 of file python_metadata.cpp.

2162 {
2163  int label;
2164  char * oldStr = nullptr;
2165  char * newStr = nullptr;
2166  if (PyArg_ParseTuple(args, "iss", &label, &oldStr, &newStr))
2167  {
2168  try
2169  {
2170  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2171  self->metadata->replace((MDLabel)label, oldStr, newStr);
2172  //free(oldStr);
2173  //free(newStr);
2174  Py_RETURN_NONE;
2175  }
2176  catch (XmippError &xe)
2177  {
2178  PyErr_SetString(PyXmippError, xe.what());
2179  }
2180  }
2181  //free(oldStr);
2182  //free(newStr);
2183  return nullptr;
2184 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_repr()

PyObject* MetaData_repr ( PyObject *  obj)

Definition at line 558 of file python_metadata.cpp.

559 {
560  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
561  return PyUnicode_FromString(
562  (self->metadata->getFilename() + "(MetaData)").c_str());
563 }
void(* obj)()

◆ MetaData_RichCompareBool()

PyObject* MetaData_RichCompareBool ( PyObject *  obj,
PyObject *  obj2,
int  opid 
)

Definition at line 567 of file python_metadata.cpp.

568 {
569  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
570  auto *md2 = (MetaDataObject*) obj2;
571  int result = -1;
572 
573  if (self != nullptr && md2 != nullptr)
574  {
575  try
576  {
577  if (opid == Py_EQ)
578  {
579  if (*(self->metadata) == *(md2->metadata))
580  Py_RETURN_TRUE;
581  else
582  Py_RETURN_FALSE;
583  }
584  else if (opid == Py_NE)
585  {
586  if (*(self->metadata) == *(md2->metadata))
587  Py_RETURN_FALSE;
588  else
589  Py_RETURN_TRUE;
590  }
591  else
592  return Py_NotImplemented;
593  }
594  catch (XmippError &xe)
595  {
596  PyErr_SetString(PyXmippError, xe.what());
597  }
598  }
599  return nullptr;
600 }
#define Py_NotImplemented
Definition: frm_wrap.cpp:860
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_selectPart()

PyObject* MetaData_selectPart ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 2216 of file python_metadata.cpp.

2217 {
2218  auto label=(int)MDL_OBJID;
2219  size_t start;
2220  size_t numberOfObjects;
2221  PyObject *pyMd = nullptr;
2222 
2223  if (PyArg_ParseTuple(args, "Okk|i", &pyMd, &start, &numberOfObjects, &label))
2224  {
2225  try
2226  {
2227  if (!MetaData_Check(pyMd))
2228  {
2229  PyErr_SetString(PyExc_TypeError,
2230  "MetaData::selectPart: Expecting MetaData as first argument");
2231  return nullptr;
2232  }
2233  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
2234  self->metadata->selectPart(MetaData_Value(pyMd), start, numberOfObjects, (MDLabel) label);
2235  Py_RETURN_NONE;
2236  }
2237  catch (XmippError &xe)
2238  {
2239  PyErr_SetString(PyXmippError, xe.what());
2240  }
2241  }
2242  return nullptr;
2243 }
object id (int), NOTE: This label is special and shouldn&#39;t be used
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
MDLabel

◆ MetaData_setColumnFormat()

PyObject* MetaData_setColumnFormat ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 952 of file python_metadata.cpp.

953 {
954  PyObject *input = nullptr;
955  if (PyArg_ParseTuple(args, "O", &input))
956  {
957  try
958  {
959  if (PyBool_Check(input))
960  {
961  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
962  self->metadata->setColumnFormat(input == Py_True);
963  Py_RETURN_NONE;
964  }
965  else
966  PyErr_SetString(PyExc_TypeError,
967  "MetaData::setColumnFormat: Expecting boolean value");
968  }
969  catch (XmippError &xe)
970  {
971  PyErr_SetString(PyXmippError, xe.what());
972  }
973  }
974  return nullptr;
975 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_setColumnValues()

PyObject* MetaData_setColumnValues ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1169 of file python_metadata.cpp.

1170 {
1171  int label;
1172  PyObject *list = nullptr;
1173  if (PyArg_ParseTuple(args, "iO", &label, &list))
1174  {
1175  try
1176  {
1177  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1178  size_t size=PyList_Size(list);
1179  bool addObjects=(self->metadata->size()==0);
1180  MDObject object((MDLabel) label);
1181  if (addObjects)
1182  {
1183  for (size_t i=0; i<size; ++i)
1184  {
1185  size_t id=self->metadata->addObject();
1186  setMDObjectValue(&object,PyList_GetItem(list,i));
1187  self->metadata->setValue(object,id);
1188  }
1189  }
1190  else
1191  {
1192  if (self->metadata->size()!=size)
1193  PyErr_SetString(PyXmippError, "Metadata size different from list size");
1194  size_t i=0;
1195  for (size_t objId : self->metadata->ids())
1196  {
1197  setMDObjectValue(&object,PyList_GetItem(list,i++));
1198  self->metadata->setValue(object, objId);
1199  }
1200  }
1201  }
1202  catch (XmippError &xe)
1203  {
1204  PyErr_SetString(PyXmippError, xe.what());
1205  return nullptr;
1206  }
1207  }
1208  Py_RETURN_NONE;
1209 }
#define i
void setMDObjectValue(MDObject *obj, PyObject *pyValue)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
MDLabel

◆ MetaData_setComment()

PyObject* MetaData_setComment ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1942 of file python_metadata.cpp.

1943 {
1944  char * str = nullptr;
1945  if (PyArg_ParseTuple(args, "s", &str))
1946  {
1947  try
1948  {
1949  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1950  self->metadata->setComment(str);
1951  Py_RETURN_NONE;
1952  }
1953  catch (XmippError &xe)
1954  {
1955  PyErr_SetString(PyXmippError, xe.what());
1956  }
1957  }
1958  return nullptr;
1959 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_setRow()

PyObject* MetaData_setRow ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1005 of file python_metadata.cpp.

1006 {
1007  PyObject *dict;
1008  if (size_t objectId = BAD_OBJID; PyArg_ParseTuple(args, "Ok", &dict, &objectId)) {
1009  try
1010  {
1011  PyObject *key;
1012  PyObject *value;
1013  Py_ssize_t pos = 0;
1014  MDRowVec row;
1015  while (PyDict_Next(dict, &pos, &key, &value)) {
1016  auto label = PyLong_AsLong(key);
1017  auto object = createMDObject(static_cast<int>(label), value);
1018  row.setValue(*object);
1019  }
1020  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1021  self->metadata->setRow(row, objectId);
1022  Py_RETURN_TRUE;
1023  }
1024  catch (const XmippError &xe)
1025  {
1026  PyErr_SetString(PyXmippError, xe.what());
1027  }
1028  }
1029  return nullptr;
1030 }
void setValue(const MDObject &object) override
int Py_ssize_t
Definition: frm_wrap.cpp:893
std::unique_ptr< MDObject > createMDObject(int label, PyObject *pyValue)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
#define BAD_OBJID
Definition: metadata_base.h:55

◆ MetaData_setValue()

PyObject* MetaData_setValue ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 979 of file python_metadata.cpp.

980 {
981  int label;
982  size_t objectId = BAD_OBJID;
983  PyObject *pyValue; //Only used to skip label and value
984 
985  if (PyArg_ParseTuple(args, "iOk", &label, &pyValue, &objectId))
986  {
987  try
988  {
989  auto object = createMDObject(label, pyValue);
990  if (!object)
991  return nullptr;
992  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
993  self->metadata->setValue(*object, objectId);
994  Py_RETURN_TRUE;
995  }
996  catch (XmippError &xe)
997  {
998  PyErr_SetString(PyXmippError, xe.what());
999  }
1000  }
1001  return nullptr;
1002 }
std::unique_ptr< MDObject > createMDObject(int label, PyObject *pyValue)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()
#define BAD_OBJID
Definition: metadata_base.h:55

◆ MetaData_setValueCol()

PyObject* MetaData_setValueCol ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1034 of file python_metadata.cpp.

1035 {
1036  int label;
1037  PyObject *pyValue; //Only used to skip label and value
1038 
1039  if (PyArg_ParseTuple(args, "iO", &label, &pyValue))
1040  {
1041  try
1042  {
1043  auto object = createMDObject(label, pyValue);
1044  if (!object)
1045  return nullptr;
1046  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1047  self->metadata->setValueCol(*object);
1048  Py_RETURN_TRUE;
1049  }
1050  catch (XmippError &xe)
1051  {
1052  PyErr_SetString(PyXmippError, xe.what());
1053  }
1054  }
1055  return nullptr;
1056 }
std::unique_ptr< MDObject > createMDObject(int label, PyObject *pyValue)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_size()

PyObject* MetaData_size ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 884 of file python_metadata.cpp.

885 {
886  try
887  {
888  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
889  return PyLong_FromUnsignedLong(self->metadata->size());
890  }
891  catch (XmippError &xe)
892  {
893  PyErr_SetString(PyXmippError, xe.what());
894  }
895  return nullptr;
896 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()

◆ MetaData_sort()

PyObject* MetaData_sort ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Sort Metadata

Definition at line 1649 of file python_metadata.cpp.

1650 {
1651  int label = MDL_IMAGE;
1652  auto *ascPy = Py_True;
1653  bool asc=true;
1654  int limit = -1;
1655  int offset = 0;
1656  if (PyArg_ParseTuple(args, "|iOii", &label,&ascPy,&limit,&offset))
1657  {
1658  try
1659  {
1660  if (PyBool_Check(ascPy))
1661  asc = (ascPy == Py_True);
1662  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1663  MetaDataDb MDaux = *(self->metadata);
1664  self->metadata->clear();
1665  self->metadata->sort(MDaux, (MDLabel) label,asc,limit,offset);
1666  Py_RETURN_NONE;
1667  }
1668  catch (XmippError &xe)
1669  {
1670  PyErr_SetString(PyXmippError, xe.what());
1671  }
1672  }
1673  return nullptr;
1674 }
void clear() override
Definition: metadata_db.cpp:54
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
Name of an image (std::string)
MDLabel

◆ MetaData_unionAll()

PyObject* MetaData_unionAll ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 1886 of file python_metadata.cpp.

1887 {
1888  PyObject *pyMd = nullptr;
1889 
1890  if (PyArg_ParseTuple(args, "O", &pyMd))
1891  {
1892  try
1893  {
1894  if (!MetaData_Check(pyMd))
1895  {
1896  PyErr_SetString(PyExc_TypeError,
1897  "MetaData::unionAll: Expecting MetaData as first argument");
1898  return nullptr;
1899  }
1900  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
1901  self->metadata->unionAll(MetaData_Value(pyMd));
1902  Py_RETURN_NONE;
1903  }
1904  catch (XmippError &xe)
1905  {
1906  PyErr_SetString(PyXmippError, xe.what());
1907  }
1908  }
1909  return nullptr;
1910 }
#define MetaData_Check(v)
#define MetaData_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
PyObject_HEAD std::unique_ptr< MetaDataDb > metadata
void(* obj)()

◆ MetaData_write()

PyObject* MetaData_write ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 795 of file python_metadata.cpp.

796 {
797  const auto *self = reinterpret_cast<MetaDataObject*>(obj);
798  WriteModeMetaData wmd;
799  wmd = MD_OVERWRITE;
800  if (self != NULL)
801  {
802  PyObject *input = nullptr;
803  PyObject *pyStr = nullptr;
804  const char *str = NULL;
805  if (PyArg_ParseTuple(args, "O|i", &input, &wmd))
806  {
807  try
808  {
809  if ((pyStr = PyObject_Str(input)) != NULL)
810  {
811  str = PyUnicode_AsUTF8(pyStr);
812  self->metadata->write(str, (WriteModeMetaData) wmd);
813  Py_RETURN_NONE;
814  }
815  else
816  return NULL;
817  }
818  catch (XmippError &xe)
819  {
820  PyErr_SetString(PyXmippError, xe.what());
821  return NULL;
822  }
823  }
824  }
825  return NULL;
826 }
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void(* obj)()
WriteModeMetaData

◆ setMDObjectValue()

void setMDObjectValue ( MDObject obj,
PyObject *  pyValue 
)

Definition at line 2333 of file python_metadata.cpp.

2334 {
2335  try
2336  {
2337  if (PyLong_Check(pyValue))
2338  obj->setValue((int)PyLong_AS_LONG(pyValue));
2339  else if (PyLong_Check(pyValue))
2340  obj->setValue((size_t)PyLong_AsUnsignedLong(pyValue));
2341  else if (PyUnicode_Check(pyValue))
2342  {
2343  const char * str = PyUnicode_AsUTF8(PyObject_Str(pyValue));
2344  obj->setValue(std::string(str));
2345  }
2346  else if (FileName_Check(pyValue))
2347  obj->setValue((*((FileNameObject*)pyValue)->filename));
2348  else if (PyFloat_Check(pyValue))
2349  obj->setValue(PyFloat_AS_DOUBLE(pyValue));
2350  else if (PyBool_Check(pyValue))
2351  obj->setValue((pyValue == Py_True));
2352  else if (PyList_Check(pyValue))
2353  {
2354  size_t size = PyList_Size(pyValue);
2355  PyObject * item = nullptr;
2356  double dValue = 0.;
2357  std::vector<double> vValue(size);
2358  for (size_t i = 0; i < size; ++i)
2359  {
2360  item = PyList_GetItem(pyValue, i);
2361  if (!PyFloat_Check(item))
2362  {
2363  PyErr_SetString(PyExc_TypeError,
2364  "Vectors are only supported for double");
2365  }
2366  dValue = PyFloat_AS_DOUBLE(item);
2367  vValue[i] = dValue;
2368  }
2369  obj->setValue(vValue);
2370  }
2371  else
2372  PyErr_SetString(PyExc_TypeError, "Unrecognized type to create MDObject");
2373  }
2374  catch (XmippError &xe)
2375  {
2376  PyErr_SetString(PyXmippError, xe.what());
2377  }
2378 }
#define FileName_Check(v)
#define i
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
void setValue(const int &iv)

◆ xmipp_addLabelAlias()

PyObject* xmipp_addLabelAlias ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 205 of file python_metadata.cpp.

206 {
207 
208 
209  int label;
210  int type;
211  PyObject *input = nullptr;
212  PyObject *pyStr = nullptr;
213  PyObject *pyStr1 = nullptr;
214  auto *pyReplace = Py_False;
215  const char *str =nullptr;
216  bool replace = true;
217 
218 
219  if (PyArg_ParseTuple(args, "iO|Oi", &label, &input, &pyReplace, &type))
220  {
221  try
222  {
223  if ((pyStr = PyObject_Str(input)) != nullptr &&
224  (PyBool_Check(pyReplace)))
225  {
226  replace = pyReplace == Py_True;
227  str = PyUnicode_AsUTF8(pyStr);
228  MDL::addLabelAlias((MDLabel)label,(String)str, replace, (MDLabelType)type);
229  Py_RETURN_NONE;
230  }
231  }
232  catch (XmippError &xe)
233  {
234  PyErr_SetString(PyXmippError, xe.what());
235  }
236  }
237 
238  return nullptr;
239 }
MDLabelType
viol type
std::string String
Definition: xmipp_strings.h:34
PyObject * PyXmippError
Definition: xmippmodule.cpp:47
static void addLabelAlias(MDLabel label, const String &alias, bool replace=false, MDLabelType type=LABEL_NOTYPE)
MDLabel

◆ xmipp_getBlocksInMetaDataFile()

PyObject* xmipp_getBlocksInMetaDataFile ( PyObject *  obj,
PyObject *  args 
)

Definition at line 1236 of file python_metadata.cpp.

1237 {
1238  PyObject *input;
1239  const char *fileName = NULL;
1240  FileName fn;
1241  StringVector blocks;
1242 
1243  try
1244  {
1245  if (PyArg_ParseTuple(args, "O", &input))
1246  {
1247 
1248  if (PyUnicode_Check(input)){
1249  fileName = PyUnicode_AsUTF8(input);
1250  fn = fileName;
1251  }
1252  else if (FileName_Check(input))
1253  fn = FileName_Value(input);
1254  else
1255  return NULL;
1256  getBlocksInMetaDataFile(fn, blocks);
1257  int size = blocks.size();
1258  PyObject * list = PyList_New(size);
1259 
1260  for (int i = 0; i < size; ++i)
1261  {
1262  PyList_SetItem(list, i, PyUnicode_FromString(blocks[i].c_str()));
1263  }
1264  return list;
1265  }
1266  }
1267  catch (XmippError &xe)
1268  {
1269  PyErr_SetString(PyXmippError, xe.what());
1270  }
1271  return NULL;
1272 }
#define FileName_Check(v)
void getBlocksInMetaDataFile(const FileName &inFile, StringVector &blockList)
std::vector< String > StringVector
Definition: xmipp_strings.h:35
#define i
#define FileName_Value(v)
PyObject * PyXmippError
Definition: xmippmodule.cpp:47

◆ xmipp_getNewAlias()

PyObject* xmipp_getNewAlias ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 243 of file python_metadata.cpp.

244 {
245 
246 
247  int type;
248  PyObject *input = nullptr;
249  PyObject *pyStr = nullptr;
250  PyObject *pyStr1 = nullptr;
251  const char *str = nullptr;
252 
253 
254  if (PyArg_ParseTuple(args, "Oi", &input, &type))
255  {
256  try
257  {
258  if ((pyStr = PyObject_Str(input)) != nullptr )
259  {
260  str = PyUnicode_AsUTF8(pyStr);
261  return PyLong_FromLong(MDL::getNewAlias((String)str, (MDLabelType)type));
262 
263  }
264  }
265  catch (XmippError &xe)
266  {
267  PyErr_SetString(PyXmippError, xe.what());
268  }
269  }
270 
271  return nullptr;
272 }
MDLabelType
viol type
static MDLabel getNewAlias(const String &alias, MDLabelType type=LABEL_NOTYPE)
std::string String
Definition: xmipp_strings.h:34
PyObject * PyXmippError
Definition: xmippmodule.cpp:47

◆ xmipp_MDValueEQ()

PyObject* xmipp_MDValueEQ ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 144 of file python_metadata.cpp.

145 {
146  return createMDValueRelational(args, EQ);
147 }
Equal.
PyObject * createMDValueRelational(PyObject *args, int op)

◆ xmipp_MDValueGE()

PyObject* xmipp_MDValueGE ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 174 of file python_metadata.cpp.

175 {
176  return createMDValueRelational(args, GE);
177 }
Greater equal.
PyObject * createMDValueRelational(PyObject *args, int op)

◆ xmipp_MDValueGT()

PyObject* xmipp_MDValueGT ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 168 of file python_metadata.cpp.

169 {
170  return createMDValueRelational(args, GT);
171 }
Greater than.
PyObject * createMDValueRelational(PyObject *args, int op)

◆ xmipp_MDValueLE()

PyObject* xmipp_MDValueLE ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 162 of file python_metadata.cpp.

163 {
164  return createMDValueRelational(args, LE);
165 }
PyObject * createMDValueRelational(PyObject *args, int op)
Less equal.

◆ xmipp_MDValueLT()

PyObject* xmipp_MDValueLT ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 156 of file python_metadata.cpp.

157 {
158  return createMDValueRelational(args, LT);
159 }
Less than.
PyObject * createMDValueRelational(PyObject *args, int op)

◆ xmipp_MDValueNE()

PyObject* xmipp_MDValueNE ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 150 of file python_metadata.cpp.

151 {
152  return createMDValueRelational(args, NE);
153 }
Not equal.
PyObject * createMDValueRelational(PyObject *args, int op)

◆ xmipp_MDValueRange()

PyObject* xmipp_MDValueRange ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 180 of file python_metadata.cpp.

181 {
182  int label;
183  int limit = -1;
184  int offset = 0;
185  auto orderLabel = (int) MDL_OBJID;
186  PyObject *pyValue1;
187  PyObject *pyValue2; //Only used to skip label and value
188 
189  if (PyArg_ParseTuple(args, "iOO|iii", &label, &pyValue1, &pyValue2, &limit,
190  &offset, &orderLabel))
191  {
192  auto object1 = createMDObject(label, pyValue1);
193  auto object2 = createMDObject(label, pyValue2);
194  if (!object1 || !object2)
195  return nullptr;
196  auto *pyQuery = (MDQueryObject*)PyObject_CallFunction((PyObject*)&MDQueryType, "");
197  pyQuery->query = std::make_unique<MDValueRange>(*object1, *object2, limit, offset,
198  (MDLabel) orderLabel);
199  return (PyObject *) pyQuery;
200  }
201  return nullptr;
202 }
object id (int), NOTE: This label is special and shouldn&#39;t be used
PyTypeObject MDQueryType
std::unique_ptr< MDObject > createMDObject(int label, PyObject *pyValue)
MDLabel

◆ xmipp_MDValueRelational()

PyObject* xmipp_MDValueRelational ( PyObject *  obj,
PyObject *  args,
PyObject *  kwargs 
)

Definition at line 138 of file python_metadata.cpp.

139 {
140  return createMDValueRelational(args, -1);
141 }
PyObject * createMDValueRelational(PyObject *args, int op)

Variable Documentation

◆ MDQuery_methods

PyMethodDef MDQuery_methods[]

Definition at line 77 of file python_metadata.cpp.

◆ MDQueryType

PyTypeObject MDQueryType

Definition at line 35 of file python_metadata.cpp.

◆ MetaData_methods

PyMethodDef MetaData_methods[]

Definition at line 276 of file python_metadata.cpp.

◆ MetaDataType

PyTypeObject MetaDataType

Definition at line 446 of file python_metadata.cpp.

◆ PyXmippError

PyObject* PyXmippError

Definition at line 47 of file xmippmodule.cpp.