X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fevalyfx%2FYACSEvalYFX.cxx;h=c27cc9a3b9cd71418c15db1b1bc9a44bb3933fa7;hb=92e92cf782eb143a7c6a78303b6dea78c890995b;hp=b3f425cd25df4534cbbb3dea872769b381d14ea8;hpb=f06dd3d96192c67111aba740e3da32c394b00ede;p=modules%2Fyacs.git diff --git a/src/evalyfx/YACSEvalYFX.cxx b/src/evalyfx/YACSEvalYFX.cxx index b3f425cd2..c27cc9a3b 100644 --- a/src/evalyfx/YACSEvalYFX.cxx +++ b/src/evalyfx/YACSEvalYFX.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2015 CEA/DEN, EDF R&D +// Copyright (C) 2012-2021 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -15,7 +15,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// +// // Author : Anthony Geay (EDF R&D) #include "YACSEvalYFX.hxx" @@ -37,16 +37,6 @@ #include -class MyAutoThreadSaver -{ -public: - MyAutoThreadSaver():_save(PyEval_SaveThread()) { } - ~MyAutoThreadSaver() { PyEval_RestoreThread(_save); } -private: - PyThreadState *_save; -}; - - YACSEvalYFX *YACSEvalYFX::BuildFromFile(const std::string& xmlOfScheme) { YACS::ENGINE::RuntimeSALOME::setRuntime(); @@ -70,11 +60,10 @@ std::vector< YACSEvalOutputPort * > YACSEvalYFX::getFreeOutputPorts() const return _pattern->getFreeOutputPorts(); } -void YACSEvalYFX::lockPortsForEvaluation(const std::vector< YACSEvalOutputPort * >& outputsOfInterest) +void YACSEvalYFX::lockPortsForEvaluation(const std::vector< YACSEvalInputPort * >& inputsOfInterest, const std::vector< YACSEvalOutputPort * >& outputsOfInterest) { - std::size_t sz(checkPortsForEvaluation(outputsOfInterest)); - _pattern->setOutPortsOfInterestForEvaluation(sz,outputsOfInterest); - _pattern->generateGraph(); + checkPortsForEvaluation(inputsOfInterest,outputsOfInterest); + _pattern->setOutPortsOfInterestForEvaluation(outputsOfInterest); } void YACSEvalYFX::unlockAll() @@ -91,6 +80,9 @@ bool YACSEvalYFX::isLocked() const return _pattern->isLocked(); } +/*! + * Caller is not responsible from returned pointer + */ YACSEvalListOfResources *YACSEvalYFX::giveResources() { return _pattern->giveResources(); @@ -98,27 +90,42 @@ YACSEvalListOfResources *YACSEvalYFX::giveResources() bool YACSEvalYFX::run(YACSEvalSession *session, int& nbOfBranches) { - YACSEvalListOfResources *rss(giveResources()); - if(!rss->isInteractive()) - throw YACS::Exception("YACSEvalYFX::run : not implemented yet for non interactive !"); - YACSEvalSession *mySession(session); - YACS::AutoCppPtr loc; + _pattern->generateGraph(); if(!session) { throw YACS::Exception("YACSEvalYFX::run : input session in null !"); - /*loc=new YACSEvalSession; - mySession=loc;*/ } + session->launch(); + YACSEvalListOfResources *rss(giveResources()); + rss->checkOKForRun(); + _pattern->assignRandomVarsInputs(); rss->apply(); nbOfBranches=_pattern->assignNbOfBranches(); - mySession->launch(); - YACS::ENGINE::Executor exe; - // - { - MyAutoThreadSaver locker; - exe.RunW(getUndergroundGeneratedGraph()); - } - return getUndergroundGeneratedGraph()->getState()==YACS::DONE; + return _pattern->go(_params,session); +} + +void YACSEvalYFX::registerObserver(YACSEvalObserver *observer) +{ + if(!_pattern) + throw YACS::Exception("YACSEvalYFX::registerObserver : no pattern !"); + _pattern->registerObserver(observer); +} + +YACSEvalObserver *YACSEvalYFX::getObserver() +{ + if(!_pattern) + throw YACS::Exception("YACSEvalYFX::getObserver : no pattern !"); + return _pattern->getObserver(); +} + +std::string YACSEvalYFX::getErrorDetailsInCaseOfFailure() const +{ + return _pattern->getErrorDetailsInCaseOfFailure(); +} + +std::string YACSEvalYFX::getStatusOfRunStr() const +{ + return _pattern->getStatusOfRunStr(); } std::vector YACSEvalYFX::getResults() const @@ -126,40 +133,44 @@ std::vector YACSEvalYFX::getResults() const return _pattern->getResults(); } +std::vector YACSEvalYFX::getResultsInCaseOfFailure(std::vector& passedIds) const +{ + return _pattern->getResultsInCaseOfFailure(passedIds); +} + YACS::ENGINE::Proc *YACSEvalYFX::getUndergroundGeneratedGraph() const { return _pattern->getUndergroundGeneratedGraph(); } +void YACSEvalYFX::setParallelizeStatus(bool newVal) +{ + _pattern->setParallelizeStatus(newVal); +} + +bool YACSEvalYFX::getParallelizeStatus() const +{ + return _pattern->getParallelizeStatus(); +} + YACSEvalYFX::YACSEvalYFX(YACS::ENGINE::Proc *scheme, bool ownScheme):_pattern(0) { - _pattern=YACSEvalYFXPattern::FindPatternFrom(scheme,ownScheme); + _pattern=YACSEvalYFXPattern::FindPatternFrom(this,scheme,ownScheme); } -std::size_t YACSEvalYFX::checkPortsForEvaluation(const std::vector< YACSEvalOutputPort * >& outputs) const +void YACSEvalYFX::checkPortsForEvaluation(const std::vector< YACSEvalInputPort * >& inputs, const std::vector< YACSEvalOutputPort * >& outputs) const { + std::set inputs2(inputs.begin(),inputs.end()); std::vector< YACSEvalInputPort * > allInputs(getFreeInputPorts()); std::vector< YACSEvalOutputPort * > allOutputs(getFreeOutputPorts()); - std::size_t sz(std::numeric_limits::max()); for(std::vector< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++) { - std::size_t mySz; - if(!(*it)->isOKForLock() && !(*it)->hasSequenceOfValuesToEval(mySz)) + if(inputs2.find(*it)==inputs2.end()) { - std::ostringstream oss; oss << "YACSEvalYFX::checkPortsForEvaluation : input port with name \"" << (*it)->getName() << "\" is not set properly !"; - throw YACS::Exception(oss.str()); - } - if((*it)->hasSequenceOfValuesToEval(mySz)) - { - if(sz==std::numeric_limits::max()) - sz=mySz; - else + if(!(*it)->isOKForLock()) { - if(sz!=mySz) - { - std::ostringstream oss; oss << "YACSEvalYFX::checkPortsForEvaluation : input port with name \"" << (*it)->getName() << "\" is declared as to be evaluated on array ! But size of array is not the same than the others !"; - throw YACS::Exception(oss.str()); - } + std::ostringstream oss; oss << "YACSEvalYFX::checkPortsForEvaluation : input port with name \"" << (*it)->getName() << "\" is not set properly !"; + throw YACS::Exception(oss.str()); } } } @@ -170,8 +181,10 @@ std::size_t YACSEvalYFX::checkPortsForEvaluation(const std::vector< YACSEvalOutp if(soutputs.size()!=outputs.size()) throw YACS::Exception("YACSEvalYFX::lockPortsForEvaluation : each elt in outputs must appear once !"); for(std::vector< YACSEvalInputPort * >::const_iterator it=allInputs.begin();it!=allInputs.end();it++) - (*it)->lock(); - return sz; + { + (*it)->declareRandomnessStatus(inputs2.find(*it)!=inputs2.end()); + (*it)->lock(); + } } YACSEvalYFX::~YACSEvalYFX()