message(WARNING"There are some known issues compiling CUDD on some setups. We implemented a workaround that mostly works, but if you still have problems compiling CUDD, especially if you do not use the default compiler of your system, please contact the Storm developers.")
STORM_LOG_THROW(storm::settings::getModule<storm::settings::modules::FaultTreeSettings>().isAddLabelsClaiming(),storm::exceptions::InvalidArgumentException,"Claiming labels will not be exported but are required for label '"<<label<<"'. Try setting --labels-claiming.");
STORM_LOG_THROW(false,storm::exceptions::InvalidArgumentException,"Program still contains these undefined constants: "+stream.str());
}
STORM_LOG_THROW(!program.hasUnboundedVariables(),storm::exceptions::InvalidArgumentException,"Program contains unbounded variables which is not supported by the DD engine.");
STORM_LOG_TRACE("Building representation of program:"<<std::endl<<program<<std::endl);
STORM_LOG_THROW(this->model.getGlobalVariables().hasVariable(expressionOrLabelAndBool.first.getLabel()),storm::exceptions::InvalidSettingsException,"Terminal states refer to illegal label '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
@ -109,7 +108,7 @@ namespace storm {
STORM_LOG_THROW(variable.isBooleanVariable(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-boolean variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(variable.isTransient(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-transient variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
// If we reach this point, it means that the variable is unbounded.
// Lets check for potential overflows.
STORM_LOG_THROW(lowerBound<=upperBound,storm::exceptions::WrongFormatException,"Lower bound must not be above upper bound. Has there been an integer over-/underflow?");
// By choice of the lower/upper bound, the number of reserved bits must coincide with the bitwidth
STORM_LOG_ASSERT(reservedBitsForUnboundedVariables==static_cast<uint64_t>(std::ceil(std::log2(upperBound-lowerBound+1))),"Unexpected bitwidth for unbounded variable.");
STORM_LOG_THROW(!automaton.getVariables().containsNonTransientRealVariables(),storm::exceptions::InvalidArgumentException,"Cannot build model from JANI model that contains non-transient real variables in automaton '"<<automaton.getName()<<"'.");
}
//
// for (auto const& variable : model.getGlobalVariables().getBooleanVariables()) {
STORM_LOG_ASSERT(dimensionCount>0,"Invoked MemoryStateManager with zero dimension count.");
STORM_LOG_ASSERT(dimensions.size()==dimensionCount,"Invalid size of given bitset.");
if(value){
for(autoconst&d:dimensions){
for(autod:dimensions){
STORM_LOG_ASSERT(((dimensionBitMask<<d)&dimensionsWithoutMemoryMask)==0,"Tried to set a dimension to 'relevant'-memory state but the dimension is assumed to have no memory.");
state|=(dimensionBitMask<<d);
}
}else{
for(autoconst&d:dimensions){
for(autod:dimensions){
STORM_LOG_ASSERT(((dimensionBitMask<<d)&dimensionsWithoutMemoryMask)==0,"Tried to set a dimension to 'unrelevant'-memory state but the dimension is assumed to have no memory.");
// Some solvers (like glpk) don't support variables with bounds [x,x]. We therefore just use a constant instead. This should be more efficient anyways.
STORM_LOG_ASSERT(lowerBound<=upperBound,"Lower Bound at row group "<<rowGroup<<" is "<<lowerBound<<" which exceeds the upper bound "<<upperBound<<".");
STORM_LOG_ASSERT(hasLowerBoundExpression(),"Tried to get the lower bound expression of variable '"<<this->getExpressionVariable().getName()<<"' which is not bounded from below.");
STORM_LOG_ASSERT(hasUpperBoundExpression(),"Tried to get the lower bound expression of variable '"<<this->getExpressionVariable().getName()<<"' which is not bounded from above.");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": lower bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": upper bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
}
}
if(variable.hasInitialValue()){
STORM_LOG_THROW(!this->hasInitialConstruct(),storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": illegal to specify initial value if an initial construct is present.");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": lower bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": upper bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
}
}
if(variable.hasInitialValue()){
STORM_LOG_THROW(!this->hasInitialConstruct(),storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": illegal to specify initial value if an initial construct is present.");