Cython 3.2.0b2__py3-none-any.whl → 3.2.0b3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Cython/Compiler/Code.py +38 -22
- Cython/Compiler/CythonScope.py +4 -0
- Cython/Compiler/ExprNodes.py +5 -2
- Cython/Compiler/ModuleNode.py +26 -13
- Cython/Compiler/Nodes.py +5 -3
- Cython/Compiler/PyrexTypes.py +21 -8
- Cython/Compiler/Symtab.py +6 -3
- Cython/Shadow.py +1 -1
- Cython/Utility/CommonStructures.c +1 -0
- Cython/Utility/ModuleSetupCode.c +62 -10
- Cython/Utility/ObjectHandling.c +3 -3
- Cython/Utility/Optimize.c +1 -10
- Cython/Utility/Synchronization.c +28 -6
- {cython-3.2.0b2.dist-info → cython-3.2.0b3.dist-info}/METADATA +16 -51
- {cython-3.2.0b2.dist-info → cython-3.2.0b3.dist-info}/RECORD +18 -18
- {cython-3.2.0b2.dist-info → cython-3.2.0b3.dist-info}/WHEEL +0 -0
- {cython-3.2.0b2.dist-info → cython-3.2.0b3.dist-info}/entry_points.txt +0 -0
- {cython-3.2.0b2.dist-info → cython-3.2.0b3.dist-info}/top_level.txt +0 -0
Cython/Compiler/Code.py
CHANGED
|
@@ -463,7 +463,7 @@ class UtilityCodeBase(AbstractUtilityCode):
|
|
|
463
463
|
# section title
|
|
464
464
|
r'^%(C)s{5,30} \s* (?P<name> (?:\w|\.)+ ) \s* %(C)s{5,30} |'
|
|
465
465
|
# section tags and dependencies
|
|
466
|
-
r'^%(C)s+ @(?P<tag>
|
|
466
|
+
r'^%(C)s+ @(?P<tag> .+)'
|
|
467
467
|
) % {'C': re.escape(line_comment_char)}, re.VERBOSE).match
|
|
468
468
|
|
|
469
469
|
@classmethod
|
|
@@ -496,8 +496,8 @@ class UtilityCodeBase(AbstractUtilityCode):
|
|
|
496
496
|
|
|
497
497
|
if tags:
|
|
498
498
|
all_tags = utility[2]
|
|
499
|
-
for
|
|
500
|
-
all_tags.setdefault(
|
|
499
|
+
for tag_name, tag_values in tags.items():
|
|
500
|
+
all_tags.setdefault(tag_name, set()).update(tag_values)
|
|
501
501
|
|
|
502
502
|
@classmethod
|
|
503
503
|
def load_utilities_from_file(cls, path):
|
|
@@ -528,26 +528,38 @@ class UtilityCodeBase(AbstractUtilityCode):
|
|
|
528
528
|
|
|
529
529
|
for lineno, line in enumerate(all_lines):
|
|
530
530
|
m = match_special(line)
|
|
531
|
-
if m:
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
type = 'impl'
|
|
545
|
-
utility = utilities[name]
|
|
531
|
+
if m is None:
|
|
532
|
+
lines.append(rstrip(strip_comments(line)))
|
|
533
|
+
elif m.group('name'):
|
|
534
|
+
cls._add_utility(utility, name, type, lines, begin_lineno, tags)
|
|
535
|
+
|
|
536
|
+
begin_lineno = lineno + 1
|
|
537
|
+
del lines[:]
|
|
538
|
+
tags.clear()
|
|
539
|
+
|
|
540
|
+
name = m.group('name')
|
|
541
|
+
mtype = match_type(name)
|
|
542
|
+
if mtype:
|
|
543
|
+
name, type = mtype.groups()
|
|
546
544
|
else:
|
|
547
|
-
|
|
548
|
-
|
|
545
|
+
type = 'impl'
|
|
546
|
+
utility = utilities[name]
|
|
549
547
|
else:
|
|
550
|
-
|
|
548
|
+
tag_value = m.group('tag')
|
|
549
|
+
if ':' not in tag_value:
|
|
550
|
+
raise RuntimeError(f"Found invalid tag '{tag_value}' in utility section {name}.{type}")
|
|
551
|
+
|
|
552
|
+
tag_name, _, tag_value = tag_value.partition(':')
|
|
553
|
+
tag_name = tag_name.rstrip()
|
|
554
|
+
tag_value = tag_value.strip()
|
|
555
|
+
|
|
556
|
+
if tag_name not in ('requires', 'substitute', 'proto_block'):
|
|
557
|
+
raise RuntimeError(f"Found unknown tag name '{tag_name}' in utility section {name}.{type}")
|
|
558
|
+
if not re.match(r'\S+$', tag_value):
|
|
559
|
+
raise RuntimeError(f"Found invalid tag value '{tag_value}' in utility section {name}.{type}")
|
|
560
|
+
|
|
561
|
+
tags[tag_name].add(tag_value)
|
|
562
|
+
lines.append('') # keep line number correct
|
|
551
563
|
|
|
552
564
|
if utility is None:
|
|
553
565
|
raise ValueError("Empty utility code file")
|
|
@@ -2479,6 +2491,10 @@ class GlobalState:
|
|
|
2479
2491
|
self.use_utility_code(entry.utility_code)
|
|
2480
2492
|
if entry.utility_code_definition:
|
|
2481
2493
|
self.use_utility_code(entry.utility_code_definition)
|
|
2494
|
+
from . import PyrexTypes
|
|
2495
|
+
for tp in PyrexTypes.get_all_subtypes(entry.type):
|
|
2496
|
+
if hasattr(tp, "entry") and tp.entry is not entry:
|
|
2497
|
+
self.use_entry_utility_code(tp.entry)
|
|
2482
2498
|
|
|
2483
2499
|
|
|
2484
2500
|
def funccontext_property(func):
|
|
@@ -2968,7 +2984,7 @@ class CCodeWriter:
|
|
|
2968
2984
|
elif entry.type.is_pyobject:
|
|
2969
2985
|
self.put(" = NULL")
|
|
2970
2986
|
self.putln(";")
|
|
2971
|
-
self.
|
|
2987
|
+
self.globalstate.use_entry_utility_code(entry)
|
|
2972
2988
|
|
|
2973
2989
|
def put_temp_declarations(self, func_context: FunctionState):
|
|
2974
2990
|
for name, type, manage_ref, static in func_context.temps_allocated:
|
Cython/Compiler/CythonScope.py
CHANGED
|
@@ -25,12 +25,16 @@ class CythonScope(ModuleScope):
|
|
|
25
25
|
cname='<error>')
|
|
26
26
|
entry.in_cinclude = True
|
|
27
27
|
|
|
28
|
+
cy_pymutex_type = get_cy_pymutex_type()
|
|
28
29
|
entry = self.declare_type(
|
|
29
30
|
"pymutex", cy_pymutex_type, None,
|
|
30
31
|
cname="__Pyx_Locks_PyMutex")
|
|
32
|
+
entry.utility_code_definition = cy_pymutex_type.get_decl_utility_code()
|
|
33
|
+
cy_pythread_type_lock_type = get_cy_pythread_type_lock_type()
|
|
31
34
|
entry = self.declare_type(
|
|
32
35
|
"pythread_type_lock", cy_pythread_type_lock_type, None,
|
|
33
36
|
cname="__Pyx_Locks_PyThreadTypeLock")
|
|
37
|
+
entry.utility_code_definition = cy_pythread_type_lock_type.get_decl_utility_code()
|
|
34
38
|
|
|
35
39
|
def is_cpp(self):
|
|
36
40
|
# Allow C++ utility code in C++ contexts.
|
Cython/Compiler/ExprNodes.py
CHANGED
|
@@ -76,6 +76,9 @@ class NotConstant:
|
|
|
76
76
|
not_a_constant = NotConstant()
|
|
77
77
|
constant_value_not_set = object()
|
|
78
78
|
|
|
79
|
+
def _type_to_itself(tp):
|
|
80
|
+
return tp, tp
|
|
81
|
+
|
|
79
82
|
# error messages when coercing from key[0] to key[1]
|
|
80
83
|
coercion_error_dict = {
|
|
81
84
|
# string related errors
|
|
@@ -94,9 +97,9 @@ coercion_error_dict = {
|
|
|
94
97
|
(PyrexTypes.c_uchar_ptr_type, unicode_type): "Cannot convert 'char*' to unicode implicitly, decoding required",
|
|
95
98
|
(PyrexTypes.c_const_uchar_ptr_type, unicode_type): (
|
|
96
99
|
"Cannot convert 'char*' to unicode implicitly, decoding required"),
|
|
97
|
-
(PyrexTypes.
|
|
100
|
+
_type_to_itself(PyrexTypes.get_cy_pymutex_type()): (
|
|
98
101
|
"cython.pymutex cannot be copied"),
|
|
99
|
-
(PyrexTypes.
|
|
102
|
+
_type_to_itself(PyrexTypes.get_cy_pythread_type_lock_type()): (
|
|
100
103
|
"cython.pythread_type_lock cannot be copied"),
|
|
101
104
|
}
|
|
102
105
|
|
Cython/Compiler/ModuleNode.py
CHANGED
|
@@ -161,7 +161,7 @@ class SharedUtilityExporter:
|
|
|
161
161
|
shared_utility_qualified_name = EncodedString(self.scope.context.shared_utility_qualified_name)
|
|
162
162
|
import_func = f"__Pyx_ImportFunction_{Naming.cyversion}"
|
|
163
163
|
_generate_import_code(
|
|
164
|
-
code, self.pos, imports, shared_utility_qualified_name, import_func, "void (
|
|
164
|
+
code, self.pos, imports, shared_utility_qualified_name, import_func, "void (**{name})(void)")
|
|
165
165
|
|
|
166
166
|
def _generate_exports(self, shared_utility_functions: Sequence[Code.SharedFunctionDecl]):
|
|
167
167
|
if self.has_shared_exports(shared_utility_functions):
|
|
@@ -285,7 +285,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
285
285
|
|
|
286
286
|
self.body.analyse_declarations(env)
|
|
287
287
|
|
|
288
|
-
|
|
288
|
+
cy_pymutex_type = PyrexTypes.get_cy_pymutex_type()
|
|
289
|
+
if env.find_shared_usages_of_type(cy_pymutex_type):
|
|
289
290
|
# Be very suspicious of cython locks that are shared.
|
|
290
291
|
# They have the potential to cause ABI issues.
|
|
291
292
|
self.scope.use_utility_code(
|
|
@@ -362,30 +363,33 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
362
363
|
h_code_start.put_h_guard(h_guard)
|
|
363
364
|
h_code_start.putln("")
|
|
364
365
|
h_code_start.putln('#include "Python.h"')
|
|
365
|
-
self.generate_type_header_code(h_types,
|
|
366
|
+
self.generate_type_header_code(h_types, h_code_main)
|
|
366
367
|
if options.capi_reexport_cincludes:
|
|
367
|
-
self.generate_includes(env, [],
|
|
368
|
-
|
|
368
|
+
self.generate_includes(env, [], h_code_main)
|
|
369
|
+
h_code_main.putln("")
|
|
369
370
|
api_guard = self.api_name(Naming.api_guard_prefix, env)
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
self.generate_extern_c_macro_definition(
|
|
373
|
-
|
|
374
|
-
self.generate_dl_import_macro(
|
|
371
|
+
h_code_main.putln("#ifndef %s" % api_guard)
|
|
372
|
+
h_code_main.putln("")
|
|
373
|
+
self.generate_extern_c_macro_definition(h_code_main, env.is_cpp())
|
|
374
|
+
h_code_main.putln("")
|
|
375
|
+
self.generate_dl_import_macro(h_code_main)
|
|
375
376
|
if h_extension_types:
|
|
376
377
|
h_code_main.putln("")
|
|
377
378
|
for entry in h_extension_types:
|
|
378
379
|
self.generate_cclass_header_code(entry.type, h_code_main)
|
|
379
380
|
if i_code:
|
|
380
381
|
self.generate_cclass_include_code(entry.type, i_code)
|
|
382
|
+
globalstate.use_entry_utility_code(entry)
|
|
381
383
|
if h_funcs:
|
|
382
384
|
h_code_main.putln("")
|
|
383
385
|
for entry in h_funcs:
|
|
384
386
|
self.generate_public_declaration(entry, h_code_main, i_code)
|
|
387
|
+
globalstate.use_entry_utility_code(entry)
|
|
385
388
|
if h_vars:
|
|
386
389
|
h_code_main.putln("")
|
|
387
390
|
for entry in h_vars:
|
|
388
391
|
self.generate_public_declaration(entry, h_code_main, i_code)
|
|
392
|
+
globalstate.use_entry_utility_code(entry)
|
|
389
393
|
h_code_main.putln("")
|
|
390
394
|
h_code_main.putln("#endif /* !%s */" % api_guard)
|
|
391
395
|
h_code_main.putln("")
|
|
@@ -452,7 +456,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
452
456
|
|
|
453
457
|
h_code = Code.CCodeWriter()
|
|
454
458
|
c_code_config = generate_c_code_config(env, options)
|
|
455
|
-
Code.GlobalState(h_code, self, c_code_config)
|
|
459
|
+
globalstate = Code.GlobalState(h_code, self, c_code_config)
|
|
460
|
+
globalstate.initialize_main_h_code() # in-case utility code is used in the header
|
|
456
461
|
h_code.put_generated_by()
|
|
457
462
|
api_guard = self.api_name(Naming.api_guard_prefix, env)
|
|
458
463
|
h_code.put_h_guard(api_guard)
|
|
@@ -480,6 +485,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
480
485
|
h_code.putln("static PyTypeObject *%s = 0;" % type.typeptr_cname)
|
|
481
486
|
h_code.putln("#define %s (*%s)" % (
|
|
482
487
|
type.typeobj_cname, type.typeptr_cname))
|
|
488
|
+
h_code.globalstate.use_entry_utility_code(entry)
|
|
483
489
|
if api_funcs:
|
|
484
490
|
h_code.putln("")
|
|
485
491
|
for entry in api_funcs:
|
|
@@ -487,6 +493,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
487
493
|
cname = env.mangle(Naming.func_prefix_api, entry.name)
|
|
488
494
|
h_code.putln("static %s = 0;" % type.declaration_code(cname))
|
|
489
495
|
h_code.putln("#define %s %s" % (entry.name, cname))
|
|
496
|
+
h_code.globalstate.use_entry_utility_code(entry)
|
|
490
497
|
if api_vars:
|
|
491
498
|
h_code.putln("")
|
|
492
499
|
for entry in api_vars:
|
|
@@ -494,6 +501,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
494
501
|
cname = env.mangle(Naming.varptr_prefix_api, entry.name)
|
|
495
502
|
h_code.putln("static %s = 0;" % type.declaration_code(cname))
|
|
496
503
|
h_code.putln("#define %s (*%s)" % (entry.name, cname))
|
|
504
|
+
h_code.globalstate.use_entry_utility_code(entry)
|
|
497
505
|
if api_vars:
|
|
498
506
|
put_utility_code("VoidPtrImport", "ImportExport.c")
|
|
499
507
|
if api_funcs:
|
|
@@ -1012,6 +1020,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
1012
1020
|
|
|
1013
1021
|
env.use_utility_code(UtilityCode.load_cached("FastTypeChecks", "ModuleSetupCode.c"))
|
|
1014
1022
|
env.use_utility_code(UtilityCode.load("GetRuntimeVersion", "ModuleSetupCode.c"))
|
|
1023
|
+
env.use_utility_code(UtilityCode.load_cached("AddModuleRef", "ModuleSetupCode.c"))
|
|
1015
1024
|
if has_np_pythran(env):
|
|
1016
1025
|
env.use_utility_code(UtilityCode.load_cached("PythranConversion", "CppSupport.cpp"))
|
|
1017
1026
|
|
|
@@ -1109,6 +1118,9 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
1109
1118
|
self.generate_cpp_class_definition(entry, code)
|
|
1110
1119
|
elif type.is_extension_type:
|
|
1111
1120
|
self.generate_objstruct_definition(type, code)
|
|
1121
|
+
if getattr(type, "scope", None):
|
|
1122
|
+
for var_entry in type.scope.var_entries:
|
|
1123
|
+
code.globalstate.use_entry_utility_code(var_entry)
|
|
1112
1124
|
|
|
1113
1125
|
def generate_gcc33_hack(self, env, code):
|
|
1114
1126
|
# Workaround for spurious warning generation in gcc 3.3
|
|
@@ -1447,7 +1459,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
1447
1459
|
decl = attr_type.cpp_optional_declaration_code(attr.cname)
|
|
1448
1460
|
else:
|
|
1449
1461
|
decl = attr_type.declaration_code(attr.cname)
|
|
1450
|
-
|
|
1462
|
+
code.globalstate.use_entry_utility_code(attr)
|
|
1451
1463
|
code.putln("%s;" % decl)
|
|
1452
1464
|
code.putln(footer)
|
|
1453
1465
|
if type.objtypedef_cname is not None:
|
|
@@ -1526,7 +1538,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
|
|
|
1526
1538
|
code.putln(";")
|
|
1527
1539
|
if entry.cname != cname:
|
|
1528
1540
|
code.putln("#define %s (*%s)" % (entry.cname, cname))
|
|
1529
|
-
|
|
1541
|
+
code.globalstate.use_entry_utility_code(entry)
|
|
1530
1542
|
|
|
1531
1543
|
def generate_cfunction_declarations(self, env, code, definition):
|
|
1532
1544
|
for entry in env.cfunc_entries:
|
|
@@ -4204,6 +4216,7 @@ def generate_cfunction_declaration(entry, env, code, definition):
|
|
|
4204
4216
|
storage_class,
|
|
4205
4217
|
modifiers,
|
|
4206
4218
|
header))
|
|
4219
|
+
code.globalstate.use_entry_utility_code(entry)
|
|
4207
4220
|
|
|
4208
4221
|
#------------------------------------------------------------------------------------
|
|
4209
4222
|
#
|
Cython/Compiler/Nodes.py
CHANGED
|
@@ -2989,6 +2989,7 @@ class CFuncDefNode(FuncDefNode):
|
|
|
2989
2989
|
if preprocessor_guard:
|
|
2990
2990
|
code.globalstate.parts['module_declarations'].putln("#endif")
|
|
2991
2991
|
code.putln("%s%s%s {" % (storage_class, modifiers, header))
|
|
2992
|
+
code.globalstate.use_entry_utility_code(self.entry)
|
|
2992
2993
|
|
|
2993
2994
|
def generate_argument_declarations(self, env, code):
|
|
2994
2995
|
scope = self.local_scope
|
|
@@ -9030,11 +9031,12 @@ class CriticalSectionStatNode(TryFinallyStatNode):
|
|
|
9030
9031
|
return super().analyse_declarations(env)
|
|
9031
9032
|
|
|
9032
9033
|
def analyse_expressions(self, env):
|
|
9034
|
+
cy_pymutex_type = PyrexTypes.get_cy_pymutex_type()
|
|
9033
9035
|
mutex_count = 0
|
|
9034
9036
|
for i, arg in enumerate(self.args):
|
|
9035
9037
|
arg = arg.analyse_expressions(env)
|
|
9036
|
-
if (arg.type
|
|
9037
|
-
arg.type.is_ptr and arg.type.base_type
|
|
9038
|
+
if (arg.type == cy_pymutex_type or (
|
|
9039
|
+
arg.type.is_ptr and arg.type.base_type == cy_pymutex_type)):
|
|
9038
9040
|
mutex_count += 1
|
|
9039
9041
|
self.is_pymutex_critical_section = True
|
|
9040
9042
|
elif arg.type.is_pyobject:
|
|
@@ -9189,7 +9191,7 @@ class CythonLockStatNode(TryFinallyStatNode):
|
|
|
9189
9191
|
return super().analyse_expressions(env)
|
|
9190
9192
|
|
|
9191
9193
|
def generate_execution_code(self, code):
|
|
9192
|
-
code.globalstate.use_utility_code(self.arg.type.
|
|
9194
|
+
code.globalstate.use_utility_code(self.arg.type.get_usage_utility_code())
|
|
9193
9195
|
|
|
9194
9196
|
code.mark_pos(self.pos)
|
|
9195
9197
|
code.begin_block()
|
Cython/Compiler/PyrexTypes.py
CHANGED
|
@@ -4947,9 +4947,10 @@ class CythonLockType(PyrexType):
|
|
|
4947
4947
|
# Singleton, cannot be copied.
|
|
4948
4948
|
return src_type is self._special_assignable_reference_type
|
|
4949
4949
|
|
|
4950
|
-
def
|
|
4951
|
-
|
|
4952
|
-
|
|
4950
|
+
def get_decl_utility_code(self):
|
|
4951
|
+
return UtilityCode.load_cached(f"{self.cname_part}Decl", "Synchronization.c")
|
|
4952
|
+
|
|
4953
|
+
def get_usage_utility_code(self):
|
|
4953
4954
|
return UtilityCode.load_cached(self.cname_part, "Synchronization.c")
|
|
4954
4955
|
|
|
4955
4956
|
def needs_explicit_construction(self, scope):
|
|
@@ -4964,7 +4965,7 @@ class CythonLockType(PyrexType):
|
|
|
4964
4965
|
|
|
4965
4966
|
def generate_explicit_construction(self, code, entry, extra_access_code=""):
|
|
4966
4967
|
code.globalstate.use_utility_code(
|
|
4967
|
-
self.
|
|
4968
|
+
self.get_usage_utility_code()
|
|
4968
4969
|
)
|
|
4969
4970
|
code.putln(f"__Pyx_Locks_{self.cname_part}_Init({extra_access_code}{entry.cname});")
|
|
4970
4971
|
|
|
@@ -4992,7 +4993,7 @@ class CythonLockType(PyrexType):
|
|
|
4992
4993
|
pos=None,
|
|
4993
4994
|
defining=1,
|
|
4994
4995
|
cname=f"__Pyx_Locks_{self.cname_part}_Lock",
|
|
4995
|
-
utility_code=self.
|
|
4996
|
+
utility_code=self.get_usage_utility_code())
|
|
4996
4997
|
scope.declare_cfunction(
|
|
4997
4998
|
"release",
|
|
4998
4999
|
CFuncType(c_void_type, [CFuncTypeArg("self", self_type, None)],
|
|
@@ -5000,7 +5001,7 @@ class CythonLockType(PyrexType):
|
|
|
5000
5001
|
pos=None,
|
|
5001
5002
|
defining=1,
|
|
5002
5003
|
cname=f"__Pyx_Locks_{self.cname_part}_Unlock",
|
|
5003
|
-
utility_code=self.
|
|
5004
|
+
utility_code=self.get_usage_utility_code())
|
|
5004
5005
|
# Don't define a "locked" function because we can't do this with Py_Mutex
|
|
5005
5006
|
# (which is the preferred implementation)
|
|
5006
5007
|
|
|
@@ -5012,6 +5013,14 @@ class CythonLockType(PyrexType):
|
|
|
5012
5013
|
def create_from_py_utility_code(self, env):
|
|
5013
5014
|
return False
|
|
5014
5015
|
|
|
5016
|
+
def __eq__(self, other):
|
|
5017
|
+
if type(other) is not type(self):
|
|
5018
|
+
return NotImplemented
|
|
5019
|
+
return other.cname_part == self.cname_part
|
|
5020
|
+
|
|
5021
|
+
def __hash__(self):
|
|
5022
|
+
return hash(self.cname_part)
|
|
5023
|
+
|
|
5015
5024
|
|
|
5016
5025
|
rank_to_type_name = (
|
|
5017
5026
|
"char", # 0
|
|
@@ -5143,8 +5152,12 @@ cython_memoryview_type = CStructOrUnionType("__pyx_memoryview_obj", "struct",
|
|
|
5143
5152
|
memoryviewslice_type = CStructOrUnionType("memoryviewslice", "struct",
|
|
5144
5153
|
None, 1, "__Pyx_memviewslice")
|
|
5145
5154
|
|
|
5146
|
-
|
|
5147
|
-
|
|
5155
|
+
# Don't declare these as globals - it interferes with our ability to check if it's
|
|
5156
|
+
# used in a particular scope.
|
|
5157
|
+
def get_cy_pymutex_type():
|
|
5158
|
+
return CythonLockType("PyMutex")
|
|
5159
|
+
def get_cy_pythread_type_lock_type():
|
|
5160
|
+
return CythonLockType("PyThreadTypeLock")
|
|
5148
5161
|
|
|
5149
5162
|
fixed_sign_int_types = {
|
|
5150
5163
|
"bint": (1, c_bint_type),
|
Cython/Compiler/Symtab.py
CHANGED
|
@@ -1236,7 +1236,7 @@ class Scope:
|
|
|
1236
1236
|
# e.g. slot, function, method
|
|
1237
1237
|
return f"{Naming.modulestateglobal_cname}->{cname}"
|
|
1238
1238
|
|
|
1239
|
-
def find_shared_usages_of_type(self,
|
|
1239
|
+
def find_shared_usages_of_type(self, type_to_find, _seen_scopes=None):
|
|
1240
1240
|
if _seen_scopes is None:
|
|
1241
1241
|
_seen_scopes = set()
|
|
1242
1242
|
include_all_entries = not self.is_module_scope
|
|
@@ -1244,13 +1244,13 @@ class Scope:
|
|
|
1244
1244
|
if not (include_all_entries or entry.defined_in_pxd or entry.visibility == "public" or entry.api):
|
|
1245
1245
|
continue
|
|
1246
1246
|
entry_subtypes = PyrexTypes.get_all_subtypes(entry.type)
|
|
1247
|
-
if any(
|
|
1247
|
+
if any(type_to_find == sub_tp for sub_tp in entry_subtypes):
|
|
1248
1248
|
return True
|
|
1249
1249
|
type_scope = getattr(entry.type, "scope", None)
|
|
1250
1250
|
if type_scope is None or type_scope in _seen_scopes:
|
|
1251
1251
|
continue
|
|
1252
1252
|
_seen_scopes.add(type_scope)
|
|
1253
|
-
if type_scope.find_shared_usages_of_type(
|
|
1253
|
+
if type_scope.find_shared_usages_of_type(type_to_find, _seen_scopes):
|
|
1254
1254
|
return True
|
|
1255
1255
|
return False
|
|
1256
1256
|
|
|
@@ -1777,6 +1777,9 @@ class ModuleScope(Scope):
|
|
|
1777
1777
|
self.utility_code_list.append(entry.utility_code)
|
|
1778
1778
|
if entry.utility_code_definition:
|
|
1779
1779
|
self.utility_code_list.append(entry.utility_code_definition)
|
|
1780
|
+
for tp in PyrexTypes.get_all_subtypes(entry.type):
|
|
1781
|
+
if hasattr(tp, "entry") and tp.entry is not entry:
|
|
1782
|
+
self.use_entry_utility_code(tp.entry)
|
|
1780
1783
|
|
|
1781
1784
|
def declare_c_class(self, name, pos, defining=0, implementing=0,
|
|
1782
1785
|
module_name=None, base_type=None, objstruct_cname=None,
|
Cython/Shadow.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
static PyObject *__Pyx_FetchSharedCythonABIModule(void);
|
|
4
4
|
|
|
5
5
|
/////////////// FetchSharedCythonModule ////////////
|
|
6
|
+
//@requires: ModuleSetupCode.c::AddModuleRef
|
|
6
7
|
|
|
7
8
|
static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
|
|
8
9
|
return __Pyx_PyImport_AddModuleRef(__PYX_ABI_MODULE_NAME);
|
Cython/Utility/ModuleSetupCode.c
CHANGED
|
@@ -1186,16 +1186,6 @@ static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key,
|
|
|
1186
1186
|
#define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GetLength(o)
|
|
1187
1187
|
#endif
|
|
1188
1188
|
|
|
1189
|
-
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
|
|
1190
|
-
#define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
|
|
1191
|
-
#else
|
|
1192
|
-
static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
|
|
1193
|
-
PyObject *module = PyImport_AddModule(name);
|
|
1194
|
-
Py_XINCREF(module);
|
|
1195
|
-
return module;
|
|
1196
|
-
}
|
|
1197
|
-
#endif
|
|
1198
|
-
|
|
1199
1189
|
#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_InternFromString)
|
|
1200
1190
|
#define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
|
|
1201
1191
|
#endif
|
|
@@ -2220,6 +2210,7 @@ static void __Pyx_FastGilFuncInit(void);
|
|
|
2220
2210
|
#endif
|
|
2221
2211
|
|
|
2222
2212
|
/////////////// FastGil ///////////////
|
|
2213
|
+
//@requires: AddModuleRef
|
|
2223
2214
|
// The implementations of PyGILState_Ensure/Release calls PyThread_get_key_value
|
|
2224
2215
|
// several times which is turns out to be quite slow (slower in fact than
|
|
2225
2216
|
// acquiring the GIL itself). Simply storing it in a thread local for the
|
|
@@ -3149,3 +3140,64 @@ static CYTHON_INLINE int __Pyx_UnknownThreadStateMayHaveHadGil(__Pyx_UnknownThre
|
|
|
3149
3140
|
return state != NULL;
|
|
3150
3141
|
#endif
|
|
3151
3142
|
}
|
|
3143
|
+
|
|
3144
|
+
///////////////////// AddModuleRef.proto ///////////////////////
|
|
3145
|
+
|
|
3146
|
+
#if ((CYTHON_COMPILING_IN_CPYTHON_FREETHREADING /* && __PYX_LIMITED_VERSION_HEX < some future value */) || \
|
|
3147
|
+
__PYX_LIMITED_VERSION_HEX < 0x030d0000)
|
|
3148
|
+
// https://github.com/python/cpython/issues/137422 - PyImport_AddModule(Ref) isn't thread safe!
|
|
3149
|
+
static PyObject *__Pyx_PyImport_AddModuleRef(const char *name); /* proto */
|
|
3150
|
+
#else
|
|
3151
|
+
#define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
|
|
3152
|
+
#endif
|
|
3153
|
+
|
|
3154
|
+
///////////////////// AddModuleRef ////////////////////////////
|
|
3155
|
+
|
|
3156
|
+
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING /* && __PYX_LIMITED_VERSION_HEX < some future value */
|
|
3157
|
+
// https://github.com/python/cpython/issues/137422 - PyImport_AddModule(Ref) isn't thread safe!
|
|
3158
|
+
static PyObject *__Pyx_PyImport_AddModuleObjectRef(PyObject *name) {
|
|
3159
|
+
// We're going to assume nobody is swapping the module dict out from under us
|
|
3160
|
+
// (even though they're allowed to) because we really can't write code that's
|
|
3161
|
+
// safe against that.
|
|
3162
|
+
PyObject *module_dict = PyImport_GetModuleDict();
|
|
3163
|
+
PyObject *m;
|
|
3164
|
+
if (PyMapping_GetOptionalItem(module_dict, name, &m) < 0) {
|
|
3165
|
+
return NULL;
|
|
3166
|
+
}
|
|
3167
|
+
if (m != NULL && PyModule_Check(m)) {
|
|
3168
|
+
return m;
|
|
3169
|
+
}
|
|
3170
|
+
Py_XDECREF(m);
|
|
3171
|
+
m = PyModule_NewObject(name);
|
|
3172
|
+
if (m == NULL)
|
|
3173
|
+
return NULL;
|
|
3174
|
+
if (PyDict_CheckExact(module_dict)) {
|
|
3175
|
+
PyObject *new_m;
|
|
3176
|
+
(void)PyDict_SetDefaultRef(module_dict, name, m, &new_m);
|
|
3177
|
+
Py_DECREF(m);
|
|
3178
|
+
return new_m;
|
|
3179
|
+
} else {
|
|
3180
|
+
// For non-dict sys-modules I don't think it's possible to reliably make thread-safe.
|
|
3181
|
+
if (PyObject_SetItem(module_dict, name, m) != 0) {
|
|
3182
|
+
Py_DECREF(m);
|
|
3183
|
+
return NULL;
|
|
3184
|
+
}
|
|
3185
|
+
return m;
|
|
3186
|
+
}
|
|
3187
|
+
}
|
|
3188
|
+
static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
|
|
3189
|
+
PyObject *py_name = PyUnicode_FromString(name);
|
|
3190
|
+
if (!py_name) return NULL;
|
|
3191
|
+
PyObject *module = __Pyx_PyImport_AddModuleObjectRef(py_name);
|
|
3192
|
+
Py_DECREF(py_name);
|
|
3193
|
+
return module;
|
|
3194
|
+
}
|
|
3195
|
+
#elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
|
|
3196
|
+
#define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
|
|
3197
|
+
#else
|
|
3198
|
+
static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
|
|
3199
|
+
PyObject *module = PyImport_AddModule(name);
|
|
3200
|
+
Py_XINCREF(module);
|
|
3201
|
+
return module;
|
|
3202
|
+
}
|
|
3203
|
+
#endif
|
Cython/Utility/ObjectHandling.c
CHANGED
|
@@ -2244,7 +2244,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObj
|
|
|
2244
2244
|
}
|
|
2245
2245
|
|
|
2246
2246
|
/////////////// PyObjectFastCallMethod.proto ///////////////
|
|
2247
|
-
//@requires PyObjectFastCall
|
|
2247
|
+
//@requires: PyObjectFastCall
|
|
2248
2248
|
|
|
2249
2249
|
#if CYTHON_VECTORCALL && PY_VERSION_HEX >= 0x03090000
|
|
2250
2250
|
#define __Pyx_PyObject_FastCallMethod(name, args, nargsf) PyObject_VectorcallMethod(name, args, nargsf, NULL)
|
|
@@ -3207,7 +3207,7 @@ static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, P
|
|
|
3207
3207
|
CYTHON_INLINE
|
|
3208
3208
|
static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue); /* proto */
|
|
3209
3209
|
#endif
|
|
3210
|
-
|
|
3210
|
+
|
|
3211
3211
|
|
|
3212
3212
|
//////////////////////// OwnedDictNext //////////////////////////////////////
|
|
3213
3213
|
//@requires: Builtins.c::py_dict_values
|
|
@@ -3251,7 +3251,7 @@ static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, P
|
|
|
3251
3251
|
bad:
|
|
3252
3252
|
Py_XDECREF(next);
|
|
3253
3253
|
// PyDict_Next can't fail, so neither can this
|
|
3254
|
-
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
|
|
3254
|
+
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
|
|
3255
3255
|
PyErr_FormatUnraisable("Exception ignored in __Pyx_PyDict_NextRef");
|
|
3256
3256
|
#else
|
|
3257
3257
|
PyErr_WriteUnraisable(PYIDENT("__Pyx_PyDict_NextRef"));
|
Cython/Utility/Optimize.c
CHANGED
|
@@ -454,17 +454,8 @@ static CYTHON_INLINE int __Pyx_dict_iter_next(
|
|
|
454
454
|
#endif
|
|
455
455
|
if (unlikely(pos >= list_size)) return 0;
|
|
456
456
|
*ppos = pos + 1;
|
|
457
|
-
|
|
458
|
-
next_item = PyList_GetItemRef(iter_obj, pos);
|
|
457
|
+
next_item = __Pyx_PyList_GetItemRef(iter_obj, pos);
|
|
459
458
|
if (unlikely(!next_item)) return -1;
|
|
460
|
-
#elif CYTHON_ASSUME_SAFE_MACROS
|
|
461
|
-
next_item = PyList_GET_ITEM(iter_obj, pos);
|
|
462
|
-
Py_INCREF(next_item);
|
|
463
|
-
#else
|
|
464
|
-
next_item = PyList_GetItem(iter_obj, pos);
|
|
465
|
-
if (unlikely(!next_item)) return -1;
|
|
466
|
-
Py_INCREF(next_item);
|
|
467
|
-
#endif
|
|
468
459
|
} else
|
|
469
460
|
#endif
|
|
470
461
|
{
|
Cython/Utility/Synchronization.c
CHANGED
|
@@ -229,15 +229,22 @@
|
|
|
229
229
|
#endif
|
|
230
230
|
|
|
231
231
|
|
|
232
|
-
//////////////////////
|
|
232
|
+
////////////////////// PyThreadTypeLockDecl.proto //////////
|
|
233
233
|
//@proto_block: utility_code_proto_before_types
|
|
234
234
|
|
|
235
235
|
// This lock type always uses PyThread_type_lock. The main reason
|
|
236
236
|
// to use it is if you are using the Limited API and want to
|
|
237
237
|
// share locks between modules.
|
|
238
238
|
|
|
239
|
+
#ifndef __PYX_HAVE_PYX_THREAD_TYPE_LOCK_DECL
|
|
240
|
+
#define __PYX_HAVE_PYX_THREAD_TYPE_LOCK_DECL
|
|
239
241
|
#define __Pyx_Locks_PyThreadTypeLock PyThread_type_lock
|
|
240
242
|
#define __Pyx_Locks_PyThreadTypeLock_DECL NULL
|
|
243
|
+
#endif
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
////////////////////// PyThreadTypeLock.proto //////////////////
|
|
247
|
+
|
|
241
248
|
#define __Pyx_Locks_PyThreadTypeLock_Init(l) l = PyThread_allocate_lock()
|
|
242
249
|
#define __Pyx_Locks_PyThreadTypeLock_Delete(l) PyThread_free_lock(l)
|
|
243
250
|
#define __Pyx_Locks_PyThreadTypeLock_LockNogil(l) (void)PyThread_acquire_lock(l, WAIT_LOCK)
|
|
@@ -254,6 +261,7 @@ static CYTHON_INLINE void __Pyx_Locks_PyThreadTypeLock_LockGil(__Pyx_Locks_PyThr
|
|
|
254
261
|
|
|
255
262
|
|
|
256
263
|
////////////////////// PyThreadTypeLock ////////////////
|
|
264
|
+
//@requires: PyThreadTypeLockDecl
|
|
257
265
|
|
|
258
266
|
#if CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM < 0x07031400
|
|
259
267
|
#define PY_LOCK_ACQUIRED 1
|
|
@@ -319,9 +327,9 @@ static void __Pyx__Locks_PyThreadTypeLock_Lock(__Pyx_Locks_PyThreadTypeLock lock
|
|
|
319
327
|
}
|
|
320
328
|
|
|
321
329
|
|
|
322
|
-
//////////////////////
|
|
330
|
+
////////////////////// PyMutexDecl.proto ////////////////////
|
|
323
331
|
//@proto_block: utility_code_proto_before_types
|
|
324
|
-
//@requires:
|
|
332
|
+
//@requires: PyThreadTypeLockDecl
|
|
325
333
|
|
|
326
334
|
// We support two implementations - a Py3.13+ version using PyMutex and
|
|
327
335
|
// an older version using PyThread_type_lock.
|
|
@@ -336,9 +344,25 @@ static void __Pyx__Locks_PyThreadTypeLock_Lock(__Pyx_Locks_PyThreadTypeLock lock
|
|
|
336
344
|
// CythonLockType in a public way. However, they can use
|
|
337
345
|
// CythonCompatibleLockType which will always be PyThread_type_lock.
|
|
338
346
|
|
|
339
|
-
#
|
|
347
|
+
#ifndef __PYX_HAVE_PYX_PYMUTEX_DECL
|
|
348
|
+
#define __PYX_HAVE_PYX_PYMUTEX_DECL
|
|
349
|
+
// Not CYTHON_COMPILING_IN_LIMITED_API because this code may be in
|
|
350
|
+
// headers where that isn't available
|
|
351
|
+
#if PY_VERSION_HEX > 0x030d0000 && !defined(Py_LIMITED_API)
|
|
340
352
|
#define __Pyx_Locks_PyMutex PyMutex
|
|
341
353
|
#define __Pyx_Locks_PyMutex_DECL {0}
|
|
354
|
+
#else
|
|
355
|
+
#define __Pyx_Locks_PyMutex __Pyx_Locks_PyThreadTypeLock
|
|
356
|
+
#define __Pyx_Locks_PyMutex_DECL __Pyx_Locks_PyThreadTypeLock_DECL
|
|
357
|
+
#endif
|
|
358
|
+
#endif
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
////////////////// PyMutex.proto ///////////////////////////
|
|
362
|
+
//@requires: PyThreadTypeLock
|
|
363
|
+
//@requires: PyMutexDecl
|
|
364
|
+
|
|
365
|
+
#if PY_VERSION_HEX > 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
|
|
342
366
|
#define __Pyx_Locks_PyMutex_Init(l) (void)(l)
|
|
343
367
|
#define __Pyx_Locks_PyMutex_Delete(l) (void)(l)
|
|
344
368
|
// Py_Mutex takes care of all GIL handling itself
|
|
@@ -349,8 +373,6 @@ static void __Pyx__Locks_PyThreadTypeLock_Lock(__Pyx_Locks_PyThreadTypeLock lock
|
|
|
349
373
|
|
|
350
374
|
#else
|
|
351
375
|
|
|
352
|
-
#define __Pyx_Locks_PyMutex __Pyx_Locks_PyThreadTypeLock
|
|
353
|
-
#define __Pyx_Locks_PyMutex_DECL __Pyx_Locks_PyThreadTypeLock_DECL
|
|
354
376
|
#define __Pyx_Locks_PyMutex_Init(l) __Pyx_Locks_PyThreadTypeLock_Init(l)
|
|
355
377
|
#define __Pyx_Locks_PyMutex_Delete(l) __Pyx_Locks_PyThreadTypeLock_Delete(l)
|
|
356
378
|
#define __Pyx_Locks_PyMutex_Lock(l) __Pyx_Locks_PyThreadTypeLock_Lock(l)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: Cython
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.0b3
|
|
4
4
|
Summary: The Cython compiler for writing C extensions in the Python language.
|
|
5
5
|
Home-page: https://cython.org/
|
|
6
6
|
Author: Robert Bradshaw, Stefan Behnel, David Woods, Greg Ewing, et al.
|
|
@@ -65,61 +65,26 @@ to install an uncompiled (slower) version of Cython with::
|
|
|
65
65
|
|
|
66
66
|
.. _Pyrex: https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
|
|
67
67
|
|
|
68
|
-
3.2.
|
|
68
|
+
3.2.0b3 (2025-10-30)
|
|
69
69
|
====================
|
|
70
70
|
|
|
71
|
-
Features added
|
|
72
|
-
--------------
|
|
73
|
-
|
|
74
|
-
* The code generated for importing and exporting cimports across modules uses less space.
|
|
75
|
-
(Github issues https://github.com/cython/cython/issues/7255, https://github.com/cython/cython/issues/7265)
|
|
76
|
-
|
|
77
71
|
Bugs fixed
|
|
78
72
|
----------
|
|
79
73
|
|
|
80
|
-
*
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
* Extension arguments defined for the shared code module were ignored in ``cythonize()``.
|
|
84
|
-
(Github issue https://github.com/cython/cython/issues/7251)
|
|
85
|
-
|
|
86
|
-
* Failures while following package attributes in ``import pkg.module as …`` were not handled.
|
|
87
|
-
|
|
88
|
-
* Trying to instantiate internal types used by Cython is now prohibited.
|
|
89
|
-
(Github issue https://github.com/cython/cython/issues/7263)
|
|
90
|
-
|
|
91
|
-
* Includes all fixes as of Cython 3.1.6.
|
|
92
|
-
|
|
93
|
-
3.1.6 (2025-10-23):
|
|
94
|
-
|
|
95
|
-
* Unicode characters formatted from C integers with ``f"{value:c}"`` could result in
|
|
96
|
-
invalid Python string objects since Cython 3.1.0.
|
|
97
|
-
(Github issue https://github.com/cython/cython/issues/7240)
|
|
98
|
-
|
|
99
|
-
* ``cythonize`` (program and function) now uses ``concurrent.futures.ProcessPoolExecutor``
|
|
100
|
-
instead of ``multiprocessing.Pool`` to fix a hang on build failures in parallel builds.
|
|
101
|
-
A possible work-around is to disable parallel builds.
|
|
102
|
-
Patch by Sviatoslav Sydorenko. (Github issue https://github.com/cython/cython/issues/7183)
|
|
103
|
-
|
|
104
|
-
3.1.5 (2025-10-20):
|
|
105
|
-
|
|
106
|
-
* Conversion from C++ strings longer than ``PY_SSIZE_T_MAX`` did not validate the length.
|
|
107
|
-
|
|
108
|
-
* Some non-Limited API code was incorrectly used in generated header files.
|
|
109
|
-
(Github issue https://github.com/cython/cython/issues/7157)
|
|
110
|
-
|
|
111
|
-
* Optimised unpacking of Python integers in expressions uses a slightly safer scheme.
|
|
112
|
-
(Github issue https://github.com/cython/cython/issues/7134)
|
|
113
|
-
|
|
114
|
-
* Empty return statements were not always reported when tracing.
|
|
115
|
-
(Github issue https://github.com/cython/cython/issues/7022)
|
|
74
|
+
* Using ``cython.pymutex`` in an extension type declared as ``public`` or ``api``
|
|
75
|
+
generated invalid C code missing the required ``PyMutex`` declarations.
|
|
76
|
+
(Github issues https://github.com/cython/cython/issues/6992, https://github.com/cython/cython/issues/6995)
|
|
116
77
|
|
|
117
|
-
*
|
|
118
|
-
|
|
119
|
-
(Github issue https://github.com/cython/cython/issues/6503)
|
|
78
|
+
* 3.2.0b2 generated incorrect pointer casts in the ``cimport`` importing code.
|
|
79
|
+
(Github issue https://github.com/cython/cython/issues/7268)
|
|
120
80
|
|
|
121
|
-
|
|
122
|
-
|
|
81
|
+
* Cython's type sharing across modules suffered from race conditions if multiple modules
|
|
82
|
+
tried to initialise and share their types concurrently. This is due to an underlying
|
|
83
|
+
CPython issue and cannot easily be worked around completely. In the common case that
|
|
84
|
+
module dicts are plain Python dict objects, however, Cython now uses a ``.setdefault()``
|
|
85
|
+
equivalent for thread-safe type sharing.
|
|
86
|
+
See https://github.com/python/cpython/issues/137422
|
|
87
|
+
(Github issue https://github.com/cython/cython/issues/7076)
|
|
123
88
|
|
|
124
|
-
*
|
|
125
|
-
(Github issue https://github.com/cython/cython/issues/
|
|
89
|
+
* Cython incorrectly called ``PyList_GetItemRef()`` in PyPy and GraalPython before Py3.13.
|
|
90
|
+
(Github issue https://github.com/cython/cython/issues/7269)
|
|
@@ -2,7 +2,7 @@ cython.py,sha256=OTJCP0F_fecQWMsGOPJDuFU7brM1ScJAATH6ek98ho4,632
|
|
|
2
2
|
Cython/CodeWriter.py,sha256=k1SAPvsjXum7dhX9IjZ3wXuDUOzzFKYEbNZSxMKEwos,24276
|
|
3
3
|
Cython/Coverage.py,sha256=WGY5BW1nBcJ86f4Lrs6ZZIuFKCdngsEizs4Kor0iRsc,18783
|
|
4
4
|
Cython/Debugging.py,sha256=vFtJhn7QstMf5gnYru2qHIz5ZjPg1KSlZVGHr-pBCwM,552
|
|
5
|
-
Cython/Shadow.py,sha256=
|
|
5
|
+
Cython/Shadow.py,sha256=7o4eOnli46IhpOxlw_9tcRhht4HDEpUBVAiCIX3mvvs,19634
|
|
6
6
|
Cython/Shadow.pyi,sha256=BaaRtWtFlBVM14LOD9ql-9Uw1UDZV3AOT2AWULk1WUw,18597
|
|
7
7
|
Cython/StringIOTree.py,sha256=8u4R5jhUzqYvSX1w5_RrvxbgUvaMqW8jhQgXcCNKIkE,5570
|
|
8
8
|
Cython/TestUtils.py,sha256=rph07UD41dNbdOjqQx_vNu2c0b3Ib1UeMxNYao_vxJU,15584
|
|
@@ -34,13 +34,13 @@ Cython/Compiler/Buffer.py,sha256=NMqvFYIofuS93840lWrNcvDXlBhuXgKLoEuMs0PffLk,269
|
|
|
34
34
|
Cython/Compiler/Builtin.py,sha256=KTq5PwVqPe9FwNNtOXrZI7dxArjbMuIB7vwg7wcQK08,42742
|
|
35
35
|
Cython/Compiler/CmdLine.py,sha256=6u--_tFCXMEjDQaqYXbH4AXed5jXcOhBWGefngFB_Aw,13339
|
|
36
36
|
Cython/Compiler/Code.pxd,sha256=-bYyHehjGEiFoe8bqT-2djaHann3jnU86gVgymoIpL0,3918
|
|
37
|
-
Cython/Compiler/Code.py,sha256=
|
|
37
|
+
Cython/Compiler/Code.py,sha256=r4lz8H_p82zzt7Cl_u2foEM6Vm-QiyBoRvsVfMJUvr4,143778
|
|
38
38
|
Cython/Compiler/CodeGeneration.py,sha256=aEW8IwXvwEOsde0-RxvAi_cb8_qdaDGxH_nS_VFwKWc,1068
|
|
39
|
-
Cython/Compiler/CythonScope.py,sha256=
|
|
39
|
+
Cython/Compiler/CythonScope.py,sha256=b_RU0YKr4UYzfrhAJE9xNdYAHi1H44hczsbBA9tiq6E,7325
|
|
40
40
|
Cython/Compiler/Dataclass.py,sha256=NhP7E63rJzLpE98ZVrYCbNt-W0aYLh9r29e6yT0KnCQ,36595
|
|
41
41
|
Cython/Compiler/DebugFlags.py,sha256=-ht7qWQyoJO6H5o0XJgwVjj5gWayuol-H2HoLqiCXsE,713
|
|
42
42
|
Cython/Compiler/Errors.py,sha256=_qycMnE9-dH-uh--Wv20jFXlXkRl8UGIAsAdlIig9xM,9160
|
|
43
|
-
Cython/Compiler/ExprNodes.py,sha256=
|
|
43
|
+
Cython/Compiler/ExprNodes.py,sha256=txX6Oy_YqVVxUd1SBNK6naaFhai6xP22xMlHCSjJkBY,634703
|
|
44
44
|
Cython/Compiler/FlowControl.pxd,sha256=0wDFfkjWddMSOjs76KQSePJBMS1CQk5RjESRHXRkYww,2499
|
|
45
45
|
Cython/Compiler/FlowControl.py,sha256=P4L87MdPre8loo2U2-ruXFz3Pz7jkUJEpg10db76_Vg,50821
|
|
46
46
|
Cython/Compiler/FusedNode.py,sha256=gXGXpM6XPZtVT7fGr5g19Id0flqQf4OrcR5_zn1VP4Y,41407
|
|
@@ -51,9 +51,9 @@ Cython/Compiler/LineTable.py,sha256=epP6DoefUR7JCK9OUOyoYcxMWhBEwyTWOr3E7vJRqa4,
|
|
|
51
51
|
Cython/Compiler/Main.py,sha256=8BCgxfGhYNGvhROKqV7ovifvQJvWn2xOQBB3uBiAZ5g,35011
|
|
52
52
|
Cython/Compiler/MatchCaseNodes.py,sha256=yVGVAsc1yrda1jHTAI7mZ2-SL67tNdcfOn-ugdCRWPs,7792
|
|
53
53
|
Cython/Compiler/MemoryView.py,sha256=VnH9h_cUgaNSHDinzX_SiXcLp08Q9SV0tK8DDAA2URA,31688
|
|
54
|
-
Cython/Compiler/ModuleNode.py,sha256=
|
|
54
|
+
Cython/Compiler/ModuleNode.py,sha256=7HAhU4H5VEeZxN42HGlq7dYRGA3faauucz3YsQmyULk,194712
|
|
55
55
|
Cython/Compiler/Naming.py,sha256=xneFFCsB68xZhghXAxA2GnRrooWMumxss20B1I0avqk,11159
|
|
56
|
-
Cython/Compiler/Nodes.py,sha256=
|
|
56
|
+
Cython/Compiler/Nodes.py,sha256=Ef-QpICjbff3wb-LEzEfNA69fg4rOlAVSBgDLJYYL6E,455923
|
|
57
57
|
Cython/Compiler/Optimize.py,sha256=0pI7dkwJirE2IrlSoLrbbuL9cq1pls5VDoex_5rYTmk,227816
|
|
58
58
|
Cython/Compiler/Options.py,sha256=DegABgz_JQbPN_hHfOTxDd3zKHXvqoYedB9jgco4fnk,32062
|
|
59
59
|
Cython/Compiler/ParseTreeTransforms.pxd,sha256=mkdSaFvc5we32bs0RNFwbODQMsTHIU0jIlpZuFtHnaU,2268
|
|
@@ -61,12 +61,12 @@ Cython/Compiler/ParseTreeTransforms.py,sha256=nL6TdknzbWsFTThUaMJeKcDakIYf7cDFk6
|
|
|
61
61
|
Cython/Compiler/Parsing.pxd,sha256=A5Ckd1TecRLV_NDx4IzhquYdMsM0BGcDWh7LyXOjKIg,351
|
|
62
62
|
Cython/Compiler/Parsing.py,sha256=RsV7WGd7OxK7tEthCOqF2m9z_hSbUn662d-m0z1MCws,156894
|
|
63
63
|
Cython/Compiler/Pipeline.py,sha256=JyYMnRekoKRBe9yOvAuW39Gy-pTitJm5jD_qfO9BAeU,16230
|
|
64
|
-
Cython/Compiler/PyrexTypes.py,sha256=
|
|
64
|
+
Cython/Compiler/PyrexTypes.py,sha256=GlFXj-I2cewlrHzrrJpS6jyklKJADRJaWAS14Nv_PGA,222967
|
|
65
65
|
Cython/Compiler/Pythran.py,sha256=wiRE1buAxQ0NFbxg7DHyyd03I6qgLp-KP_fokAvSii4,7888
|
|
66
66
|
Cython/Compiler/Scanning.pxd,sha256=vcNaZoZdifzj5H_cbFa1eACNNCKko9iwWaOHuWQDfWs,1358
|
|
67
67
|
Cython/Compiler/Scanning.py,sha256=kZI5h8k3ZoLA_nqCAx3nY2QZljuFi3QwpjZ9N9d6GGc,25212
|
|
68
68
|
Cython/Compiler/StringEncoding.py,sha256=0o6B-tFxKhUdQ79eJfHZhdLun69qdkVUeznffpBAxtI,8487
|
|
69
|
-
Cython/Compiler/Symtab.py,sha256
|
|
69
|
+
Cython/Compiler/Symtab.py,sha256=sD_634XgzbtUnTixP6moly-iKCUveRMLMmjo8g_Nc1Y,137271
|
|
70
70
|
Cython/Compiler/TreeFragment.py,sha256=1AscujwN_mCFeO137PGy1ghCnJ17L9uYoJfqc-7h9VY,9514
|
|
71
71
|
Cython/Compiler/TreePath.py,sha256=Vht_mzZpptXKJw2t_TM-PBYHtZIXXvZFWxjNkhPr9yg,7960
|
|
72
72
|
Cython/Compiler/TypeInference.py,sha256=fmetS6rcT_ELhkCWMOukgOF5QarS-z0EyhvGudwvZuM,22446
|
|
@@ -272,7 +272,7 @@ Cython/Utility/BufferFormatFromTypeInfo.pxd,sha256=KoGGKw7rW8Utav9xrwVZpsLX-vlpF
|
|
|
272
272
|
Cython/Utility/Builtins.c,sha256=udHKjWEYYG6CEKTeD6yxY03l2GVwLSa5svM6NKPrGg4,26719
|
|
273
273
|
Cython/Utility/CConvert.pyx,sha256=UFlPDRT9anal0RpY03hXsejEcwp-RXJSnLy6LbbnmPQ,4471
|
|
274
274
|
Cython/Utility/CMath.c,sha256=rP6O5u23EybDGimRCHfy8WTpyxhPu5G1F6ksEmrgKnQ,3044
|
|
275
|
-
Cython/Utility/CommonStructures.c,sha256=
|
|
275
|
+
Cython/Utility/CommonStructures.c,sha256=cXOrFQv0DP8QX2CF4u_2O2lFW41WC3nTNwSKRVt3B7M,7926
|
|
276
276
|
Cython/Utility/Complex.c,sha256=nxxtxZk74ykGPoVhkHtYAnITLWLKYNHBSs8NEEmRf38,14033
|
|
277
277
|
Cython/Utility/Coroutine.c,sha256=mnN1zdID44Jn-0qF5Bw17QA5gloWpO8JTjiF7ggzuF8,85395
|
|
278
278
|
Cython/Utility/CpdefEnums.pyx,sha256=TMXyfhDeip3zqatMgNEQTQiss41nnp-PzFGn78tgBAs,3531
|
|
@@ -289,15 +289,15 @@ Cython/Utility/ImportExport.c,sha256=69eNLe8HRg8-595JL41wQO9i1su1F2EitC0Ghe5gh5c
|
|
|
289
289
|
Cython/Utility/MemoryView.pxd,sha256=ch7F03IB3MFqr8OVwN2zjkiveTtzTYUoQ2gERxB1RPg,7184
|
|
290
290
|
Cython/Utility/MemoryView.pyx,sha256=b_H0MFfFOLfBJUxD070EwnJLnZolLjPND96_IIDY-fg,49908
|
|
291
291
|
Cython/Utility/MemoryView_C.c,sha256=g84prOl_eoXc5Dgs7ZiG1DCHQ5jgbJjI1li9-A8KtQ8,28077
|
|
292
|
-
Cython/Utility/ModuleSetupCode.c,sha256=
|
|
292
|
+
Cython/Utility/ModuleSetupCode.c,sha256=yGvP7_cgJPWH5XNpjAolKgr_ETG4_DR90GoX9nYa3F0,118854
|
|
293
293
|
Cython/Utility/NumpyImportArray.c,sha256=Gwo493DF8JxUxhTTjJYIdyHHJ9TEwFKqDmKsdk_uPyw,2033
|
|
294
|
-
Cython/Utility/ObjectHandling.c,sha256=
|
|
295
|
-
Cython/Utility/Optimize.c,sha256=
|
|
294
|
+
Cython/Utility/ObjectHandling.c,sha256=yKBjDrbzSf5t4kunHiWZHqmN2lDnZvlPq96TCD4vIkU,119365
|
|
295
|
+
Cython/Utility/Optimize.c,sha256=ksJP3HuQl63FSOE351WQLPmCpMdp1tdiyL4dOJPjfwA,59685
|
|
296
296
|
Cython/Utility/Overflow.c,sha256=9C-WIzd4k4uSD7IrLVIJz8fEMK1jFt9UR4WRjDlarYk,15689
|
|
297
297
|
Cython/Utility/Printing.c,sha256=h3F9eyCXSs284Y8DZRivKtoAOcx5jIYPeNFOSD59foc,2898
|
|
298
298
|
Cython/Utility/Profile.c,sha256=JPglBHCdnTtyGj0JKzPtfN0djAIe6P5FVAqBQt43RZo,41218
|
|
299
299
|
Cython/Utility/StringTools.c,sha256=WQpQTBWSVYpNPUsVj2cXP_RgwcfyQ_NH-T70e65N59U,50848
|
|
300
|
-
Cython/Utility/Synchronization.c,sha256=
|
|
300
|
+
Cython/Utility/Synchronization.c,sha256=QuS-59I9g0ftI_Sq5Khfcd4n4PJUJD86yFcJcxAeFk4,19273
|
|
301
301
|
Cython/Utility/TString.c,sha256=UM3kg04oc0qq54ciFZd9X6Bk2acO1TqqZo89UtFvaoQ,13893
|
|
302
302
|
Cython/Utility/TestCyUtilityLoader.pyx,sha256=91lWWJub7l_6xNn3ncrvQZZ94RpkQzEx2NtAaFpvrxY,152
|
|
303
303
|
Cython/Utility/TestCythonScope.pyx,sha256=mWowHlHIs22w6xC5KAc8kelf2f2n6bhLapyqgz0JMpc,1999
|
|
@@ -310,8 +310,8 @@ Cython/Utility/arrayarray.h,sha256=hjXya3s-GoN4mKZTKUlyqPfT3tzf0GiansnSkUcWhk0,4
|
|
|
310
310
|
pyximport/__init__.py,sha256=9hOyKolFtOerPiVEyktKrT1VtzbGexq9UmORzo52iHI,79
|
|
311
311
|
pyximport/pyxbuild.py,sha256=AsL1tyLxG61Mj7Ah-DxtDBuaXF94W2Tb6KTos7r0w8I,5702
|
|
312
312
|
pyximport/pyximport.py,sha256=BnXVwq1cwo1EYRjPU0J-RUDcwzGjUlzKWZOOMDNcu-s,18510
|
|
313
|
-
cython-3.2.
|
|
314
|
-
cython-3.2.
|
|
315
|
-
cython-3.2.
|
|
316
|
-
cython-3.2.
|
|
317
|
-
cython-3.2.
|
|
313
|
+
cython-3.2.0b3.dist-info/METADATA,sha256=Rwr2QJnN0l_RH-d0t4ykQsWg9zViW0ZHeFkpP3zJW48,4331
|
|
314
|
+
cython-3.2.0b3.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
|
315
|
+
cython-3.2.0b3.dist-info/entry_points.txt,sha256=VU8NX8gnQyFbyqiWMzfh9BHvYMuoQRS3Nbm3kKcKQeY,139
|
|
316
|
+
cython-3.2.0b3.dist-info/top_level.txt,sha256=jLV8tZV98iCbIfiJR4DVzTX5Ru1Y_pYMZ59wkMCe6SY,24
|
|
317
|
+
cython-3.2.0b3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|