apache / apache/datasketches-python

vector_of_kll_floats_sketches.get_quantiles() returns wrong values with float32

オープン
#63 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Jupyter Notebook
スター
46
フォーク
9
PR マージ指標
30日以内にマージされた PR はありません

説明

```python
#!/usr/bin/env python3
"""
Minimal example: vector_of_kll_floats_sketches.get_quantiles() returns WRONG VALUES with float32
"""
import numpy as np
from datasketches import vector_of_kll_floats_sketches

# Create test data: 1000 samples between -100 and -10
np.random.seed(42)
test_data = np.random.uniform(-100, -10, size=(1000, 1)).astype(np.float32)

print("Test data: 1000 samples between -100 and -10")
print(f"True min: {test_data.min():.2f}, True max: {test_data.max():.2f}")

# Create sketch and add data
kll = vector_of_kll_floats_sketches(200, 1)
kll.update(test_data)

# Request p0.0001 (should be ~-100) and p0.9999 (should be ~-10)
ranks_list = [0.0001, 0.9999]
ranks_array32 = np.array(ranks_list, dtype=np.float32)
ranks_array64 = np.array(ranks_list, dtype=np.float64)

print("\n" + "="*60)
print("BUG: numpy array with dtype=np.float32 returns WRONG quantiles")
print("="*60)

quants_array = kll.get_quantiles(ranks_array32)
print(f"\nWith numpy array with dtype=np.float32: {ranks_array32}")
print(f" p0.0001 = {quants_array[0][0]:.2f} (expected: ~-100)")
print(f" p0.9999 = {quants_array[0][1]:.2f} (expected: ~-10)")
print(f" ✗ WRONG: Both values near minimum!")

quants_array64 = kll.get_quantiles(ranks_array64)
print(f"\nWith numpy array with dtype=np.float64: {ranks_array64}")
print(f" p0.0001 = {quants_array64[0][0]:.2f} (expected: ~-100)")
print(f" p0.9999 = {quants_array64[0][1]:.2f} (expected: ~-10)")
print(f" ✓ CORRECT")

```

```
Test data: 1000 samples between -100 and -10
True min: -99.58, True max: -10.03

============================================================
BUG: numpy array with dtype=np.float32 returns WRONG quantiles
============================================================

With numpy array with dtype=np.float32: [1.000e-04 9.999e-01]
p0.0001 = -98.69 (expected: ~-100)
p0.9999 = -99.50 (expected: ~-10)
✗ WRONG: Both values near minimum!

With numpy array with dtype=np.float64: [1.000e-04 9.999e-01]
p0.0001 = -99.50 (expected: ~-100)
p0.9999 = -10.28 (expected: ~-10)
✓ CORRECT
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

提供された Python の再現コードを vector_of_kll_floats_sketches.get_quantiles() で実行することから始め、float32 と float64 のランク配列を比較します。float32 のランク処理を追跡し、0 と 1 に近いランクを対象とするリグレッションテストを追加します。完了の条件は、例に対して float32 と float64 が同等の分位点を返すことです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
numpy, python
領域
data
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。