[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