#!/usr/bin/python3 -u import sys; import argparse; from ctypes import *; import numpy as np; aparser = argparse.ArgumentParser(); aparser.add_argument( "--count", type=int, required=True, help="Amount of number combinations to generate" ); aparser.add_argument( "--num-count", type=int, required=True, help="Amount of numbers in each combination generated" ); aparser.add_argument( "--min", type=int, required=True, help="Minimum number" ); aparser.add_argument( "--max", type=int, required=True, help="Maximum number" ); args = aparser.parse_args(); del aparser; if ( args.max <= args.min ): del args; print( "Error: maximum number must be more than minimum" ); sys.exit( -1 ); libxorshift = CDLL( "../build/libxorshift.so" ); libxorshift.initialize_states.restype = c_bool; libxorshift.get_uniform_uint.restype = c_uint; libxorshift.get_uniform_uint.argtypes = [c_uint, c_uint]; if ( libxorshift.initialize_states() is c_bool(False) ): print( "Error: failed to initialize RNG states" ); del libxorshift; sys.exit( -1 ); generated_combinations = []; generated_sum = 0; current_combination = []; gen_num = 0; for c_count in range( 0, args.count ): for bcount in range( 0, args.num_count ): gen_num = int( libxorshift.get_uniform_uint(c_uint(args.min), c_uint(args.max)) ); generated_sum += gen_num; current_combination.append( gen_num ); generated_combinations.append( current_combination ); current_combination = []; del current_combination, gen_num; print( "Statistical properties results" ); print( "-----" ); print( "Each combination's mean value" ); print( "-----" ); combination_str = None; for gen_combination in generated_combinations: combination_str = ", ".join( list(map(str, gen_combination)) ); print( f"Combination {combination_str} has mean {np.mean(gen_combination)}" ); del combination_str; print( "-----" ); print( "Overall statistical properties" ); print( "-----" ); print( f"Expected mean overall: {(args.max / 2) * args.num_count}" ); print( f"Actual overall mean: {generated_sum / args.count}" ); print( "-----" ); del generated_sum, generated_combinations; del libxorshift; del args; sys.exit( 0 );