What versions of Python does python-flint support? A potential issue
could be if python-flint follows SPEC 0 but SymPy supports older
Python versions, then SymPy would necessarily have to also support
older versions of python-flint, even if we might otherwise be able to
avoid that by doing releases in tandem.

Aaron Meurer

On Wed, Apr 16, 2025 at 6:22 AM Oscar Benjamin
<oscar.j.benja...@gmail.com> wrote:
>
> On Tue, 15 Apr 2025 at 18:40, Aaron Meurer <asmeu...@gmail.com> wrote:
> >
> > That's been our policy in the past
> > https://github.com/sympy/sympy/wiki/Python-version-support-policy. We
> > definitely should just decide on a policy and stick with it. Then we
> > won't have to discuss it every time we do a release. The main downside
> > of supporting Python versions up to EOL is that Python has a faster
> > release cadence now, meaning that when we do this we have to support
> > up to 5 different Python versions at once (3.9, 3.10, 3.11, 3.12, and
> > 3.13). When that policy was written the cadence was slower and only
> > meant supporting 3 versions at once (not counting Python 2).
>
> I think this is why spec 0 says what it does. It was decided to
> support 3 Python versions when Python versions were released every 18
> months which meant supporting all non-EOL Pythons. Then CPython
> decided to go to a 12 month release schedule and moved to supporting 5
> versions concurrently rather than 3.
>
> Supporting many versions like this is not such a problem for a pure
> Python package like SymPy but for e.g. NumPy or python-flint this
> means producing almost twice as many binaries and testing twice as
> many combinations. The most recent release of python-flint has
> binaries for the Cartesian product of
>
> CPython: 3.11, 3.12, 3.13, 3.13t (free-threaded)
>
> OS/Arch:
> MacOS x86_64
> MacOS ARM
> Windows x86_64
> ManyLinux x86_64
> ManyLinux ARM
>
> That's 4*5 = 20 wheels with each at 10MB meaning that a full release
> is 200MB of wheels on PyPI:
> https://pypi.org/project/python-flint/#files
>
> Supporting all non-EOL Python versions plus free-threaded would
> increase the first part in future to:
>
> CPython 3.13, 3.13t, 3.14, 3.14t, 3.15, 3.15t, 3.16, 3.16t, 3.17, 3.17t
>
> Then it is 10*5 = 50 wheels making 0.5GB per release. PyPI has a limit
> of 10GB for all releases of a project:
> https://github.com/pypi/warehouse/blob/8060bfa3cb00c7f68bb4b10021b5361e92a04017/warehouse/forklift/legacy.py#L70-L72
>
> At 0.5GB per release python-flint would exceed the file size limit
> after 20 releases and would then need to start deleting older
> releases.
>
> Another thing on the horizon is Windows ARM and then there are also
> other things like musllinux and so on that e.g. numpy provides wheels
> for:
> https://pypi.org/project/numpy/#files
> Looks like NumPy has 50 wheels per release just for Python 3.10-3.13
> and 3.13t already.
>
> On top of 50 platforms to produce binaries then you can imagine
> needing to test all of those with say a range of different versions of
> something else like different SciPy versions or something.
>
> Of course these file size limits and the combinatorial explosion of
> platforms and ABIs are not directly relevant to SymPy but it shows why
> other scientific Python packages don't want to say "let's just support
> every non-EOL Python".
>
> What matters for SymPy though is how its version support lines up with
> other packages because as I said in the start the problem is that any
> library that depends on SymPy without using an upper cap like
> sympy<=3.13 is potentially broken if a new SymPy release goes out for
> older Python versions that the dependent library no longer supports.
>
> There is a general suggestion that Python packages should not use
> upper cap version ranges like sympy<=3.13 but that only works if there
> is some synchronisation around the supported Python versions.
> Effectively it is the minimum Python versions required by each package
> that acts as an implicit upper cap between e.g. SymPy and anything
> else that depends on SymPy as well as all the things that SymPy
> implicitly depends on like NumPy etc. If SymPy didn't specify a
> minimum Python version then each new release would probably break
> other packages for people using older Python versions.
>
> > At the same time, I'm not aware of new Python features that we really
> > wish we could be using but can't as long as we keep supporting older
> > versions. Are there examples of this?
>
> There aren't many new features that are needed in the sense that older
> versions have to be dropped in order to get those features. Typically
> this only happens for new syntax and recently I think all syntax
> changes have been related to typing e.g. the syntax here would be
> useful but cannot be used without dropping Python 3.11:
> https://peps.python.org/pep-0695/
>
> The question is not how hard or easy it is for SymPy to support many
> Python versions or whether there are new features that would benefit
> SymPy though. It is really about the fact that pushing a new SymPy
> release out to an old version of Python risks breaking things that
> depend on SymPy. If most other things follow SPEC 0 then it is better
> that SymPy does as well but I'm not sure that is the case.
>
> Anyway for now I think we are all agreed that SymPy 1.14 should stick
> with 3.9 upwards.
>
> --
> Oscar
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sympy+unsubscr...@googlegroups.com.
> To view this discussion visit 
> https://groups.google.com/d/msgid/sympy/CAHVvXxTnD59ECAWDXf1GuO-73OUHfSZ30vtvkSECvoyUHTVRjg%40mail.gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6KHCK7mwBbpJBDbfaLy8N0TH%3DnxuLOze8zdoV4Ex8B3MQ%40mail.gmail.com.

Reply via email to