/*
 * Copyright 2016, Yahoo! Inc.
 * Licensed under the terms of the Apache License 2.0. See LICENSE file at the project root for terms.
 */

/**
 * Hive UDFs and UDAFs for Theta sketch.
 *
 * @author Will Lauer
 * @author Alexander Saydakov
 */
package com.yahoo.sketches.hive.theta;
