001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.math3.stat.descriptive;
018    
019    import java.io.Serializable;
020    
021    import org.apache.commons.math3.util.FastMath;
022    import org.apache.commons.math3.util.MathUtils;
023    import org.apache.commons.math3.util.Precision;
024    
025    /**
026     *  Value object representing the results of a univariate statistical summary.
027     *
028     * @version $Id: StatisticalSummaryValues.java 1416643 2012-12-03 19:37:14Z tn $
029     */
030    public class StatisticalSummaryValues implements Serializable,
031        StatisticalSummary {
032    
033        /** Serialization id */
034        private static final long serialVersionUID = -5108854841843722536L;
035    
036        /** The sample mean */
037        private final double mean;
038    
039        /** The sample variance */
040        private final double variance;
041    
042        /** The number of observations in the sample */
043        private final long n;
044    
045        /** The maximum value */
046        private final double max;
047    
048        /** The minimum value */
049        private final double min;
050    
051        /** The sum of the sample values */
052        private final double sum;
053    
054        /**
055          * Constructor
056          *
057          * @param mean  the sample mean
058          * @param variance  the sample variance
059          * @param n  the number of observations in the sample
060          * @param max  the maximum value
061          * @param min  the minimum value
062          * @param sum  the sum of the values
063         */
064        public StatisticalSummaryValues(double mean, double variance, long n,
065            double max, double min, double sum) {
066            super();
067            this.mean = mean;
068            this.variance = variance;
069            this.n = n;
070            this.max = max;
071            this.min = min;
072            this.sum = sum;
073        }
074    
075        /**
076         * @return Returns the max.
077         */
078        public double getMax() {
079            return max;
080        }
081    
082        /**
083         * @return Returns the mean.
084         */
085        public double getMean() {
086            return mean;
087        }
088    
089        /**
090         * @return Returns the min.
091         */
092        public double getMin() {
093            return min;
094        }
095    
096        /**
097         * @return Returns the number of values.
098         */
099        public long getN() {
100            return n;
101        }
102    
103        /**
104         * @return Returns the sum.
105         */
106        public double getSum() {
107            return sum;
108        }
109    
110        /**
111         * @return Returns the standard deviation
112         */
113        public double getStandardDeviation() {
114            return FastMath.sqrt(variance);
115        }
116    
117        /**
118         * @return Returns the variance.
119         */
120        public double getVariance() {
121            return variance;
122        }
123    
124        /**
125         * Returns true iff <code>object</code> is a
126         * <code>StatisticalSummaryValues</code> instance and all statistics have
127         *  the same values as this.
128         *
129         * @param object the object to test equality against.
130         * @return true if object equals this
131         */
132        @Override
133        public boolean equals(Object object) {
134            if (object == this ) {
135                return true;
136            }
137            if (object instanceof StatisticalSummaryValues == false) {
138                return false;
139            }
140            StatisticalSummaryValues stat = (StatisticalSummaryValues) object;
141            return Precision.equalsIncludingNaN(stat.getMax(),      getMax())  &&
142                   Precision.equalsIncludingNaN(stat.getMean(),     getMean()) &&
143                   Precision.equalsIncludingNaN(stat.getMin(),      getMin())  &&
144                   Precision.equalsIncludingNaN(stat.getN(),        getN())    &&
145                   Precision.equalsIncludingNaN(stat.getSum(),      getSum())  &&
146                   Precision.equalsIncludingNaN(stat.getVariance(), getVariance());
147        }
148    
149        /**
150         * Returns hash code based on values of statistics
151         *
152         * @return hash code
153         */
154        @Override
155        public int hashCode() {
156            int result = 31 + MathUtils.hash(getMax());
157            result = result * 31 + MathUtils.hash(getMean());
158            result = result * 31 + MathUtils.hash(getMin());
159            result = result * 31 + MathUtils.hash(getN());
160            result = result * 31 + MathUtils.hash(getSum());
161            result = result * 31 + MathUtils.hash(getVariance());
162            return result;
163        }
164    
165        /**
166         * Generates a text report displaying values of statistics.
167         * Each statistic is displayed on a separate line.
168         *
169         * @return String with line feeds displaying statistics
170         */
171        @Override
172        public String toString() {
173            StringBuffer outBuffer = new StringBuffer();
174            String endl = "\n";
175            outBuffer.append("StatisticalSummaryValues:").append(endl);
176            outBuffer.append("n: ").append(getN()).append(endl);
177            outBuffer.append("min: ").append(getMin()).append(endl);
178            outBuffer.append("max: ").append(getMax()).append(endl);
179            outBuffer.append("mean: ").append(getMean()).append(endl);
180            outBuffer.append("std dev: ").append(getStandardDeviation())
181                .append(endl);
182            outBuffer.append("variance: ").append(getVariance()).append(endl);
183            outBuffer.append("sum: ").append(getSum()).append(endl);
184            return outBuffer.toString();
185        }
186    
187    }