| 
					
					
						
							
						
					
					
				 | 
				@ -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) { | 
				 | 
				 | 
				        .def("row_iter", [](storm::storage::SparseMatrix<double>& matrix, row_index start, row_index end) { | 
			
		
		
	
		
			
				 | 
				 | 
				                return py::make_iterator(matrix.begin(start), matrix.end(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") | 
				 | 
				 | 
				            }, 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") | 
				 | 
				 | 
				    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) { | 
				 | 
				 | 
				        .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)); | 
				 | 
				 | 
				                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") | 
				 | 
				 | 
				            }, 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
 | 
				 | 
				 | 
				    // Rows
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |