--- Modules/_operator.c 2013-10-28 22:16:34.418135194 +0100 +++ Modules/_operator.c.new 2013-10-28 22:14:38.828344349 +0100 @@ -922,7 +922,7 @@ static struct PyModuleDef operatormodule = { PyModuleDef_HEAD_INIT, - "_operator", + "operator", operator_doc, -1, operator_methods, @@ -933,9 +933,9 @@ }; PyMODINIT_FUNC -PyInit__operator(void) +PyInit_operator(void) { - PyObject *m; + PyObject *m, *mdict; /* Create the module and add the functions */ m = PyModule_Create(&operatormodule); @@ -956,5 +956,64 @@ return NULL; Py_INCREF(&methodcaller_type); PyModule_AddObject(m, "methodcaller", (PyObject *)&methodcaller_type); + + + mdict = PyModule_GetDict(m); + if (mdict == NULL) + return NULL; + +#define ALIAS(alias, name) \ + do { \ + PyObject *v = PyDict_GetItemString(mdict, name); \ + if (v == NULL) \ + return NULL; \ + if (PyDict_SetItemString(mdict, alias, v)) \ + return NULL; \ + } while (0) + + ALIAS("__lt__", "lt"); + ALIAS("__le__", "le"); + ALIAS("__eq__", "eq"); + ALIAS("__ne__", "ne"); + ALIAS("__ge__", "ge"); + ALIAS("__gt__", "gt"); + ALIAS("__not__", "not_"); + ALIAS("__abs__", "abs"); + ALIAS("__add__", "add"); + ALIAS("__and__", "and_"); + ALIAS("__floordiv__", "floordiv"); + ALIAS("__index__", "index"); + ALIAS("__inv__", "inv"); + ALIAS("__invert__", "invert"); + ALIAS("__lshift__", "lshift"); + ALIAS("__mod__", "mod"); + ALIAS("__mul__", "mul"); + ALIAS("__neg__", "neg"); + ALIAS("__or__", "or_"); + ALIAS("__pos__", "pos"); + ALIAS("__pow__", "pow"); + ALIAS("__rshift__", "rshift"); + ALIAS("__sub__", "sub"); + ALIAS("__truediv__", "truediv"); + ALIAS("__xor__", "xor"); + ALIAS("__concat__", "concat"); + ALIAS("__contains__", "contains"); + ALIAS("__delitem__", "delitem"); + ALIAS("__getitem__", "getitem"); + ALIAS("__setitem__", "setitem"); + ALIAS("__iadd__", "iadd"); + ALIAS("__iand__", "iand"); + ALIAS("__iconcat__", "iconcat"); + ALIAS("__ifloordiv__", "ifloordiv"); + ALIAS("__ilshift__", "ilshift"); + ALIAS("__imod__", "imod"); + ALIAS("__imul__", "imul"); + ALIAS("__ior__", "ior"); + ALIAS("__ipow__", "ipow"); + ALIAS("__irshift__", "irshift"); + ALIAS("__isub__", "isub"); + ALIAS("__itruediv__", "itruediv"); + ALIAS("__ixor__", "ixor"); + return m; } --- Lib/operator.py 2013-10-28 22:16:34.412135361 +0100 +++ Lib/operator.py.new 2013-10-28 22:14:45.435160938 +0100 @@ -358,15 +358,6 @@ return a -try: - from _operator import * -except ImportError: - pass -else: - from _operator import __doc__ - -# All of these "__func__ = func" assignments have to happen after importing -# from _operator to make sure they're set to the right function __lt__ = lt __le__ = le __eq__ = eq diff -r 2d802765d31f Lib/test/test_operator.py --- a/Lib/test/test_operator.py Mon Oct 28 19:16:21 2013 +0100 +++ b/Lib/test/test_operator.py Mon Oct 28 22:13:09 2013 +0100 @@ -2,8 +2,8 @@ import unittest from test import support -py_operator = support.import_fresh_module('operator', blocked=['_operator']) -c_operator = support.import_fresh_module('operator', fresh=['_operator']) +py_operator = support.import_fresh_module('operator') +c_operator = support.import_fresh_module('_pyoperator') class Seq1: def __init__(self, lst):