You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2022/01/06 00:07:43 UTC

[commons-math] 01/04: MATH-1594: Remove "Serializable".

This is an automated email from the ASF dual-hosted git repository.

erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-math.git

commit c6d5f4b65fc589a715c82d3c643a85dacbc0d1ac
Author: Gilles Sadowski <gi...@gmail.com>
AuthorDate: Thu Dec 30 16:10:46 2021 +0100

    MATH-1594: Remove "Serializable".
---
 .../apache/commons/math4/neuralnet/Network.java    | 196 +++++++--------------
 .../org/apache/commons/math4/neuralnet/Neuron.java |  57 +-----
 .../neuralnet/internal/NeuralNetException.java     |   4 +
 .../commons/math4/neuralnet/oned/NeuronString.java |  64 +------
 .../math4/neuralnet/twod/NeuronSquareMesh2D.java   |  90 +---------
 .../commons/math4/neuralnet/NetworkTest.java       |  39 ----
 .../apache/commons/math4/neuralnet/NeuronTest.java |  25 ---
 .../math4/neuralnet/oned/NeuronStringTest.java     |  36 ----
 .../neuralnet/twod/NeuronSquareMesh2DTest.java     |  39 ----
 9 files changed, 75 insertions(+), 475 deletions(-)

diff --git a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Network.java b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Network.java
index 19101a4..946d85f 100644
--- a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Network.java
+++ b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Network.java
@@ -17,8 +17,6 @@
 
 package org.apache.commons.math4.neuralnet;
 
-import java.io.Serializable;
-import java.io.ObjectInputStream;
 import java.util.NoSuchElementException;
 import java.util.List;
 import java.util.ArrayList;
@@ -45,10 +43,7 @@ import org.apache.commons.math4.neuralnet.internal.NeuralNetException;
  * @since 3.3
  */
 public class Network
