added new commons math component

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/math/trunk@140822 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Burrell Donkin 2003-05-12 15:07:54 +00:00
parent 4a8cbc2867
commit 925847780e
7 changed files with 462 additions and 0 deletions

3
.cvsignore Normal file
View File

@ -0,0 +1,3 @@
build.properties
target
dist

97
PROPOSAL.html Normal file
View File

@ -0,0 +1,97 @@
<html>
<head>
<title>Proposal for math Package</title>
</head>
<body bgcolor="white">
<div align="center">
<h1>Proposal for <em>math</em> Package</h1>
</div>
<h3>(0) Rationale</h3>
<p>The Java programming language and the math extensions in commons-lang provide implementations for only the most basic mathematical algorithms. Routine development tasks such as computing basic statistics or solving a system of linear equations require components not available in java or commons-lang.</p>
<p>Most basic mathematical or statistical algorithms are available in open source implementations, but to assemble a simple set of capabilities one has to use multiple libraries, many of which have more restrictive licensing terms than the ASF. In addition, many of the best open source implementations (e.g. the R statistical package) are either not available in Java or require large support libraries and/or external dependencies to work.</p>
<p>A commons-math community will provide a productive environment for aggregation, testing and support of efficient Java implementations of commonly used mathematical and statistical algorithms.</p>
</p>
<h3>(1) Scope of the Package</h3>
<p>The Math project shall create and maintain a library of lightweight, self-contained mathematics and statistics components addressing the most common practical problems not immediately available in the Java programming language or commons-lang. The guiding principles for commons-math will be:
<ol>
<li>Real-world application use cases determine priority</li>
<li>Emphasis on small, easily integrated components rather than large libraries with complex dependencies</li>
<li>All algorithms are fully documented and follow generally accepted best practices</li>
<li>In situations where multiple standard algorithms exist, use the Strategy pattern to support multiple implementations</li>
<li>Limited dependencies. No external dependencies beyond Commons components and the JDK</li>
</ol>
<h3>(1.5) Interaction With Other Packages</h3>
<p><em>math</em> relies only on standard JDK 1.2 (or later) APIs for
production deployment. It utilizes the JUnit unit testing framework for
developing and executing unit tests, but this is of interest only to
developers of the component.</p>
<p>No external configuration files are utilized.</p>
<h3>(2) Initial Source of the Package</h3>
<p>The initial codebase will consist of implementations of basic statistical algorithms such as the following:
<ul>
<li>Simple univariate statistics (mean, standard deviation, n, confidence intervals)</li>
<li>Frequency distributions</li>
<li>t-test, chi-square test</li>
<li>Random numbers from Gaussian, Exponential, Poisson distributions</li>
<li>Random sampling/resampling</li>
<li>Bivariate regression, corellation</li>
</ul>
and mathematical algorithms such as the following:
<ul>
<li>Basic Complex Number representation with algebraic operations</li>
<li>Newton's method for finding roots</li>
<li>Binomial coefficients</li>
<li>Exponential growth and decay (set up for financial applications)</li>
<li>Polynomial Interpolation (curve fitting)</li>
<li>Basic Matrix representation with algebraic operations</li>
</ul>
</p>
<p>The proposed package name for the new component is
<code>org.apache.commons.math</code>.</p>
<h3>(3) Required Jakarta-Commons Resources</h3>
<ul>
<li>CVS Repository - New directory <code>math</code> in the
<code>jakarta-commons</code> CVS repository.</li>
<li>Mailing List - Discussions will take place on the general
<em>commons-dev@jakarta.apache.org</em> mailing list. To help
list subscribers identify messages of interest, it is suggested that
the message subject of messages about this component be prefixed with
[math].</li>
<li>Bugzilla - New component "math" under the "Commons" product
category, with appropriate version identifiers as needed.</li>
<li>Jyve FAQ - New category "commons-math" (when available).</li>
</ul>
<h3>(4) Initial Committers</h3>
<p>The initial committers on the math component shall be:
<ul>
<li><a href="mailto:rdonkin@apache.org">Robert Burrell Donkinn</a></li>
</ul>
</p>
</body>
</html>

23
RELEASE-NOTES.txt Normal file
View File

@ -0,0 +1,23 @@
$Id: RELEASE-NOTES.txt,v 1.1 2003/05/12 15:03:24 rdonkin Exp $
Commons math Package
Version 1.0-dev
Release Notes
INTRODUCTION:
This document contains the release notes for this version of the Commons
math package, and highlights changes since the previous version. The
current release adds new features and bug fixes, and is being done now to
follow the release early/release often mentality.
NEW FEATURES:
*
BUG FIXES:

86
STATUS.html Normal file
View File

