
Mahout Collections
Copyright 2008-2010 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).


==============================================================
 Apache Mahout
 Copyright 2009 The Apache Software Foundation
==============================================================

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Includes software from other Apache Software Foundation projects,
including, but not limited to:
  - Apache Lucene Java
  - Apache Hadoop
  - Apache Commons

This product includes software developed by the Indiana University
  Extreme! Lab (http://www.extreme.indiana.edu/).
  Copyright (c) 2002 Extreme! Lab, Indiana University.

This product includes examples code from the Watchmaker project   
  https://watchmaker.dev.java.net/
  Copyright (c) 2006-2009 Daniel W. Dyer.

This product includes libraries developed by the Kosmos project (http://kosmosfs.sourceforge.net/)
 Copyright 2008 Quantcast Corp.
 Copyright 2007 Kosmix Corp.

This product includes software developed by the Jets3T project (https://jets3t.dev.java.net/) 
Copyright (c) 2008 James Murty

This product includes libraries developed by the CGLib project (http://cglib.sourceforge.net/)
Copyright (c) 2008, cglib

This product includes a JUnit jar: http://junit.sourceforge.net/
License: Common Public License - v 1.0 (http://junit.sourceforge.net/cpl-v10.html)
Copyright (c) 2000-2006, www.hamcrest.org

This product includes code from the XStream project (http://xstream.codehaus.org/)
Copyright (c) 2003-2006, Joe Walnes
Copyright (c) 2006-2007, XStream Committers

This product includes tests written with EasyMock 
Copyright 2001-2007 Tammo Freese (http://www.easymock.org/)

This product uses the Breast Cancer Wisconsin (Diagnostic) Dataset from the
UCI Machine Learning Repository [http://www.ics.uci.edu/~mlearn/MLRepository.html, http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)]. 

This product contains parts of the Bayesian Logic (BLOG) Inference Engine.
Copyright (c) 2005, Regents of the University of California
