<?xml version="1.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.
-->

<!--
  This file contains some false positive bugs detected by findbugs. Their
  false positive nature has been analyzed individually and they have been
  put here to instruct findbugs it must ignore them.
-->
<FindBugsFilter>

  <!--  the following equality tests are part of the reference algorithms -->
  <!--  which already know about limited precision of the double numbers -->
  <Match>
    <Class name="org.apache.commons.math3.analysis.solvers.BaseSecantSolver" />
    <Method name="doSolve" params="" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.distribution.SaddlePointExpansion" />
    <Or>
      <Method name="getDeviancePart" params="double,double" returns="double" />
      <Method name="getStirlingError" params="double" returns="double" />
    </Or>
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optimization.univariate.BrentOptimizer" />
    <Method name="localMin" params="boolean,double,double,double,double,double" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.univariate.BrentOptimizer" />
    <Method name="localMin" params="boolean,double,double,double,double,double" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.analysis.solvers.BrentSolver" />
    <Method name="brent" params="double,double,double,double" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.analysis.solvers.MullerSolver" />
    <Or>
      <Method name="solve"  params="double,double,double,double" returns="double" />
    </Or>
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.analysis.solvers.MullerSolver2" />
    <Or>
      <Method name="doSolve"  params="" returns="double" />
    </Or>
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.EigenDecomposition" />
    <Method name="findEigenVectors" params="double[][]" returns="void" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>

  <!-- The following equality test is intentional and needed for semantic purposes -->
  <Match>
    <Or>
      <Class name="org.apache.commons.math3.geometry.euclidean.oned.Vector1D" />
      <Class name="org.apache.commons.math3.geometry.euclidean.twod.Vector2D" />
      <Class name="org.apache.commons.math3.geometry.euclidean.threed.Vector3D" />
    </Or>
    <Method name="equals" params="java.lang.Object" returns="boolean" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optimization.linear.LinearConstraint" />
    <Method name="equals" params="java.lang.Object" returns="boolean" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.linear.LinearConstraint" />
    <Method name="equals" params="java.lang.Object" returns="boolean" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>

  <!-- The following equality test is intentional and needed for rounding purposes -->
  <Match>
    <Class name="org.apache.commons.math3.util.Precision" />
	<Method name="roundUnscaled" params="double,double,int" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>

  <!-- The following equality test is intentional for division protection -->
  <Match>
    <Class name="org.apache.commons.math3.analysis.interpolation.LoessInterpolator" />
    <Method name="smooth" params="double[],double[]" returns="double[]" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>

  <!-- The following equality test is intentional for infinity detection -->
  <Match>
    <Class name="org.apache.commons.math3.util.FastMath" />
    <Method name="atan2" params="double,double" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>

  <!-- Spurious: Findbugs confused by final local variables -->
  <Match>
    <Class name="org.apache.commons.math3.util.FastMath" />
    <Method name="atan" params="double,double,boolean" returns="double" />
    <Bug pattern="DLS_DEAD_LOCAL_STORE" />
  </Match>

  <!-- the following expositions of internal representation are intentional and documented -->
  <Match>
    <Class name="org.apache.commons.math3.stat.regression.RegressionResults"/>
    <Method name="&lt;init>" params="double[],double[][],boolean,long,int,double,double,double,boolean,boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.stat.descriptive.AbstractUnivariateStatistic"/>
    <Method name="getDataRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optimization.PointValuePair"/>
    <Method name="getPointRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.PointValuePair"/>
    <Method name="getPointRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optimization.PointValuePair"/>
    <Method name="&lt;init>" params="double[],double,boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.PointValuePair"/>
    <Method name="&lt;init>" params="double[],double,boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optimization.PointVectorValuePair"/>
    <Or>
      <Method name="getPointRef" params="" returns="double[]" />
      <Method name="getValueRef" params="" returns="double[]" />
    </Or>
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.PointVectorValuePair"/>
    <Or>
      <Method name="getPointRef" params="" returns="double[]" />
      <Method name="getValueRef" params="" returns="double[]" />
    </Or>
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optimization.PointVectorValuePair"/>
    <Method name="&lt;init>" params="double[],double[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.PointVectorValuePair"/>
    <Method name="&lt;init>" params="double[],double[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.ode.sampling.DummyStepInterpolator"/>
    <Method name="&lt;init>" params="double[],double[],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.ode.sampling.AbstractStepInterpolator"/>
    <Or>
      <Method name="getInterpolatedState" params="" returns="double[]" />
      <Method name="getInterpolatedDerivatives" params="" returns="double[]" />
    </Or>
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.ode.sampling.NordsieckStepInterpolator"/>
    <Method name="reinitialize" params="double,double,double[],org.apache.commons.math3.linear.Array2DRowRealMatrix" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.ode.sampling.NordsieckStepInterpolator"/>
    <Method name="getInterpolatedStateVariation" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.Array2DRowRealMatrix"/>
    <Method name="&lt;init>" params="double[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.Array2DRowRealMatrix"/>
    <Method name="getDataRef" params="" returns="double[][]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.BlockFieldMatrix"/>
    <Method name="&lt;init>" params="int,int,org.apache.commons.math3.FieldElement[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.Array2DRowFieldMatrix"/>
    <Method name="&lt;init>" params="org.apache.commons.math3.Field,org.apache.commons.math3.FieldElement[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.Array2DRowFieldMatrix"/>
    <Method name="getDataRef" params="" returns="org.apache.commons.math3.FieldElement[][]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.BlockRealMatrix"/>
    <Method name="&lt;init>" params="int,int,double[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.util.ResizableDoubleArray"/>
    <Or>
      <Method name="getValues"         params="" returns="double[]" />
      <Method name="getInternalValues" params="" returns="double[]" />
    </Or>
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.ArrayRealVector"/>
    <Method name="getDataRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.linear.ArrayFieldVector"/>
    <Method name="getDataRef" params="" returns="org.apache.commons.math3.FieldElement[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <!-- The equals method for RealVector intentionally throws an exception -->
  <Match>
    <Class name="org.apache.commons.math3.linear.RealVector"/>
    <Bug pattern="EQ_UNUSUAL" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.stat.clustering.EuclideanIntegerPoint"/>
    <Method name="&lt;init>" params="int[]" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.stat.clustering.EuclideanIntegerPoint"/>
    <Method name="getPoint" params="" returns="int[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.stat.clustering.EuclideanDoublePoint"/>
    <Method name="&lt;init>" params="double[]" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.stat.clustering.EuclideanDoublePoint"/>
    <Method name="getPoint" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>

  <!-- The following cases are intentional unit tests for null parameters -->
  <Match>
    <Class name="org.apache.commons.math3.stat.StatUtilsTest" />
    <Method name="testPercentile" params="" returns="void" />
    <Bug pattern="NP_NULL_PARAM_DEREF_NONVIRTUAL" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.analysis.UnivariateRealSolverFactoryImplTest" />
    <Method name="testNewNewtonSolverNull" params="" returns="void" />
    <Bug pattern="NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.stat.regression.OLSMultipleLinearRegressionTest" />
    <Method name="cannotAddNullYSampleData" params="" returns="void" />
    <Bug pattern="NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS" />
  </Match>
  
  <!-- IntDoublePair intentionally implements Comparable inconsistently with equals -->
  <Match>
    <Class name="org.apache.commons.math3.stat.ranking.NaturalRanking$IntDoublePair" />
    <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
  </Match>

  <!-- False positive warning from findbugs, the integer division result cast to double is correct here -->
  <Match>
    <Class name="org.apache.commons.math3.stat.inference.MannWhitneyUTest" />
    <Method name="mannWhitneyU" params="double[],double[]" returns="double" />
    <Bug pattern="ICAST_IDIV_CAST_TO_DOUBLE" />
  </Match>

</FindBugsFilter>