@ -0,0 +1,86 @@
<html>
<head>
<title>Status File for Jakarta Commons "math" Component</title>
</head>
<body bgcolor="white">
<div align="center">
<h1>The Jakarta Commons <em>math</em> Component</h1>
$Id: STATUS.html,v 1.1 2003/05/12 15:03:33 rdonkin Exp $<br />
<a href="#Introduction">[Introduction]</a>
<a href="#Dependencies">[Dependencies]</a>
<a href="#Release Info">[Release Info]</a>
<a href="#Committers">[Committers]</a>
<a href="#Action Items">[Action Items]</a>
<br /><br />
</div>
<a name="Introduction"></a>
<h3>1. INTRODUCTION</h3>
<p>The Math project is a library of lightweight, self-contained mathematics and statistics components addressing the most common practical problems not immediately available in the Java programming language or commons-lang. The guiding principles for commons-math are:
<ol>
<li>Real-world application use cases determine priority</li>
<li>Emphasis on small, easily integrated components rather than large libraries with complex dependencies</li>
<li>All algorithms are fully documented and follow generally accepted best practices</li>
<li>In situations where multiple standard algorithms exist, use the Strategy pattern to support multiple implementations</li>
<li>Limited dependencies. No external dependencies beyond Commons components and the JDK</li>
</ol>
<a name="Dependencies"></a>
<h3>2. DEPENDENCIES</h3>
<p>The <em>math</em> component is dependent upon the following external
components for development and use:</p>
<ul>
<li><a href="http://java.sun.com/j2se">Java Development Kit</a>
(Version 1.2 or later)</li>
<li><a href="http://www.junit.org">JUnit Testing Framework</a>
(Version 3.7 or later) - for unit tests only, not required
for deployment</li>
</ul>
<a name="Release Info"></a>
<h3>3. RELEASE INFO</h3>
<p>Math is really still at the prototyping stage.</p>
<a name="Committers"></a>
<h3>4. COMMITTERS</h3>
<p>The following individuals are the primary developers and maintainers of this
component. Developers who plan to use <em>math</em> in their own
projects are encouraged to collaborate on the future development of this
component to ensure that it continues to meet a variety of needs.</p>
<ul>
<li><a href="mailto:rdonkin@apache.org">Robert Burrell Donkin</a></li>
</ul>
<a name="Action Items"></a>
<h3>5. ACTION ITEMS</h3>
<p>The following action items need to be completed prior to a Version 1.3
release of this component:</p>
<table border="1">
<tr>
<th width="80%">Action Item</th>
<th width="20%">Volunteer</th>
</tr>
<tr>
<td><strong>CODE!</strong>. Add code to make this package useful.</td>
<td align="center">Everyone</td>
</tr>
</table>
</body>
</html>

6
build.properties.sample Normal file
View File

@ -0,0 +1,6 @@
# The directory containing your binary distribution of JUnit,
# version 3.7 or later
junit.home = /usr/local/junit3.7
# The pathname of the "junit.jar" JAR file
junit.jar = ${junit.home}/junit.jar

240
build.xml Normal file
View File

