コード例 #1
0
   Matrix<double> GeneralConstraint::getCovariance( const VariableSet& varSet )
   {
      Matrix<double> covariance(varSet.size(),varSet.size(),0.0);
      
      int i(0);
      for(VariableSet::const_iterator iti=varSet.begin();
         iti!=varSet.end();
         ++iti)
      {
         int j(0);
         
         for(VariableSet::const_iterator itj=varSet.begin();
            itj!=varSet.end();
            ++itj)
         {
            covariance[i][j] = solver.getCovariance(*iti,*itj);
            j++;
         }

         i++;
      }

      return covariance;

   }  // End of method 'GeneralConstraint::getCovariance(...'
コード例 #2
0
   VariableSet GeneralConstraint::intersectionVariables(const VariableSet& vs1,
                                                        const VariableSet& vs2 )
   {
      VariableSet tempSet;
      for(VariableSet::const_iterator it=vs1.begin();
         it!=vs1.end();
         ++it)
      {
         VariableSet::const_iterator it2 = vs2.find(*it);
         if(it2!=vs2.end()) tempSet.insert(*it);
      }

      return tempSet;

   }  // End of method 'GeneralConstraint::intersectionVariables()'
コード例 #3
0
ファイル: imperative_checks.cpp プロジェクト: 8l/insieme
OptionalMessageList UndeclaredVariableCheck::visitLambdaDefinition(const LambdaDefinitionAddress& lambdaDef) {

	OptionalMessageList res;

	VariableSet recFunctions;
	for_each(lambdaDef.getAddressedNode()->getDefinitions(), [&recFunctions](const LambdaBindingPtr& cur) {
		recFunctions.insert(cur->getVariable());
	});

	for_each(lambdaDef->getDefinitions(), [&](const LambdaBindingAddress& cur) {

		// assemble set of defined variables
		VariableSet declared;

		// add recursive function variables
		declared.insert(recFunctions.begin(), recFunctions.end());

		// add parameters
		auto paramList = cur.getAddressedNode()->getLambda()->getParameterList();
		declared.insert(paramList.begin(), paramList.end());

		// run check on body ...
		VarDeclarationCheck check(declared);

		// trigger check
		addAll(res, conductCheck(check, cur->getLambda()));
	});

	return res;
}
コード例 #4
0
   void GeneralConstraint::stackVariables( VariableList& varList,
                                           const VariableSet& varSet )
   {
      for(VariableSet::const_iterator it= varSet.begin();
          it!=varSet.end();
          ++it)
      {
         varList.push_back(*it);
      }

   }  // End of method 'GeneralConstraint::stackVariables()'
コード例 #5
0
   VariableSet GeneralConstraint::unionVariables( const VariableSet& vs1,
                                                  const VariableSet& vs2 )
   {
      VariableSet tempSet(vs1);
      for(VariableSet::const_iterator it=vs2.begin();
          it!=vs2.end();
          ++it)
      {
         tempSet.insert(*it);
      }

      return tempSet;

   }  // End of method 'GeneralConstraint::unionVariables()'
コード例 #6
0
   VariableSet GeneralConstraint::getVariables( const SatID& sat,
                                                const TypeID& type )
   {
      VariableSet vset;

      VariableSet varSet = getVariables(sat);
      for(VariableSet::iterator itv=varSet.begin();
         itv!=varSet.end();
         ++itv)
      {
         if( (itv->getType()==type) ) vset.insert(*itv);
      }

      return vset;

   }  // End of method 'GeneralConstraint::getVariables(const SatID& sat,...)'
コード例 #7
0
   Vector<double> GeneralConstraint::getSolution( const VariableSet& varSet )
   {
      Vector<double> solution(varSet.size(),0.0);
      
      int i(0);
      for(VariableSet::const_iterator it=varSet.begin();
         it!=varSet.end();
         ++it)
      {
         solution[i] = solver.getSolution(*it);

         i++;
      }

      return solution;

   }  // End of method 'GeneralConstraint::getSolution(...'
