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 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> \w+) \s* : \s* (?P<value> (?: \w|[.:] )+ )'
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 name, values in tags.items():
500
- all_tags.setdefault(name, set()).update(values)
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
- if m.group('name'):
533
- cls._add_utility(utility, name, type, lines, begin_lineno, tags)
534
-
535
- begin_lineno = lineno + 1
536
- del lines[:]
537
- tags.clear()
538
-
539
- name = m.group('name')
540
- mtype = match_type(name)
541
- if mtype:
542
- name, type = mtype.groups()
543
- else:
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
- tags[m.group('tag')].add(m.group('value'))
548
- lines.append('') # keep line number correct
545
+ type = 'impl'
546
+ utility = utilities[name]
549
547
  else:
550
- lines.append(rstrip(strip_comments(line)))
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.funcstate.scope.use_entry_utility_code(entry)
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:
@@ -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.
@@ -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.cy_pymutex_type, PyrexTypes.cy_pymutex_type): (
100
+ _type_to_itself(PyrexTypes.get_cy_pymutex_type()): (
98
101
  "cython.pymutex cannot be copied"),
99
- (PyrexTypes.cy_pythread_type_lock_type, PyrexTypes.cy_pythread_type_lock_type): (
102
+ _type_to_itself(PyrexTypes.get_cy_pythread_type_lock_type()): (
100
103
  "cython.pythread_type_lock cannot be copied"),
101
104
  }
102
105
 
@@ -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 (*{name})(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
- if env.find_shared_usages_of_type(lambda tp: tp is PyrexTypes.cy_pymutex_type):
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, h_code_start)
366
+ self.generate_type_header_code(h_types, h_code_main)
366
367
  if options.capi_reexport_cincludes:
367
- self.generate_includes(env, [], h_code_start)
368
- h_code_start.putln("")
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
- h_code_start.putln("#ifndef %s" % api_guard)
371
- h_code_start.putln("")
372
- self.generate_extern_c_macro_definition(h_code_start, env.is_cpp())
373
- h_code_start.putln("")
374
- self.generate_dl_import_macro(h_code_start)
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
- type.scope.use_entry_utility_code(attr)
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
- env.use_entry_utility_code(entry)
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 is PyrexTypes.cy_pymutex_type or (
9037
- arg.type.is_ptr and arg.type.base_type is PyrexTypes.cy_pymutex_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.get_utility_code())
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()
@@ -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 get_utility_code(self):
4951
- # It doesn't seem like a good way to associate utility code with a type actually exists
4952
- # so we just have to do it in as many places as possible.
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.get_utility_code()
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.get_utility_code())
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.get_utility_code())
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
- cy_pymutex_type = CythonLockType("PyMutex")
5147
- cy_pythread_type_lock_type = CythonLockType("PyThreadTypeLock")
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, type_check_predicate, _seen_scopes=None):
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(type_check_predicate(sub_tp) for sub_tp in entry_subtypes):
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(type_check_predicate, _seen_scopes):
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
@@ -1,7 +1,7 @@
1
1
  # cython.* namespace for pure mode.
2
2
 
3
3
  # Possible version formats: "3.1.0", "3.1.0a1", "3.1.0a1.dev0"
4
- __version__ = "3.2.0b2"
4
+ __version__ = "3.2.0b3"
5
5
 
6
6
 
7
7
  # BEGIN shameless copy from Cython/minivect/minitypes.py
@@ -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);
@@ -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
@@ -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
- #if CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
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
  {
@@ -229,15 +229,22 @@
229
229
  #endif
230
230
 
231
231
 
232
- ////////////////////// PyThreadTypeLock.proto //////////
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
- ////////////////////// PyMutex.proto ////////////////////
330
+ ////////////////////// PyMutexDecl.proto ////////////////////
323
331
  //@proto_block: utility_code_proto_before_types
324
- //@requires: PyThreadTypeLock
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
- #if PY_VERSION_HEX > 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
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.0b2
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.0b2 (2025-10-27)
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
- * Iteration over memoryviews could loop indefinitely in 3.2b1 when encountering a ``continue`` statement.
81
- (Github issue https://github.com/cython/cython/issues/7259)
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
- * Value conversion errors when tracing C return statements no longer fail the trace
118
- but fall back to reporting ``None`` returns instead.
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
- Other changes
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
- * The ``musllinux`` platform is now served with an abi3 Cython wheel instead of Python specific ones.
125
- (Github issue https://github.com/cython/cython/issues/7250)
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=2DkawWm1fcr8VXHqXVXrUhOHbsYgZbJ0ugAePyIQVLE,19634
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=qSiVcJY8I7TbKYhR3d5_OXWlTthkhqFu326_lRX-ekk,142972
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=xc--GL42F4k7o7lFRXLOnz0cr_9QuI1UmCLa0F4r5Us,7036
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=iAkBVD6B_3sse1h1l-3QoZ6Qy8EEj8BjIExszbQJYds,634684
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=81K5amB3Fz-zr5PUeRtsOLJYyCxp35DusDnGVIZxKl0,193852
54
+ Cython/Compiler/ModuleNode.py,sha256=7HAhU4H5VEeZxN42HGlq7dYRGA3faauucz3YsQmyULk,194712
55
55
  Cython/Compiler/Naming.py,sha256=xneFFCsB68xZhghXAxA2GnRrooWMumxss20B1I0avqk,11159
56
- Cython/Compiler/Nodes.py,sha256=B2mm_IEa6m0JpmiEt9O-3DoaDCJWbdL6D8-sVKd_zw8,455820
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=ucSPkoB3DOmjY1gZeXMz46135kTy5pDYImWQnSM8Awc,222609
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=-oboJe3vOjp_Ejx95wwIktT1x8iRROKa2BQ0pCCPYkQ,137117
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=RTjw1pGoTKy7BirWBdiFmNAtD7Jfq0ur_rh3396rQq4,7881
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=zPKNz8f_oWO4bEx9QW4hDHAiErpsUoc7qxscplDwMBA,116716
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=JDDJ3dmcuUd1Ig_28gqanpbBhz8FL1QrUDqVFqC7gXk,119369
295
- Cython/Utility/Optimize.c,sha256=cWbQhEfveBMRFupodbgxM0DcHpib2ktdSmKy7erTDmg,60009
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=D_towCvmTpBfYYYNa01-v0bM0Wk4RyGi0lx32UmGnKM,18686
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.0b2.dist-info/METADATA,sha256=t04HJ9-N1-UaovuzIUU6jaHvo26fSBmXxhNgVNV1Vw8,5558
314
- cython-3.2.0b2.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
315
- cython-3.2.0b2.dist-info/entry_points.txt,sha256=VU8NX8gnQyFbyqiWMzfh9BHvYMuoQRS3Nbm3kKcKQeY,139
316
- cython-3.2.0b2.dist-info/top_level.txt,sha256=jLV8tZV98iCbIfiJR4DVzTX5Ru1Y_pYMZ59wkMCe6SY,24
317
- cython-3.2.0b2.dist-info/RECORD,,
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,,