$\mathcal{H}(2,1^6)$ Extra Branching Occurs Over Two Points

This notebook addresses the case where there is one simple zero over each of the four $2$-torsion points, and the two remaining simple zeros occur over one of the $2$-torsion points corresponding to $\{(0,0), (1,0)\}$ and the double zero occurs over one of the points in $\{(0,1), (1,1)\}$.

We recall that in $\mathcal{H}(2,1^6)$, $d_{opt} = 36$ and by the arrangement above, there is a $2$-torsion point in the boundary of each horizontal cylinder that has exactly one simple zero above it.

This case is representative of all other cases and NOT like the other case in this stratum. Due to the smaller file sizes, it is possible to perform the analysis piecemeal and store all intermediate data. We will not emphasize this point in any other stratum.

In [16]:
import re
from multiprocessing import Pool

Step 1

In [12]:
#These are the 1-Cylinder diagram lists from the strata H(1,1,1,1) and H(2,1,1)
#We copied them here rather than calling them from an external file

H1t4_cyl_diags = [[[[0,3,7,4,1,2,6,5],[0,3,6,4,1,2,7,5]]], [[[0,7,2,1,6,4,5,3],[0,6,7,5,2,1,4,3]]], 
                  [[[0,7,5,1,3,2,4,6],[0,1,4,7,3,6,5,2]]], [[[0,7,5,2,3,4,6,1],[0,2,4,7,6,5,3,1]]]]

H2_1_1_cyl_diags = [[[[0, 2, 1, 6, 4, 5, 3], [0, 6, 5, 2, 1, 4, 3]]], 
                    [[[0, 2, 5, 1, 3, 6, 4], [0, 2, 6, 5, 1, 3, 4]]], 
                    [[[0, 2, 5, 3, 1, 6, 4], [0, 2, 6, 3, 1, 5, 4]]], 
                    [[[0, 6, 2, 3, 4, 5, 1], [0, 2, 4, 6, 5, 3, 1]]], 
                    [[[0, 6, 4, 1, 2, 3, 5], [0, 1, 3, 6, 5, 4, 2]]]]

#This loads all of the functions for processing cylinder diagrams

%run ./ST5_fcns/cyl_diag_fcns.ipynb

H2_1_1_vertex_data = strat_odd_sc(H2_1_1_cyl_diags)

H1t4_vertex_data = strat_odd_sc(H1t4_cyl_diags)

We recall that in the strata $\mathcal{H}(2,1,1)$ and $\mathcal{H}(1^4)$, there are exactly $7$ and $8$ horizontal saddle connections, respectively. Therefore, we consider partitions of $72$ into $7$ and $8$ positive integers.

Among partitions of $72$ into $7$ numbers the minimum of the maximum numbers among all partitions is given by $\lceil 2d_{opt}/7 \rceil = 11$.

Among partitions of $72$ into $8$ numbers the minimum of the maximum numbers among all partitions is given by $\lceil 2d_{opt}/8 \rceil= 10$.

Solving $72 - 2(10) - 2t_0 \geq 0$ implies that the largest value of $t_0$ is $26$.

Solving $72 - 2s_0 - 2(11) \geq 0$ implies that the largest value of $s_0$ is $25$.

In summary:

$$\mathcal{H}(1^4): 10 \leq s_0 \leq 25$$

$$\mathcal{H}(2,1,1): 11 \leq t_0 \leq 26$$

Step 2

In [13]:
#This loads all of the standard partition functions needed for nearly every case
#This includes the partition evaluate function

%run ./ST5_fcns/partition_functions.ipynb

if False:
    create_sc_partition_file(t_tuple_begin = (), part_length = 7, t0_range = range(11,27), d_opt = 36, 
                             filename_root = 'ST5_data//H_2_1t6//2_branch_point//partitions//H2_1_1_part')

if False:
    create_sc_partition_file(t_tuple_begin = (), part_length = 8, t0_range = range(10,26), d_opt = 36, 
                             filename_root = 'ST5_data//H_2_1t6//2_branch_point//partitions//H1t4_part')

#Load the partitions

if False:
    with open('ST5_data//H_2_1t6//2_branch_point//partitions//H1t4_part', 'r') as file:
        H1t4_part = eval_part(file.read())

if False:
    with open('ST5_data//H_2_1t6//2_branch_point//partitions//H2_1_1_part', 'r') as file:
        H2_1_1_part = eval_part(file.read())

Step 3

