Skip to content

Commit

Permalink
Issue #24379: Revert the operator.subscript patch (dccc4e63aef5) pend…
Browse files Browse the repository at this point in the history
…ing resolution of the related refcnt leak.
  • Loading branch information
rhettinger committed Nov 2, 2015
1 parent 0bdf9ea commit a1fc949
Show file tree
Hide file tree
Showing 4 changed files with 1 addition and 83 deletions.
15 changes: 0 additions & 15 deletions Doc/library/operator.rst
Expand Up @@ -333,21 +333,6 @@ expect a function argument.
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]


.. data:: subscript

A helper to turn subscript notation into indexing objects. This can be
used to create item access patterns ahead of time to pass them into
various subscriptable objects.

For example:

* ``subscript[5] == 5``
* ``subscript[3:7:2] == slice(3, 7, 2)``
* ``subscript[5, 8] == (5, 8)``

.. versionadded:: 3.6


.. function:: methodcaller(name[, args...])

Return a callable object that calls the method *name* on its operand. If
Expand Down
8 changes: 0 additions & 8 deletions Doc/whatsnew/3.6.rst
Expand Up @@ -104,14 +104,6 @@ directives ``%G``, ``%u`` and ``%V``.
(Contributed by Ashley Anderson in :issue:`12006`.)


operator
--------

New object :data:`operator.subscript` makes it easier to create complex
indexers. For example: ``subscript[0:10:2] == slice(0, 10, 2)``
(Contributed by Joe Jevnik in :issue:`24379`.)


pickle
------

Expand Down
28 changes: 1 addition & 27 deletions Lib/operator.py
Expand Up @@ -17,7 +17,7 @@
'is_', 'is_not', 'isub', 'itemgetter', 'itruediv', 'ixor', 'le',
'length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod',
'mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift',
'setitem', 'sub', 'subscript', 'truediv', 'truth', 'xor']
'setitem', 'sub', 'truediv', 'truth', 'xor']

from builtins import abs as _abs

Expand Down Expand Up @@ -408,32 +408,6 @@ def ixor(a, b):
return a


@object.__new__ # create a singleton instance
class subscript:
"""
A helper to turn subscript notation into indexing objects. This can be
used to create item access patterns ahead of time to pass them into
various subscriptable objects.
For example:
subscript[5] == 5
subscript[3:7:2] == slice(3, 7, 2)
subscript[5, 8] == (5, 8)
"""
__slots__ = ()

def __new__(cls):
raise TypeError("cannot create '{}' instances".format(cls.__name__))

@staticmethod
def __getitem__(key):
return key

@staticmethod
def __reduce__():
return 'subscript'


try:
from _operator import *
except ImportError:
Expand Down
33 changes: 0 additions & 33 deletions Lib/test/test_operator.py
Expand Up @@ -596,38 +596,5 @@ class CCOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase):
module2 = c_operator


class SubscriptTestCase:
def test_subscript(self):
subscript = self.module.subscript
self.assertIsNone(subscript[None])
self.assertEqual(subscript[0], 0)
self.assertEqual(subscript[0:1:2], slice(0, 1, 2))
self.assertEqual(
subscript[0, ..., :2, ...],
(0, Ellipsis, slice(2), Ellipsis),
)

def test_pickle(self):
from operator import subscript
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
with self.subTest(proto=proto):
self.assertIs(
pickle.loads(pickle.dumps(subscript, proto)),
subscript,
)

def test_singleton(self):
with self.assertRaises(TypeError):
type(self.module.subscript)()

def test_immutable(self):
with self.assertRaises(AttributeError):
self.module.subscript.attr = None


class PySubscriptTestCase(SubscriptTestCase, PyOperatorTestCase):
pass


if __name__ == "__main__":
unittest.main()

0 comments on commit a1fc949

Please sign in to comment.