@ -0,0 +1,240 @@
<project name="math" default="compile" basedir=".">
<!--
"math" component of the Jakarta Commons Subproject
$Id: build.xml,v 1.1 2003/05/12 15:07:41 rdonkin Exp $
-->
<!-- ========== Initialize Properties ===================================== -->
<property file="build.properties"/> <!-- Component local -->
<property file="../build.properties"/> <!-- Commons local -->
<property file="${user.home}/build.properties"/> <!-- User local -->
<!-- ========== External Dependencies ===================================== -->
<!-- The directory containing your binary distribution of JUnit,
version 3.7 or later -->
<property name="junit.home" value="/usr/local/junit3.7"/>
<!-- ========== Derived Values ============================================ -->
<!-- The pathname of the "junit.jar" JAR file -->
<property name="junit.jar" value="${junit.home}/junit.jar"/>
<!-- ========== Component Declarations ==================================== -->
<!-- The name of this component -->
<property name="component.name" value="math"/>
<!-- The primary package name of this component -->
<property name="component.package" value="org.apache.commons.math"/>
<!-- The title of this component -->
<property name="component.title" value="math Utilities"/>
<!-- The current version number of this component -->
<property name="component.version" value="0.1-dev"/>
<!-- The base directory for compilation targets -->
<property name="build.home" value="target"/>
<!-- The base directory for component configuration files -->
<property name="conf.home" value="src/conf"/>
<!-- The base directory for distribution targets -->
<property name="dist.home" value="dist"/>
<!-- The base directory for component sources -->
<property name="source.home" value="src/java"/>
<!-- The base directory for unit test sources -->
<property name="test.home" value="src/test"/>
<!-- ========== Compiler Defaults ========================================= -->
<!-- Should Java compilations set the 'debug' compiler option? -->
<property name="compile.debug" value="true"/>
<!-- Should Java compilations set the 'deprecation' compiler option? -->
<property name="compile.deprecation" value="true"/>
<!-- Should Java compilations set the 'optimize' compiler option? -->
<property name="compile.optimize" value="true"/>
<!-- Construct compile classpath -->
<path id="compile.classpath">
<pathelement location="${build.home}/classes"/>
</path>
<!-- ========== Test Execution Defaults =================================== -->
<!-- Construct unit test classpath -->
<path id="test.classpath">
<pathelement location="${build.home}/classes"/>
<pathelement location="${build.home}/tests"/>
<pathelement location="${junit.jar}"/>
</path>
<!-- Should all tests fail if one does? -->
<property name="test.failonerror" value="true"/>
<!-- The test runner to execute -->
<property name="test.runner" value="junit.textui.TestRunner"/>
<!-- ========== Executable Targets ======================================== -->
<target name="init"
description="Initialize and evaluate conditionals">
<echo message="-------- ${component.name} ${component.version} --------"/>
<filter token="name" value="${component.name}"/>
<filter token="package" value="${component.package}"/>
<filter token="version" value="${component.version}"/>
</target>
<target name="prepare" depends="init"
description="Prepare build directory">
<mkdir dir="${build.home}"/>
<mkdir dir="${build.home}/classes"/>
<mkdir dir="${build.home}/conf"/>
<mkdir dir="${build.home}/tests"/>
</target>
<target name="static" depends="prepare"
description="Copy static files to build directory">
<tstamp/>
<copy todir="${build.home}/conf" filtering="on">
<fileset dir="${conf.home}" includes="*.MF"/>
</copy>
</target>
<target name="compile" depends="static"
description="Compile shareable components">
<javac srcdir="${source.home}"
destdir="${build.home}/classes"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
optimize="${compile.optimize}">
<classpath refid="compile.classpath"/>
</javac>
<copy todir="${build.home}/classes" filtering="on">
<fileset dir="${source.home}" excludes="**/*.java"/>
</copy>
</target>
<target name="compile.tests" depends="compile"
description="Compile unit test cases">
<javac srcdir="${test.home}"
destdir="${build.home}/tests"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
optimize="${compile.optimize}">
<classpath refid="test.classpath"/>
</javac>
<copy todir="${build.home}/tests" filtering="on">
<fileset dir="${test.home}" excludes="**/*.java"/>
</copy>
</target>
<target name="clean"
description="Clean build and distribution directories">
<delete dir="${build.home}"/>
<delete dir="${dist.home}"/>
</target>
<target name="all" depends="clean,compile"
description="Clean and compile all components"/>
<target name="javadoc" depends="compile"
description="Create component Javadoc documentation">
<mkdir dir="${dist.home}"/>
<mkdir dir="${dist.home}/docs"/>
<mkdir dir="${dist.home}/docs/api"/>
<javadoc sourcepath="${source.home}"
destdir="${dist.home}/docs/api"
packagenames="org.apache.commons.*"
author="true"
private="true"
version="true"
doctitle="&lt;h1&gt;${component.title}&lt;/h1&gt;"
windowtitle="${component.title} (Version ${component.version})"
bottom="Copyright (c) 2001-2002 - Apache Software Foundation">
<classpath refid="compile.classpath"/>
</javadoc>
</target>
<target name="dist" depends="compile,javadoc"
description="Create binary distribution">
<mkdir dir="${dist.home}"/>
<copy file="../LICENSE"
todir="${dist.home}"/>
<copy file="RELEASE-NOTES.txt"
todir="${dist.home}"/>
<antcall target="jar"/>
</target>
<target name="jar" depends="compile"
description="Create jar">
<mkdir dir="${dist.home}"/>
<mkdir dir="${build.home}/classes/META-INF"/>
<copy file="../LICENSE"
tofile="${build.home}/classes/META-INF/LICENSE.txt"/>
<jar jarfile="${dist.home}/commons-${component.name}.jar"
basedir="${build.home}/classes"
manifest="${build.home}/conf/MANIFEST.MF"/>
</target>
<target name="install-jar" depends="jar"
description="--> Installs jar file in ${lib.repo}">
<copy todir="${lib.repo}" filtering="no">
<fileset dir="${dist.home}">
<include name="commons-${component.name}.jar"/>
</fileset>
</copy>
</target>
<!-- ========== Unit Test Targets ========================================= -->
<target name="test" depends="compile.tests,
test.math"
description="Run all unit test cases">
</target>
<target name="test.math" depends="compile.tests">
<echo message="Running math tests ..."/>
<java classname="${test.runner}" fork="yes"
failonerror="${test.failonerror}">
<arg value="org.apache.commons.math.SomeTestCase"/>
<classpath refid="test.classpath"/>
</java>
</target>
</project>

7
src/conf/MANIFEST.MF Normal file
View File

@ -0,0 +1,7 @@
Extension-Name: org.apache.commons.math
Specification-Title: Jakarta Commons Math
Specification-Vendor: Apache Software Foundation
Specification-Version: 0.1
Implementation-Title: org.apache.commons.math
Implementation-Vendor: Apache Software Foundation
Implementation-Version: 0.1