File indexing completed on 2024-04-28 11:20:34
0001 /* 0002 SPDX-FileCopyrightText: 2010 Miha Čančula <miha.cancula@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "octaveextensions.h" 0008 #include <KLocalizedString> 0009 #include <QDebug> 0010 0011 #define OCTAVE_EXT_CDTOR(name) Octave##name##Extension::Octave##name##Extension(QObject* parent) : name##Extension(parent) {} \ 0012 Octave##name##Extension::~Octave##name##Extension() {} 0013 0014 0015 const QList<QChar> octaveMatrixOperators = QList<QChar>() << QLatin1Char('*') << QLatin1Char('/') << QLatin1Char('^'); 0016 const QString octavePrintFileCommand = QLatin1String("print('-depsc',strcat(tempname(tempdir,'c-ob-'),'.eps')); "); 0017 0018 OCTAVE_EXT_CDTOR(History) 0019 0020 QString OctaveHistoryExtension::lastResult() 0021 { 0022 return QLatin1String("ans"); 0023 } 0024 0025 OCTAVE_EXT_CDTOR(Script) 0026 0027 QString OctaveScriptExtension::runExternalScript(const QString& path) 0028 { 0029 return QString::fromLatin1("source \"%1\"").arg(path); 0030 } 0031 0032 QString OctaveScriptExtension::scriptFileFilter() 0033 { 0034 return i18n("Octave script file (*.m)"); 0035 } 0036 0037 QString OctaveScriptExtension::highlightingMode() 0038 { 0039 return QLatin1String("octave"); 0040 } 0041 0042 QString OctaveScriptExtension::commandSeparator() 0043 { 0044 return QLatin1String(";"); 0045 } 0046 0047 OCTAVE_EXT_CDTOR(Plot) 0048 0049 QString OctavePlotExtension::plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) 0050 { 0051 return QString::fromLatin1("cantor_plot2d('%1','%2',%3,%4);") 0052 .arg(function) 0053 .arg(variable) 0054 .arg(left) 0055 .arg(right); 0056 } 0057 0058 QString OctavePlotExtension::plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) 0059 { 0060 return QString::fromLatin1("cantor_plot3d('%1','%2',%3,%4,'%5',%6,%7);") 0061 .arg(function) 0062 .arg(var1.first) 0063 .arg(var1.second.first) 0064 .arg(var1.second.second) 0065 .arg(var2.first) 0066 .arg(var2.second.first) 0067 .arg(var2.second.second); 0068 } 0069 0070 0071 OCTAVE_EXT_CDTOR(LinearAlgebra) 0072 0073 QString OctaveLinearAlgebraExtension::charPoly(const QString& matrix) 0074 { 0075 return QString::fromLatin1("poly(%1)").arg(matrix); 0076 } 0077 0078 QString OctaveLinearAlgebraExtension::createMatrix(const Cantor::LinearAlgebraExtension::Matrix& matrix) 0079 { 0080 QString command; 0081 command += QLatin1Char('['); 0082 foreach (const QStringList row, matrix) 0083 { 0084 foreach (const QString entry, row) 0085 { 0086 command += entry; 0087 command += QLatin1String(", "); 0088 } 0089 command.chop(2); // Removes the last comma 0090 command += QLatin1String("; "); 0091 } 0092 command.chop(2); // Removes the last semicolon 0093 command += QLatin1Char(']'); 0094 return command; 0095 } 0096 0097 QString OctaveLinearAlgebraExtension::createVector(const QStringList& entries, Cantor::LinearAlgebraExtension::VectorType type) 0098 { 0099 QString separator; 0100 if (type == ColumnVector) 0101 { 0102 separator = QLatin1String("; "); 0103 } 0104 else 0105 { 0106 separator = QLatin1String(", "); 0107 } 0108 QString command; 0109 command += QLatin1Char('['); 0110 foreach (const QString& entry, entries) 0111 { 0112 command += entry; 0113 command += separator; 0114 } 0115 command.chop(1); 0116 command += QLatin1Char(']'); 0117 return command; 0118 } 0119 0120 QString OctaveLinearAlgebraExtension::eigenValues(const QString& matrix) 0121 { 0122 return QString::fromLatin1("eig(%1)").arg(matrix); 0123 } 0124 0125 QString OctaveLinearAlgebraExtension::eigenVectors(const QString& matrix) 0126 { 0127 return QString::fromLatin1("cantor_eigenvectors(%1)").arg(matrix); 0128 } 0129 0130 QString OctaveLinearAlgebraExtension::identityMatrix(int size) 0131 { 0132 return QString::fromLatin1("eye(%1)").arg(size); 0133 } 0134 0135 QString OctaveLinearAlgebraExtension::invertMatrix(const QString& matrix) 0136 { 0137 return QString::fromLatin1("inv(%1)").arg(matrix); 0138 } 0139 0140 QString OctaveLinearAlgebraExtension::nullMatrix(int rows, int columns) 0141 { 0142 return QString::fromLatin1("zeros(%1,%2)").arg(rows).arg(columns); 0143 } 0144 0145 QString OctaveLinearAlgebraExtension::nullVector(int size, Cantor::LinearAlgebraExtension::VectorType type) 0146 { 0147 QString command = QLatin1String("zeros(%1,%2)"); 0148 switch (type) 0149 { 0150 case ColumnVector: 0151 return command.arg(size).arg(1); 0152 case RowVector: 0153 return command.arg(1).arg(size); 0154 default: 0155 return Cantor::LinearAlgebraExtension::nullVector(size, type); 0156 } 0157 } 0158 0159 QString OctaveLinearAlgebraExtension::rank(const QString& matrix) 0160 { 0161 return QString::fromLatin1("rank(%1)").arg(matrix); 0162 } 0163 0164 OCTAVE_EXT_CDTOR(VariableManagement) 0165 0166 QString OctaveVariableManagementExtension::addVariable(const QString& name, const QString& value) 0167 { 0168 return setValue(name,value); 0169 } 0170 0171 QString OctaveVariableManagementExtension::setValue(const QString& name, const QString& value) 0172 { 0173 return QString::fromLatin1("%1 = %2").arg(name).arg(value); 0174 } 0175 0176 QString OctaveVariableManagementExtension::removeVariable(const QString& name) 0177 { 0178 return QString::fromLatin1("clear %1;").arg(name); 0179 } 0180 0181 QString OctaveVariableManagementExtension::clearVariables() 0182 { 0183 return QLatin1String("clear;"); 0184 } 0185 0186 QString OctaveVariableManagementExtension::saveVariables(const QString& fileName) 0187 { 0188 return QString::fromLatin1("save %1;").arg(fileName); 0189 } 0190 0191 QString OctaveVariableManagementExtension::loadVariables(const QString& fileName) 0192 { 0193 return QString::fromLatin1("load %1;").arg(fileName); 0194 } 0195 0196 OCTAVE_EXT_CDTOR(Packaging) 0197 0198 QString OctavePackagingExtension::importPackage(const QString& package) 0199 { 0200 return QString::fromLatin1("pkg load %1").arg(package); 0201 }