oracle / oracle/graalpython

[Bug]: incompatible (wrt CPython 3.12) signatures for some integer math functions and int's methods

Open
#998 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
1.6k
Forks
155
Avg merge
9h 42m
Merged PRs (30d)
36

Description

Describe the bug
Python 3.12.13 (tags/v3.12.13:3bb231a6a5d, May 14 2026, 11:06:30) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math, inspect
>>> for fn in ["comb", "factorial", "gcd", "isqrt", "lcm", "perm"]:
...     f = getattr(math, fn)
...     print(f, inspect.signature(f))
...
<built-in function comb> (n, k, /)
<built-in function factorial> (n, /)
<built-in function gcd> (*integers)
<built-in function isqrt> (n, /)
<built-in function lcm> (*integers)
<built-in function perm> (n, k=None, /)
>>> for meth in dir(int):
...     m = getattr(int, meth)
...     if meth.startswith("_") or not callable(m):
...         continue
...     try:
...         print(meth, inspect.signature(m))
...     except ValueError:
...         pass
...
as_integer_ratio (self, /)
bit_count (self, /)
bit_length (self, /)
from_bytes (bytes, byteorder='big', *, signed=False)
is_integer (self, /)
to_bytes (self, /, length=1, byteorder='big', *, signed=False)

In the GraalPy instead:

Python 3.12.8 (Tue Jun 23 15:17:16 UTC 2026)
[Graal, GraalVM CE, Java 25.0.3 (amd64)] on 'linux'
Type "help", "copyright", "credits" or "license" for more information.
>>> import math, inspect
>>> for fn in ["comb", "factorial", "gcd", "isqrt", "lcm", "perm"]:
...     f = getattr(math, fn)
...     print(f, inspect.signature(f))
...
<built-in function comb> (a, b, /)
<built-in function factorial> (a, /)
<built-in function gcd> (*args, **kwargs)
<built-in function isqrt> (a, /)
<built-in function lcm> (*args, **kwargs)
<built-in function perm> (n, k, /)
>>> for meth in dir(int):
...      m = getattr(int, meth)
...      if meth.startswith("_") or not callable(m):
...          continue
...      try:
...          print(meth, inspect.signature(m))
...      except ValueError:
...          pass
... 
as_integer_ratio (self, /)
bit_count (self, /)
bit_length (self, /)
conjugate (self, /)
from_bytes (bytes, byteorder, /, *, signed)
is_integer (self, /)
to_bytes (self, length, byteorder, /, *, signed)

As you can see, all present function signatures from the math module are different. Of course, most functions have positional-only arguments and naming differences aren't significant. But differences for gcd, lcm and perm - are. Same true for to_bytes/from_bytes methods: they lack default values and incorrectly specify positional-only arguments.

Though, I would appreciate if signatures will be fully compatible, including naming of positional-only parameters. The reason is that such naming is used in the Python prose docs, e.g. https://docs.python.org/3.12/library/math.html#math.comb. The GraalPy has no documentation like this for the stdlib.

Operating system

Linux

CPU architecture

x86_64

GraalPy version

25.1.3

JDK version

No response

Context configuration

No response

Steps to reproduce

See bug description.

Expected behavior

Match CPython.

Stack trace

Additional context

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the GraalPy implementations or entry points for math.comb, factorial, gcd, isqrt, lcm, perm and int.from_bytes/to_bytes. Run the supplied inspect.signature comparisons against CPython; done means the signatures, parameter names, defaults and positional-only markers match the reported CPython 3.12 behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
65/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.