コード例 #8
0
   VariableSet GeneralConstraint::getVariables( const SatID& sat,
                                                const TypeIDSet& typeSet )
   {
      VariableSet vset;

      VariableSet varSet = getVariables(sat);
      for(VariableSet::iterator itv=varSet.begin();
         itv!=varSet.end();
         ++itv)
      {
         TypeIDSet::const_iterator it = typeSet.find(itv->getType());
         if( (it!=typeSet.end()) ) vset.insert(*itv);
      }

      return vset;

   }  // End of method 'GeneralConstraint::getVariables(...'
コード例 #9
0
ファイル: Equation.hpp プロジェクト: JC5005/GPSTk
 inline std::string asString(const VariableSet& vset)
 {
    std::ostringstream oss;
    for( VariableSet::const_iterator it = vset.begin();
         it != vset.end();
         ++it )
    {
       oss << it->getType() << "   "
           << it->getSource() << "   "
           << it->getSatellite() << "   "
           << it->getTypeIndexed() << " "
           << it->getSourceIndexed() << " "
           << it->getSatIndexed()<< std::endl;
    }
    
    return oss.str();
 }
コード例 #10
0
   VariableSet GeneralConstraint::getVariables( const SourceID& source, 
                                                const SatIDSet& satSet, 
                                                const TypeID& type )
   {
      VariableSet vset;

      VariableSet varSet = getVariables(source,type);
      for(VariableSet::iterator itv=varSet.begin();
         itv!=varSet.end();
         ++itv)
      {
         SatIDSet::const_iterator it = satSet.find(itv->getSatellite());
         if( it != satSet.end() ) vset.insert(*itv);
      }

      return vset;

   }  // End of method 'GeneralConstraint::getVariables(...'
コード例 #11
0
ファイル: Variable.cpp プロジェクト: iangodin/constructor
void merge( VariableSet &vs, const VariableSet &other )
{
	if ( vs.empty() )
		vs = other;
	else
	{
		for ( auto i: other )
		{
			auto cur = vs.find( i.first );
			if ( cur == vs.end() )
			{
				vs.emplace( std::make_pair( i.first, i.second ) );
			}
			else
				cur->second.merge( i.second );
		}
	}
}
コード例 #12
0
   VariableSet GeneralConstraint::getVariables( const SourceIDSet& sourceSet,
                                                const TypeID& type )
   {
      VariableSet vset;
      
      VariableSet varSet = getVariables(sourceSet);
      for(VariableSet::iterator itv=varSet.begin();
         itv!=varSet.end();
         ++itv)
      {
         if( (itv->getType()==type) && itv->getSourceIndexed() )
         { 
            vset.insert(*itv);
         } 
      }

      return vset;

   }  // End of method 'GeneralConstraint::getVariables(...'
コード例 #13
0
   Variable GeneralConstraint::getVariable( const SourceID& source, 
                                            const SatID& sat, 
                                            const TypeID& type )
   {
      VariableSet vset;

      VariableSet varSet = getVariables(source,type);
      for(VariableSet::iterator itv=varSet.begin();
         itv!=varSet.end();
         ++itv)
      {
         if( itv->getType()==type ) return (*itv);
      }

      Exception e("The desirable variable not exist int the solver.");
      GPSTK_THROW(e);

      return Variable();

   }  // End of method 'GeneralConstraint::getVariables(...'
