Git commit a5a2e8f03aae3418e8c0ef15e221fbe3c3c0df99 by Filipe Saraiva. Committed on 31/05/2014 at 18:43. Pushed by filipesaraiva into branch 'master'. Initial linear algebra extension support to Python 2 backend M +1 -0 src/backends/python2/python2backend.cpp M +89 -0 src/backends/python2/python2extensions.cpp M +16 -0 src/backends/python2/python2extensions.h http://commits.kde.org/cantor/a5a2e8f03aae3418e8c0ef15e221fbe3c3c0df99 diff --git a/src/backends/python2/python2backend.cpp b/src/backends/python2= /python2backend.cpp index 91794e7..1fa9237 100644 --- a/src/backends/python2/python2backend.cpp +++ b/src/backends/python2/python2backend.cpp @@ -34,6 +34,7 @@ Python2Backend::Python2Backend(QObject* parent,const QLis= t args ) : Ca { kDebug()<<"Creating Python2Backend"; = + new Python2LinearAlgebraExtension(this); new Python2PackagingExtension(this); new Python2ScriptExtension(this); new Python2VariableManagementExtension(this); diff --git a/src/backends/python2/python2extensions.cpp b/src/backends/pyth= on2/python2extensions.cpp index 79ae8c1..e8968bf 100644 --- a/src/backends/python2/python2extensions.cpp +++ b/src/backends/python2/python2extensions.cpp @@ -25,6 +25,95 @@ #define PYTHON2_EXT_CDTOR(name) Python2##name##Extension::Python2##name##E= xtension(QObject* parent) : name##Extension(parent) {} \ Python2##name##Extension::~Python2##n= ame##Extension() {} = +PYTHON2_EXT_CDTOR(LinearAlgebra) + +QString Python2LinearAlgebraExtension::createVector(const QStringList& ent= ries, Cantor::LinearAlgebraExtension::VectorType type) +{ + QString command; + command +=3D "numpy.matrix(["; + + foreach (const QString& entry, entries) + { + command +=3D entry + ", "; + } + + command.chop(2); + command +=3D "])\n"; + = + return command; +} + +QString Python2LinearAlgebraExtension::createMatrix(const Cantor::LinearAl= gebraExtension::Matrix& matrix) +{ + QString command; + command +=3D "numpy.matrix([["; + + foreach (const QStringList row, matrix) + { + foreach (const QString entry, row) + { + command +=3D entry; + command +=3D ", "; + } + command.chop(2); + command +=3D "], ["; + } + + command.chop(3); + command +=3D "])"; + + return command; +} + +QString Python2LinearAlgebraExtension::eigenValues(const QString& matrix) +{ + return QString("numpy.linalg.eigvals(%1)").arg(matrix); +} + +QString Python2LinearAlgebraExtension::eigenVectors(const QString& matrix) +{ + return QString("numpy.linalg.eig(%1)").arg(matrix); +} + +QString Python2LinearAlgebraExtension::identityMatrix(int size) +{ + return QString("numpy.identity(%1)").arg(size); +} + +QString Python2LinearAlgebraExtension::invertMatrix(const QString& matrix) +{ + return QString("numpy.linalg.inv(%1)").arg(matrix); +} + +QString Python2LinearAlgebraExtension::nullMatrix(int rows, int columns) +{ + return QString("numpy.zeros(%1, %2)").arg(rows).arg(columns); +} + +QString Python2LinearAlgebraExtension::nullVector(int size, Cantor::Linear= AlgebraExtension::VectorType type) +{ + QString command =3D "numpy.zeros(%1, %2)"; + switch (type) + { + case ColumnVector: + return command.arg(size).arg(1); + case RowVector: + return command.arg(1).arg(size); + default: + return Cantor::LinearAlgebraExtension::nullVector(size, type); + } +} + +QString Python2LinearAlgebraExtension::rank(const QString& matrix) +{ + return QString("numpy.linalg.matrix_rank(%1)").arg(matrix); +} + +QString Python2LinearAlgebraExtension::charPoly(const QString& matrix) +{ + return QString("numpy.poly(%1)").arg(matrix); +} + PYTHON2_EXT_CDTOR(Packaging) = QString Python2PackagingExtension::importPackage(const QString& package) diff --git a/src/backends/python2/python2extensions.h b/src/backends/python= 2/python2extensions.h index 9e35d2d..dc54f0f 100644 --- a/src/backends/python2/python2extensions.h +++ b/src/backends/python2/python2extensions.h @@ -26,6 +26,22 @@ #define PYTHON2_EXT_CDTOR_DECL(name) Python2##name##Extension(QObject* par= ent); \ ~Python2##name##Extension(); = +class Python2LinearAlgebraExtension : public Cantor::LinearAlgebraExtension +{ + public: + PYTHON2_EXT_CDTOR_DECL(LinearAlgebra) + virtual QString createVector(const QStringList& entries, VectorType ty= pe); + virtual QString nullVector(int size, VectorType type); + virtual QString createMatrix(const Cantor::LinearAlgebraExtension::Mat= rix& matrix); + virtual QString identityMatrix(int size); + virtual QString nullMatrix(int rows, int columns); + virtual QString rank(const QString& matrix); + virtual QString invertMatrix(const QString& matrix); + virtual QString charPoly(const QString& matrix); + virtual QString eigenVectors(const QString& matrix); + virtual QString eigenValues(const QString& matrix); +}; + class Python2PackagingExtension : public Cantor::PackagingExtension { public: