void AgrosSolver::runSuite() { // log stdout if (m_enableLog) m_log = new LogStdOut(); // silent mode setSilentMode(true); connect(currentPythonEngineAgros(), SIGNAL(pythonShowMessage(QString)), this, SLOT(stdOut(QString))); connect(currentPythonEngineAgros(), SIGNAL(pythonShowHtml(QString)), this, SLOT(stdHtml(QString))); QString testSuite = QString("from test_suite.scenario import run_suite; run_suite(test_suite.test_%1)").arg(m_suiteName); qDebug() << testSuite; bool successfulRun= currentPythonEngineAgros()->runScript(testSuite); if (successfulRun) { Agros2D::scene()->clear(); Agros2D::clear(); QApplication::exit(0); } else { ErrorResult result = currentPythonEngineAgros()->parseError(); Agros2D::log()->printMessage(tr("Scripting Engine"), tr("%1\nLine: %2\nStacktrace:\n%3\n"). arg(result.error()). arg(result.line()). arg(result.traceback())); QApplication::exit(-1); } }
void ScriptEngineRemoteLocal::disconnected() { m_server_socket->deleteLater(); if (!m_command.isEmpty()) { bool successfulRun = currentPythonEngineAgros()->runScript(m_command); } m_client_socket = new QLocalSocket(); connect(m_client_socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(displayError(QLocalSocket::LocalSocketError))); m_client_socket->connectToServer(clientName()); if (m_client_socket->waitForConnected(1000)) { ErrorResult result = currentPythonEngineAgros()->parseError(); QTextStream out(m_client_socket); out << result.error(); out.flush(); m_client_socket->waitForBytesWritten(); } else { displayError(QLocalSocket::ConnectionRefusedError); } delete m_client_socket; }
void PythonEngineAgros::materialValues(const QString &function, double from, double to, QVector<double> *keys, QVector<double> *values, int count) { if (function.isEmpty()) return; // function bool succesfulRun = runExpression(function); if (!succesfulRun) { ErrorResult result = currentPythonEngineAgros()->parseError(); qDebug() << "Function: " << result.error(); } // prepare keys double step = (to - from) / (count - 1); QString keysVector = "["; for (int i = 0; i < count; i++) { double key = from + i * step; keys->append(key); if (i == 0) keysVector += QString("%1").arg(key + EPS_ZERO); else if (i == (count - 1)) keysVector += QString(", %1]").arg(key - EPS_ZERO); else keysVector += QString(", %1").arg(key); } // run expression runExpression(QString("agros2d_material_values = agros2d_material_eval(%1)").arg(keysVector)); // extract values PyObject *result = PyDict_GetItemString(m_dict, "agros2d_material_values"); if (result) { Py_INCREF(result); for (int i = 0; i < count; i++) values->append(PyFloat_AsDouble(PyList_GetItem(result, i))); Py_XDECREF(result); } // remove variables runExpression("del agros2d_material; del agros2d_material_values"); // error during execution if (keys->size() != values->size()) { keys->clear(); values->clear(); } }
void AgrosSolver::runScript() { // log stdout if (m_enableLog) m_log = new LogStdOut(); if (!QFile::exists(m_fileName)) { Agros2D::log()->printMessage(tr("Scripting Engine"), tr("Python script '%1' not found").arg(m_fileName)); QApplication::exit(-1); } QTime time; time.start(); // silent mode setSilentMode(true); connect(currentPythonEngineAgros(), SIGNAL(pythonShowMessage(QString)), this, SLOT(stdOut(QString))); connect(currentPythonEngineAgros(), SIGNAL(pythonShowHtml(QString)), this, SLOT(stdHtml(QString))); bool successfulRun= currentPythonEngineAgros()->runScript(readFileContent(m_fileName), m_fileName); if (successfulRun) { Agros2D::log()->printMessage(tr("Solver"), tr("Problem was solved in %1").arg(milisecondsToTime(time.elapsed()).toString("mm:ss.zzz"))); Agros2D::scene()->clear(); Agros2D::clear(); QApplication::exit(0); } else { ErrorResult result = currentPythonEngineAgros()->parseError(); Agros2D::log()->printMessage(tr("Scripting Engine"), tr("%1\nLine: %2\nStacktrace:\n%3\n"). arg(result.error()). arg(result.line()). arg(result.traceback())); QApplication::exit(-1); } }