<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def tilequeue_enqueue_full_pyramid_from_toi(cfg, peripherals, args):
 """enqueue a full pyramid from the z10 toi"""

    logger = make_logger(cfg, 'enqueue_tiles_of_interest')
    logger.info('Enqueueing tiles of interest')

    logger.info('Fetching tiles of interest ...')
    tiles_of_interest = peripherals.toi.fetch_tiles_of_interest()
    n_toi = len(tiles_of_interest)
    logger.info('Fetching tiles of interest ... done')

    rawr_yaml = cfg.yml.get('rawr')
    assert rawr_yaml, 'Missing rawr yaml'
    group_by_zoom = rawr_yaml.get('group-zoom')
    assert group_by_zoom, 'Missing rawr group-zoom'
    assert isinstance(group_by_zoom, int), 'Invalid rawr group-zoom'

    if args.zoom_start is None:
        zoom_start = group_by_zoom
    else:
        zoom_start = args.zoom_start

    if args.zoom_stop is None:
        zoom_stop = cfg.max_zoom + 1  # +1 because exclusive
    else:
        zoom_stop = args.zoom_stop

    assert zoom_start >= group_by_zoom
    assert zoom_stop > zoom_start

    ungrouped = []
    coords_at_group_zoom = set()
    for coord_int in tiles_of_interest:
        coord = coord_unmarshall_int(coord_int)
        if coord.zoom < zoom_start:
            ungrouped.append(coord)
        if coord.zoom >= group_by_zoom:
            coord_at_group_zoom = coord.zoomTo(group_by_zoom).container()
            coords_at_group_zoom.add(coord_at_group_zoom)

    pyramids = coord_pyramids(coords_at_group_zoom, zoom_start, zoom_stop)

    coords_to_enqueue = chain(ungrouped, pyramids)

    queue_writer = peripherals.queue_writer
    n_queued, n_in_flight = queue_writer.enqueue_batch(coords_to_enqueue)

    logger.info('%d enqueued - %d in flight' % (n_queued, n_in_flight))
    logger.info('%d tiles of interest processed' % n_toi)