67 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							67 lines
						
					
					
						
							2.3 KiB
						
					
					
				
								import stormpy.utility
							 | 
						|
								from . import storage
							 | 
						|
								from .storage import *
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								def build_sparse_matrix(array, row_group_indices=[]):
							 | 
						|
								    """
							 | 
						|
								    Build a sparse matrix from numpy array.
							 | 
						|
								
							 | 
						|
								    :param numpy array: The array.
							 | 
						|
								    :param List[double] row_group_indices: List containing the starting row of each row group in ascending order.
							 | 
						|
								    :return: Sparse matrix.
							 | 
						|
								    """
							 | 
						|
								
							 | 
						|
								    num_row = array.shape[0]
							 | 
						|
								    num_col = array.shape[1]
							 | 
						|
								
							 | 
						|
								    len_group_indices = len(row_group_indices)
							 | 
						|
								    if len_group_indices > 0:
							 | 
						|
								        builder = storage.SparseMatrixBuilder(rows=num_row, columns=num_col, has_custom_row_grouping=True,
							 | 
						|
								                                              row_groups=len_group_indices)
							 | 
						|
								    else:
							 | 
						|
								        builder = storage.SparseMatrixBuilder(rows=num_row, columns=num_col)
							 | 
						|
								
							 | 
						|
								    row_group_index = 0
							 | 
						|
								    for r in range(num_row):
							 | 
						|
								        # check whether to start a custom row group
							 | 
						|
								        if row_group_index < len_group_indices and r == row_group_indices[row_group_index]:
							 | 
						|
								            builder.new_row_group(r)
							 | 
						|
								            row_group_index += 1
							 | 
						|
								        # insert values of the current row
							 | 
						|
								        for c in range(num_col):
							 | 
						|
								            builder.add_next_value(r, c, array[r, c])
							 | 
						|
								
							 | 
						|
								    return builder.build()
							 | 
						|
								
							 | 
						|
								def build_parametric_sparse_matrix(array, row_group_indices=[]):
							 | 
						|
								    """
							 | 
						|
								    Build a sparse matrix from numpy array.
							 | 
						|
								
							 | 
						|
								    :param numpy array: The array.
							 | 
						|
								    :param List[double] row_group_indices: List containing the starting row of each row group in ascending order.
							 | 
						|
								    :return: Parametric sparse matrix.
							 | 
						|
								    """
							 | 
						|
								
							 | 
						|
								    num_row = array.shape[0]
							 | 
						|
								    num_col = array.shape[1]
							 | 
						|
								
							 | 
						|
								    len_group_indices = len(row_group_indices)
							 | 
						|
								    if len_group_indices > 0:
							 | 
						|
								        builder = storage.ParametricSparseMatrixBuilder(rows=num_row, columns=num_col, has_custom_row_grouping=True,
							 | 
						|
								                                              row_groups=len_group_indices)
							 | 
						|
								    else:
							 | 
						|
								        builder = storage.ParametricSparseMatrixBuilder(rows=num_row, columns=num_col)
							 | 
						|
								
							 | 
						|
								    row_group_index = 0
							 | 
						|
								    for r in range(num_row):
							 | 
						|
								        # check whether to start a custom row group
							 | 
						|
								        if row_group_index < len_group_indices and r == row_group_indices[row_group_index]:
							 | 
						|
								            builder.new_row_group(r)
							 | 
						|
								            row_group_index += 1
							 | 
						|
								        # insert values of the current row
							 | 
						|
								        for c in range(num_col):
							 | 
						|
								            builder.add_next_value(r, c, array[r, c])
							 | 
						|
								
							 | 
						|
								    return builder.build()
							 | 
						|
								
							 |