<?xml version="1.0" encoding="UTF-8"?>

<!--
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.
-->
<FindBugsFilter> <!-- sketches-core -->

  <!-- Ignore all test code -->
  <Match>
    <Class name="~.*\.*Test" />
  </Match>
  
  <Match>
    <Class name="~.*\.*TestUtil" />
  </Match>

  <!-- Harmless, False Positive Mar 6, 2024. Alex may fix this. -->
  <Match>   
    <Bug pattern="DLS_DEAD_LOCAL_STORE" />
    <Class name="org.apache.datasketches.tdigest.TDigestDouble"/>
    <Method name="merge" />
  </Match>

  <!-- Complaining about copying of arrays from one internal class to another. 
       This is harmless since both classes are part of our library and work together. -->
  <Match>
    <Bug pattern="EI_EXPOSE_REP2"/>
    <Or>
      <Class name="org.apache.datasketches.quantilescommon.FloatsSortedViewIterator"/>
      <Class name="org.apache.datasketches.quantilescommon.DoublesSortedViewIterator"/>
      <Class name="org.apache.datasketches.quantilescommon.GenericSortedViewIterator"/>
      <Class name="org.apache.datasketches.quantilescommon.GenericPartitionBoundaries"/>
    </Or>
  </Match>

  <Match> <!-- False Positive: These are intentional and we know what we are doing. -->
    <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
    <Class name="org.apache.datasketches.sampling.EbppsItemsSample" />
    <Or>
      <Method name="merge" />
      <Method name="downsample" />
    </Or>
  </Match>

  <Match> <!-- False Positive: Code is the recommended solution for preventing a Finalizer Attack. -->
    <Bug pattern="CT_CONSTRUCTOR_THROW" />
    <Or>
      <Class name="org.apache.datasketches.tuple.arrayofdoubles.DirectArrayOfDoublesQuickSelectSketch"/>
      <Class name="org.apache.datasketches.theta.DirectQuickSelectSketch"/>
    </Or>
  </Match>

</FindBugsFilter>