コード例 #14
0
   GeneralConstraint& GeneralConstraint::changeState(
                                               const VariableList& varList,
                                               const Matrix<double>& convertMat)
   {
      VariableSet allVariable = getCurrentUnknowns();

      // check input 
      int varNum(0);
      for(VariableList::const_iterator it = varList.begin();
          it!=varList.end();
          ++it)
      {
         if(allVariable.find(*it)==allVariable.end())
         {
            Exception e("The variable doesn't exist in the solver.");
            GPSTK_THROW(e);
         }

         varNum++;
      }
      
      if(varNum!=convertMat.rows() || varNum!=convertMat.cols())
      {
         Exception e("The size of input doesn't match.");
         GPSTK_THROW(e);
      }

      const int numOfVar(varNum);

      Vector<double> vectorOfSolution(numOfVar,0.0);
      Matrix<double> matrixOfCovariance(numOfVar,numOfVar,0.0);

      int i = 0;
      for(VariableList::const_iterator iti = varList.begin();
          iti != varList.end();
          ++iti)
      {
         vectorOfSolution(i) = solver.getSolution(*iti);

         VariableList tempList(varList);

         int j(0);
         for(VariableList::iterator itj = tempList.begin();
            itj!=tempList.end();
            ++itj)
         {
            matrixOfCovariance(i,j) = solver.getCovariance(*iti,*itj);

            j++;
         }

         i++;
      }

      Vector<double> solution = convertMat*vectorOfSolution;
      Matrix<double> covariance = convertMat*matrixOfCovariance
                                 *transpose(convertMat);

      i = 0;
      for(VariableList::const_iterator iti=varList.begin();
         iti!=varList.end();
         ++iti)
      {
         setSolution(*iti,solution(i));

         std::list<Variable> tempList(varList);

         int j(0);
         for(std::list<Variable>::iterator itj = tempList.begin();
            itj!=tempList.end();
            ++itj)
         {
            setCovariance(*iti,*itj,covariance(i,j));

            j++;
         }

         i++;
      }
      
      return (*this);

   }  // Ebd if method 'GeneralConstraint::changeState()'
コード例 #15
0
ファイル: Stepper.cpp プロジェクト: ecell/spatiocyte
void Stepper::unregisterProcess( Process* aProcess )
{ 
    ProcessVector::iterator ip( std::find( theProcessVector.begin(), 
                                    theProcessVector.end(),
                                    aProcess ) );
    
    if( ip == theProcessVector.end() )
    {
        THROW_EXCEPTION_INSIDE( NotFound,
                                asString() + ": Failed to dissociate [" +
                                aProcess->asString() + "] (no such Process is "
                                "associated to this stepper)" );
    }

    typedef std::set< Variable* > VariableSet;
    VariableSet aVarSet;
    Process::VariableReferenceVector const& aVarRefVector(
        aProcess->getVariableReferenceVector() );
    std::transform( aVarRefVector.begin(), aVarRefVector.end(),
                    inserter( aVarSet, aVarSet.begin() ),
                    std::mem_fun_ref( &VariableReference::getVariable ) );

    VariableVector aNewVector;
    VariableVector::size_type aReadWriteVariableOffset,
                             aReadOnlyVariableOffset;

    for( VariableVector::iterator i( theVariableVector.begin() ),
                                  e( theVariableVector.begin()
                                     + theReadWriteVariableOffset );
         i != e; ++i )
    {
        VariableSet::iterator j( aVarSet.find( *i ) );
        if ( j != aVarSet.end() )
            aVarSet.erase( j );
        else
            aNewVector.push_back( *i );
    }

    aReadWriteVariableOffset = aNewVector.size();

    for( VariableVector::iterator i( theVariableVector.begin()
                                     + theReadWriteVariableOffset ),
                                  e( theVariableVector.begin()
                                     + theReadOnlyVariableOffset );
         i != e; ++i )
    {
        VariableSet::iterator j( aVarSet.find( *i ) );
        if ( j != aVarSet.end() )
            aVarSet.erase( j );
        else
            aNewVector.push_back( *i );
    }

    aReadOnlyVariableOffset = aNewVector.size();

    for( VariableVector::iterator i( theVariableVector.begin()
                                     + theReadOnlyVariableOffset ),
                                  e( theVariableVector.end() );
         i != e; ++i )
    {
        VariableSet::iterator j( aVarSet.find( *i ) );
        if ( j != aVarSet.end() )
            aVarSet.erase( j );
        else
            aNewVector.push_back( *i );
    }

    theVariableVector.swap( aNewVector );
    theReadWriteVariableOffset = aReadWriteVariableOffset;
    theReadOnlyVariableOffset = aReadOnlyVariableOffset;

    theProcessVector.erase( ip );
}