[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [cantor] src/backends/python2: Initial linear algebra extension support to Python 2 backend
From:       Filipe Saraiva <filipe () kde ! org>
Date:       2014-05-31 18:51:32
Message-ID: E1WqoNQ-00005Y-Pv () scm ! kde ! org
[Download RAW message or body]

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 \
QList<QVariant> 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/python2/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##Extension(QObject* parent) : \
                name##Extension(parent) {} \
                                      \
Python2##name##Extension::~Python2##name##Extension() {}  
+PYTHON2_EXT_CDTOR(LinearAlgebra)
+
+QString Python2LinearAlgebraExtension::createVector(const QStringList& entries, \
Cantor::LinearAlgebraExtension::VectorType type) +{
+    QString command;
+    command += "numpy.matrix([";
+
+    foreach (const QString& entry, entries)
+    {
+        command += entry + ", ";
+    }
+
+    command.chop(2);
+    command += "])\n";
+    
+    return command;
+}
+
+QString Python2LinearAlgebraExtension::createMatrix(const \
Cantor::LinearAlgebraExtension::Matrix& matrix) +{
+    QString command;
+    command += "numpy.matrix([[";
+
+    foreach (const QStringList row, matrix)
+    {
+        foreach (const QString entry, row)
+        {
+            command += entry;
+            command += ", ";
+        }
+        command.chop(2);
+        command += "], [";
+    }
+
+    command.chop(3);
+    command += "])";
+
+    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::LinearAlgebraExtension::VectorType type) +{
+    QString command = "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/python2/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* parent); \
                                      ~Python2##name##Extension();
 
+class Python2LinearAlgebraExtension : public Cantor::LinearAlgebraExtension
+{
+    public:
+    PYTHON2_EXT_CDTOR_DECL(LinearAlgebra)
+    virtual QString createVector(const QStringList& entries, VectorType type);
+    virtual QString nullVector(int size, VectorType type);
+    virtual QString createMatrix(const Cantor::LinearAlgebraExtension::Matrix& \
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:


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic