def main() -> None: """The big enchilada.""" blocks = [] args = parse_args(sys.argv[1:]) number_of_backwards_trends = 0 for _ in range(args.trials): # generate a random *single* trend of length args.length seq = random_block(args.length, random.gauss, 0, 1) blocks = decompose_into_blocks(seq) block = rotate_to_single_block(blocks)[0] # and decompose it in the opposite direction reverse_blocks = decompose_into_blocks(block, decreasing_trend) number_of_backwards_trends += len(reverse_blocks) if args.verbose: print(f"seq: {seq}") print(f"blocks: {blocks}") print(f"trend: {block}") print(f"backwards trends: {reverse_blocks}") if args.verbose: print( f"length: {args.length}, " f" mean backwards trends: {number_of_backwards_trends/args.trials:2.2f}" ) else: print(f"{number_of_backwards_trends/args.trials:2.2f}")
def main(): """The big enchilada.""" args = parse_args(sys.argv[1:]) cumulative_numbreaks = 0 for _ in range(args.trials): seq = random_block(args.length, random.gauss, 0, 1) blocks = decompose_into_blocks(seq) cumulative_numbreaks += ( len(blocks) - 1) # blocks are the fence, breaks the fenceposts header = "average number of breaks:\t" if args.verbose else "" print(f"{header}{cumulative_numbreaks/args.trials}")
def main(): """The big enchilada.""" args = parse_args(sys.argv[1:]) length = args.length trials = args.trials numbreaks_dict = ( {} ) # numbreaks_dict{3} is the number of trials that produced 3 breaks (4 blocks) # -- useful for graphing numbreaks_list = ( [] ) # numbreaks_list[3] is the number of breaks produced in the fourth trial # -- useful for statistics for _ in range(trials): seq = random_block(length, random.gauss, 0, 1) blocks = decompose_into_blocks(seq) numbreaks = len(blocks) - 1 # blocks the fences, breaks the fenceposts numbreaks_list.append(numbreaks) if numbreaks not in numbreaks_dict: numbreaks_dict[numbreaks] = 0 numbreaks_dict[numbreaks] += 1 if args.verbose: try: print(f"mode(# of breaks), {statistics.mode(numbreaks_list)}") except Exception: print("no single mode") print(f"median(# of breaks), {statistics.median(numbreaks_list)}") print(f"mean(# of breaks), {statistics.mean(numbreaks_list)}") print(f"variance(# of breaks), {statistics.variance(numbreaks_list)}") print( "q ~ variance/mean = " + f"{statistics.variance(numbreaks_list)/statistics.mean(numbreaks_list)}" ) if args.verbose: print("\nnumber of breaks\t# of trials seen\n") for key in sorted(numbreaks_dict.keys()): print(f"{key:15}\t\t{numbreaks_dict[key]:10}")
def main() -> None: """The big enchilada.""" blocks = [] args = parse_args(sys.argv[1:]) for _ in range(args.trials): seq = random_block(args.length, random.gauss, 0, 1) blocks = decompose_into_blocks(seq) nbreaks = len(blocks) - 1 initial_breaks = nbreaks rotations = 0 while nbreaks: block_sizes = [len(block) for block in blocks] if args.verbose: print(f"{nbreaks} | {block_sizes}") blocks = rotate_blocks(blocks) rotations += 1 nbreaks = len(blocks) - 1 block_sizes = [len(block) for block in blocks] if args.verbose: print(f"{nbreaks} | {block_sizes}") print(f"initial breaks: {initial_breaks}\trotations: {rotations}") else: print(f"{initial_breaks}\t{rotations}")
def test_decompose_into_blocks() -> None: """Decomposes into blocks.""" seq = [1.0, 2.0, 3.0, 1.1] blocks = decompose_into_blocks(seq) assert [[1.0, 2.0, 3.0], [1.1]] == blocks
def main(): """The big enchilada.""" args = parse_args(sys.argv[1:]) seq = random_block(args.length, random.gauss, 0, 1) blocks = decompose_into_blocks(seq) show_blocks(blocks, args.verbose)