-    implements Iterable<Neuron>,
-               Serializable {
-    /** Serializable. */
-    private static final long serialVersionUID = 20130207L;
+    implements Iterable<Neuron> {
     /** Neurons. */
     private final ConcurrentHashMap<Long, Neuron> neuronMap
         = new ConcurrentHashMap<>();
@@ -65,11 +60,7 @@ public class Network
      * to the increasing order of their identifier.
      */
     public static class NeuronIdentifierComparator
-        implements Comparator<Neuron>,
-                   Serializable {
-        /** Version identifier. */
-        private static final long serialVersionUID = 20130207L;
-
+        implements Comparator<Neuron> {
         /** {@inheritDoc} */
         @Override
         public int compare(Neuron a,
@@ -82,59 +73,59 @@ public class Network
     }
 
     /**
-     * Constructor with restricted access, solely used for deserialization.
+     * @param firstId Identifier of the first neuron that will be added
+     * to this network.
+     * @param featureSize Size of the neuron's features.
+     */
+    public Network(long firstId,
+                   int featureSize) {
+        this.nextId = new AtomicLong(firstId);
+        this.featureSize = featureSize;
+    }
+
+    /**
+     * Builds a network from a list of neurons and their neighbours.
      *
-     * @param nextId Next available identifier.
      * @param featureSize Number of features.
-     * @param neuronList Neurons.
+     * @param idList List of neuron identifiers.
+     * @param featureList List of neuron features.
      * @param neighbourIdList Links associated to each of the neurons in
-     * {@code neuronList}.
-     * @throws IllegalStateException if an inconsistency is detected
-     * (which probably means that the serialized form has been corrupted).
+     * {@code idList}.
+     * @throws IllegalArgumentException if an inconsistency is detected.
      */
-    Network(long nextId,
-            int featureSize,
-            Neuron[] neuronList,
-            long[][] neighbourIdList) {
-        final int numNeurons = neuronList.length;
-        if (numNeurons != neighbourIdList.length) {
-            throw new IllegalStateException();
+    public static Network from(int featureSize,
+                               long[] idList,
+                               double[][] featureList,
+                               long[][] neighbourIdList) {
+        final int numNeurons = idList.length;
+        if (idList.length != featureList.length) {
+            throw new NeuralNetException(NeuralNetException.SIZE_MISMATCH,
+                                         idList.length, featureList.length);
         }
+        if (idList.length != neighbourIdList.length) {
+            throw new NeuralNetException(NeuralNetException.SIZE_MISMATCH,
+                                         idList.length, neighbourIdList.length);
+        }
+
+        final Network net = new Network(Long.MIN_VALUE, featureSize);
 
         for (int i = 0; i < numNeurons; i++) {
-            final Neuron n = neuronList[i];
-            final long id = n.getIdentifier();
-            if (id >= nextId) {
-                throw new IllegalStateException();
-            }
-            neuronMap.put(id, n);
-            linkMap.put(id, new HashSet<Long>());
+            final long id = idList[i];
+            net.createNeuron(id, featureList[i]);
         }
 
         for (int i = 0; i < numNeurons; i++) {
-            final long aId = neuronList[i].getIdentifier();
-            final Set<Long> aLinks = linkMap.get(aId);
-            for (final Long bId : neighbourIdList[i]) {
-                if (neuronMap.get(bId) == null) {
-                    throw new IllegalStateException();
+            final Neuron a = net.getNeuron(idList[i]);
+            for (final long id : neighbourIdList[i]) {
+                final Neuron b = net.neuronMap.get(id);
+                if (b == null) {
+                    throw new NeuralNetException(NeuralNetException.ID_NOT_FOUND, id);
                 }
-                addLinkToLinkSet(aLinks, bId);
+                net.addLink(a, b);
             }
         }
 
-        this.nextId = new AtomicLong(nextId);
-        this.featureSize = featureSize;
-    }
-
-    /**
-     * @param initialIdentifier Identifier for the first neuron that
-     * will be added to this network.
-     * @param featureSize Size of the neuron's features.
-     */
-    public Network(long initialIdentifier,
-                   int featureSize) {
-        nextId = new AtomicLong(initialIdentifier);
-        this.featureSize = featureSize;
+        return net;
     }
 
     /**
@@ -195,14 +186,35 @@ public class Network
      * {@link #Network(long,int) constructor}).
      */
     public long createNeuron(double[] features) {
+        return createNeuron(createNextId(), features);
+    }
+
+    /**
+     * @param id Identifier.
+     * @param features Features.
+     * @return {@¢ode id}.
+     * @throws IllegalArgumentException if the identifier is already used
+     * by a neuron that belongs to this network or the features size does
+     * not match the expected value.
+     */
+    private long createNeuron(long id,
+                              double[] features) {
+        if (neuronMap.get(id) != null) {
+            throw new NeuralNetException(NeuralNetException.ID_IN_USE, id);
+        }
+
         if (features.length != featureSize) {
             throw new NeuralNetException(NeuralNetException.SIZE_MISMATCH,
                                          features.length, featureSize);
         }
 
-        final long id = createNextId();
-        neuronMap.put(id, new Neuron(id, features));
+        neuronMap.put(id, new Neuron(id, features.clone()));
         linkMap.put(id, new HashSet<Long>());
+
+        if (id > nextId.get()) {
+            nextId.set(id);
+        }
+
         return id;
     }
 
@@ -404,84 +416,4 @@ public class Network
     private Long createNextId() {
         return nextId.getAndIncrement();
     }
-
-    /**
-     * Prevents proxy bypass.
-     *
-     * @param in Input stream.
-     */
-    private void readObject(ObjectInputStream in) {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * Custom serialization.
-     *
-     * @return the proxy instance that will be actually serialized.
-     */
-    private Object writeReplace() {
-        final Neuron[] neuronList = neuronMap.values().toArray(new Neuron[0]);
-        final long[][] neighbourIdList = new long[neuronList.length][];
-
-        for (int i = 0; i < neuronList.length; i++) {
-            final Collection<Neuron> neighbours = getNeighbours(neuronList[i]);
-            final long[] neighboursId = new long[neighbours.size()];
-            int count = 0;
-            for (final Neuron n : neighbours) {
-                neighboursId[count] = n.getIdentifier();
-                ++count;
-            }
-            neighbourIdList[i] = neighboursId;
-        }
-
-        return new SerializationProxy(nextId.get(),
-                                      featureSize,
-                                      neuronList,
-                                      neighbourIdList);
-    }
-
-    /**
-     * Serialization.
-     */
-    private static class SerializationProxy implements Serializable {
-        /** Serializable. */
-        private static final long serialVersionUID = 20130207L;
-        /** Next identifier. */
-        private final long nextId;
-        /** Number of features. */
-        private final int featureSize;
-        /** Neurons. */
-        private final Neuron[] neuronList;
-        /** Links. */
-        private final long[][] neighbourIdList;
-
-        /**
-         * @param nextId Next available identifier.
-         * @param featureSize Number of features.
-         * @param neuronList Neurons.
-         * @param neighbourIdList Links associated to each of the neurons in
-         * {@code neuronList}.
-         */
-        SerializationProxy(long nextId,
-                           int featureSize,
-                           Neuron[] neuronList,
-                           long[][] neighbourIdList) {
-            this.nextId = nextId;
-            this.featureSize = featureSize;
-            this.neuronList = neuronList;
-            this.neighbourIdList = neighbourIdList;
-        }
-
-        /**
-         * Custom serialization.
-         *
-         * @return the {@link Network} for which this instance is the proxy.
-         */
-        private Object readResolve() {
-            return new Network(nextId,
-                               featureSize,
-                               neuronList,
-                               neighbourIdList);
-        }
-    }
 }
diff --git a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Neuron.java b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Neuron.java
index 2032ca3..174cadd 100644
--- a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Neuron.java
+++ b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/Neuron.java
@@ -17,8 +17,6 @@
 
 package org.apache.commons.math4.neuralnet;
 
-import java.io.Serializable;
-import java.io.ObjectInputStream;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -32,9 +30,7 @@ import org.apache.commons.math4.neuralnet.internal.NeuralNetException;
  *
  * @since 3.3
  */
-public class Neuron implements Serializable {
-    /** Serializable. */
-    private static final long serialVersionUID = 20130207L;
+public class Neuron {
     /** Identifier. */
     private final long identifier;
     /** Length of the feature set. */
@@ -219,55 +215,4 @@ public class Neuron implements Serializable {
         }
         return true;
     }
-
-    /**
-     * Prevents proxy bypass.
-     *
-     * @param in Input stream.
-     */
-    private void readObject(ObjectInputStream in) {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * Custom serialization.
-     *
-     * @return the proxy instance that will be actually serialized.
-     */
-    private Object writeReplace() {
-        return new SerializationProxy(identifier,
-                                      features.get());
-    }
-
-    /**
-     * Serialization.
-     */
-    private static class SerializationProxy implements Serializable {
-        /** Serializable. */
-        private static final long serialVersionUID = 20130207L;
-        /** Features. */
-        private final double[] features;
-        /** Identifier. */
-        private final long identifier;
-
-        /**
-         * @param identifier Identifier.
-         * @param features Features.
-         */
-        SerializationProxy(long identifier,
-                           double[] features) {
-            this.identifier = identifier;
-            this.features = features;
-        }
-
-        /**
-         * Custom serialization.
-         *
-         * @return the {@link Neuron} for which this instance is the proxy.
-         */
-        private Object readResolve() {
-            return new Neuron(identifier,
-                              features);
-        }
-    }
 }
diff --git a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/internal/NeuralNetException.java b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/internal/NeuralNetException.java
index 7e4fe9d..3f73c81 100644
--- a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/internal/NeuralNetException.java
+++ b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/internal/NeuralNetException.java
@@ -34,6 +34,10 @@ public class NeuralNetException extends IllegalArgumentException {
     public static final String NO_DATA = "No data";
     /** Error message for "size mismatch" condition. */
     public static final String SIZE_MISMATCH = "Size mismatch: {0} != {1}";
+    /** Error message for "identifier already used" condition. */
+    public static final String ID_IN_USE = "Identifier already in use: {0}";
+    /** Error message for "identifier not found" condition. */
+    public static final String ID_NOT_FOUND = "Identifier not found: {0}";
 
     /** Serializable version identifier. */
     private static final long serialVersionUID = 20210515L;
diff --git a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/oned/NeuronString.java b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/oned/NeuronString.java
index c1cec55..dcef125 100644
--- a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/oned/NeuronString.java
+++ b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/oned/NeuronString.java
@@ -17,9 +17,6 @@
 
 package org.apache.commons.math4.neuralnet.oned;
 
-import java.io.Serializable;
-import java.io.ObjectInputStream;
-
 import org.apache.commons.math4.neuralnet.internal.NeuralNetException;
 import org.apache.commons.math4.neuralnet.FeatureInitializer;
 import org.apache.commons.math4.neuralnet.Network;
@@ -30,9 +27,7 @@ import org.apache.commons.math4.neuralnet.Network;
  *
  * @since 3.3
  */
-public class NeuronString implements Serializable {
-    /** Serial version ID. */
-    private static final long serialVersionUID = 1L;
+public class NeuronString {
     /** Minimal number of neurons. */
     private static final int MIN_NEURONS = 2;
     /** Underlying network. */
@@ -180,61 +175,4 @@ public class NeuronString implements Serializable {
             network.addLink(network.getNeuron(size - 1), network.getNeuron(0));
         }
     }
-
-    /**
-     * Prevents proxy bypass.
-     *
-     * @param in Input stream.
-     */
-    private void readObject(ObjectInputStream in) {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * Custom serialization.
-     *
-     * @return the proxy instance that will be actually serialized.
-     */
-    private Object writeReplace() {
-        final double[][] featuresList = new double[size][];
-        for (int i = 0; i < size; i++) {
-            featuresList[i] = getFeatures(i);
-        }
-
-        return new SerializationProxy(wrap,
-                                      featuresList);
-    }
-
-    /**
-     * Serialization.
-     */
-    private static class SerializationProxy implements Serializable {
-        /** Serializable. */
-        private static final long serialVersionUID = 20130226L;
-        /** Wrap. */
-        private final boolean wrap;
-        /** Neurons' features. */
-        private final double[][] featuresList;
-
-        /**
-         * @param wrap Whether the dimension is wrapped.
-         * @param featuresList List of neurons features.
-         * {@code neuronList}.
-         */
-        SerializationProxy(boolean wrap,
-                           double[][] featuresList) {
-            this.wrap = wrap;
-            this.featuresList = featuresList;
-        }
-
-        /**
-         * Custom serialization.
-         *
-         * @return the {@link NeuronString} for which this instance is the proxy.
-         */
-        private Object readResolve() {
-            return new NeuronString(wrap,
-                                    featuresList);
-        }
-    }
 }
diff --git a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2D.java b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2D.java
index ce666c1..4a6b185 100644
--- a/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2D.java
+++ b/commons-math-neuralnet/src/main/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2D.java
@@ -21,8 +21,6 @@ import java.util.List;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Collection;
-import java.io.Serializable;
-import java.io.ObjectInputStream;
 
 import org.apache.commons.math4.neuralnet.DistanceMeasure;
 import org.apache.commons.math4.neuralnet.EuclideanDistance;
@@ -46,10 +44,7 @@ import org.apache.commons.math4.neuralnet.twod.util.LocationFinder;
  * @since 3.3
  */
 public class NeuronSquareMesh2D
-    implements Iterable<Neuron>,
-               Serializable {
-    /** Serial version ID. */
-    private static final long serialVersionUID = 1L;
+    implements Iterable<Neuron> {
     /** Minimal number of rows or columns. */
     private static final int MIN_ROWS = 2;
     /** Underlying network. */
@@ -97,8 +92,6 @@ public class NeuronSquareMesh2D
     }
 
     /**
-     * Constructor with restricted access, solely used for deserialization.
-     *
      * @param wrapRowDim Whether to wrap the first dimension (i.e the first
      * and last neurons will be linked together).
      * @param wrapColDim Whether to wrap the second dimension (i.e the first
@@ -109,10 +102,10 @@ public class NeuronSquareMesh2D
      * @throws IllegalArgumentException if {@code numRows < 2} or
      * {@code numCols < 2}.
      */
-    NeuronSquareMesh2D(boolean wrapRowDim,
-                       boolean wrapColDim,
-                       SquareNeighbourhood neighbourhoodType,
-                       double[][][] featuresList) {
+    public NeuronSquareMesh2D(boolean wrapRowDim,
+                              boolean wrapColDim,
+                              SquareNeighbourhood neighbourhoodType,
+                              double[][][] featuresList) {
         numberOfRows = featuresList.length;
         numberOfColumns = featuresList[0].length;
 
@@ -572,79 +565,6 @@ public class NeuronSquareMesh2D
     }
 
     /**
-     * Prevents proxy bypass.
-     *
-     * @param in Input stream.
-     */
-    private void readObject(ObjectInputStream in) {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * Custom serialization.
-     *
-     * @return the proxy instance that will be actually serialized.
-     */
-    private Object writeReplace() {
-        final double[][][] featuresList = new double[numberOfRows][numberOfColumns][];
-        for (int i = 0; i < numberOfRows; i++) {
-            for (int j = 0; j < numberOfColumns; j++) {
-                featuresList[i][j] = getNeuron(i, j).getFeatures();
-            }
-        }
-
-        return new SerializationProxy(wrapRows,
-                                      wrapColumns,
-                                      neighbourhood,
-                                      featuresList);
-    }
-
-    /**
-     * Serialization.
-     */
-    private static class SerializationProxy implements Serializable {
-        /** Serializable. */
-        private static final long serialVersionUID = 20130226L;
-        /** Wrap. */
-        private final boolean wrapRows;
-        /** Wrap. */
-        private final boolean wrapColumns;
-        /** Neighbourhood type. */
-        private final SquareNeighbourhood neighbourhood;
-        /** Neurons' features. */
-        private final double[][][] featuresList;
-
-        /**
-         * @param wrapRows Whether the row dimension is wrapped.
-         * @param wrapColumns Whether the column dimension is wrapped.
-         * @param neighbourhood Neighbourhood type.
-         * @param featuresList List of neurons features.
-         * {@code neuronList}.
-         */
-        SerializationProxy(boolean wrapRows,
-                           boolean wrapColumns,
-                           SquareNeighbourhood neighbourhood,
-                           double[][][] featuresList) {
-            this.wrapRows = wrapRows;
-            this.wrapColumns = wrapColumns;
-            this.neighbourhood = neighbourhood;
-            this.featuresList = featuresList;
-        }
-
-        /**
-         * Custom serialization.
-         *
-         * @return the {@link Neuron} for which this instance is the proxy.
-         */
-        private Object readResolve() {
-            return new NeuronSquareMesh2D(wrapRows,
-                                          wrapColumns,
-                                          neighbourhood,
-                                          featuresList);
-        }
-    }
-
-    /**
      * Miscellaneous indicators of the map quality.
      * <ul>
      *  <li>Hit histogram</li>
diff --git a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NetworkTest.java b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NetworkTest.java
index b413bb1..da60ad1 100644
--- a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NetworkTest.java
+++ b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NetworkTest.java
@@ -174,43 +174,4 @@ public class NetworkTest {
         Assert.assertFalse(netNeighbours.contains(netNeuron1));
         Assert.assertTrue(copyNeighbours.contains(copyNeuron1));
     }
-
-    @Test
-    public void testSerialize()
-        throws IOException,
-               ClassNotFoundException {
-        final FeatureInitializer[] initArray = {init};
-        final Network out = new NeuronSquareMesh2D(4, false,
-                                                   3, true,
-                                                   SquareNeighbourhood.VON_NEUMANN,
-                                                   initArray).getNetwork();
-
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(bos);
-        oos.writeObject(out);
-
-        final ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bis);
-        final Network in = (Network) ois.readObject();
-
-        for (Neuron nOut : out) {
-            final Neuron nIn = in.getNeuron(nOut.getIdentifier());
-
-            // Same values.
-            final double[] outF = nOut.getFeatures();
-            final double[] inF = nIn.getFeatures();
-            Assert.assertEquals(outF.length, inF.length);
-            for (int i = 0; i < outF.length; i++) {
-                Assert.assertEquals(outF[i], inF[i], 0d);
-            }
-
-            // Same neighbours.
-            final Collection<Neuron> outNeighbours = out.getNeighbours(nOut);
-            final Collection<Neuron> inNeighbours = in.getNeighbours(nIn);
-            Assert.assertEquals(outNeighbours.size(), inNeighbours.size());
-            for (Neuron oN : outNeighbours) {
-                Assert.assertTrue(inNeighbours.contains(in.getNeuron(oN.getIdentifier())));
-            }
-        }
-    }
 }
diff --git a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NeuronTest.java b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NeuronTest.java
index 682a826..14a8e90 100644
--- a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NeuronTest.java
+++ b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/NeuronTest.java
@@ -111,29 +111,4 @@ public class NeuronTest {
         Assert.assertNotEquals(n.getNumberOfSuccessfulUpdates(),
                                copy.getNumberOfSuccessfulUpdates());
     }
-
-    @Test
-    public void testSerialize()
-        throws IOException,
-               ClassNotFoundException {
-        final Neuron out = new Neuron(123, new double[] {-98.76, -1, 0, 1e-23, 543.21, 1e234});
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(bos);
-        oos.writeObject(out);
-
-        final ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bis);
-        final Neuron in = (Neuron) ois.readObject();
-
-        // Same identifier.
-        Assert.assertEquals(out.getIdentifier(),
-                            in.getIdentifier());
-        // Same values.
-        final double[] outF = out.getFeatures();
-        final double[] inF = in.getFeatures();
-        Assert.assertEquals(outF.length, inF.length);
-        for (int i = 0; i < outF.length; i++) {
-            Assert.assertEquals(outF[i], inF[i], 0d);
-        }
-    }
 }
diff --git a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/oned/NeuronStringTest.java b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/oned/NeuronStringTest.java
index 889ab70..5d63662 100644
--- a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/oned/NeuronStringTest.java
+++ b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/oned/NeuronStringTest.java
@@ -150,40 +150,4 @@ public class NeuronStringTest {
         Assert.assertTrue(neighbours.contains(net.getNeuron(4)));
         Assert.assertEquals(1, neighbours.size());
     }
-
-    @Test
-    public void testSerialize()
-        throws IOException,
-               ClassNotFoundException {
-        final FeatureInitializer[] initArray = {init};
-        final NeuronString out = new NeuronString(4, false, initArray);
-
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(bos);
-        oos.writeObject(out);
-
-        final ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bis);
-        final NeuronString in = (NeuronString) ois.readObject();
-
-        for (Neuron nOut : out.getNetwork()) {
-            final Neuron nIn = in.getNetwork().getNeuron(nOut.getIdentifier());
-
-            // Same values.
-            final double[] outF = nOut.getFeatures();
-            final double[] inF = nIn.getFeatures();
-            Assert.assertEquals(outF.length, inF.length);
-            for (int i = 0; i < outF.length; i++) {
-                Assert.assertEquals(outF[i], inF[i], 0d);
-            }
-
-            // Same neighbours.
-            final Collection<Neuron> outNeighbours = out.getNetwork().getNeighbours(nOut);
-            final Collection<Neuron> inNeighbours = in.getNetwork().getNeighbours(nIn);
-            Assert.assertEquals(outNeighbours.size(), inNeighbours.size());
-            for (Neuron oN : outNeighbours) {
-                Assert.assertTrue(inNeighbours.contains(in.getNetwork().getNeuron(oN.getIdentifier())));
-            }
-        }
-    }
 }
diff --git a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2DTest.java b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2DTest.java
index ec56755..479e559 100644
--- a/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2DTest.java
+++ b/commons-math-neuralnet/src/test/java/org/apache/commons/math4/neuralnet/twod/NeuronSquareMesh2DTest.java
@@ -651,45 +651,6 @@ public class NeuronSquareMesh2DTest {
         Assert.assertEquals(16, neighbours.size());
     }
 
-    @Test
-    public void testSerialize()
-        throws IOException,
-               ClassNotFoundException {
-        final FeatureInitializer[] initArray = {init};
-        final NeuronSquareMesh2D out = new NeuronSquareMesh2D(4, false,
-                                                              3, true,
-                                                              SquareNeighbourhood.VON_NEUMANN,
-                                                              initArray);
-
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(bos);
-        oos.writeObject(out);
-
-        final ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bis);
-        final NeuronSquareMesh2D in = (NeuronSquareMesh2D) ois.readObject();
-
-        for (Neuron nOut : out.getNetwork()) {
-            final Neuron nIn = in.getNetwork().getNeuron(nOut.getIdentifier());
-
-            // Same values.
-            final double[] outF = nOut.getFeatures();
-            final double[] inF = nIn.getFeatures();
-            Assert.assertEquals(outF.length, inF.length);
-            for (int i = 0; i < outF.length; i++) {
-                Assert.assertEquals(outF[i], inF[i], 0d);
-            }
-
-            // Same neighbours.
-            final Collection<Neuron> outNeighbours = out.getNetwork().getNeighbours(nOut);
-            final Collection<Neuron> inNeighbours = in.getNetwork().getNeighbours(nIn);
-            Assert.assertEquals(outNeighbours.size(), inNeighbours.size());
-            for (Neuron oN : outNeighbours) {
-                Assert.assertTrue(inNeighbours.contains(in.getNetwork().getNeuron(oN.getIdentifier())));
-            }
-        }
-    }
-
     /*
      * Test assumes that the network is
      *