示例#1
0
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}")
示例#2
0
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}")
示例#3
0
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}")
示例#4
0
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}")
示例#5
0
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
示例#6
0
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)