Compare commits
4 Commits
897387d2c8
...
4140f10a16
Author | SHA1 | Date |
---|---|---|
Ken Jin | 4140f10a16 | |
Raymond Hettinger | a9621bb301 | |
Ammar Askar | 1031f23fc3 | |
Erlend Egeberg Aasland | bf108bb21e |
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"__comment": "Taken from vscode's vs/workbench/contrib/tasks/common/problemMatcher.ts msCompile rule",
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "msvc-problem-matcher",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+),?(\\d+)?(?:,\\d+,\\d+)?\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2,
|
||||||
|
"column": 3,
|
||||||
|
"severity": 4,
|
||||||
|
"code": 5,
|
||||||
|
"message": 6
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -99,6 +99,8 @@ jobs:
|
||||||
if: needs.check_source.outputs.run_tests == 'true'
|
if: needs.check_source.outputs.run_tests == 'true'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- name: Register MSVC problem matcher
|
||||||
|
run: echo "::add-matcher::.github/problem-matchers/msvc.json"
|
||||||
- name: Build CPython
|
- name: Build CPython
|
||||||
run: .\PCbuild\build.bat -e -p x64
|
run: .\PCbuild\build.bat -e -p x64
|
||||||
- name: Display build info
|
- name: Display build info
|
||||||
|
|
|
@ -135,6 +135,15 @@ Functions for integers
|
||||||
values. Formerly it used a style like ``int(random()*n)`` which could produce
|
values. Formerly it used a style like ``int(random()*n)`` which could produce
|
||||||
slightly uneven distributions.
|
slightly uneven distributions.
|
||||||
|
|
||||||
|
.. deprecated:: 3.10
|
||||||
|
The automatic conversion of non-integer types to equivalent integers is
|
||||||
|
deprecated. Currently ``randrange(10.0)`` is losslessly converted to
|
||||||
|
``randrange(10)``. In the future, this will raise a :exc:`TypeError`.
|
||||||
|
|
||||||
|
.. deprecated:: 3.10
|
||||||
|
The exception raised for non-integral values such as ``range(10.5)``
|
||||||
|
will be changed from :exc:`ValueError` to :exc:`TypeError`.
|
||||||
|
|
||||||
.. function:: randint(a, b)
|
.. function:: randint(a, b)
|
||||||
|
|
||||||
Return a random integer *N* such that ``a <= N <= b``. Alias for
|
Return a random integer *N* such that ``a <= N <= b``. Alias for
|
||||||
|
|
|
@ -51,6 +51,7 @@ from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
|
||||||
from math import tau as TWOPI, floor as _floor, isfinite as _isfinite
|
from math import tau as TWOPI, floor as _floor, isfinite as _isfinite
|
||||||
from os import urandom as _urandom
|
from os import urandom as _urandom
|
||||||
from _collections_abc import Set as _Set, Sequence as _Sequence
|
from _collections_abc import Set as _Set, Sequence as _Sequence
|
||||||
|
from operator import index as _index
|
||||||
from itertools import accumulate as _accumulate, repeat as _repeat
|
from itertools import accumulate as _accumulate, repeat as _repeat
|
||||||
from bisect import bisect as _bisect
|
from bisect import bisect as _bisect
|
||||||
import os as _os
|
import os as _os
|
||||||
|
@ -297,28 +298,59 @@ class Random(_random.Random):
|
||||||
|
|
||||||
# This code is a bit messy to make it fast for the
|
# This code is a bit messy to make it fast for the
|
||||||
# common case while still doing adequate error checking.
|
# common case while still doing adequate error checking.
|
||||||
istart = int(start)
|
try:
|
||||||
if istart != start:
|
istart = _index(start)
|
||||||
raise ValueError("non-integer arg 1 for randrange()")
|
except TypeError:
|
||||||
|
if int(start) == start:
|
||||||
|
istart = int(start)
|
||||||
|
_warn('Float arguments to randrange() have been deprecated\n'
|
||||||
|
'since Python 3.10 and will be removed in a subsequent '
|
||||||
|
'version.',
|
||||||
|
DeprecationWarning, 2)
|
||||||
|
else:
|
||||||
|
_warn('randrange() will raise TypeError in the future',
|
||||||
|
DeprecationWarning, 2)
|
||||||
|
raise ValueError("non-integer arg 1 for randrange()")
|
||||||
if stop is None:
|
if stop is None:
|
||||||
if istart > 0:
|
if istart > 0:
|
||||||
return self._randbelow(istart)
|
return self._randbelow(istart)
|
||||||
raise ValueError("empty range for randrange()")
|
raise ValueError("empty range for randrange()")
|
||||||
|
|
||||||
# stop argument supplied.
|
# stop argument supplied.
|
||||||
istop = int(stop)
|
try:
|
||||||
if istop != stop:
|
istop = _index(stop)
|
||||||
raise ValueError("non-integer stop for randrange()")
|
except TypeError:
|
||||||
|
if int(stop) == stop:
|
||||||
|
istop = int(stop)
|
||||||
|
_warn('Float arguments to randrange() have been deprecated\n'
|
||||||
|
'since Python 3.10 and will be removed in a subsequent '
|
||||||
|
'version.',
|
||||||
|
DeprecationWarning, 2)
|
||||||
|
else:
|
||||||
|
_warn('randrange() will raise TypeError in the future',
|
||||||
|
DeprecationWarning, 2)
|
||||||
|
raise ValueError("non-integer stop for randrange()")
|
||||||
|
|
||||||
|
try:
|
||||||
|
istep = _index(step)
|
||||||
|
except TypeError:
|
||||||
|
if int(step) == step:
|
||||||
|
istep = int(step)
|
||||||
|
_warn('Float arguments to randrange() have been deprecated\n'
|
||||||
|
'since Python 3.10 and will be removed in a subsequent '
|
||||||
|
'version.',
|
||||||
|
DeprecationWarning, 2)
|
||||||
|
else:
|
||||||
|
_warn('randrange() will raise TypeError in the future',
|
||||||
|
DeprecationWarning, 2)
|
||||||
|
raise ValueError("non-integer step for randrange()")
|
||||||
width = istop - istart
|
width = istop - istart
|
||||||
if step == 1 and width > 0:
|
if istep == 1 and width > 0:
|
||||||
return istart + self._randbelow(width)
|
return istart + self._randbelow(width)
|
||||||
if step == 1:
|
if istep == 1:
|
||||||
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
|
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
|
||||||
|
|
||||||
# Non-unit step argument supplied.
|
# Non-unit step argument supplied.
|
||||||
istep = int(step)
|
|
||||||
if istep != step:
|
|
||||||
raise ValueError("non-integer step for randrange()")
|
|
||||||
if istep > 0:
|
if istep > 0:
|
||||||
n = (width + istep - 1) // istep
|
n = (width + istep - 1) // istep
|
||||||
elif istep < 0:
|
elif istep < 0:
|
||||||
|
|
|
@ -542,6 +542,26 @@ class SystemRandom_TestBasicOps(TestBasicOps, unittest.TestCase):
|
||||||
raises(0, 42, 0)
|
raises(0, 42, 0)
|
||||||
raises(0, 42, 3.14159)
|
raises(0, 42, 3.14159)
|
||||||
|
|
||||||
|
def test_randrange_argument_handling(self):
|
||||||
|
randrange = self.gen.randrange
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
randrange(10.0, 20, 2)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
randrange(10, 20.0, 2)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
randrange(10, 20, 1.0)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
randrange(10, 20, 2.0)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
randrange(10.5)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
randrange(10, 20.5)
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
randrange(10, 20, 1.5)
|
||||||
|
|
||||||
def test_randbelow_logic(self, _log=log, int=int):
|
def test_randbelow_logic(self, _log=log, int=int):
|
||||||
# check bitcount transition points: 2**i and 2**(i+1)-1
|
# check bitcount transition points: 2**i and 2**(i+1)-1
|
||||||
# show that: k = int(1.001 + _log(n, 2))
|
# show that: k = int(1.001 + _log(n, 2))
|
||||||
|
|
|
@ -3048,6 +3048,11 @@ class GetUtilitiesTestCase(TestCase):
|
||||||
self.assertEqual(get_args(Callable), ())
|
self.assertEqual(get_args(Callable), ())
|
||||||
self.assertEqual(get_args(list[int]), (int,))
|
self.assertEqual(get_args(list[int]), (int,))
|
||||||
self.assertEqual(get_args(list), ())
|
self.assertEqual(get_args(list), ())
|
||||||
|
self.assertEqual(get_args(collections.abc.Callable[[int], str]), ([int], str))
|
||||||
|
self.assertEqual(get_args(collections.abc.Callable[..., str]), (..., str))
|
||||||
|
self.assertEqual(get_args(collections.abc.Callable[[], str]), ([], str))
|
||||||
|
self.assertEqual(get_args(collections.abc.Callable[[int], str]),
|
||||||
|
get_args(Callable[[int], str]))
|
||||||
|
|
||||||
|
|
||||||
class CollectionsAbcTests(BaseTestCase):
|
class CollectionsAbcTests(BaseTestCase):
|
||||||
|
|
|
@ -1684,13 +1684,11 @@ def get_args(tp):
|
||||||
"""
|
"""
|
||||||
if isinstance(tp, _AnnotatedAlias):
|
if isinstance(tp, _AnnotatedAlias):
|
||||||
return (tp.__origin__,) + tp.__metadata__
|
return (tp.__origin__,) + tp.__metadata__
|
||||||
if isinstance(tp, _GenericAlias):
|
if isinstance(tp, (_GenericAlias, GenericAlias)):
|
||||||
res = tp.__args__
|
res = tp.__args__
|
||||||
if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
|
if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
|
||||||
res = (list(res[:-1]), res[-1])
|
res = (list(res[:-1]), res[-1])
|
||||||
return res
|
return res
|
||||||
if isinstance(tp, GenericAlias):
|
|
||||||
return tp.__args__
|
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
Harmonized random.randrange() argument handling to match range().
|
||||||
|
|
||||||
|
* The integer test and conversion in randrange() now uses
|
||||||
|
operator.index().
|
||||||
|
* Non-integer arguments to randrange() are deprecated.
|
||||||
|
* The *ValueError* is deprecated in favor of a *TypeError*.
|
||||||
|
* It now runs a little faster than before.
|
||||||
|
|
||||||
|
(Contributed by Raymond Hettinger and Serhiy Storchaka.)
|
|
@ -15,7 +15,7 @@ simplequeue_get_state(PyObject *module)
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
static struct PyModuleDef queuemodule;
|
static struct PyModuleDef queuemodule;
|
||||||
#define simplequeue_get_state_by_type(tp) \
|
#define simplequeue_get_state_by_type(type) \
|
||||||
(simplequeue_get_state(_PyType_GetModuleByDef(type, &queuemodule)))
|
(simplequeue_get_state(_PyType_GetModuleByDef(type, &queuemodule)))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Reference in New Issue