Changeset 9415:b8c964fe3d51 in orange


Ignore:
Timestamp:
12/26/11 15:20:30 (2 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
5b8587c5504b40bb315f2f2e9aaa233096a3d868
Message:

Fixed multiple classes: pickling, conversion between domains, printing

Location:
source/orange
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • source/orange/cls_example.cpp

    r9410 r9415  
    900900void Example_unpack(TExample &example, TCharBuffer &buf, PyObject *&otherValues, int &otherValuesIndex) 
    901901{ 
    902   TVarList::const_iterator vi = example.domain->variables->begin(); 
    903   for(TValue *vali = example.values; vali != example.classes_end; vali++, vi++) { 
     902  TVarList::const_iterator vi; 
     903  TValue *vali = example.values; 
     904  for(vi = example.domain->variables->begin(); vali != example.values_end; vali++, vi++) { 
     905    vali->varType = (*vi)->varType; 
     906    Value_unpack(*vali, buf, otherValues, otherValuesIndex); 
     907  } 
     908  for(vi = example.domain->classVars->begin(); vali != example.classes_end; vali++, vi++) { 
    904909    vali->varType = (*vi)->varType; 
    905910    Value_unpack(*vali, buf, otherValues, otherValuesIndex); 
     
    986991  string res("["); 
    987992  TVarList::iterator vi(example->domain->variables->begin()); 
    988   PITERATE(TExample, ei, example) { 
    989     if (ei!=example->begin()) 
     993  TVarList::iterator ve(example->domain->variables->end()); 
     994  TExample::const_iterator ei = example->values; 
     995  for(; vi != ve; vi++, ei++) { 
     996    if (ei != example->values) 
    990997      res+=", "; 
    991     addValue(res, *ei, *(vi++)); 
     998    addValue(res, *ei, *vi); 
    992999  } 
    9931000  res+="]"; 
     1001 
     1002  vi = example->domain->classVars->begin(); 
     1003  ve = example->domain->classVars->end(); 
     1004  if (vi != ve) { 
     1005      res += " ("; 
     1006      for(; vi != ve; vi++, ei++) { 
     1007          if (ei != example->values_end) 
     1008              res += ", "; 
     1009          addValue(res, *ei, *vi); 
     1010      } 
     1011      res += ")"; 
     1012  } 
    9941013 
    9951014  int madded=0; 
  • source/orange/domain.cpp

    r9410 r9415  
    468468  dest.id = src.id;  
    469469  if (src.domain==this) { 
    470     int Nv = variables->size(); 
     470    int Nv = variables->size() + classVars->size(); 
    471471    TExample::iterator de = dest.begin(); 
    472472    TExample::const_iterator sr = src.begin(); 
     
    496496      } 
    497497 
     498      const_PITERATE(TVarList, mvi, classVars) { 
     499        const int cvi = src.domain->getVarNum(*mvi, false); 
     500        (*lastDomain).positions.push_back(cvi); 
     501        if (cvi<0) 
     502          (*lastDomain).metasNotToCopy.insert(cvi); 
     503      } 
     504 
    498505      ITERATE(TMetaVector, mvi, metas) { 
    499506        const int cvi = src.domain->getVarNum((*mvi).variable, false); 
     
    508515 
    509516    // Now, lastDomain points to an appropriate mapping 
     517    TExample::iterator deval(dest.begin()); 
    510518    vector<int>::iterator pi((*lastDomain).positions.begin()); 
    511     TVarList::iterator vi(variables->begin()); 
    512  
    513     TExample::iterator deval(dest.begin()); 
    514     for(int Nv = dest.domain->variables->size(); Nv--; pi++, vi++) 
     519 
     520    TVarList::iterator vi; 
     521    int Nv; 
     522     
     523    for(vi = variables->begin(), Nv = dest.domain->variables->size(); Nv--; pi++, vi++) 
     524      *(deval++) = (*pi == ILLEGAL_INT) ? (*vi)->computeValue(src) : src[*pi]; 
     525 
     526    for(vi = classVars->begin(), Nv = dest.domain->classVars->size(); Nv--; pi++, vi++) 
    515527      *(deval++) = (*pi == ILLEGAL_INT) ? (*vi)->computeValue(src) : src[*pi]; 
    516528 
  • source/orange/lib_kernel.cpp

    r9410 r9415  
    15251525 
    15261526 
    1527   return Py_BuildValue("O(ONNNN)N", getExportedFunction("__pickleLoaderDomain"), 
     1527  return Py_BuildValue("O(ONNNNN)N", getExportedFunction("__pickleLoaderDomain"), 
    15281528                                   self->ob_type, 
    15291529                                   WrapOrange(domain->attributes), 
    15301530                                   WrapOrange(domain->classVar), 
     1531                                   WrapOrange(domain->classVars), 
    15311532                                   Domain_getmetasLow(SELF_AS(TDomain), false), 
    15321533                                   Domain_getmetasLow(SELF_AS(TDomain), true), 
     
    15341535} 
    15351536 
    1536 PyObject *__pickleLoaderDomain(PyObject *, PyObject *args) PYARGS(METH_VARARGS, "(type, attributes, classVar, metas)") 
     1537PyObject *__pickleLoaderDomain(PyObject *, PyObject *args) PYARGS(METH_VARARGS, "(type, attributes, classVar, classVars, req_metas, opt_metas)") 
    15371538{ 
    15381539  PyTRY { 
    1539     if (!args || !PyTuple_Check(args) || (PyTuple_Size(args) != 5)) 
     1540    if (!args || !PyTuple_Check(args) || (PyTuple_Size(args) != 6)) 
    15401541      PYERROR(PyExc_TypeError, "invalid arguments for the domain unpickler", NULL); 
    15411542 
     
    15431544    PyObject *attributes = PyTuple_GET_ITEM(args, 1); 
    15441545    PyObject *classVar = PyTuple_GET_ITEM(args, 2); 
    1545     PyObject *req_metas = PyTuple_GET_ITEM(args, 3); 
    1546     PyObject *opt_metas = PyTuple_GET_ITEM(args, 4); 
    1547  
    1548     if (!PyOrVarList_Check(attributes) || !PyDict_Check(req_metas) || !PyDict_Check(opt_metas)) 
     1546    PyObject *classVars = PyTuple_GET_ITEM(args, 3); 
     1547    PyObject *req_metas = PyTuple_GET_ITEM(args, 4); 
     1548    PyObject *opt_metas = PyTuple_GET_ITEM(args, 5); 
     1549 
     1550    if (!PyOrVarList_Check(attributes) || (classVars && !PyOrVarList_Check(attributes)) || !PyDict_Check(req_metas) || !PyDict_Check(opt_metas)) 
    15491551      PYERROR(PyExc_TypeError, "invalid arguments for the domain unpickler", NULL); 
    15501552 
     
    15571559    else 
    15581560      PYERROR(PyExc_TypeError, "invalid arguments for the domain unpickler", NULL); 
    1559  
     1561    domain->classVars = PyOrange_AsVarList(classVars); 
    15601562 
    15611563    PyObject *pydomain = WrapNewOrange(domain, type); 
Note: See TracChangeset for help on using the changeset viewer.