| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -54,6 +54,22 @@ void define_sparse_matrix(py::module& m) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("row_iter", [](storm::storage::SparseMatrix<double>& matrix, row_index start, row_index end) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return py::make_iterator(matrix.begin(start), matrix.end(end)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }, py::keep_alive<0, 1>() /* keep object alive while iterator exists */, py::arg("row_start"), py::arg("row_end"), "Get iterator from start to end") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // (partial) container interface to allow e.g. matrix[7:9]
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("__len__", &storm::storage::SparseMatrix<double>::getRowCount) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("__getitem__", [](storm::storage::SparseMatrix<double>& matrix, entry_index i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (i >= matrix.getRowCount()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                throw py::index_error(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return matrix.getRows(i, i+1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, py::return_value_policy::reference, py::keep_alive<1, 0>()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("__getitem__", [](storm::storage::SparseMatrix<double>& matrix, py::slice slice) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                size_t start, stop, step, slice_length; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!slice.compute(matrix.getRowCount(), &start, &stop, &step, &slice_length)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    throw py::error_already_set(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (step != 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    throw py::value_error(); // not supported
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return matrix.getRows(start, stop); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }, py::return_value_policy::reference, py::keep_alive<1, 0>()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    py::class_<storm::storage::SparseMatrix<storm::RationalFunction>>(m, "ParametricSparseMatrix", "Parametric sparse matrix") | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -83,6 +99,22 @@ void define_sparse_matrix(py::module& m) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("row_iter", [](storm::storage::SparseMatrix<storm::RationalFunction>& matrix, parametric_row_index start, parametric_row_index end) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return py::make_iterator(matrix.begin(start), matrix.end(end)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }, py::keep_alive<0, 1>() /* keep object alive while iterator exists */, py::arg("row_start"), py::arg("row_end"), "Get iterator from start to end") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // (partial) container interface to allow e.g. matrix[7:9]
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("__len__", &storm::storage::SparseMatrix<storm::RationalFunction>::getRowCount) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("__getitem__", [](storm::storage::SparseMatrix<storm::RationalFunction>& matrix, parametric_entry_index i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (i >= matrix.getRowCount()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                throw py::index_error(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return matrix.getRows(i, i+1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, py::return_value_policy::reference, py::keep_alive<1, 0>()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .def("__getitem__", [](storm::storage::SparseMatrix<storm::RationalFunction>& matrix, py::slice slice) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            size_t start, stop, step, slice_length; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!slice.compute(matrix.getRowCount(), &start, &stop, &step, &slice_length)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                throw py::error_already_set(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (step != 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                throw py::value_error(); // not supported
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return matrix.getRows(start, stop); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, py::return_value_policy::reference, py::keep_alive<1, 0>()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Rows
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |