1 /* 2 SPDX-License-Identifier: GPL-2.0-or-later 3 SPDX-FileCopyrightText: 2016 Ivan Lakhtanov <ivan.lakhtanov@gmail.com> 4 */ 5 #pragma once 6 7 #include <extension.h> 8 9 #define JULIA_EXT_CDTOR_DECL(name) Julia##name##Extension(QObject *parent); \ 10 ~Julia##name##Extension(); 11 12 13 /** 14 * Implementation of linear algebra wizards for Julia 15 */ 16 class JuliaLinearAlgebraExtension: public Cantor::LinearAlgebraExtension 17 { 18 public: 19 JULIA_EXT_CDTOR_DECL(LinearAlgebra) 20 21 /** 22 * @see Cantor::LinearAlgebraExtension::createVector 23 */ 24 QString createVector( 25 const QStringList &entries, 26 VectorType type) override; 27 28 /** 29 * @see Cantor::LinearAlgebraExtension::nullVector 30 */ 31 QString nullVector(int size, VectorType type) override; 32 33 /** 34 * @see Cantor::LinearAlgebraExtension::createMatrix 35 */ 36 QString createMatrix( 37 const Cantor::LinearAlgebraExtension::Matrix &matrix) override; 38 39 /** 40 * @see Cantor::LinearAlgebraExtension::identityMatrix 41 */ 42 QString identityMatrix(int size) override; 43 44 /** 45 * @see Cantor::LinearAlgebraExtension::nullMatrix 46 */ 47 QString nullMatrix(int rows, int columns) override; 48 49 /** 50 * @see Cantor::LinearAlgebraExtension::rank 51 */ 52 QString rank(const QString &matrix) override; 53 54 /** 55 * @see Cantor::LinearAlgebraExtension::invertMatrix 56 */ 57 QString invertMatrix(const QString &matrix) override; 58 59 /** 60 * @see Cantor::LinearAlgebraExtension::charPoly 61 */ 62 QString charPoly(const QString &matrix) override; 63 64 /** 65 * @see Cantor::LinearAlgebraExtension::eigenVectors 66 */ 67 QString eigenVectors(const QString &matrix) override; 68 69 /** 70 * @see Cantor::LinearAlgebraExtension::eigenValues 71 */ 72 QString eigenValues(const QString &matrix) override; 73 }; 74 75 /** 76 * Implementation of packaging wizards for Julia 77 */ 78 class JuliaPackagingExtension: public Cantor::PackagingExtension 79 { 80 public: 81 JULIA_EXT_CDTOR_DECL(Packaging) 82 83 /** 84 * @see Cantor::PackagingExtension::importPackage 85 */ 86 QString importPackage(const QString &module) override; 87 }; 88 89 /** 90 * Implementation of plot wizards for Julia 91 * 92 * Plotting is based on GR package 93 */ 94 class JuliaPlotExtension: public Cantor::PlotExtension 95 { 96 public: 97 JULIA_EXT_CDTOR_DECL(Plot) 98 99 /** 100 * @see Cantor::PlotExtension::plotFunction2d 101 */ 102 QString plotFunction2d( 103 const QString &function, 104 const QString &variable, 105 const QString &left, 106 const QString &right) override; 107 108 /** 109 * @see Cantor::PlotExtension::plotFunction3d 110 */ 111 QString plotFunction3d( 112 const QString &function, 113 const VariableParameter& var1, 114 const VariableParameter& var2) override; 115 }; 116 117 /** 118 * Implementation of script wizard for Julia 119 */ 120 class JuliaScriptExtension: public Cantor::ScriptExtension 121 { 122 public: 123 JULIA_EXT_CDTOR_DECL(Script) 124 125 /** 126 * @see Cantor::ScriptExtension::scriptFileFilter 127 */ 128 QString scriptFileFilter() override; 129 130 /** 131 * @see Cantor::ScriptExtension::highlightingMode 132 */ 133 QString highlightingMode() override; 134 135 /** 136 * @see Cantor::ScriptExtension::runExternalScript 137 */ 138 QString runExternalScript(const QString &path) override; 139 }; 140 141 /** 142 * Julia variable management extension 143 * 144 * Based on JLD package for loading/saving variables 145 */ 146 class JuliaVariableManagementExtension: public Cantor::VariableManagementExtension 147 { 148 public: 149 JULIA_EXT_CDTOR_DECL(VariableManagement) 150 151 // There is no way to completely delete object from scope: 152 // https://docs.julialang.org/en/v1/manual/faq/#How-do-I-delete-an-object-in-memory?-1 153 // So we are saving special marker to variable to mark it as removed 154 static const QString REMOVED_VARIABLE_MARKER; 155 156 /** 157 * @see Cantor::VariableManagementExtension::addVariable 158 */ 159 QString addVariable( 160 const QString &name, 161 const QString &value) override; 162 163 /** 164 * @see Cantor::VariableManagementExtension::setValue 165 */ 166 QString setValue( 167 const QString &name, 168 const QString &value) override; 169 170 /** 171 * @see Cantor::VariableManagementExtension::removeVariable 172 */ 173 QString removeVariable(const QString &name) override; 174 175 /** 176 * @see Cantor::VariableManagementExtension::saveVariables 177 */ 178 QString saveVariables(const QString &fileName) override; 179 180 /** 181 * @see Cantor::VariableManagementExtension::loadVariables 182 */ 183 QString loadVariables(const QString &fileName) override; 184 185 /** 186 * @see Cantor::VariableManagementExtension::clearVariables 187 */ 188 QString clearVariables() override; 189 }; 190