[GSOC 2026] Solver

77 views
Skip to first unread message

Ayush Kumar Jha

unread,
Mar 1, 2026, 11:30:38 PM (2 days ago) Mar 1
to sympy
Hello,

I am Ayush Kumar Jha (jhaayushkumar) , a mathematics undergrad from India, I am intrested in solveset / solvers

I've studied the current codebase and the existing GSoC blogs (Harsh Gupta, Amit Kumar, Kshitij Saraogi, Shekhar Rajak ,Yathartha Joshi). Here's my current understanding of what's left to do:

What I plan to work on:

1. Wire Lambert equations into _transolve _is_lambert() exists in solveset.py and _solve_lambert() exists in bivariate.py, but _transolve's add_type() never calls either. solveset() returns an unsolved ConditionSet for Lambert-type equations — the old solve() handles them correctly via _solve_lambert in bivariate.py, but solveset() has no such path. The work is wiring these into _transolve.

On running:- from sympy import *

x = symbols('x')

print(solveset(x*exp(x) - 1, x, S.Reals))


Output:- ConditionSet(x, Eq(x*exp(x) - 1, 0), Reals)
But should be:- {LambertW(1)} after implementing this
Currently i'm refering to this research Paper and also understand the whole stuff of this one.

2. nonlinsolve trig failures — issue #8711 nonlinsolve separates equations into polys and nonpolys. Trig equations fall into nonpolys and are handed to substitution(), which fails for systems like [sin(x) + cos(y), x + y - pi/2]. There is no trig-system detection in nonlinsolve. The plan is to add a trig-system detector and implement Weierstrass substitution (t = tan(x/2)) to reduce such systems to rational polynomial form.

3. Integrate helper solvers into solveset solveset() raises ValueError for any list input — there is no multivariate dispatch. The plan is to add dispatch so solveset([eq1, eq2], [x, y]) routes to linsolve or nonlinsolve. Also wire solve_decomposition into _transolve for f(g(x)) = 0 type equations — it currently exists as a completely standalone function with no connection to _transolve.

4. Complete multivariate ImageSet ImageSet accepts multi-arg Lambda structurally, but _contains has documented gaps in the source itself (XXX comments), and _solveset_multi which it calls internally is explicitly marked "not ready for public consumption." The work is making _contains, intersect, and is_subset fully reliable for tuple-valued sets.

On modular (#13178): The wiki lists this as a TODO but _is_modular() and _solve_modular() are already implemented and wired in _solveset. can any mentor please clarify on what specifically remains here.

Beyond this if something missed by me or i doesn't shows in this i requested mentor for adding additional things which I was lacking for and give me a green signal for starting and imposing this.

I am genuinely interested in working on this specific idea for GSoC. I would like to ask whether any mentor Shekhar, Oscar Benjamin, Aaron Meurer, or others would be willing to guide me on this project and help refine the scope so that I can start contributing meaningfully.

If this idea is already saturated or not currently a priority, I would greatly appreciate guidance on whether I should explore other ideas.

My prior SymPy contributions include:-

1.Add Mul postprocessor for Vector

2.Fix nonlinsolve incorrectly handling Interval solutions

3.Fix nonlinsolve KeyError with trivially true equations

4. Fix nonlinsolve returning wrong results for non-zero constants

5. Fix nonlinsolve returning incorrect parametric solution with Abs

Any recommendations or advice on how to approach the project would be greatly valued. 

Looking forward to your response.

Thanks & Best Regards,
Ayush Kumar Jha (jhaayushkumar)

Ayush Kumar Jha

unread,
Mar 2, 2026, 1:33:28 AM (yesterday) Mar 2
to sympy
>2. nonlinsolve trig failures — issue #8711 nonlinsolve separates equations into polys and nonpolys. Trig equations fall into nonpolys and are handed to substitution(), which fails for systems like [sin(x) + cos(y), x + y - pi/2]. There is no trig-system detection in nonlinsolve. The plan is to add a trig-system detector and implement Weierstrass substitution (t = tan(x/2)) to reduce such systems to rational polynomial form.

here the link attached in the issue was not appropriate it was mistakely linked as this is the first issue to get start as i think till now..

Reply all
Reply to author
Forward
0 new messages