@@ -48,10 +48,10 @@ def __init__(self, *invariants):
48
48
self ._invariants = _DEFAULT_INVARIANTS
49
49
else :
50
50
self ._invariants = [_Quantile (q , e ) for (q , e ) in invariants ]
51
+
51
52
self ._buffer = []
52
53
self ._head = None
53
54
self ._observations = 0
54
- self ._items = 0
55
55
56
56
def observe (self , value ):
57
57
"""Samples an observation's value.
@@ -90,7 +90,7 @@ def query(self, rank):
90
90
return current ._value
91
91
92
92
mid_rank = math .floor (rank * self ._observations )
93
- max_rank = mid_rank + math .floor (self ._invariant (mid_rank , self ._observations ) / 2 )
93
+ max_rank = mid_rank + math .ceil (self ._invariant (mid_rank , self ._observations ) / 2 )
94
94
95
95
rank = 0.0
96
96
while current ._successor :
@@ -115,7 +115,8 @@ def _replace_batch(self):
115
115
return
116
116
117
117
if not self ._head :
118
- self ._head , self ._buffer = self ._record (self ._buffer [0 ], 1 , 0 , None ), self ._buffer [1 :]
118
+ self ._head = self ._record (self ._buffer [0 ], 1 , 0 , None )
119
+ self ._buffer = self ._buffer [1 :]
119
120
120
121
rank = 0.0
121
122
current = self ._head
@@ -136,7 +137,6 @@ def _replace_batch(self):
136
137
def _record (self , value , rank , delta , successor ):
137
138
"""Catalogs a sample."""
138
139
self ._observations += 1
139
- self ._items += 1
140
140
141
141
return _Sample (value , rank , delta , successor )
142
142
@@ -187,10 +187,10 @@ def __init__(self, quantile, inaccuracy):
187
187
188
188
"""Computes the delta for the observation."""
189
189
def _delta (self , rank , n ):
190
- if rank <= math .floor (( self ._quantile * n ) ):
190
+ if rank <= math .floor (self ._quantile * n ):
191
191
return self ._coefficient_i * (n - rank )
192
-
193
- return self ._coefficient_ii * rank
192
+ else :
193
+ return self ._coefficient_ii * rank
194
194
195
195
196
196
_DEFAULT_INVARIANTS = [_Quantile (0.50 , 0.01 ), _Quantile (0.99 , 0.001 )]
0 commit comments