Apache DataSketches (incubating) is an effort undergoing incubation 
at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. 

Incubation is required of all newly accepted projects until a further review 
indicates that the infrastructure, communications, and decision making process 
have stabilized in a manner consistent with other successful ASF projects.

While incubation status is not necessarily a reflection of the
completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.

Some of the incubating project's releases may not be fully compliant
with ASF policy. For example, releases may have incomplete or
un-reviewed licensing conditions. What follows is a list of known
issues the project is currently aware of (note that this list, by
definition, is likely to be incomplete): 

 * The LICENSE file may be incomplete and will be fixed with the next release.

If you are planning to incorporate this work into your
product or project, please be aware that you will need to conduct a
thorough licensing review to determine the overall implications of
including this work. For the current status of this project through the Apache
Incubator visit: 

http://incubator.apache.org/projects/datasketches.html
