<?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 field is unused but cannot be suppressed as it is protected -->
  <!-- and some user class may require it -->
  <Match>
    <Class name="org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator" />
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
  </Match>

  <!--  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>
  <Match>
    <Or>
      <Class name="org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer" />
      <Class name="org.apache.commons.math3.optimization.direct.BOBYQAOptimizer" />
    </Or>
    <Method name="altmov" params="int,double" returns="double[]" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math3.optim.nonlinear.scalar.noderiv.CMAESOptimizer" />
    <Method name="doOptimize" params="" returns="org.apache.commons.math3.optim.PointValuePair" />
    <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>

  <!-- The following switch fall-through are due to conversion from FORTRAN goto,
       which are handled by a state integer representing the target labels of the goto.
       In the original code, this is sequential and fall-through is expected
   -->
  <Match>
    <Or>
      <Class name="org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer" />
      <Class name="org.apache.commons.math3.optimization.direct.BOBYQAOptimizer" />
    </Or>
    <Or>
      <Method name="bobyqb" params="double[],double[]" returns="double" />
      <Method name="trsbox" />
      </Or>
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>
  
  <!-- Spurious: The fields are deprecated and not used anymore
       (to be removed in 4.0)
    -->
  <Match>
    <Class name="org.apache.commons.math3.optimization.general.AbstractLeastSquaresOptimizer" />
    <Or>
      <Field name="weightedResidualJacobian" />
      <Field name="weightedResiduals" />
      </Or>
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
  </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>

  <!-- Spurious: Findbugs confused by FastMath.PI - 1.0e-10 -->
  <Match>
    <Class name="org.apache.commons.math3.geometry.euclidean.threed.Plane" />
    <Method name="isSimilarTo" params="org.apache.commons.math3.geometry.euclidean.threed.Plane" returns="boolean" />
    <Bug pattern="CNT_ROUGH_CONSTANT_VALUE" />
  </Match>

  <!-- Spurious: Findbugs confused by constant 1.570796251296997 which is a
       intentionally slightly offset from PI/2 as per Cody Waite arguments reduction -->
  <Match>
    <Class name="org.apache.commons.math3.util.FastMath$CodyWaite" />
    <Method name="&lt;init>" params="double" returns="void" />
    <Bug pattern="CNT_ROUGH_CONSTANT_VALUE" />
  </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>
  <!-- Serialization is handled by an internal class -->
  <Match>
    <Or>
      <Class name="org.apache.commons.math3.optim.PointValuePair"/>
      <Class name="org.apache.commons.math3.optim.PointVectorValuePair"/>
      <Class name="org.apache.commons.math3.optimization.PointValuePair"/>
      <Class name="org.apache.commons.math3.optimization.PointVectorValuePair"/>      
    </Or>
    <Bug pattern="SE_NO_SUITABLE_CONSTRUCTOR" />
  </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>
  <Match>
    <Class name="org.apache.commons.math3.linear.DiagonalMatrix"/>
    <Method name="getDataRef" params="" returns="double[]" />
    <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>
    <Or>
      <Class name="org.apache.commons.math3.stat.clustering.EuclideanDoublePoint"/>
      <Class name="org.apache.commons.math3.ml.clustering.DoublePoint"/>      
    </Or>
    <Method name="&lt;init>" params="double[]" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Or>
      <Class name="org.apache.commons.math3.stat.clustering.EuclideanDoublePoint"/>
      <Class name="org.apache.commons.math3.ml.clustering.DoublePoint"/>      
    </Or>
    <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>

  <!-- The following switch fall-through is intended. -->
  <Match>
    <Class name="org.apache.commons.math3.ml.neuralnet.twod.NeuronSquareMesh2D" />
    <Method name="createLinks" />
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>
  
  <!-- Integer division results cast to double are intentional. -->
  <Match>
    <Class name="org.apache.commons.math3.special.BesselJ" />
    <Method name="rjBesl" />
    <Bug pattern="ICAST_IDIV_CAST_TO_DOUBLE" />
  </Match>

</FindBugsFilter>
