PyObject * PyOCIO_MatrixTransform_Identity(PyObject * /*self*/)
 {
     OCIO_PYTRY_ENTER()
     std::vector<float> matrix(16);
     std::vector<float> offset(4);
     MatrixTransform::Identity(&matrix[0], &offset[0]);
     PyObject* pymatrix = CreatePyListFromFloatVector(matrix);
     PyObject* pyoffset = CreatePyListFromFloatVector(offset);
     PyObject* pyreturnval = Py_BuildValue("(OO)", pymatrix, pyoffset);
     Py_DECREF(pymatrix);
     Py_DECREF(pyoffset);
     return pyreturnval;
     OCIO_PYTRY_EXIT(NULL)
 }
 PyObject * PyOCIO_MatrixTransform_getValue(PyObject * self)
 {
     OCIO_PYTRY_ENTER()
     ConstMatrixTransformRcPtr transform = GetConstMatrixTransform(self);
     std::vector<float> matrix(16);
     std::vector<float> offset(4);
     transform->getValue(&matrix[0], &offset[0]);
     PyObject* pymatrix = CreatePyListFromFloatVector(matrix);
     PyObject* pyoffset = CreatePyListFromFloatVector(offset);
     PyObject* pyreturnval = Py_BuildValue("(OO)", pymatrix, pyoffset);
     Py_DECREF(pymatrix);
     Py_DECREF(pyoffset);
     return pyreturnval;
     OCIO_PYTRY_EXIT(NULL)
 }
 PyObject * PyOCIO_AllocationTransform_getVars(PyObject * self)
 {
     OCIO_PYTRY_ENTER()
     ConstAllocationTransformRcPtr transform = GetConstAllocationTransform(self);
     std::vector<float> vars(transform->getNumVars());
     if(!vars.empty()) transform->getVars(&vars[0]);
     return CreatePyListFromFloatVector(vars);
     OCIO_PYTRY_EXIT(NULL)
 }
 PyObject * PyOCIO_CDLTransform_getSOP(PyObject * self)
 {
     OCIO_PYTRY_ENTER()
     ConstCDLTransformRcPtr transform = GetConstCDLTransform(self);
     std::vector<float> data(9);
     transform->getSOP(&data[0]);
     return CreatePyListFromFloatVector(data);
     OCIO_PYTRY_EXIT(NULL)
 }
 PyObject * PyOCIO_MatrixTransform_getOffset(PyObject * self)
 {
     OCIO_PYTRY_ENTER()
     ConstMatrixTransformRcPtr transform = GetConstMatrixTransform(self);
     std::vector<float> offset(4);
     transform->getOffset(&offset[0]);
     return CreatePyListFromFloatVector(offset);
     OCIO_PYTRY_EXIT(NULL)
 }
 PyObject * PyOCIO_MatrixTransform_getMatrix(PyObject * self)
 {
     OCIO_PYTRY_ENTER()
     ConstMatrixTransformRcPtr transform = GetConstMatrixTransform(self);
     std::vector<float> matrix(16);
     transform->getMatrix(&matrix[0]);
     return CreatePyListFromFloatVector(matrix);
     OCIO_PYTRY_EXIT(NULL)
 }
 PyObject * PyOCIO_MatrixTransform_Fit(PyObject * /*self*/, PyObject * args)
 {
     OCIO_PYTRY_ENTER()
     
     PyObject* pyoldmin = 0;
     PyObject* pyoldmax = 0;
     PyObject* pynewmin = 0;
     PyObject* pynewmax = 0;
     if (!PyArg_ParseTuple(args,"OOOO:Fit",
         &pyoldmin, &pyoldmax, &pynewmin, &pynewmax)) return NULL;
     
     std::vector<float> oldmin;
     if(!FillFloatVectorFromPySequence(pyoldmin, oldmin) ||
         (oldmin.size() != 4))
     {
         PyErr_SetString(PyExc_TypeError,
             "First argument must be a float array, size 4");
         return 0;
     }
     
     std::vector<float> oldmax;
     if(!FillFloatVectorFromPySequence(pyoldmax, oldmax) ||
         (oldmax.size() != 4))
     {
         PyErr_SetString(PyExc_TypeError,
             "Second argument must be a float array, size 4");
         return 0;
     }
     
     std::vector<float> newmin;
     if(!FillFloatVectorFromPySequence(pynewmin, newmin) ||
         (newmin.size() != 4))
     {
         PyErr_SetString(PyExc_TypeError,
             "Third argument must be a float array, size 4");
         return 0;
     }
     
     std::vector<float> newmax;
     if(!FillFloatVectorFromPySequence(pynewmax, newmax) ||
         (newmax.size() != 4))
     {
         PyErr_SetString(PyExc_TypeError,
             "Fourth argument must be a float array, size 4");
         return 0;
     }
     
     std::vector<float> matrix(16);
     std::vector<float> offset(4);
     MatrixTransform::Fit(&matrix[0], &offset[0],
                          &oldmin[0], &oldmax[0],
                          &newmin[0], &newmax[0]);
     PyObject* pymatrix = CreatePyListFromFloatVector(matrix);
     PyObject* pyoffset = CreatePyListFromFloatVector(offset);
     PyObject* pyreturnval = Py_BuildValue("(OO)", pymatrix, pyoffset);
     Py_DECREF(pymatrix);
     Py_DECREF(pyoffset);
     return pyreturnval;
     
     OCIO_PYTRY_EXIT(NULL)
 }