Skip to content

Possible error in LOAD_FAST_LOAD_FAST opcode: test_statistics: test_kde_random spurious failure #130854

Closed as not planned
@colesbury

Description

@colesbury

Seen in https://buildbot.python.org/all/#/builders/310/builds/1665/steps/6/logs/stdio

======================================================================
ERROR: test_kde_random (test.test_statistics.TestKDE.test_kde_random) (kernel='gauss')
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/root/buildarea/pull_request.angelico-debian-amd64/build/Lib/test/test_statistics.py", line 2518, in test_kde_random
    big_sample = sorted([rand() for i in range(n)])
                         ~~~~^^
  File "/root/buildarea/pull_request.angelico-debian-amd64/build/Lib/statistics.py", line 1122, in rand
    return choice(data) + h * invcdf(random())
           ~~~~~~^^^^^^
  File "/root/buildarea/pull_request.angelico-debian-amd64/build/Lib/random.py", line 352, in choice
    return seq[self._randbelow(len(seq))]
           ~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'Random' object is not subscriptable

----------------------------------------------------------------------

big_sample = sorted([rand() for i in range(n)])

cpython/Lib/statistics.py

Lines 1117 to 1122 in c989e74

prng = _random.Random(seed)
random = prng.random
choice = prng.choice
def rand():
return choice(data) + h * invcdf(random())

cpython/Lib/random.py

Lines 345 to 352 in c989e74

def choice(self, seq):
"""Choose a random element from a non-empty sequence."""
# As an accommodation for NumPy, we don't use "if not seq"
# because bool(numpy.array()) raises a ValueError.
if not len(seq):
raise IndexError('Cannot choose from an empty sequence')
return seq[self._randbelow(len(seq))]

cpython/Lib/random.py

Lines 225 to 243 in c989e74

def __init_subclass__(cls, /, **kwargs):
"""Control how subclasses generate random integers.
The algorithm a subclass can use depends on the random() and/or
getrandbits() implementation available to it and determines
whether it can generate random integers from arbitrarily large
ranges.
"""
for c in cls.__mro__:
if '_randbelow' in c.__dict__:
# just inherit it
break
if 'getrandbits' in c.__dict__:
cls._randbelow = cls._randbelow_with_getrandbits
break
if 'random' in c.__dict__:
cls._randbelow = cls._randbelow_without_getrandbits
break

Metadata

Metadata

Assignees

No one assigned

    Labels

    testsTests in the Lib/test dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions