File indexing completed on 2024-04-28 11:20:30
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2016 Ivan Lakhtanov <ivan.lakhtanov@gmail.com> 0004 */ 0005 #pragma once 0006 0007 #include <extension.h> 0008 0009 #define JULIA_EXT_CDTOR_DECL(name) Julia##name##Extension(QObject *parent); \ 0010 ~Julia##name##Extension(); 0011 0012 0013 /** 0014 * Implementation of linear algebra wizards for Julia 0015 */ 0016 class JuliaLinearAlgebraExtension: public Cantor::LinearAlgebraExtension 0017 { 0018 public: 0019 JULIA_EXT_CDTOR_DECL(LinearAlgebra) 0020 0021 /** 0022 * @see Cantor::LinearAlgebraExtension::createVector 0023 */ 0024 QString createVector( 0025 const QStringList &entries, 0026 VectorType type) override; 0027 0028 /** 0029 * @see Cantor::LinearAlgebraExtension::nullVector 0030 */ 0031 QString nullVector(int size, VectorType type) override; 0032 0033 /** 0034 * @see Cantor::LinearAlgebraExtension::createMatrix 0035 */ 0036 QString createMatrix( 0037 const Cantor::LinearAlgebraExtension::Matrix &matrix) override; 0038 0039 /** 0040 * @see Cantor::LinearAlgebraExtension::identityMatrix 0041 */ 0042 QString identityMatrix(int size) override; 0043 0044 /** 0045 * @see Cantor::LinearAlgebraExtension::nullMatrix 0046 */ 0047 QString nullMatrix(int rows, int columns) override; 0048 0049 /** 0050 * @see Cantor::LinearAlgebraExtension::rank 0051 */ 0052 QString rank(const QString &matrix) override; 0053 0054 /** 0055 * @see Cantor::LinearAlgebraExtension::invertMatrix 0056 */ 0057 QString invertMatrix(const QString &matrix) override; 0058 0059 /** 0060 * @see Cantor::LinearAlgebraExtension::charPoly 0061 */ 0062 QString charPoly(const QString &matrix) override; 0063 0064 /** 0065 * @see Cantor::LinearAlgebraExtension::eigenVectors 0066 */ 0067 QString eigenVectors(const QString &matrix) override; 0068 0069 /** 0070 * @see Cantor::LinearAlgebraExtension::eigenValues 0071 */ 0072 QString eigenValues(const QString &matrix) override; 0073 }; 0074 0075 /** 0076 * Implementation of packaging wizards for Julia 0077 */ 0078 class JuliaPackagingExtension: public Cantor::PackagingExtension 0079 { 0080 public: 0081 JULIA_EXT_CDTOR_DECL(Packaging) 0082 0083 /** 0084 * @see Cantor::PackagingExtension::importPackage 0085 */ 0086 QString importPackage(const QString &module) override; 0087 }; 0088 0089 /** 0090 * Implementation of plot wizards for Julia 0091 * 0092 * Plotting is based on GR package 0093 */ 0094 class JuliaPlotExtension: public Cantor::PlotExtension 0095 { 0096 public: 0097 JULIA_EXT_CDTOR_DECL(Plot) 0098 0099 /** 0100 * @see Cantor::PlotExtension::plotFunction2d 0101 */ 0102 QString plotFunction2d( 0103 const QString &function, 0104 const QString &variable, 0105 const QString &left, 0106 const QString &right) override; 0107 0108 /** 0109 * @see Cantor::PlotExtension::plotFunction3d 0110 */ 0111 QString plotFunction3d( 0112 const QString &function, 0113 const VariableParameter& var1, 0114 const VariableParameter& var2) override; 0115 }; 0116 0117 /** 0118 * Implementation of script wizard for Julia 0119 */ 0120 class JuliaScriptExtension: public Cantor::ScriptExtension 0121 { 0122 public: 0123 JULIA_EXT_CDTOR_DECL(Script) 0124 0125 /** 0126 * @see Cantor::ScriptExtension::scriptFileFilter 0127 */ 0128 QString scriptFileFilter() override; 0129 0130 /** 0131 * @see Cantor::ScriptExtension::highlightingMode 0132 */ 0133 QString highlightingMode() override; 0134 0135 /** 0136 * @see Cantor::ScriptExtension::runExternalScript 0137 */ 0138 QString runExternalScript(const QString &path) override; 0139 }; 0140 0141 /** 0142 * Julia variable management extension 0143 * 0144 * Based on JLD package for loading/saving variables 0145 */ 0146 class JuliaVariableManagementExtension: public Cantor::VariableManagementExtension 0147 { 0148 public: 0149 JULIA_EXT_CDTOR_DECL(VariableManagement) 0150 0151 // There is no way to completely delete object from scope: 0152 // https://docs.julialang.org/en/v1/manual/faq/#How-do-I-delete-an-object-in-memory?-1 0153 // So we are saving special marker to variable to mark it as removed 0154 static const QString REMOVED_VARIABLE_MARKER; 0155 0156 /** 0157 * @see Cantor::VariableManagementExtension::addVariable 0158 */ 0159 QString addVariable( 0160 const QString &name, 0161 const QString &value) override; 0162 0163 /** 0164 * @see Cantor::VariableManagementExtension::setValue 0165 */ 0166 QString setValue( 0167 const QString &name, 0168 const QString &value) override; 0169 0170 /** 0171 * @see Cantor::VariableManagementExtension::removeVariable 0172 */ 0173 QString removeVariable(const QString &name) override; 0174 0175 /** 0176 * @see Cantor::VariableManagementExtension::saveVariables 0177 */ 0178 QString saveVariables(const QString &fileName) override; 0179 0180 /** 0181 * @see Cantor::VariableManagementExtension::loadVariables 0182 */ 0183 QString loadVariables(const QString &fileName) override; 0184 0185 /** 0186 * @see Cantor::VariableManagementExtension::clearVariables 0187 */ 0188 QString clearVariables() override; 0189 };