<?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.math4.analysis.solvers.BaseSecantSolver" />
    <Method name="doSolve" params="" returns="double" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.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.math4.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.math4.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.math4.analysis.solvers.MullerSolver2" />
    <Or>
      <Method name="doSolve"  params="" returns="double" />
    </Or>
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.EigenDecomposition" />
    <Method name="findEigenVectors" params="double[][]" returns="void" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer" />
    <Method name="altmov" params="int,double" returns="double[]" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.optim.nonlinear.scalar.noderiv.CMAESOptimizer" />
    <Method name="doOptimize" params="" returns="org.apache.commons.math4.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.math4.geometry.euclidean.oned.Cartesian1D" />
      <Class name="org.apache.commons.math4.geometry.euclidean.twod.Cartesian2D" />
      <Class name="org.apache.commons.math4.geometry.euclidean.threed.Cartesian3D" />
    </Or>
    <Method name="equals" params="java.lang.Object" returns="boolean" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.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.math4.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.math4.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>
    <Class name="org.apache.commons.math4.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer" />
    <Or>
      <Method name="bobyqb" params="double[],double[]" returns="double" />
      <Method name="trsbox" />
      </Or>
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>
  
  <!-- Spurious: Findbugs confused by final local variables -->
  <Match>
    <Class name="org.apache.commons.math4.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.math4.geometry.euclidean.threed.Plane" />
    <Method name="isSimilarTo" params="org.apache.commons.math4.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.math4.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.math4.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.math4.stat.descriptive.AbstractUnivariateStatistic"/>
    <Method name="getDataRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.optim.PointValuePair"/>
    <Method name="getPointRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.optim.PointValuePair"/>
      <Class name="org.apache.commons.math4.optim.PointVectorValuePair"/>
    </Or>
    <Bug pattern="SE_NO_SUITABLE_CONSTRUCTOR" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.optim.PointVectorValuePair"/>
    <Method name="&lt;init>" params="double[],double[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.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.math4.ode.sampling.NordsieckStepInterpolator"/>
    <Method name="reinitialize" params="double,double,double[],org.apache.commons.math4.linear.Array2DRowRealMatrix" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.ode.sampling.NordsieckStepInterpolator"/>
    <Method name="getInterpolatedStateVariation" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.Array2DRowRealMatrix"/>
    <Method name="&lt;init>" params="double[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.Array2DRowRealMatrix"/>
    <Method name="getDataRef" params="" returns="double[][]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.BlockFieldMatrix"/>
    <Method name="&lt;init>" params="int,int,org.apache.commons.math4.FieldElement[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.Array2DRowFieldMatrix"/>
    <Method name="&lt;init>" params="org.apache.commons.math4.Field,org.apache.commons.math4.FieldElement[][],boolean" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.Array2DRowFieldMatrix"/>
    <Method name="getDataRef" params="" returns="org.apache.commons.math4.FieldElement[][]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.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.math4.linear.ArrayRealVector"/>
    <Method name="getDataRef" params="" returns="double[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.linear.ArrayFieldVector"/>
    <Method name="getDataRef" params="" returns="org.apache.commons.math4.FieldElement[]" />
    <Bug pattern="EI_EXPOSE_REP" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.linear.RealVector"/>
    <Bug pattern="EQ_UNUSUAL" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.ml.clustering.DoublePoint"/>      
    <Method name="&lt;init>" params="double[]" returns="void" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.ml.clustering.DoublePoint"/>      
    <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.math4.stat.StatUtilsTest" />
    <Method name="testPercentile" params="" returns="void" />
    <Bug pattern="NP_NULL_PARAM_DEREF_NONVIRTUAL" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.analysis.UnivariateRealSolverFactoryImplTest" />
    <Method name="testNewNewtonSolverNull" params="" returns="void" />
    <Bug pattern="NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS" />
  </Match>
  <Match>
    <Class name="org.apache.commons.math4.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.math4.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.math4.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.math4.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.math4.special.BesselJ" />
    <Method name="rjBesl" />
    <Bug pattern="ICAST_IDIV_CAST_TO_DOUBLE" />
  </Match>

</FindBugsFilter>