In [14]:
#This loads all of the align_list functions needed for nearly every case
#This includes the align_list evaluate function

%run ./ST5_fcns/align_list_fcns.ipynb

if False:
    for s in range(11,27):
        align_list_write_file(H2_1_1_part, H2_1_1_vertex_data, 
                              'ST5_data//H_2_1t6//2_branch_point//align_list//H2_1_1_align_list', 
                              t0 = s)

if False:
    for t in range(10,26):
        align_list_write_file(H1t4_part, H1t4_vertex_data, 
                              'ST5_data//H_2_1t6//2_branch_point//align_list//H1t4_align_list', 
                              t0 = t)

Step 4

In [30]:
#This loads all of the visible_align_list functions needed for nearly every case

%run ./ST5_fcns/align_list_visible_fcns.ipynb


if False:
    generate_all_align_list_visible_files(range(11,27), range(10,26), 36, 
                                          'ST5_data//H_2_1t6//2_branch_point//', 
                                          'align_list//H1t4_align_list_', 
                                          'align_list_visible//H1t4_align_list_')

if False:
    generate_all_align_list_visible_files(range(10,26), range(11,27), 36, 
                                          'ST5_data//H_2_1t6//2_branch_point//', 
                                          'align_list//H2_1_1_align_list_', 'align_list_visible//H2_1_1_align_list_')

#Alternatively, this can be run with pool to take advantage of multiple processors
#Change this to True to print
print_pool_instructions(False)

def generate_align_list_visible_pool_s(item): 
    return generate_align_list_visible(item, 36, 'ST5_data//H_2_1t6//2_branch_point//', 
                                       'align_list//H1t4_align_list_', 
                                       'align_list_visible//H1t4_align_list_')

if False:
    pool = Pool(processes=2)
    pool.map(generate_align_list_visible_pool_s, 
             align_visible_to_make_list(range(11,27), range(10,26), 36, 
                                        'ST5_data//H_2_1t6//2_branch_point//align_list_visible//H1t4_align_list_'))


def generate_align_list_visible_pool_t(item): 
    return generate_align_list_visible(item, 36, 'ST5_data//H_2_1t6//2_branch_point//', 
                                       'align_list//H2_1_1_align_list_', 
                                       'align_list_visible//H2_1_1_align_list_')

if False:
    pool = Pool(processes=12)
    pool.map(generate_align_list_visible_pool_t, 
             align_visible_to_make_list(range(10,26), range(11,27), 36, 
                                        'ST5_data//H_2_1t6//2_branch_point//align_list_visible//H2_1_1_align_list_'))

Step 5

In [35]:
#At this point, none of the files above need to be loaded for this to run.
#Once the files above are generated, the file sizes are small enough that these can be loaded on the fly.

#This loads all of the visible_align_list functions needed for nearly every case

%run ./ST5_fcns/combine_align_list_visible_fcns.ipynb

if False:
    combine_align_list_visible_write_file(s_range = range(11,27), 
                                          s_filename_root = 'align_list_visible//H2_1_1_align_list_', 
                                          t_range = range(10,26), 
                                          t_filename_root = 'align_list_visible//H1t4_align_list_',
                                          d_opt = 36, 
                                          root_dir = 'ST5_data//H_2_1t6//2_branch_point//')

Step 6

In [1]:
#This loads all of the vertical permutation check functions needed for nearly every case
#This function can be run once admissible_list is written and without needing to load any other file

%run ./ST5_fcns/vert_perm_check_fcns.ipynb

#The following line checks that one of the vertical permutations has the correct length of 2*d_opt

if True:
    vert_perm_check_file(36, 'ST5_data//H_2_1t6//2_branch_point//')
admissible_list read with 135533 candidates
admissible_list_vert_perm_check written with 636 elements
In [2]:
#This checks that all (both) of the vertical permutations have the correct length of 2*d_opt

if True:
    all_vert_perm_check_file(36, 'ST5_data//H_2_1t6//2_branch_point//')
admissible_list_vert_perm_check read with 636 candidates
admissible_list_all_vert_perm_check written with 263 elements

Step 7

In [10]:
%run ./ST5_fcns/slope_test_fcn.ipynb

if True:
    final_list = slope_test(36, 'ST5_data//H_2_1t6//2_branch_point//')
admissible_list_all_vert_perm_check read with 263 candidates
vert_perm_total_1 produced with 17 elements
vert_perm_total_2 produced with 0 elements
All possibilities have been excluded