| 
					
					
						
							
						
					
					
				 | 
				@ -9,9 +9,6 @@ | 
			
		
		
	
		
			
				 | 
				 | 
				namespace storm { | 
				 | 
				 | 
				namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				    namespace storage { | 
				 | 
				 | 
				    namespace storage { | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        template<typename ValueType> | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        size_t DftJsonExporter<ValueType>::currentId = 0; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        template<typename ValueType> | 
				 | 
				 | 
				        template<typename ValueType> | 
			
		
		
	
		
			
				 | 
				 | 
				        void DftJsonExporter<ValueType>::toFile(storm::storage::DFT<ValueType> const& dft, std::string const& filepath) { | 
				 | 
				 | 
				        void DftJsonExporter<ValueType>::toFile(storm::storage::DFT<ValueType> const& dft, std::string const& filepath) { | 
			
		
		
	
		
			
				 | 
				 | 
				            std::ofstream ofs; | 
				 | 
				 | 
				            std::ofstream ofs; | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -31,46 +28,34 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        template<typename ValueType> | 
				 | 
				 | 
				        template<typename ValueType> | 
			
		
		
	
		
			
				 | 
				 | 
				        modernjson::json DftJsonExporter<ValueType>::translate(storm::storage::DFT<ValueType> const& dft) { | 
				 | 
				 | 
				        modernjson::json DftJsonExporter<ValueType>::translate(storm::storage::DFT<ValueType> const& dft) { | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json jsonDft; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            currentId = 0; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            // Nodes
 | 
				 | 
				 | 
				            // Nodes
 | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json jsonNodes; | 
				 | 
				 | 
				            modernjson::json jsonNodes; | 
			
		
		
	
		
			
				 | 
				 | 
				            for (size_t i = 0; i < dft.nrElements(); ++i) { | 
				 | 
				 | 
				            for (size_t i = 0; i < dft.nrElements(); ++i) { | 
			
		
		
	
		
			
				 | 
				 | 
				                modernjson::json jsonNode = translateNode(dft.getElement(i)); | 
				 | 
				 | 
				                modernjson::json jsonNode = translateNode(dft.getElement(i)); | 
			
		
		
	
		
			
				 | 
				 | 
				                jsonDft.push_back(jsonNode); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            // Edges
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json jsonEdges; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            for (size_t i = 0; i < dft.nrElements(); ++i) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                if (dft.isGate(i)) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::shared_ptr<DFTGate<ValueType> const> gate = dft.getGate(i); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (size_t index = 0; index < gate->nrChildren(); ++index) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        DFTElementPointer child = gate->children()[index]; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        modernjson::json jsonEdge = translateEdge(gate, child, index); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        jsonDft.push_back(jsonEdge); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                jsonNodes.push_back(jsonNode); | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            modernjson::json jsonDft; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            jsonDft["toplevel"] = std::to_string(dft.getTopLevelIndex()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            jsonDft["nodes"] = jsonNodes; | 
			
		
		
	
		
			
				 | 
				 | 
				            return jsonDft; | 
				 | 
				 | 
				            return jsonDft; | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        template<typename ValueType> | 
				 | 
				 | 
				        template<typename ValueType> | 
			
		
		
	
		
			
				 | 
				 | 
				        modernjson::json DftJsonExporter<ValueType>::translateNode(DFTElementCPointer const& element) { | 
				 | 
				 | 
				        modernjson::json DftJsonExporter<ValueType>::translateNode(DFTElementCPointer const& element) { | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json nodeData; | 
				 | 
				 | 
				            modernjson::json nodeData; | 
			
		
		
	
		
			
				 | 
				 | 
				            nodeData["id"] = element->id(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            ++currentId; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            STORM_LOG_ASSERT(element->id() == currentId-1, "Ids do not correspond"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            nodeData["id"] = std::to_string(element->id()); | 
			
		
		
	
		
			
				 | 
				 | 
				            nodeData["name"] = element->name(); | 
				 | 
				 | 
				            nodeData["name"] = element->name(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            std::string type = storm::storage::toString(element->type()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            std::transform(type.begin(), type.end(), type.begin(), ::tolower); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            nodeData["type"] = type; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            if (element->isGate()) { | 
				 | 
				 | 
				            if (element->isGate()) { | 
			
		
		
	
		
			
				 | 
				 | 
				                // Set children for gate
 | 
				 | 
				 | 
				                // Set children for gate
 | 
			
		
		
	
		
			
				 | 
				 | 
				                std::shared_ptr<DFTGate<ValueType> const> gate = std::static_pointer_cast<DFTGate<ValueType> const>(element); | 
				 | 
				 | 
				                std::shared_ptr<DFTGate<ValueType> const> gate = std::static_pointer_cast<DFTGate<ValueType> const>(element); | 
			
		
		
	
		
			
				 | 
				 | 
				                std::vector<size_t> children; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                std::vector<std::string> children; | 
			
		
		
	
		
			
				 | 
				 | 
				                for (DFTElementPointer const& child : gate->children()) { | 
				 | 
				 | 
				                for (DFTElementPointer const& child : gate->children()) { | 
			
		
		
	
		
			
				 | 
				 | 
				                    children.push_back(child->id()); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    children.push_back(std::to_string(child->id())); | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				                } | 
			
		
		
	
		
			
				 | 
				 | 
				                nodeData["children"] = children; | 
				 | 
				 | 
				                nodeData["children"] = children; | 
			
		
		
	
		
			
				 | 
				 | 
				            } else if (element->isBasicElement()) { | 
				 | 
				 | 
				            } else if (element->isBasicElement()) { | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -86,39 +71,14 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json jsonNode; | 
				 | 
				 | 
				            modernjson::json jsonNode; | 
			
		
		
	
		
			
				 | 
				 | 
				            jsonNode["data"] = nodeData; | 
				 | 
				 | 
				            jsonNode["data"] = nodeData; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            jsonNode["group"] = "nodes"; | 
				 | 
				 | 
				            jsonNode["group"] = "nodes"; | 
			
		
		
	
		
			
				 | 
				 | 
				            std::string type = storm::storage::toString(element->type()); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            std::transform(type.begin(), type.end(), type.begin(), ::tolower); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            jsonNode["classes"] = type; | 
				 | 
				 | 
				            jsonNode["classes"] = type; | 
			
		
		
	
		
			
				 | 
				 | 
				            return jsonNode; | 
				 | 
				 | 
				            return jsonNode; | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        template<typename ValueType> | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        modernjson::json DftJsonExporter<ValueType>::translateEdge(std::shared_ptr<DFTGate<ValueType> const> const& gate, DFTElementCPointer const& child, size_t index) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json nodeData; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            std::stringstream stream; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            stream << gate->id() << "e" << child->id(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            nodeData["id"] = stream.str(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            ++currentId; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            nodeData["source"] = gate->id(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            nodeData["target"] = child->id(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            nodeData["index"] = index; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            modernjson::json jsonNode; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            jsonNode["data"] = nodeData; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            jsonNode["group"] = "edges"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            jsonNode["classes"] = ""; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            return jsonNode; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        // Explicitly instantiate the class.
 | 
				 | 
				 | 
				        // Explicitly instantiate the class.
 | 
			
		
		
	
		
			
				 | 
				 | 
				        template class DftJsonExporter<double>; | 
				 | 
				 | 
				        template class DftJsonExporter<double>; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				#ifdef STORM_HAVE_CARL
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        template class DftJsonExporter<storm::RationalFunction>; | 
				 | 
				 | 
				        template class DftJsonExporter<storm::RationalFunction>; | 
			
		
		
	
		
			
				 | 
				 | 
				#endif
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				    } | 
				 | 
				 | 
				    } | 
			
		
		
	
		
			
				 | 
				 | 
				} | 
				 | 
				 | 
				} |