http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/ProviderBuilder.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/ProviderBuilder.java 
b/src/main/java/org/apache/commons/math4/rng/internal/ProviderBuilder.java
deleted file mode 100644
index f38b679..0000000
--- a/src/main/java/org/apache/commons/math4/rng/internal/ProviderBuilder.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.commons.math4.exception.MathUnsupportedOperationException;
-import org.apache.commons.math4.exception.MathInternalError;
-import org.apache.commons.math4.rng.UniformRandomProvider;
-import org.apache.commons.math4.rng.internal.util.SeedFactory;
-import org.apache.commons.math4.rng.internal.util.NoOpConverter;
-import org.apache.commons.math4.rng.internal.util.Int2Long;
-import org.apache.commons.math4.rng.internal.util.Long2Int;
-import org.apache.commons.math4.rng.internal.util.Long2IntArray;
-import org.apache.commons.math4.rng.internal.util.Long2LongArray;
-import org.apache.commons.math4.rng.internal.util.IntArray2LongArray;
-import org.apache.commons.math4.rng.internal.util.LongArray2IntArray;
-import org.apache.commons.math4.rng.internal.util.LongArray2Long;
-import org.apache.commons.math4.rng.internal.util.IntArray2Int;
-import org.apache.commons.math4.rng.internal.util.SeedConverter;
-import org.apache.commons.math4.rng.internal.util.SeedConverterComposer;
-import org.apache.commons.math4.rng.internal.source32.JDKRandom;
-import org.apache.commons.math4.rng.internal.source32.Well512a;
-import org.apache.commons.math4.rng.internal.source32.Well1024a;
-import org.apache.commons.math4.rng.internal.source32.Well19937a;
-import org.apache.commons.math4.rng.internal.source32.Well19937c;
-import org.apache.commons.math4.rng.internal.source32.Well44497a;
-import org.apache.commons.math4.rng.internal.source32.Well44497b;
-import org.apache.commons.math4.rng.internal.source32.ISAACRandom;
-import org.apache.commons.math4.rng.internal.source32.MersenneTwister;
-import org.apache.commons.math4.rng.internal.source64.SplitMix64;
-import org.apache.commons.math4.rng.internal.source64.XorShift1024Star;
-import org.apache.commons.math4.rng.internal.source64.TwoCmres;
-import org.apache.commons.math4.rng.internal.source64.MersenneTwister64;
-
-/**
- * RNG builder.
- * <p>
- * It uses reflection to find the factory method of the RNG implementation,
- * and performs seed type conversions.
- * </p>
- */
-public class ProviderBuilder {
-    /** Length of the seed array (for random seed). */
-    private static final int RANDOM_SEED_ARRAY_SIZE = 128;
-    /** Seed converter. */
-    private static final Long2Int LONG_TO_INT = new Long2Int();
-    /** Seed converter. */
-    private static final Int2Long INT_TO_LONG = new Int2Long();
-    /** Seed converter. */
-    private static final Long2IntArray LONG_TO_INT_ARRAY = new 
Long2IntArray(RANDOM_SEED_ARRAY_SIZE);
-    /** Seed converter. */
-    private static final Long2LongArray LONG_TO_LONG_ARRAY = new 
Long2LongArray(RANDOM_SEED_ARRAY_SIZE);
-    /** Seed converter. */
-    private static final LongArray2Long LONG_ARRAY_TO_LONG = new 
LongArray2Long();
-    /** Seed converter. */
-    private static final IntArray2Int INT_ARRAY_TO_INT = new IntArray2Int();
-    /** Seed converter. */
-    private static final LongArray2IntArray LONG_ARRAY_TO_INT_ARRAY = new 
LongArray2IntArray();
-    /** Seed converter. */
-    private static final IntArray2LongArray INT_ARRAY_TO_LONG_ARRAY = new 
IntArray2LongArray();
-    /** Map to convert "Integer" seeds. */
-    private static final Map<Class<?>, SeedConverter<Integer,?>> CONV_INT = 
new HashMap<>();
-    /** Map to convert "int[]" seeds. */
-    private static final Map<Class<?>, SeedConverter<int[],?>> CONV_INT_ARRAY 
= new HashMap<>();
-    /** Map to convert "Long" seeds. */
-    private static final Map<Class<?>, SeedConverter<Long,?>> CONV_LONG = new 
HashMap<>();
-    /** Map to convert "long[]" seeds. */
-    private static final Map<Class<?>, SeedConverter<long[],?>> 
CONV_LONG_ARRAY = new HashMap<>();
-
-    static {
-        // Input seed type is "Long".
-        // Key is the implementation's "native" seed type.
-        CONV_LONG.put(Integer.class, LONG_TO_INT);
-        CONV_LONG.put(Long.class, new NoOpConverter<Long>());
-        CONV_LONG.put(int[].class, LONG_TO_INT_ARRAY);
-        CONV_LONG.put(long[].class, LONG_TO_LONG_ARRAY);
-
-        // Input seed type is "Integer".
-        // Key is the implementation's "native" seed type.
-        CONV_INT.put(Integer.class, new NoOpConverter<Integer>());
-        CONV_INT.put(Long.class, INT_TO_LONG);
-        CONV_INT.put(int[].class, new 
SeedConverterComposer<Integer,Long,int[]>(INT_TO_LONG, LONG_TO_INT_ARRAY));
-        CONV_INT.put(long[].class, new 
SeedConverterComposer<Integer,Long,long[]>(INT_TO_LONG, LONG_TO_LONG_ARRAY));
-
-        // Input seed type is "int[]".
-        // Key is the implementation's "native" seed type.
-        CONV_INT_ARRAY.put(Integer.class, INT_ARRAY_TO_INT);
-        CONV_INT_ARRAY.put(Long.class, new 
SeedConverterComposer<int[],Integer,Long>(INT_ARRAY_TO_INT, INT_TO_LONG));
-        CONV_INT_ARRAY.put(int[].class, new NoOpConverter<int[]>());
-        CONV_INT_ARRAY.put(long[].class, INT_ARRAY_TO_LONG_ARRAY);
-
-        // Input seed type is "long[]".
-        // Key is the implementation's "native" seed type.
-        CONV_LONG_ARRAY.put(Integer.class, new 
SeedConverterComposer<long[],Long,Integer>(LONG_ARRAY_TO_LONG, LONG_TO_INT));
-        CONV_LONG_ARRAY.put(Long.class, LONG_ARRAY_TO_LONG);
-        CONV_LONG_ARRAY.put(int[].class, LONG_ARRAY_TO_INT_ARRAY);
-        CONV_LONG_ARRAY.put(long[].class, new NoOpConverter<long[]>());
-    }
-
-    /**
-     * Class only contains static method.
-     */
-    private ProviderBuilder() {}
-
-    /**
-     * Creates a RNG instance.
-     *
-     * @param source RNG specification.
-     * @param seed Seed value.  It can be {@code null} (in which case a
-     * random value will be used).
-     * @param args Additional arguments to the implementation's constructor.
-     * @return a new RNG instance.
-     * @throws MathUnsupportedOperationException if the seed type is
-     * invalid.
-     */
-    public static UniformRandomProvider create(RandomSourceInternal source,
-                                               Object seed,
-                                               Object[] args) {
-        // Convert seed to native type.
-        final Object nativeSeed = createSeed(source, seed);
-
-        // Build a single array with all the arguments to be passed
-        // (in the right order) to the constructor.
-        final List<Object> all = new ArrayList<>();
-        all.add(nativeSeed);
-        if (args != null) {
-            all.addAll(Arrays.asList(args));
-        }
-
-        // Instantiate.
-        return create(createConstructor(source), all.toArray());
-    }
-
-    /**
-     * Creates a native seed from any of the supported seed types.
-     *
-     * @param source Source.
-     * @param seed Input seed.
-     * @return the native seed.
-     * @throw MathUnsupportedOperationException if the {@code seed} type
-     * is invalid.
-     */
-    private static Object createSeed(RandomSourceInternal source,
-                                     Object seed) {
-        Object nativeSeed = null;
-
-        if (seed == null) {
-            // Create a random seed of the appropriate native type.
-
-            if (source.getSeed().equals(Integer.class)) {
-                nativeSeed = SeedFactory.createInt();
-            } else if (source.getSeed().equals(Long.class)) {
-                nativeSeed = SeedFactory.createLong();
-            } else if (source.getSeed().equals(int[].class)) {
-                nativeSeed = 
SeedFactory.createIntArray(RANDOM_SEED_ARRAY_SIZE);
-            } else if (source.getSeed().equals(long[].class)) {
-                nativeSeed = 
SeedFactory.createLongArray(RANDOM_SEED_ARRAY_SIZE);
-            }
-        } else {
-            // Convert to native type.
-
-            if (seed instanceof Integer) {
-                nativeSeed = CONV_INT.get(source.getSeed()).convert((Integer) 
seed);
-            } else if (seed instanceof Long) {
-                nativeSeed = CONV_LONG.get(source.getSeed()).convert((Long) 
seed);
-            } else if (seed instanceof int[]) {
-                nativeSeed = 
CONV_INT_ARRAY.get(source.getSeed()).convert((int[]) seed);
-            } else if (seed instanceof long[]) {
-                nativeSeed = 
CONV_LONG_ARRAY.get(source.getSeed()).convert((long[]) seed);
-            }
-
-            if (nativeSeed == null) {
-                // Since the input seed was not null, getting here means that
-                // no suitable converter is present in the maps.
-                throw new MathUnsupportedOperationException();
-            }
-
-            if (!source.isNativeSeed(nativeSeed)) {
-                // Conversion setup is wrong.
-                throw new MathInternalError();
-            }
-        }
-
-        return nativeSeed;
-    }
-
-    /**
-     * Creates a constructor.
-     *
-     * @param source RNG specification.
-     * @return a RNG constructor.
-     */
-    private static Constructor<?> createConstructor(RandomSourceInternal 
source) {
-        try {
-            return source.getRng().getConstructor(source.getArgs());
-        } catch (NoSuchMethodException e) {
-            // Info in "RandomSourceInternal" is inconsistent with the
-            // constructor of the implementation.
-            throw new MathInternalError(e);
-        }
-    }
-
-    /**
-     * Creates a RNG.
-     *
-     * @param rng RNG specification.
-     * @param args Arguments to the implementation's constructor.
-     * @return a new RNG instance.
-     */
-    private static UniformRandomProvider create(Constructor<?> rng,
-                                                Object[] args) {
-        try {
-            return (UniformRandomProvider) rng.newInstance(args);
-        } catch (InvocationTargetException |
-                 InstantiationException |
-                 IllegalArgumentException |
-                 IllegalAccessException e) {
-            throw new MathInternalError(e);
-        }
-    }
-
-    /**
-     * Identifiers of the generators.
-     */
-    public enum RandomSourceInternal {
-        /** Source of randomness is {@link JDKRandom}. */
-        JDK(JDKRandom.class,
-            Long.class),
-        /** Source of randomness is {@link Well512a}. */
-        WELL_512_A(Well512a.class,
-                   int[].class),
-        /** Source of randomness is {@link Well1024a}. */
-        WELL_1024_A(Well1024a.class,
-                    int[].class),
-        /** Source of randomness is {@link Well19937a}. */
-        WELL_19937_A(Well19937a.class,
-                     int[].class),
-        /** Source of randomness is {@link Well19937c}. */
-        WELL_19937_C(Well19937c.class,
-                     int[].class),
-        /** Source of randomness is {@link Well44497a}. */
-        WELL_44497_A(Well44497a.class,
-                     int[].class),
-        /** Source of randomness is {@link Well44497b}. */
-        WELL_44497_B(Well44497b.class,
-                     int[].class),
-        /** Source of randomness is {@link MersenneTwister}. */
-        MT(MersenneTwister.class,
-           int[].class),
-        /** Source of randomness is {@link ISAACRandom}. */
-        ISAAC(ISAACRandom.class,
-              int[].class),
-        /** Source of randomness is {@link SplitMix64}. */
-        SPLIT_MIX_64(SplitMix64.class,
-                     Long.class),
-        /** Source of randomness is {@link XorShift1024Star}. */
-        XOR_SHIFT_1024_S(XorShift1024Star.class,
-                         long[].class),
-        /** Source of randomness is {@link TwoCmres}. */
-        TWO_CMRES(TwoCmres.class,
-                  Integer.class),
-        /**
-         * Source of randomness is {@link TwoCmres} with explicit selection
-         * of the two subcycle generators.
-         */
-        TWO_CMRES_SELECT(TwoCmres.class,
-                         Integer.class,
-                         Integer.TYPE,
-                         Integer.TYPE),
-        /** Source of randomness is {@link MersenneTwister64}. */
-        MT_64(MersenneTwister64.class,
-              long[].class);
-
-        /** Source type. */
-        private final Class<? extends UniformRandomProvider> rng;
-        /** Data needed to build the generator. */
-        private final Class<?>[] args;
-
-        /**
-         * @param rng Source type.
-         * @param args Data needed to create a generator instance.
-         * The first element must be the native seed type.
-         */
-        RandomSourceInternal(Class<? extends UniformRandomProvider> rng,
-                             Class<?> ... args) {
-            this.rng = rng;
-            this.args = Arrays.copyOf(args, args.length);
-        }
-
-        /**
-         * @return the source type.
-         */
-        public Class<?> getRng() {
-            return rng;
-        }
-
-        /**
-         * @return the seed type.
-         */
-        Class<?> getSeed() {
-            return args[0];
-        }
-
-        /**
-         * @return the data needed to build the generator.
-         */
-        Class<?>[] getArgs() {
-            return args;
-        }
-
-        /**
-         * Checks whether the type of given {@code seed} is the native type
-         * of the implementation.
-         *
-         * @param <SEED> Seed type.
-         *
-         * @param seed Seed value.
-         * @return {@code true} if the seed can be passed to the builder
-         * for this RNG type.
-         */
-        public <SEED> boolean isNativeSeed(SEED seed) {
-            return getSeed().equals(seed.getClass());
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/StateSettable.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/StateSettable.java 
b/src/main/java/org/apache/commons/math4/rng/internal/StateSettable.java
deleted file mode 100644
index 6c7e7a5..0000000
--- a/src/main/java/org/apache/commons/math4/rng/internal/StateSettable.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal;
-
-import org.apache.commons.math4.rng.RandomSource;
-
-/**
- * Indicates that the state of the instance can be saved and restored.
- *
- * @since 4.0
- */
-public interface StateSettable {
-    /**
-     * Sets the instance's state.
-     *
-     * @param state State. The given argument must have been retrieved
-     * by a call to {@link #getState()}.
-     *
-     * @throws 
org.apache.commons.math4.exception.MathUnsupportedOperationException
-     * if not implemented.
-     */
-    void setState(RandomSource.State state);
-
-    /**
-     * Gets the instance's state.
-     *
-     * @return the current state. The given argument can then be passed
-     * to {@link #setState(RandomSource.State)} in order to recover the
-     * current state.
-     *
-     * @throws 
org.apache.commons.math4.exception.MathUnsupportedOperationException
-     * if not implemented.
-     */
-     RandomSource.State getState();
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/package-info.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/package-info.java 
b/src/main/java/org/apache/commons/math4/rng/internal/package-info.java
deleted file mode 100644
index 47ad828..0000000
--- a/src/main/java/org/apache/commons/math4/rng/internal/package-info.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <h3>Base classes for the {@link 
org.apache.commons.math4.rng.UniformRandomProvider
- * generation of uniformly distributed random numbers}.
- * </h3>
- *
- * <p>
- * <b>For internal use only:</b> Direct access to classes in this package
- * and below, is discouraged, as they could be modified without notice.
- * </p>
- *
- * <p><b>Notes for developers</b></p>
- *
- * <p>
- * This package contains the common functionality.
- * <br>
- * Implementations that produce
- * {@link org.apache.commons.math4.rng.internal.source32.RandomIntSource int}
- * values are defined in the
- * {@link org.apache.commons.math4.rng.internal.source32 source32} package.
- * <br>
- * Implementations that produce
- * {@link org.apache.commons.math4.rng.internal.source64.RandomLongSource long}
- * values are defined in the
- * {@link org.apache.commons.math4.rng.internal.source64 source64} package.
- * </p>
- *
- * <p>
- * Each implementation must have an identifier in
- * {@link 
org.apache.commons.math4.rng.internal.ProviderBuilder.RandomSourceInternal}
- * which must be referred to from the {@link 
org.apache.commons.math4.rng.RandomSource public API}.
- * </p>
- */
-
-package org.apache.commons.math4.rng.internal;

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/AbstractWell.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/AbstractWell.java
 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/AbstractWell.java
deleted file mode 100644
index c9737db..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/AbstractWell.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-import java.util.Arrays;
-import org.apache.commons.math4.exception.InsufficientDataException;
-import org.apache.commons.math4.rng.internal.util.NumberFactory;
-
-/**
- * This abstract class implements the WELL class of pseudo-random number
- * generator from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto
- * Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- *
- * @since 4.0
- */
-public abstract class AbstractWell extends IntProvider {
-    /** Current index in the bytes pool. */
-    protected int index;
-    /** Bytes pool. */
-    protected final int[] v;
-
-    /**
-     * Creates a new random number generator using an int array seed.
-     *
-     * @param k Number of bits in the pool (not necessarily a multiple of 32).
-     * @param seed Initial seed.
-     */
-    protected AbstractWell(final int k,
-                           final int[] seed) {
-        final int r = calculateBlockCount(k);
-        v = new int[r];
-        index = 0;
-
-        // Initialize the pool content.
-        setSeedInternal(seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected byte[] getStateInternal() {
-        final int[] s = Arrays.copyOf(v, v.length + 1);
-        s[v.length] = index;
-
-        return NumberFactory.makeByteArray(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void setStateInternal(byte[] s) {
-        if (s.length != (v.length + 1) * 4) {
-            throw new InsufficientDataException();
-        }
-
-        final int[] tmp = NumberFactory.makeIntArray(s);
-
-        System.arraycopy(tmp, 0, v, 0, v.length);
-        index = tmp[v.length];
-    }
-
-    /**
-     * Reinitialize the generator as if just built with the given int array 
seed.
-     *
-     * <p>The state of the generator is exactly the same as a new generator 
built
-     * with the same seed.</p>
-     *
-     * @param seed Seed. Cannot be null.
-     */
-    private void setSeedInternal(final int[] seed) {
-        System.arraycopy(seed, 0, v, 0, Math.min(seed.length, v.length));
-
-        if (seed.length < v.length) {
-            for (int i = seed.length; i < v.length; ++i) {
-                final long current = v[i - seed.length];
-                v[i] = (int) ((1812433253L * (current ^ (current >> 30)) + i) 
& 0xffffffffL);
-            }
-        }
-
-        index = 0;
-    }
-
-    /**
-     * Calculate the number of 32-bits blocks.
-     *
-     * @param k Number of bits in the pool (not necessarily a multiple of 32).
-     * @return the number of 32-bits blocks.
-     */
-    private static int calculateBlockCount(final int k) {
-        // the bits pool contains k bits, k = r w - p where r is the number
-        // of w bits blocks, w is the block size (always 32 in the original 
paper)
-        // and p is the number of unused bits in the last block
-        final int w = 32;
-        final int r = (k + w - 1) / w;
-        return r;
-    }
-
-    /**
-     * Inner class used to store the indirection index table which is fixed 
for a given
-     * type of WELL class of pseudo-random number generator.
-     */
-    protected static final class IndexTable {
-        /** Index indirection table giving for each index its predecessor 
taking table size into account. */
-        private final int[] iRm1;
-        /** Index indirection table giving for each index its second 
predecessor taking table size into account. */
-        private final int[] iRm2;
-        /** Index indirection table giving for each index the value index + m1 
taking table size into account. */
-        private final int[] i1;
-        /** Index indirection table giving for each index the value index + m2 
taking table size into account. */
-        private final int[] i2;
-        /** Index indirection table giving for each index the value index + m3 
taking table size into account. */
-        private final int[] i3;
-
-        /** Creates a new pre-calculated indirection index table.
-         * @param k number of bits in the pool (not necessarily a multiple of 
32)
-         * @param m1 first parameter of the algorithm
-         * @param m2 second parameter of the algorithm
-         * @param m3 third parameter of the algorithm
-         */
-        public IndexTable(final int k, final int m1, final int m2, final int 
m3) {
-
-            final int r = calculateBlockCount(k);
-
-            // precompute indirection index tables. These tables are used for 
optimizing access
-            // they allow saving computations like "(j + r - 2) % r" with 
costly modulo operations
-            iRm1 = new int[r];
-            iRm2 = new int[r];
-            i1 = new int[r];
-            i2 = new int[r];
-            i3 = new int[r];
-            for (int j = 0; j < r; ++j) {
-                iRm1[j] = (j + r - 1) % r;
-                iRm2[j] = (j + r - 2) % r;
-                i1[j] = (j + m1) % r;
-                i2[j] = (j + m2) % r;
-                i3[j] = (j + m3) % r;
-            }
-        }
-
-        /**
-         * Returns the predecessor of the given index modulo the table size.
-         * @param index the index to look at
-         * @return (index - 1) % table size
-         */
-        public int getIndexPred(final int index) {
-            return iRm1[index];
-        }
-
-        /**
-         * Returns the second predecessor of the given index modulo the table 
size.
-         * @param index the index to look at
-         * @return (index - 2) % table size
-         */
-        public int getIndexPred2(final int index) {
-            return iRm2[index];
-        }
-
-        /**
-         * Returns index + M1 modulo the table size.
-         * @param index the index to look at
-         * @return (index + M1) % table size
-         */
-        public int getIndexM1(final int index) {
-            return i1[index];
-        }
-
-        /**
-         * Returns index + M2 modulo the table size.
-         * @param index the index to look at
-         * @return (index + M2) % table size
-         */
-        public int getIndexM2(final int index) {
-            return i2[index];
-        }
-
-        /**
-         * Returns index + M3 modulo the table size.
-         * @param index the index to look at
-         * @return (index + M3) % table size
-         */
-        public int getIndexM3(final int index) {
-            return i3[index];
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/ISAACRandom.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/ISAACRandom.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/ISAACRandom.java
deleted file mode 100644
index c7dd73a..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/ISAACRandom.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.math4.rng.internal.source32;
-
-import java.util.Arrays;
-import org.apache.commons.math4.exception.InsufficientDataException;
-import org.apache.commons.math4.rng.internal.util.NumberFactory;
-
-/**
- * A fast cryptographic pseudo-random number generator.
- * <p>
- * ISAAC (Indirection, Shift, Accumulate, Add, and Count) generates 32-bit
- * random numbers.
- * ISAAC has been designed to be cryptographically secure and is inspired
- * by RC4.
- * Cycles are guaranteed to be at least 2<sup>40</sup> values long, and they
- * are 2<sup>8295</sup> values long on average.
- * The results are uniformly distributed, unbiased, and unpredictable unless
- * you know the seed.
- * <p>
- * This code is based (with minor changes and improvements) on the original
- * implementation of the algorithm by Bob Jenkins.
- *
- * @see <a href="http://burtleburtle.net/bob/rand/isaacafa.html";>
- * ISAAC: a fast cryptographic pseudo-random number generator</a>
- *
- * @since 4.0
- */
-public class ISAACRandom extends IntProvider {
-    /** Log of size of rsl[] and mem[] */
-    private static final int SIZE_L = 8;
-    /** Size of rsl[] and mem[] */
-    private static final int SIZE = 1 << SIZE_L;
-    /** Half-size of rsl[] and mem[] */
-    private static final int H_SIZE = SIZE >> 1;
-    /** For pseudo-random lookup */
-    private static final int MASK = SIZE - 1 << 2;
-    /** The golden ratio */
-    private static final int GLD_RATIO = 0x9e3779b9;
-    /** The results given to the user */
-    private final int[] rsl = new int[SIZE];
-    /** The internal state */
-    private final int[] mem = new int[SIZE];
-    /** Count through the results in rsl[] */
-    private int count;
-    /** Accumulator */
-    private int isaacA;
-    /** The last result */
-    private int isaacB;
-    /** Counter, guarantees cycle is at least 2^40 */
-    private int isaacC;
-    /** Service variable. */
-    private final int[] arr = new int[8];
-    /** Service variable. */
-    private int isaacX;
-    /** Service variable. */
-    private int isaacI;
-    /** Service variable. */
-    private int isaacJ;
-
-    /**
-     * Creates a new ISAAC random number generator.
-     *
-     * @param seed Initial seed
-     */
-    public ISAACRandom(int[] seed) {
-        setSeedInternal(seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected byte[] getStateInternal() {
-        final int[] sRsl = Arrays.copyOf(rsl, SIZE);
-        final int[] sMem = Arrays.copyOf(mem, SIZE);
-        final int[] sRem = Arrays.copyOf(new int[] { count, isaacA, isaacB, 
isaacC }, 4);
-
-        final int[] s = new int[2 * SIZE + sRem.length];
-        System.arraycopy(sRsl, 0, s, 0, SIZE);
-        System.arraycopy(sMem, 0, s, SIZE, SIZE);
-        System.arraycopy(sRem, 0, s, 2 * SIZE, sRem.length);
-
-        return NumberFactory.makeByteArray(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void setStateInternal(byte[] s) {
-        if (s.length != (2 * SIZE + 4) * 4) {
-            throw new InsufficientDataException();
-        }
-
-        final int[] tmp = NumberFactory.makeIntArray(s);
-
-        System.arraycopy(tmp, 0, rsl, 0, SIZE);
-        System.arraycopy(tmp, SIZE, mem, 0, SIZE);
-        final int offset = 2 * SIZE;
-        count = tmp[offset];
-        isaacA = tmp[offset + 1];
-        isaacB = tmp[offset + 2];
-        isaacC = tmp[offset + 3];
-    }
-
-    /**
-     * Reseeds the RNG.
-     *
-     * @param seed Seed. Cannot be null.
-     */
-    private void setSeedInternal(int[] seed) {
-        final int seedLen = seed.length;
-        final int rslLen = rsl.length;
-        System.arraycopy(seed, 0, rsl, 0, Math.min(seedLen, rslLen));
-        if (seedLen < rslLen) {
-            for (int j = seedLen; j < rslLen; j++) {
-                long k = rsl[j - seedLen];
-                rsl[j] = (int) (0x6c078965L * (k ^ k >> 30) + j & 0xffffffffL);
-            }
-        }
-        initState();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        if (count < 0) {
-            isaac();
-            count = SIZE - 1;
-        }
-        return rsl[count--];
-    }
-
-    /** Generate 256 results */
-    private void isaac() {
-        isaacI = 0;
-        isaacJ = H_SIZE;
-        isaacB += ++isaacC;
-        while (isaacI < H_SIZE) {
-            isaac2();
-        }
-        isaacJ = 0;
-        while (isaacJ < H_SIZE) {
-            isaac2();
-        }
-    }
-
-    /** Intermediate internal loop. */
-    private void isaac2() {
-        isaacX = mem[isaacI];
-        isaacA ^= isaacA << 13;
-        isaacA += mem[isaacJ++];
-        isaac3();
-        isaacX = mem[isaacI];
-        isaacA ^= isaacA >>> 6;
-        isaacA += mem[isaacJ++];
-        isaac3();
-        isaacX = mem[isaacI];
-        isaacA ^= isaacA << 2;
-        isaacA += mem[isaacJ++];
-        isaac3();
-        isaacX = mem[isaacI];
-        isaacA ^= isaacA >>> 16;
-        isaacA += mem[isaacJ++];
-        isaac3();
-    }
-
-    /** Lowest level internal loop. */
-    private void isaac3() {
-        mem[isaacI] = mem[(isaacX & MASK) >> 2] + isaacA + isaacB;
-        isaacB = mem[(mem[isaacI] >> SIZE_L & MASK) >> 2] + isaacX;
-        rsl[isaacI++] = isaacB;
-    }
-
-    /** Initialize, or reinitialize, this instance of rand. */
-    private void initState() {
-        isaacA = 0;
-        isaacB = 0;
-        isaacC = 0;
-        for (int j = 0; j < arr.length; j++) {
-            arr[j] = GLD_RATIO;
-        }
-        for (int j = 0; j < 4; j++) {
-            shuffle();
-        }
-        // fill in mem[] with messy stuff
-        for (int j = 0; j < SIZE; j += 8) {
-            arr[0] += rsl[j];
-            arr[1] += rsl[j + 1];
-            arr[2] += rsl[j + 2];
-            arr[3] += rsl[j + 3];
-            arr[4] += rsl[j + 4];
-            arr[5] += rsl[j + 5];
-            arr[6] += rsl[j + 6];
-            arr[7] += rsl[j + 7];
-            shuffle();
-            setState(j);
-        }
-        // second pass makes all of seed affect all of mem
-        for (int j = 0; j < SIZE; j += 8) {
-            arr[0] += mem[j];
-            arr[1] += mem[j + 1];
-            arr[2] += mem[j + 2];
-            arr[3] += mem[j + 3];
-            arr[4] += mem[j + 4];
-            arr[5] += mem[j + 5];
-            arr[6] += mem[j + 6];
-            arr[7] += mem[j + 7];
-            shuffle();
-            setState(j);
-        }
-        isaac();
-        count = SIZE - 1;
-    }
-
-    /** Shuffle array. */
-    private void shuffle() {
-        arr[0] ^= arr[1] << 11;
-        arr[3] += arr[0];
-        arr[1] += arr[2];
-        arr[1] ^= arr[2] >>> 2;
-        arr[4] += arr[1];
-        arr[2] += arr[3];
-        arr[2] ^= arr[3] << 8;
-        arr[5] += arr[2];
-        arr[3] += arr[4];
-        arr[3] ^= arr[4] >>> 16;
-        arr[6] += arr[3];
-        arr[4] += arr[5];
-        arr[4] ^= arr[5] << 10;
-        arr[7] += arr[4];
-        arr[5] += arr[6];
-        arr[5] ^= arr[6] >>> 4;
-        arr[0] += arr[5];
-        arr[6] += arr[7];
-        arr[6] ^= arr[7] << 8;
-        arr[1] += arr[6];
-        arr[7] += arr[0];
-        arr[7] ^= arr[0] >>> 9;
-        arr[2] += arr[7];
-        arr[0] += arr[1];
-    }
-
-    /** Set the state by copying the internal arrays.
-     *
-     * @param start First index into {@link #mem} array.
-     */
-    private void setState(int start) {
-        mem[start] = arr[0];
-        mem[start + 1] = arr[1];
-        mem[start + 2] = arr[2];
-        mem[start + 3] = arr[3];
-        mem[start + 4] = arr[4];
-        mem[start + 5] = arr[5];
-        mem[start + 6] = arr[6];
-        mem[start + 7] = arr[7];
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/IntProvider.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/IntProvider.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/IntProvider.java
deleted file mode 100644
index bae33fc..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/IntProvider.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.math4.rng.internal.source32;
-
-import org.apache.commons.math4.exception.OutOfRangeException;
-import org.apache.commons.math4.rng.internal.util.NumberFactory;
-import org.apache.commons.math4.rng.internal.BaseProvider;
-
-/**
- * Base class for all implementations that provide an {@code int}-based
- * source randomness.
- */
-public abstract class IntProvider
-    extends BaseProvider
-    implements RandomIntSource {
-
-    /** {@inheritDoc} */
-    @Override
-    public abstract int next();
-
-    /** {@inheritDoc} */
-    @Override
-    public int nextInt() {
-        return next();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public boolean nextBoolean() {
-        return NumberFactory.makeBoolean(nextInt());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public double nextDouble() {
-        return NumberFactory.makeDouble(nextInt(), nextInt());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public float nextFloat() {
-        return NumberFactory.makeFloat(nextInt());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public long nextLong() {
-        return NumberFactory.makeLong(nextInt(), nextInt());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void nextBytes(byte[] bytes) {
-        nextBytesFill(this, bytes, 0, bytes.length);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void nextBytes(byte[] bytes,
-                          int start,
-                          int len) {
-        if (start < 0 ||
-            start >= bytes.length) {
-            throw new OutOfRangeException(start, 0, bytes.length);
-        }
-        if (len < 0 ||
-            len > bytes.length - start) {
-            throw new OutOfRangeException(len, 0, bytes.length - start);
-        }
-
-        nextBytesFill(this, bytes, start, len);
-    }
-
-    /**
-     * Generates random bytes and places them into a user-supplied array.
-     *
-     * <p>
-     * The array is filled with bytes extracted from random {@code int} values.
-     * This implies that the number of random bytes generated may be larger 
than
-     * the length of the byte array.
-     * </p>
-     *
-     * @param source Source of randomness.
-     * @param bytes Array in which to put the generated bytes. Cannot be null.
-     * @param start Index at which to start inserting the generated bytes.
-     * @param len Number of bytes to insert.
-     */
-    static void nextBytesFill(RandomIntSource source,
-                              byte[] bytes,
-                              int start,
-                              int len) {
-        int index = start; // Index of first insertion.
-
-        // Index of first insertion plus multiple of 4 part of length
-        // (i.e. length with 2 least significant bits unset).
-        final int indexLoopLimit = index + (len & 0x7ffffffc);
-
-        // Start filling in the byte array, 4 bytes at a time.
-        while (index < indexLoopLimit) {
-            final int random = source.next();
-            bytes[index++] = (byte) random;
-            bytes[index++] = (byte) (random >>> 8);
-            bytes[index++] = (byte) (random >>> 16);
-            bytes[index++] = (byte) (random >>> 24);
-        }
-
-        final int indexLimit = start + len; // Index of last insertion + 1.
-
-        // Fill in the remaining bytes.
-        if (index < indexLimit) {
-            int random = source.next();
-            while (true) {
-                bytes[index++] = (byte) random;
-                if (index < indexLimit) {
-                    random >>>= 8;
-                } else {
-                    break;
-                }
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/JDKRandom.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/JDKRandom.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/JDKRandom.java
deleted file mode 100644
index e393c12..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/JDKRandom.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-import java.util.Random;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-
-/**
- * A provider that uses the {@link Random#nextInt()} method of the JDK's
- * {@code Random} class as the source of randomness.
- *
- * <p>
- * <b>Caveat:</b> All the other calls will be redirected to the methods
- * implemented within this library.
- * </p>
- *
- * <p>
- * The state of this source of randomness is saved and restored through
- * the serialization of the {@link Random} instance.
- * </p>
- *
- * @since 4.0
- */
-public class JDKRandom extends IntProvider {
-    /** Delegate.  Cannot be "final" (to allow serialization). */
-    private Random delegate;
-
-    /**
-     * Creates an instance with the given seed.
-     *
-     * @param seed Initial seed.
-     */
-    public JDKRandom(Long seed) {
-        delegate = new Random(seed);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @see Random#nextInt()
-     */
-    @Override
-    public int next() {
-        return delegate.nextInt();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected byte[] getStateInternal() {
-        try {
-            final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            final ObjectOutputStream oos = new ObjectOutputStream(bos);
-
-            // Serialize the "delegate".
-            oos.writeObject(delegate);
-
-            return bos.toByteArray();
-        } catch (IOException e) {
-            // Workaround checked exception.
-            throw new RuntimeException(e);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void setStateInternal(byte[] s) {
-        try {
-            final ByteArrayInputStream bis = new ByteArrayInputStream(s);
-            final ObjectInputStream ois = new ObjectInputStream(bis);
-
-            delegate = (Random) ois.readObject();
-        } catch (ClassNotFoundException|IOException e) {
-            // Workaround checked exception.
-            throw new RuntimeException(e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/MersenneTwister.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/MersenneTwister.java
 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/MersenneTwister.java
deleted file mode 100644
index 7ae5fd8..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/MersenneTwister.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-import java.util.Arrays;
-import org.apache.commons.math4.exception.InsufficientDataException;
-import org.apache.commons.math4.rng.internal.util.NumberFactory;
-
-/**
- * This class implements a powerful pseudo-random number generator
- * developed by Makoto Matsumoto and Takuji Nishimura during
- * 1996-1997.
- *
- * <p>
- * This generator features an extremely long period
- * (2<sup>19937</sup>-1) and 623-dimensional equidistribution up to
- * 32 bits accuracy.  The home page for this generator is located at
- * <a href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html";>
- * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html</a>.
- * </p>
- *
- * <p>
- * This generator is described in a paper by Makoto Matsumoto and
- * Takuji Nishimura in 1998:
- * <a href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.pdf";>
- * Mersenne Twister: A 623-Dimensionally Equidistributed Uniform Pseudo-Random
- * Number Generator</a>,
- * ACM Transactions on Modeling and Computer Simulation, Vol. 8, No. 1,
- * January 1998, pp 3--30
- * </p>
- *
- * <p>
- * This class is mainly a Java port of the
- * <a 
href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html";>
- * 2002-01-26 version of the generator</a> written in C by Makoto Matsumoto
- * and Takuji Nishimura. Here is their original copyright:
- * </p>
- *
- * <table border="0" width="80%" cellpadding="10" align="center" 
bgcolor="#E0E0E0">
- * <tr><td>Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
- *     All rights reserved.</td></tr>
- *
- * <tr><td>Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * <ol>
- *   <li>Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.</li>
- *   <li>Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the 
distribution.</li>
- *   <li>The names of its contributors may not be used to endorse or promote
- *       products derived from this software without specific prior written
- *       permission.</li>
- * </ol></td></tr>
- *
- * <tr><td><strong>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.</strong></td></tr>
- * </table>
- *
- * @since 4.0
- */
-public class MersenneTwister extends IntProvider {
-    /** Mask 32 most significant bits. */
-    private static final long INT_MASK_LONG = 0xffffffffL;
-    /** Most significant w-r bits. */
-    private static final long UPPER_MASK_LONG = 0x80000000L;
-    /** Least significant r bits */
-    private static final long LOWER_MASK_LONG = 0x7fffffffL;
-    /** Most significant w-r bits. */
-    private static final int UPPER_MASK = 0x80000000;
-    /** Least significant r bits */
-    private static final int LOWER_MASK = 0x7fffffff;
-    /** Size of the bytes pool. */
-    private static final int N = 624;
-    /** Period second parameter. */
-    private static final int M = 397;
-    /** X * MATRIX_A for X = {0, 1}. */
-    private static final int[] MAG01 = { 0x0, 0x9908b0df };
-    /** Bytes pool. */
-    private int[] mt = new int[N];
-    /** Current index in the bytes pool. */
-    private int mti;
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public MersenneTwister(int[] seed) {
-        setSeedInternal(seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected byte[] getStateInternal() {
-        final int[] s = Arrays.copyOf(mt, N + 1);
-        s[N] = mti;
-
-        return NumberFactory.makeByteArray(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void setStateInternal(byte[] s) {
-        if (s.length != (N + 1) * 4) {
-            throw new InsufficientDataException();
-        }
-
-        final int[] tmp = NumberFactory.makeIntArray(s);
-
-        System.arraycopy(tmp, 0, mt, 0, N);
-        mti = tmp[N];
-    }
-
-    /**
-     * Reinitializes the generator as if just built with the given seed.
-     *
-     * @param seed Initial seed.
-     */
-    private void setSeedInternal(int[] seed) {
-        initState(19650218);
-        int i = 1;
-        int j = 0;
-
-        for (int k = Math.max(N, seed.length); k != 0; k--) {
-            final long l0 = (mt[i] & LOWER_MASK_LONG)   | ((mt[i]   < 0) ? 
UPPER_MASK_LONG : 0);
-            final long l1 = (mt[i-1] & LOWER_MASK_LONG) | ((mt[i-1] < 0) ? 
UPPER_MASK_LONG : 0);
-            final long l  = (l0 ^ ((l1 ^ (l1 >> 30)) * 1664525l)) + seed[j] + 
j; // non linear
-            mt[i]   = (int) (l & INT_MASK_LONG);
-            i++; j++;
-            if (i >= N) {
-                mt[0] = mt[N - 1];
-                i = 1;
-            }
-            if (j >= seed.length) {
-                j = 0;
-            }
-        }
-
-        for (int k = N - 1; k != 0; k--) {
-            final long l0 = (mt[i] & LOWER_MASK_LONG)   | ((mt[i]   < 0) ? 
UPPER_MASK_LONG : 0);
-            final long l1 = (mt[i-1] & LOWER_MASK_LONG) | ((mt[i-1] < 0) ? 
UPPER_MASK_LONG : 0);
-            final long l  = (l0 ^ ((l1 ^ (l1 >> 30)) * 1566083941l)) - i; // 
non linear
-            mt[i]   = (int) (l & INT_MASK_LONG);
-            i++;
-            if (i >= N) {
-                mt[0] = mt[N - 1];
-                i = 1;
-            }
-        }
-
-        mt[0] = UPPER_MASK; // MSB is 1; assuring non-zero initial array
-    }
-
-    /**
-     * Initialize the internal state of this instance.
-     *
-     * @param seed Seed.
-     */
-    private void initState(int seed) {
-        long longMT = seed & INT_MASK_LONG;
-        mt[0]= (int) longMT;
-        for (mti = 1; mti < N; ++mti) {
-            longMT = (1812433253L * (longMT ^ (longMT >> 30)) + mti) & 
INT_MASK_LONG;
-            mt[mti]= (int) longMT;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        int y;
-
-        if (mti >= N) { // Generate N words at one time.
-            int mtNext = mt[0];
-            for (int k = 0; k < N - M; ++k) {
-                int mtCurr = mtNext;
-                mtNext = mt[k + 1];
-                y = (mtCurr & UPPER_MASK) | (mtNext & LOWER_MASK);
-                mt[k] = mt[k + M] ^ (y >>> 1) ^ MAG01[y & 1];
-            }
-            for (int k = N - M; k < N - 1; ++k) {
-                int mtCurr = mtNext;
-                mtNext = mt[k + 1];
-                y = (mtCurr & UPPER_MASK) | (mtNext & LOWER_MASK);
-                mt[k] = mt[k + (M - N)] ^ (y >>> 1) ^ MAG01[y & 1];
-            }
-            y = (mtNext & UPPER_MASK) | (mt[0] & LOWER_MASK);
-            mt[N - 1] = mt[M - 1] ^ (y >>> 1) ^ MAG01[y & 1];
-
-            mti = 0;
-        }
-
-        y = mt[mti++];
-
-        // Tempering.
-        y ^=  y >>> 11;
-        y ^= (y << 7) & 0x9d2c5680;
-        y ^= (y << 15) & 0xefc60000;
-        y ^=  y >>> 18;
-
-        return y;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/RandomIntSource.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/RandomIntSource.java
 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/RandomIntSource.java
deleted file mode 100644
index 88f420c..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/RandomIntSource.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * Source of randomness that generate values of type {@code int}.
- *
- * @since 4.0
- */
-public interface RandomIntSource {
-    /**
-     * @return the next random value.
-     */
-    int next();
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/Well1024a.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well1024a.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/Well1024a.java
deleted file mode 100644
index 86c84c3..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well1024a.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * This class implements the WELL1024a pseudo-random number generator
- * from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- * @since 4.0
- */
-public class Well1024a extends AbstractWell {
-    /** Number of bits in the pool. */
-    private static final int K = 1024;
-    /** First parameter of the algorithm. */
-    private static final int M1 = 3;
-    /** Second parameter of the algorithm. */
-    private static final int M2 = 24;
-    /** Third parameter of the algorithm. */
-    private static final int M3 = 10;
-    /** The indirection index table. */
-    private static final IndexTable TABLE = new IndexTable(K, M1, M2, M3);
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public Well1024a(int[] seed) {
-        super(K, seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        final int indexRm1 = TABLE.getIndexPred(index);
-
-        final int v0 = v[index];
-        final int vM1 = v[TABLE.getIndexM1(index)];
-        final int vM2 = v[TABLE.getIndexM2(index)];
-        final int vM3 = v[TABLE.getIndexM3(index)];
-
-        final int z0 = v[indexRm1];
-        final int z1 = v0 ^ (vM1 ^ (vM1 >>> 8));
-        final int z2 = (vM2 ^ (vM2 << 19)) ^ (vM3 ^ (vM3 << 14));
-        final int z3 = z1 ^ z2;
-        final int z4 = (z0 ^ (z0 << 11)) ^ (z1 ^ (z1 << 7)) ^ (z2 ^ (z2 << 
13));
-
-        v[index] = z3;
-        v[indexRm1] = z4;
-        index = indexRm1;
-
-        return z4;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937a.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937a.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937a.java
deleted file mode 100644
index 7f83ddf..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937a.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * This class implements the WELL19937a pseudo-random number generator
- * from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- * @since 4.0
- */
-public class Well19937a extends AbstractWell {
-    /** Number of bits in the pool. */
-    private static final int K = 19937;
-    /** First parameter of the algorithm. */
-    private static final int M1 = 70;
-    /** Second parameter of the algorithm. */
-    private static final int M2 = 179;
-    /** Third parameter of the algorithm. */
-    private static final int M3 = 449;
-    /** The indirection index table. */
-    private static final IndexTable TABLE = new IndexTable(K, M1, M2, M3);
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public Well19937a(int[] seed) {
-        super(K, seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        final int indexRm1 = TABLE.getIndexPred(index);
-        final int indexRm2 = TABLE.getIndexPred2(index);
-
-        final int v0 = v[index];
-        final int vM1 = v[TABLE.getIndexM1(index)];
-        final int vM2 = v[TABLE.getIndexM2(index)];
-        final int vM3 = v[TABLE.getIndexM3(index)];
-
-        final int z0 = (0x80000000 & v[indexRm1]) ^ (0x7FFFFFFF & v[indexRm2]);
-        final int z1 = (v0 ^ (v0 << 25)) ^ (vM1 ^ (vM1 >>> 27));
-        final int z2 = (vM2 >>> 9) ^ (vM3 ^ (vM3 >>> 1));
-        final int z3 = z1 ^ z2;
-        final int z4 = z0 ^ (z1 ^ (z1 << 9)) ^ (z2 ^ (z2 << 21)) ^ (z3 ^ (z3 
>>> 21));
-
-        v[index] = z3;
-        v[indexRm1] = z4;
-        v[indexRm2] &= 0x80000000;
-        index = indexRm1;
-
-        return z4;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937c.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937c.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937c.java
deleted file mode 100644
index 25b9d03..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well19937c.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * This class implements the WELL19937c pseudo-random number generator
- * from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- * @since 2.2
- */
-public class Well19937c extends AbstractWell {
-    /** Number of bits in the pool. */
-    private static final int K = 19937;
-    /** First parameter of the algorithm. */
-    private static final int M1 = 70;
-    /** Second parameter of the algorithm. */
-    private static final int M2 = 179;
-    /** Third parameter of the algorithm. */
-    private static final int M3 = 449;
-    /** The indirection index table. */
-    private static final IndexTable TABLE = new IndexTable(K, M1, M2, M3);
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public Well19937c(int[] seed) {
-        super(K, seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        final int indexRm1 = TABLE.getIndexPred(index);
-        final int indexRm2 = TABLE.getIndexPred2(index);
-
-        final int v0 = v[index];
-        final int vM1 = v[TABLE.getIndexM1(index)];
-        final int vM2 = v[TABLE.getIndexM2(index)];
-        final int vM3 = v[TABLE.getIndexM3(index)];
-
-        final int z0 = (0x80000000 & v[indexRm1]) ^ (0x7FFFFFFF & v[indexRm2]);
-        final int z1 = (v0 ^ (v0 << 25)) ^ (vM1 ^ (vM1 >>> 27));
-        final int z2 = (vM2 >>> 9) ^ (vM3 ^ (vM3 >>> 1));
-        final int z3 = z1 ^ z2;
-        int z4 = z0 ^ (z1 ^ (z1 << 9)) ^ (z2 ^ (z2 << 21)) ^ (z3 ^ (z3 >>> 
21));
-
-        v[index] = z3;
-        v[indexRm1] = z4;
-        v[indexRm2] &= 0x80000000;
-        index = indexRm1;
-
-        // add Matsumoto-Kurita tempering
-        // to get a maximally-equidistributed generator
-        z4 ^= (z4 <<  7) & 0xe46e1700;
-        z4 ^= (z4 << 15) & 0x9b868000;
-
-        return z4;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497a.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497a.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497a.java
deleted file mode 100644
index 8b72b83..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497a.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * This class implements the WELL44497a pseudo-random number generator
- * from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- * @since 4.0
- */
-public class Well44497a extends AbstractWell {
-    /** Number of bits in the pool. */
-    private static final int K = 44497;
-    /** First parameter of the algorithm. */
-    private static final int M1 = 23;
-    /** Second parameter of the algorithm. */
-    private static final int M2 = 481;
-    /** Third parameter of the algorithm. */
-    private static final int M3 = 229;
-    /** The indirection index table. */
-    private static final IndexTable TABLE = new IndexTable(K, M1, M2, M3);
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public Well44497a(int[] seed) {
-        super(K, seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        final int indexRm1 = TABLE.getIndexPred(index);
-        final int indexRm2 = TABLE.getIndexPred2(index);
-
-        final int v0 = v[index];
-        final int vM1 = v[TABLE.getIndexM1(index)];
-        final int vM2 = v[TABLE.getIndexM2(index)];
-        final int vM3 = v[TABLE.getIndexM3(index)];
-
-        // the values below include the errata of the original article
-        final int z0 = (0xFFFF8000 & v[indexRm1]) ^ (0x00007FFF & v[indexRm2]);
-        final int z1 = (v0 ^ (v0 << 24)) ^ (vM1 ^ (vM1 >>> 30));
-        final int z2 = (vM2 ^ (vM2 << 10)) ^ (vM3 << 26);
-        final int z3 = z1 ^ z2;
-        final int z2Prime  = ((z2 << 9) ^ (z2 >>> 23)) & 0xfbffffff;
-        final int z2Second = ((z2 & 0x00020000) != 0) ? (z2Prime ^ 0xb729fcec) 
: z2Prime;
-        final int z4 = z0 ^ (z1 ^ (z1 >>> 20)) ^ z2Second ^ z3;
-
-        v[index] = z3;
-        v[indexRm1] = z4;
-        v[indexRm2] &= 0xFFFF8000;
-        index = indexRm1;
-
-        return z4;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497b.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497b.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497b.java
deleted file mode 100644
index 5300aba..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well44497b.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * This class implements the WELL44497b pseudo-random number generator
- * from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- * @since 4.0
- */
-public class Well44497b extends AbstractWell {
-    /** Number of bits in the pool. */
-    private static final int K = 44497;
-    /** First parameter of the algorithm. */
-    private static final int M1 = 23;
-    /** Second parameter of the algorithm. */
-    private static final int M2 = 481;
-    /** Third parameter of the algorithm. */
-    private static final int M3 = 229;
-    /** The indirection index table. */
-    private static final IndexTable TABLE = new IndexTable(K, M1, M2, M3);
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public Well44497b(int[] seed) {
-        super(K, seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        // compute raw value given by WELL44497a generator
-        // which is NOT maximally-equidistributed
-        final int indexRm1 = TABLE.getIndexPred(index);
-        final int indexRm2 = TABLE.getIndexPred2(index);
-
-        final int v0 = v[index];
-        final int vM1 = v[TABLE.getIndexM1(index)];
-        final int vM2 = v[TABLE.getIndexM2(index)];
-        final int vM3 = v[TABLE.getIndexM3(index)];
-
-        // the values below include the errata of the original article
-        final int z0 = (0xFFFF8000 & v[indexRm1]) ^ (0x00007FFF & v[indexRm2]);
-        final int z1 = (v0 ^ (v0 << 24))  ^ (vM1 ^ (vM1 >>> 30));
-        final int z2 = (vM2 ^ (vM2 << 10)) ^ (vM3 << 26);
-        final int z3 = z1 ^ z2;
-        final int z2Prime = ((z2 << 9) ^ (z2 >>> 23)) & 0xfbffffff;
-        final int z2Second = ((z2 & 0x00020000) != 0) ? (z2Prime ^ 0xb729fcec) 
: z2Prime;
-        int z4 = z0 ^ (z1 ^ (z1 >>> 20)) ^ z2Second ^ z3;
-
-        v[index] = z3;
-        v[indexRm1] = z4;
-        v[indexRm2] &= 0xFFFF8000;
-        index = indexRm1;
-
-        // add Matsumoto-Kurita tempering
-        // to get a maximally-equidistributed generator
-        z4 ^= (z4 <<  7) & 0x93dd1400;
-        z4 ^= (z4 << 15) & 0xfa118000;
-
-        return z4;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/Well512a.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well512a.java 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/Well512a.java
deleted file mode 100644
index 1faf571..0000000
--- a/src/main/java/org/apache/commons/math4/rng/internal/source32/Well512a.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.math4.rng.internal.source32;
-
-/**
- * This class implements the WELL512a pseudo-random number generator
- * from Fran&ccedil;ois Panneton, Pierre L'Ecuyer and Makoto Matsumoto.
- * <p>
- * This generator is described in a paper by Fran&ccedil;ois Panneton,
- * Pierre L'Ecuyer and Makoto Matsumoto
- * <a href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf";>
- * Improved Long-Period Generators Based on Linear Recurrences Modulo 2</a>
- * ACM Transactions on Mathematical Software, 32, 1 (2006).
- * The errata for the paper are in
- * <a 
href="http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng-errata.txt";>wellrng-errata.txt</a>.
- * </p>
- *
- * @see <a href="http://www.iro.umontreal.ca/~panneton/WELLRNG.html";>WELL 
Random number generator</a>
- * @since 4.0
- */
-public class Well512a extends AbstractWell {
-    /** Number of bits in the pool. */
-    private static final int K = 512;
-    /** First parameter of the algorithm. */
-    private static final int M1 = 13;
-    /** Second parameter of the algorithm. */
-    private static final int M2 = 9;
-    /** Third parameter of the algorithm. */
-    private static final int M3 = 5;
-    /** The indirection index table. */
-    private static final IndexTable TABLE = new IndexTable(K, M1, M2, M3);
-
-    /**
-     * Creates a new random number generator.
-     *
-     * @param seed Initial seed.
-     */
-    public Well512a(int[] seed) {
-        super(K, seed);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int next() {
-        final int indexRm1 = TABLE.getIndexPred(index);
-
-        final int vi = v[index];
-        final int vi1 = v[TABLE.getIndexM1(index)];
-        final int vi2 = v[TABLE.getIndexM2(index)];
-        final int z0 = v[indexRm1];
-
-        // the values below include the errata of the original article
-        final int z1 = (vi ^ (vi << 16)) ^ (vi1 ^ (vi1 << 15));
-        final int z2 = vi2 ^ (vi2 >>> 11);
-        final int z3 = z1 ^ z2;
-        final int z4 = (z0 ^ (z0 << 2)) ^ (z1 ^ (z1 << 18)) ^ (z2 << 28) ^ (z3 
^ ((z3 << 5) & 0xda442d24));
-
-        v[index] = z3;
-        v[indexRm1] = z4;
-        index = indexRm1;
-
-        return z4;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source32/package-info.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/package-info.java
 
b/src/main/java/org/apache/commons/math4/rng/internal/source32/package-info.java
deleted file mode 100644
index bb7d2e2..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source32/package-info.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <h3>
- * Concrete algorithms for {@code int}-based sources of randomness
- * </h3>
- *
- * <p>
- * <b>For internal use only:</b> Direct access to classes in this package
- * is discouraged, as they could be modified without notice.
- * </p>
- *
- * <p><b>Notes for developers</b></p>
- *
- * <ul>
- *  <li>
- *   A source of randomness must inherit from
- *   {@link org.apache.commons.math4.rng.internal.source32.IntProvider}
- *  </li>
- *  <li>
- *   The "provider" must specify <em>one</em> way for setting the seed.
- *   For a given seed, the generated sequence must always be the same.
- *  </li>
- *  <li>
- *   The "provider" must implement methods {@code getStateInternal} and
- *   {@code setStateInternal} in order to save and restore the state of an
- *   instance (cf. {@link org.apache.commons.math4.rng.internal.BaseProvider}).
- *  </li>
- *  <li>
- *   When a new class is implemented here, user-access to it must be provided
- *   through associated {@link org.apache.commons.math4.rng.RandomSource
- *   factory methods}.
- *  </li>
- * </ul>
- */
-
-package org.apache.commons.math4.rng.internal.source32;

http://git-wip-us.apache.org/repos/asf/commons-math/blob/eeeb553c/src/main/java/org/apache/commons/math4/rng/internal/source64/LongProvider.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/rng/internal/source64/LongProvider.java
 
b/src/main/java/org/apache/commons/math4/rng/internal/source64/LongProvider.java
deleted file mode 100644
index 3e73f05..0000000
--- 
a/src/main/java/org/apache/commons/math4/rng/internal/source64/LongProvider.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.math4.rng.internal.source64;
-
-import org.apache.commons.math4.exception.OutOfRangeException;
-import org.apache.commons.math4.rng.internal.util.NumberFactory;
-import org.apache.commons.math4.rng.internal.BaseProvider;
-
-/**
- * Base class for all implementations that provide a {@code long}-based
- * source randomness.
- */
-public abstract class LongProvider
-    extends BaseProvider
-    implements RandomLongSource {
-
-    /** {@inheritDoc} */
-    @Override
-    public abstract long next();
-
-    /** {@inheritDoc} */
-    @Override
-    public long nextLong() {
-        return next();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int nextInt() {
-        return NumberFactory.makeInt(nextLong());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public double nextDouble() {
-        return NumberFactory.makeDouble(nextLong());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public boolean nextBoolean() {
-        return NumberFactory.makeBoolean(nextLong());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public float nextFloat() {
-        return NumberFactory.makeFloat(nextInt());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void nextBytes(byte[] bytes) {
-        nextBytesFill(this, bytes, 0, bytes.length);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void nextBytes(byte[] bytes,
-                          int start,
-                          int len) {
-        if (start < 0 ||
-            start >= bytes.length) {
-            throw new OutOfRangeException(start, 0, bytes.length);
-        }
-        if (len < 0 ||
-            len > bytes.length - start) {
-            throw new OutOfRangeException(len, 0, bytes.length - start);
-        }
-
-        nextBytesFill(this, bytes, start, len);
-    }
-
-    /**
-     * Generates random bytes and places them into a user-supplied array.
-     *
-     * <p>
-     * The array is filled with bytes extracted from random {@code long} 
values.
-     * This implies that the number of random bytes generated may be larger 
than
-     * the length of the byte array.
-     * </p>
-     *
-     * @param source Source of randomness.
-     * @param bytes Array in which to put the generated bytes. Cannot be null.
-     * @param start Index at which to start inserting the generated bytes.
-     * @param len Number of bytes to insert.
-     */
-    static void nextBytesFill(RandomLongSource source,
-                              byte[] bytes,
-                              int start,
-                              int len) {
-        int index = start; // Index of first insertion.
-
-        // Index of first insertion plus multiple of 8 part of length
-        // (i.e. length with 3 least significant bits unset).
-        final int indexLoopLimit = index + (len & 0x7ffffff8);
-
-        // Start filling in the byte array, 8 bytes at a time.
-        while (index < indexLoopLimit) {
-            final long random = source.next();
-            bytes[index++] = (byte) random;
-            bytes[index++] = (byte) (random >>> 8);
-            bytes[index++] = (byte) (random >>> 16);
-            bytes[index++] = (byte) (random >>> 24);
-            bytes[index++] = (byte) (random >>> 32);
-            bytes[index++] = (byte) (random >>> 40);
-            bytes[index++] = (byte) (random >>> 48);
-            bytes[index++] = (byte) (random >>> 56);
-        }
-
-        final int indexLimit = start + len; // Index of last insertion + 1.
-
-        // Fill in the remaining bytes.
-        if (index < indexLimit) {
-            long random = source.next();
-            while (true) {
-                bytes[index++] = (byte) random;
-                if (index < indexLimit) {
-                    random >>>= 8;
-                } else {
-                    break;
-                }
-            }
-        }
-    }
-}

Reply via email to