@classmethod
    def _make_specification(cls):
        side = 1.0
        h = side * math.sin(math.pi / 3.0)
        d_s_partial2 = side * (1.0 - math.tan(math.pi / 6.0))
        d_corner_h = d_s_partial2 * math.cos(math.pi / 6.0)
        d_corner_v = d_s_partial2 * math.sin(math.pi / 6.0)
        d_i_partialv = side / math.sin(math.pi / 3.0)
        # component shape data
        # vertex calculations
        # shared vertical rails
        l_dmd_left_rail = 0.0
        l_dmd_mid_rail = 0.5 * side
        m_dmd_left_rail = side
        m_dmd_mleft_rail = side + d_corner_h
        m_dmd_mid_rail = side + h
        m_dmd_mright_rail = side + 2.0 * h - d_corner_h
        m_dmd_right_rail = side + 2.0 * h
        r_dmd_mid_rail = 1.5 * side + 2.0 * h
        # shared horizontal rails
        v_mid_rail = 0.0
        l_dmd_top_rail = -1.0 * h
        l_dmd_bottom_rail = -1.0 * l_dmd_top_rail
        m_dmd_top_rail = -0.5 * side
        m_dmd_bottom_rail = -1.0 * m_dmd_top_rail
        ear_v_mid_rail = -1.0 * (d_i_partialv + d_corner_v)
        top_rail = -1.0 * (h + side)
        bottom_rail = -1.0 * ear_v_mid_rail
        # points
        l_dmd_left_pt = (v_mid_rail, l_dmd_left_rail)
        l_dmd_top_pt = (l_dmd_top_rail, l_dmd_mid_rail)
        l_dmd_bottom_pt = (l_dmd_bottom_rail, l_dmd_mid_rail)
        l_ear_right_pt = (ear_v_mid_rail, m_dmd_mleft_rail)
        l_ear_top_pt = (top_rail, l_dmd_mid_rail)
        r_ear_left_pt = (ear_v_mid_rail, m_dmd_mright_rail)
        r_ear_top_pt = (top_rail, r_dmd_mid_rail)
        m_dmd_left_pt = (v_mid_rail, m_dmd_left_rail)
        m_dmd_top_pt = (m_dmd_top_rail, m_dmd_mid_rail)
        m_dmd_right_pt = (v_mid_rail, m_dmd_right_rail)
        m_dmd_bottom_pt = (m_dmd_bottom_rail, m_dmd_mid_rail)
        chin_left_pt = (bottom_rail, m_dmd_mleft_rail)
        chin_right_pt = (bottom_rail, m_dmd_mright_rail)
        r_dmd_top_pt = (l_dmd_top_rail, r_dmd_mid_rail)
        r_dmd_bottom_pt = (l_dmd_bottom_rail, r_dmd_mid_rail)
        # build components separately to avoid long lines
        c = {(0, 0): {'name': 'left ear',
                      'clockwise_edge_names': ('left', 'right', 'bottom'),
                      'edges': {(0, -1): {'name': 'left',
                                          'counter_vertex': l_dmd_top_pt},
                                (-2, 1): {'name': 'right',
                                          'counter_vertex': l_ear_top_pt},
                                (1, 0): {'name': 'bottom',
                                         'counter_vertex': l_ear_right_pt}}},
             (0, 2): {'name': 'right ear',
                      'clockwise_edge_names': ('left', 'right', 'bottom'),
                      'edges': {(-1, 2): {'name': 'left',
                                          'counter_vertex': r_ear_left_pt},
                                (0, 3): {'name': 'right',
                                         'counter_vertex': r_ear_top_pt},
                                (1, 2): {'name': 'bottom',
                                         'counter_vertex': r_dmd_top_pt}}},
             (0, 1): {'name': 'forehead',
                      'clockwise_edge_names': ('left', 'top', 'right'),
                      'edges': {(1, 0): {'name': 'left',
                                         'counter_vertex': m_dmd_top_pt},
                                (-1, 1): {'name': 'top',
                                          'counter_vertex': l_ear_right_pt},
                                (1, 2): {'name': 'right',
                                         'counter_vertex': r_ear_left_pt}}},
             (1, 0): {'name': 'left eye',
                      'clockwise_edge_names': ('top left', 'top right',
                                               'bottom right', 'bottom left'),
                      'edges': {(0, 0): {'name': 'top left',
                                         'counter_vertex': l_dmd_top_pt},
                                (0, 1): {'name': 'top right',
                                         'counter_vertex': l_ear_right_pt},
                                (1, 1): {'name': 'bottom right',
                                         'counter_vertex': m_dmd_top_pt},
                                (2, 0): {'name': 'bottom left',
                                         'counter_vertex': m_dmd_left_pt}}},
             (1, 2): {'name': 'right eye',
                      'clockwise_edge_names': ('top left', 'top right',
                                               'bottom right', 'bottom left'),
                      'edges': {(0, 1): {'name': 'top left',
                                         'counter_vertex': m_dmd_top_pt},
                                (0, 2): {'name': 'top right',
                                         'counter_vertex': r_ear_left_pt},
                                (2, 3): {'name': 'bottom right',
                                         'counter_vertex': r_dmd_top_pt},
                                (2, 2): {'name': 'bottom left',
                                         'counter_vertex': m_dmd_right_pt}}},
             (2, 0): {'name': 'leftup whiskers',
                      'clockwise_edge_names': ('left', 'right', 'bottom'),
                      'edges': {(1, -1): {'name': 'left',
                                          'counter_vertex': l_dmd_left_pt},
                                (1, 0): {'name': 'right',
                                         'counter_vertex': l_dmd_top_pt},
                                (3, 0): {'name': 'bottom',
                                         'counter_vertex': m_dmd_left_pt}}},
             (3, 0): {'name': 'leftdown whiskers',
                      'clockwise_edge_names': ('left', 'top', 'right'),
                      'edges': {(3, -1): {'name': 'left',
                                          'counter_vertex': l_dmd_bottom_pt},
                                (2, 0): {'name': 'top',
                                         'counter_vertex': l_dmd_left_pt},
                                (2, 1): {'name': 'right',
                                         'counter_vertex': m_dmd_left_pt}}},
             (1, 1): {'name': 'left nose',
                      'clockwise_edge_names': ('bottom', 'top', 'right'),
                      'edges': {(2, 1): {'name': 'bottom',
                                         'counter_vertex': m_dmd_bottom_pt},
                                (1, 0): {'name': 'top',
                                         'counter_vertex': m_dmd_left_pt},
                                (2, 2): {'name': 'right',
                                         'counter_vertex': m_dmd_top_pt}}},
             (2, 2): {'name': 'right nose',
                      'clockwise_edge_names': ('left', 'top', 'bottom'),
                      'edges': {(1, 1): {'name': 'left',
                                         'counter_vertex': m_dmd_bottom_pt},
                                (1, 2): {'name': 'top',
                                         'counter_vertex': m_dmd_top_pt},
                                (3, 2): {'name': 'bottom',
                                         'counter_vertex': m_dmd_right_pt}}},
             (2, 1): {'name': 'left cheek',
                      'clockwise_edge_names': ('top left', 'top right',
                                               'bottom right', 'bottom left'),
                      'edges': {(3, 0): {'name': 'top left',
                                         'counter_vertex': l_dmd_bottom_pt},
                                (1, 1): {'name': 'top right',
                                         'counter_vertex': m_dmd_left_pt},
                                (3, 1): {'name': 'bottom right',
                                         'counter_vertex': m_dmd_bottom_pt},
                                (4, 0): {'name': 'bottom left',
                                         'counter_vertex': chin_left_pt}}},
             (3, 2): {'name': 'right cheek',
                      'clockwise_edge_names': ('top left', 'top right',
                                               'bottom right', 'bottom left'),
                      'edges': {(2, 2): {'name': 'top left',
                                         'counter_vertex': m_dmd_bottom_pt},
                                (3, 3): {'name': 'top right',
                                         'counter_vertex': m_dmd_right_pt},
                                (4, 2): {'name': 'bottom right',
                                         'counter_vertex': r_dmd_bottom_pt},
                                (3, 1): {'name': 'bottom left',
                                         'counter_vertex': chin_right_pt}}},
             (3, 1): {'name': 'chin',
                      'clockwise_edge_names': ('left', 'right', 'bottom'),
                      'edges': {(2, 1): {'name': 'left',
                                         'counter_vertex': chin_left_pt},
                                (3, 2): {'name': 'right',
                                         'counter_vertex': m_dmd_bottom_pt},
                                (4, 1): {'name': 'bottom',
                                         'counter_vertex': chin_right_pt}}}}
        # make the data dict
        d = {'name': 'Polycat',
             'reference_length': side,
             'graph_offset_per_row': (float(side + 2 * h) / 4, 0.0),
             'graph_offset_per_col': (0.0, float(side + 2.0 * h) / 3),
             'components': c}
        return d
Return a dict that describes this supershape.
dataset/ETHPy150Open kobejohn/polymaze/polymaze/shapes.py/Polycat._make_specification