def save(ctx, cfg):
    '''Saves predictions'''

    with ceph.connect(cfg) as c:
        c.insert_predictions(merlin.functions.denumpify(ctx['predictions']))

    return ctx
def delete(ctx, cfg):
    '''Delete existing predictions'''

    with ceph.connect(cfg) as c:
        c.delete_predictions(ctx['cx'], ctx['cy'])

    return ctx
def load_model(ctx, cfg):

    with ceph.connect(cfg) as c:
        ctile = c.select_tile(ctx['tx'], ctx['ty'])

        model = bytes.fromhex(first(ctile)['model'])

        if model is None:
            raise Exception(
                "No model found for tx:{tx} and ty:{ty}".format(**ctx))
        else:
            return assoc(ctx, 'model_bytes', model)
def save(ctx, cfg):
    '''Saves an xgboost model for this tx & ty'''

    # will need to decode hex when pulling model
    # >>> bytes.fromhex('deadbeef')
    #b'\xde\xad\xbe\xef'

    logger.info("saving model")

    model_bytes = segaux.bytes_from_booster(ctx['model']).hex()

    ctx['model'] = None
    del ctx['model']

    with ceph.connect(cfg) as c:
        c.insert_tile(ctx['tx'], ctx['ty'], model_bytes)
        return ctx
def segments(ctx, cfg):
    '''Return saved segments'''

    with ceph.connect(cfg) as c:
        return assoc(ctx, 'segments', c.select_segments(ctx['cx'], ctx['cy']))
def segments(ctx, cfg):
    '''Return saved segments'''
    logger.info("getting segments for cx:{} cy:{}".format(
        ctx['cx'], ctx['cy']))
    with ceph.connect(cfg) as c:
        return assoc(ctx, 'segments', c.select_segments(ctx['cx'], ctx['cy']))