Ignore:
Timestamp:
07/01/13 16:25:11 (10 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Changed (simplified) SVMClassifier constructors (and pickling).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orange/lib_learner.cpp

    r11606 r11607  
    14531453        raiseError("Error saving SVM model"); 
    14541454    } 
    1455     if(svm->kernelFunc) 
    1456         return Py_BuildValue("O(OOOsO)N", self->ob_type, 
    1457                                     WrapOrange(svm->classVar), 
     1455 
     1456    return Py_BuildValue("O(OsOOO)N", self->ob_type, 
     1457                                    WrapOrange(svm->domain), 
     1458                                    buf.c_str(), 
     1459                                    WrapOrange(svm->supportVectors), 
     1460                                    WrapOrange(svm->kernelFunc), 
    14581461                                    WrapOrange(svm->examples), 
    1459                                     WrapOrange(svm->supportVectors), 
    1460                                     buf.c_str(), 
    1461                                     WrapOrange(svm->kernelFunc), 
    1462                                     packOrangeDictionary(self)); 
    1463     else 
    1464         return Py_BuildValue("O(OOOs)N", self->ob_type, 
    1465                                     WrapOrange(svm->classVar), 
    1466                                     WrapOrange(svm->examples), 
    1467                                     WrapOrange(svm->supportVectors), 
    1468                                     buf.c_str(), 
    14691462                                    packOrangeDictionary(self)); 
    14701463  PyCATCH 
     
    14801473        raiseError("Error saving SVM model."); 
    14811474    } 
    1482     if(svm->kernelFunc) 
    1483         return Py_BuildValue("O(OOOsbO)N", self->ob_type, 
    1484                                     WrapOrange(svm->classVar), 
    1485                                     WrapOrange(svm->examples), 
    1486                                     WrapOrange(svm->supportVectors), 
    1487                                     buf.c_str(), 
    1488                                     (char)(svm->useNonMeta? 1: 0), 
    1489                                     WrapOrange(svm->kernelFunc), 
    1490                                     packOrangeDictionary(self)); 
    1491     else 
    1492         return Py_BuildValue("O(OOOsb)N", self->ob_type, 
    1493                                     WrapOrange(svm->classVar), 
    1494                                     WrapOrange(svm->examples), 
    1495                                     WrapOrange(svm->supportVectors), 
     1475 
     1476    return Py_BuildValue("O(OsbOOO)N", self->ob_type, 
     1477                                    WrapOrange(svm->domain), 
    14961478                                    buf.c_str(), 
    14971479                                    (char)(svm->useNonMeta? 1: 0), 
     1480                                    WrapOrange(svm->supportVectors), 
     1481                                    WrapOrange(svm->kernelFunc), 
     1482                                    WrapOrange(svm->examples), 
    14981483                                    packOrangeDictionary(self)); 
    14991484  PyCATCH 
     
    15231508 
    15241509 
    1525 PyObject * SVMClassifier_new(PyTypeObject* type, PyObject* args, PyObject* kwargs) BASED_ON(ClassifierFD, "(Variable, Examples, Examples, string, [kernelFunc]) -> SVMClassifier") 
    1526 {PyTRY 
    1527     PVariable classVar; 
     1510PyObject * SVMClassifier_new(PyTypeObject* type, PyObject* args, PyObject* kwargs) BASED_ON(ClassifierFD, "(Domain, model_string, supportVectors, [kernelFunc, examples]) -> SVMClassifier") 
     1511{ 
     1512PyTRY 
     1513    PDomain domain; 
     1514    char*  model_string = NULL; 
     1515    PExampleTable supportVectors; 
     1516    PKernelFunc kernel; 
    15281517    PExampleTable examples; 
    1529     PExampleTable supportVectors; 
    1530     char*  model_string; 
    1531     PKernelFunc kernel; 
     1518 
    15321519    if (PyArg_ParseTuple(args, "")) 
    15331520        return WrapNewOrange(mlnew TSVMClassifier(), type); 
     1521 
    15341522    PyErr_Clear(); 
    1535      
    1536     if (!PyArg_ParseTuple(args, "O&O&O&s|O&:__new__", cc_Variable, &classVar, ccn_ExampleTable, &examples, cc_ExampleTable, &supportVectors, &model_string, cc_KernelFunc, &kernel)) 
    1537         return NULL; 
     1523 
     1524    if (!PyArg_ParseTuple(args, "O&sO&|O&O&", 
     1525            cc_Domain, &domain, 
     1526            &model_string, 
     1527            cc_ExampleTable, &supportVectors, 
     1528            ccn_KernelFunc, &kernel, 
     1529            ccn_ExampleTable, &examples)) { 
     1530         // Old pickle arguments format. 
     1531        PVariable classVar; 
     1532        if (!PyArg_ParseTuple(args, "O&O&O&s|O&:__new__", 
     1533                cc_Variable, &classVar, 
     1534                ccn_ExampleTable, &examples, 
     1535                cc_ExampleTable, &supportVectors, 
     1536                &model_string, 
     1537                cc_KernelFunc, &kernel)) { 
     1538            return NULL; 
     1539        } 
     1540        PyErr_Clear(); 
     1541        domain = supportVectors->domain; 
     1542    } 
    15381543 
    15391544    string buffer(model_string); 
     
    15421547        raiseError("Error building LibSVM Model"); 
    15431548 
    1544     PSVMClassifier svm = mlnew TSVMClassifier(classVar, examples, supportVectors, model, kernel); 
     1549    PSVMClassifier svm = mlnew TSVMClassifier(domain, model, supportVectors, kernel, examples); 
    15451550 
    15461551    return WrapOrange(svm); 
     
    15501555 
    15511556 
    1552 PyObject * SVMClassifierSparse_new(PyTypeObject* type, PyObject* args, PyObject* kwargs) BASED_ON(SVMClassifier, "(Variable, Examples, Examples, string, [useNonMeta, kernelFunc]) -> SVMClassifierSparse") 
    1553 {PyTRY 
    1554     PVariable classVar; 
     1557PyObject * SVMClassifierSparse_new(PyTypeObject* type, PyObject* args, PyObject* kwargs) BASED_ON(SVMClassifier, "(Domain, model_string, useNonMeta, supportVectors, [kernelFunc, examples]) -> SVMClassifierSparse") 
     1558{ 
     1559PyTRY 
     1560    PDomain domain; 
     1561    char*  model_string = NULL; 
     1562    char useNonMeta = 0; 
     1563 
     1564    PExampleTable supportVectors; 
     1565    PKernelFunc kernel; 
    15551566    PExampleTable examples; 
    1556     PExampleTable supportVectors; 
    1557     char*  model_string; 
    1558     char useNonMeta; 
    1559     PKernelFunc kernel; 
     1567 
    15601568    if (PyArg_ParseTuple(args, "")) 
    15611569        return WrapNewOrange(mlnew TSVMClassifierSparse(), type); 
     1570 
    15621571    PyErr_Clear(); 
    1563      
    1564     if (!PyArg_ParseTuple(args, "O&O&O&s|bO&:__new__", cc_Variable, &classVar, ccn_ExampleTable, &examples, cc_ExampleTable, &supportVectors, &model_string, &useNonMeta, cc_KernelFunc, &kernel)) 
    1565         return NULL; 
    1566      
     1572 
     1573    if (!PyArg_ParseTuple(args, "O&sbO&|O&O&:__new__", 
     1574            cc_Domain, &domain, 
     1575            &model_string, 
     1576            &useNonMeta, 
     1577            cc_ExampleTable, &supportVectors, 
     1578            ccn_KernelFunc, &kernel, 
     1579            ccn_ExampleTable, &examples)) { 
     1580 
     1581         // Old pickle arguments format. 
     1582        PVariable classVar; 
     1583        if (!PyArg_ParseTuple(args, "O&O&O&s|bO&:__new__", 
     1584                cc_Variable, &classVar, 
     1585                ccn_ExampleTable, &examples, 
     1586                cc_ExampleTable, &supportVectors, 
     1587                &model_string, 
     1588                &useNonMeta, 
     1589                cc_KernelFunc, &kernel)) { 
     1590            return NULL; 
     1591        } 
     1592 
     1593        PyErr_Clear(); 
     1594        domain = supportVectors->domain; 
     1595    } 
     1596 
    15671597    string buffer(model_string); 
    15681598    svm_model* model = svm_load_model_alt(buffer); 
     
    15701600        raiseError("Error building LibSVM Model"); 
    15711601 
    1572     PSVMClassifier svm = mlnew TSVMClassifierSparse(classVar, examples, supportVectors, model, useNonMeta != 0, kernel); 
     1602    PSVMClassifier svm = mlnew TSVMClassifierSparse(domain, model, useNonMeta != 0, supportVectors, kernel, examples); 
    15731603 
    15741604    return WrapOrange(svm); 
Note: See TracChangeset for help on using the changeset viewer.