About Me:  Introduction

Name           : Muhammed Abdul Quadir Owais (MaqOwais)

University    : University College Of Engineering Osmania University 
<http://uceou.edu/>

Major           : Electronics and Communication Engineering(ECE)

Email            : quadirowais...@gmail.com 

Github/IRC  : MaqOwais (MaqOwais) <https://github.com/MaqOwais>

Time Zone   : IST (UTC + 5:30)


Personal Background

Currently, I’m a third-year (6th semester) undergraduate student pursuing a 
Bachelor of Engineering(B.E.) in Electronics and Communication Engineering 
at U.C.E.O.U. (University College Of Engineering Osmania University 
<http://uceou.edu/>) , Hyderabad, Telangana, India. 

My core interests are Mathematics and Physics (which specifically/roughly 
includes the topics Calculus(limits, integrations, ODE, and PDE), 
Trigonometry, Algebra for Mathematics and Electronics, Communication, 
Mechanics, Electrical part in Physics).

I believe myself as a curious polymath since I’m very agile to learn many 
diversified subjects { which includes Economics, History, Geography, 
Chemistry (Organic, Physical, Inorganic), and poetry, calligraphy for fun 
}, obviously when the situation demands as per my goals. I’m also really 
passionate about the latest technological advancements, ultimately ending 
up gaining interest in the topics like computer programming, Machine 
Learning, web development, and software development which tremendously 
fascinates me a lot.

Programming Details

Though I believe at present, that I’m not very ‘pro’ in coding but rather 
desperately take challenges to learn new stuff and proceed further on my 
own without any consistent motivation. I also confess the fact that there 
is no limit of tools or languages or libraries at the development part and 
our attitude should be to always learn new stuff like a curious student ( 
through google, stack overflow, Github, or effective mentors and also learn 
frameworks or new languages as required).

So, my rough journey of coding since November(2018) ( 2 year 4months) 
dedicating approximately 3 - 3.5 hours daily(i.e after college hours) and 
on weekends 6 - 7 hours for learning and practicing to code on Pycharm, 
Visual Studio code, and Anaconda navigator(Jupyter notebook) as IDE’s .…

   1. 
   
   Learned the basic stuff of python language for approximately a month and 
   done some practice problems on hacker rank, Codeforces for better 
   understanding of code for the next 45 days also on code forces for some 
   days and took a break from it since I want to explore the practical part 
   how the things work with coding in real-life applications on internet or 
   development of software, cryptography, and mathematics related to it, etc… 
   and spend most of the time studying about different domains present in the 
   computer science field.
   2. 
   
    During that time, I’ve also gone through C programming (more probably 
   since January(2019) but not delved much as compared to python).
   3. 
   
   Done basic scripts with python (downloading files from the internet, 
   sending emails, accessing files through CSV modules, etc…), APIs. 
   4. 
   
   Learned the Django framework and did a mini-project with it (creating 
   the website with basic functionality like signup, pipelines, etc..).
   5. 
   
    Learned basic front-end HTML, CSS, MySQL also went through bootstrap 
   and its further applications and used it along with the Django framework.
   6. 
   
    I’ve also gone through basic Javascript and Java parts.
   7. 
   
   Then I came to know about GSoC and open source development finally ended 
   up gaining interest in sympy.
   8. 
   
   After that, made 2 to 3 different types of websites using front end and 
   backend technologies as mentioned above to gain a better project experience.
   9. 
   
   Then I took a break of around 2 months. The reason was to prepare for 
   finals as well as other stuff related to engineering subjects of computer 
   science and electronics stuff then again back to sympy development.
   
Contributions to Sympy

I’ve started to learn about Sympy since the end of January 2019 and my 
first commit was on the 9th of February. Initially, I just went through the 
code base and some basic stuff to proceed with commits. During the time, I 
admired the way the Sympy is functioning and retrospected how my passion 
(about coding and Mathematics {also Physics}) is being synergized under 
this platform.
PR’s

       MERGED


   1. 
   
   Fixes (solvers) : isolve ,solveset solves relational with integer domain 
   <https://github.com/sympy/sympy/pull/21156> (#21156 
   <https://github.com/sympy/sympy/pull/21156>)
   2. 
   
   Fix(docs) : extra tabs removed 
   <https://github.com/sympy/sympy/pull/21213> (#21213 
   <https://github.com/sympy/sympy/pull/21213>)
   3. 
   
   fix (solvers) : can solve complex exponential 
   <https://github.com/sympy/sympy/pull/21130> (#21130 
   <https://github.com/sympy/sympy/pull/21130>)
   4. 
   
   Adding _is_lambert function to solveset 
   <https://github.com/sympy/sympy/pull/21067> (#21067 
   <https://github.com/sympy/sympy/pull/21067>)
   5. 
   
   (Docs: solvers) Better Spacing 
   <https://github.com/sympy/sympy/pull/21061> (#21061 
   <https://github.com/sympy/sympy/pull/21061>)
   6. 
   
   fix(solvers): use as_base_exp to fix AttributeError in solveset 
   <https://github.com/sympy/sympy/pull/21018> (#21018 
   <https://github.com/sympy/sympy/pull/21018>)
   7. 
   
   changes in doc solveset --> substitution 
   <https://github.com/sympy/sympy/pull/20817> (#20817 
   <https://github.com/sympy/sympy/pull/20817>)
   8. 
   
   Lambert and _is_lambert modifications 
   <https://github.com/sympy/sympy/pull/20613> (#20613 
   <https://github.com/sympy/sympy/pull/20613>) (reverted)
   
      OPEN

   1. 
   
   Fixes (solvers) : Removed Attribute error, type error 
   <https://github.com/sympy/sympy/pull/21223>(#21223 
   <https://github.com/sympy/sympy/pull/21223>)
   2. 
   
   Fix(solvers) : In nonlinsolve KeyError is fixed 
   <https://github.com/sympy/sympy/pull/21212> (#21212 
   <https://github.com/sympy/sympy/pull/21223>)
   3. 
   
   Fix(solvers): ImageSet Union simplify (#18489 improved a bit) 
   <https://github.com/sympy/sympy/pull/21196> (#21196 
   <https://github.com/sympy/sympy/pull/21196>)
   4. 
   
   Enhancing solvify functionality 
   <https://github.com/sympy/sympy/pull/21174> (#21174 
   <https://github.com/sympy/sympy/pull/21174>)
   5. 
   
   Fixes 21079 issue, periodicity, solvify for piecewise 
   <https://github.com/sympy/sympy/pull/21165> (#21165 
   <https://github.com/sympy/sympy/pull/21165>)
   6. 
   
   Extending Basic lambert to solveset real 
   <https://github.com/sympy/sympy/pull/21025> (#21025 
   <https://github.com/sympy/sympy/pull/21025>)
   7. 
   
   Returns zero if L == 0 <https://github.com/sympy/sympy/pull/18683> (
   #18683 <https://github.com/sympy/sympy/pull/18683>)
   8. 
   
   Updating #18543 <https://github.com/sympy/sympy/pull/18609> (#18609 
   <https://github.com/sympy/sympy/pull/18609>)
   
    CLOSED

   1. 
   
   updated removed attribute error 
   <https://github.com/sympy/sympy/pull/20971>
   2. 
   
   AttributeError in solveset <https://github.com/sympy/sympy/pull/20917>
   3. 
   
   Testing the Lambert stuff by using flags 
   <https://github.com/sympy/sympy/pull/20824>
   4. 
   
   correcting #17940 and extension of #18863 
   <https://github.com/sympy/sympy/pull/20729>
   5. 
   
   Test cases for _is_lambert and Improvement of it! 
   <https://github.com/sympy/sympy/pull/20705>
   6. 
   
   Lambert touchUp <https://github.com/sympy/sympy/pull/20537>
   7. 
   
   AttributeError in solveset #18012 
   <https://github.com/sympy/sympy/pull/18849>
   8. 
   
   Removing attribute error from #18012 
   <https://github.com/sympy/sympy/pull/18843>
   9. 
   
   Rearranged Lambert solvers and resolving conflicting files 
   <https://github.com/sympy/sympy/pull/18759>
   10. 
   
   Test case for #18609  <https://github.com/sympy/sympy/pull/18648>
   

OPEN ISSUES


   1. 
   
   laplace_transform(cosh(2*x), x, s) raises RecursionError 
   <https://github.com/sympy/sympy/issues/21202>
   2. 
   
   Improve as_relational for Range 
   <https://github.com/sympy/sympy/issues/21201>
   3. 
   
   Make solve_univariate_inequality more effective. 
   <https://github.com/sympy/sympy/issues/21173>
   

CLOSED ISSUES


   1. 
   
   Relational gives the AttributeError with Intersection. 
   <https://github.com/sympy/sympy/issues/21185>
   2. 
   
   Discuss about the integration of linsolve, nonlinsolve with solveset. 
   <https://github.com/sympy/sympy/issues/21172>
   3. 
   
   Irregular Boundary conditions of Integer set as it returns the same. 
   <https://github.com/sympy/sympy/issues/21170>
   4. 
   
   Improvement of _is_lambert  <https://github.com/sympy/sympy/issues/20545>
   5. 
   
   Not able to solve such equation  
   <https://github.com/sympy/sympy/issues/18723>
   

The Project’s Brief Overview

The one-line description of this project is

“To make `solveset` function able to solve the equations as much as `solve` 
function with its special features (like giving a set of solutions, complex 
solutions, etc... ).”

One of the interesting features of Sympy that I’ve found is the solvers 
module. It’s a module that is capable of solving all types of equations( 
obviously it’s under development for extending its impact area), making it 
one of the powerful features which have roots all over the sympy (wherever 
the need of solving the equations is required). In my opinion, the 
solveset’s work of replacement is seventy percent done further, to make it 
more powerful and elegant, I've decided to work on this particular module. 
I’ve found that solvers are more suitable and interesting since the impact 
is more and in my opinion, it’s the pillar for Sympy. The solve module in 
solvers is used for solving algebraic and transcendental equations, but it 
has a lot of limitations (see here 
<http://docs.sympy.org/latest/modules/solvers/solveset.html#what-s-wrong-with-solve>)
 
and didn't give a complete and vivid solution therefore, the solveset is 
used as replacement for solve.

Solveset is being under development since 2014 by Harsh Gupta and continued 
by Amit Kumar. In 2016 Shekharrajak and Kshitij Saragoi implemented a lot 
of functionalities. In 2018, Yathartha Joshi continued further to implement 
a transcendental equation solver for solveset. transolve along with its 
helper solvers was implemented as a result of it. In 2019, Jogi Miglani 
rigorously 
worked on Lambert for solve (but not for solveset) and modular equations 
ultimately bringing the solveset what is today. And in 2020, there was no 
work in this module.

Following would be my major areas of concern during the GSoC period in 
which I will try to complete the solveset.



   - 
   
   Extending transolve (Transcendental Equation Solver).
   
 

As of now, _transolve(under the helper function of solveset) does support 
transcendental equations to some extent, like it handles logarithmic and 
exponential equations. Further the below class of equations to be 
integrated with transolve,

   - 
   
   Lambert type equations for both real and complex domains.
   - 
   
   Handling modular equations (closed but should be integrated with 
   _transolve)
   - 
   
   Invert development in complex domains.
   
 

The silent features of _transolve are (over _tsolve)

   - 
   
   Better output
   - 
   
   Extensible
   - 
   
   Modular
   - 
   
   Faster Computation (since the codebase{of _tsolve and bivariate.py} was 
   quite messy and there are a lot of recursive calls which makes computation 
   time taking )
   
 

THE RELATED REFERENCE PR’s ARE:

   - 
   
   For lambert (PR #14972 <https://github.com/sympy/sympy/pull/14972> → 
   #21025 <https://github.com/sympy/sympy/pull/21025> )
   - 
   
   For modular equations (PR #13178 
   <https://github.com/sympy/sympy/issues/13178> ) should be integrated 
   with transolve.
   - 
   
   A new PR to be made for invert.
   
 

 

   - 
   
   Build the better API for nonlinsolve/linsolve and Integration of helper 
   solvers with solveset and writing the respective test cases:
   
In the solveset module, currently, it only solves a single equation for a 
single variable. Further it should be capable of solving a system of 
equations for more than one variable. For this to happen, helper 
functions(linsolve, nonlinsolve, solve_decomposition) are still to be 
integrated (which can be used individually). One of the major tasks will be 
to integrate all these helpers to access this functionality towards 
solveset. And finally we should add test cases for solveset after 
integration. 

Helpers include:

   - 
   
   linsolve: solving linear system of equations.
   - 
   
   nonlinsolve: solving nonlinear system of equations.
   - 
   
   solve_decomposition: Solves a varied class of equations using the 
   concept of Rewriting and Decomposition (helper function for nonlinsolve)
   
As of now the output API of linsolve and nonlinsolve are not much effective 
and inconsistent. For this issue I’ve opened a discussion for this. So this 
is to be discussed before the gsoc period. 

 

THE RELATED REFERENCE LINKS ARE:

 

   - 
   
    Discuss about the integration of` linsolve`, `nonlinsolve` with 
   `solveset`. <https://github.com/sympy/sympy/discussions/21181>
   - 
   
   Discuss about better API for `nonlinsolve` 
   <https://github.com/sympy/sympy/discussions/21184>
   
 

   - 
   
   Building and improving the set infrastructure
   
This task basically includes unification of ImageSets. Currently there are 
open issues regarding this like ( #17838 
<https://github.com/sympy/sympy/pull/17838> ) also some other issues which 
were closed due to some reason but each time this got improved with 
time(since 2016). This sometimes causes problems when we try solving 
equations having infinite solutions for complex equations a union of many 
imageset is returned (which is not good), so a unification needs to be done 
to give a compact result.

Also, another thing in sets that can be implemented is BigUnion and 
BigIntersection and also IndexSet (to represent BigUnion/BigIntersection).

 

THE RELATED REFERENCE LINKS ARE:

 

   - 
   
   Fix(solvers): ImageSet Union simplify (#18489 improved a bit) #21196 
   <https://github.com/sympy/sympy/pull/21196>
   - 
   
    [Discussion] on the API of BigUnion and BigIntersection #14566 
   <https://github.com/sympy/sympy/issues/14566>
   - 
   
   Solveset returns wrong result for trigonometric inequality #19997 
   <https://github.com/sympy/sympy/issues/19997>
   
 

 

   - 
   
   Improving nonlinsolve/ solveset for trigonometric.
   
nonlinsolve was implemented for solving nonlinear type equations and 
currently, it’s not much effective since it’s not returning the solution 
correctly all the time especially when it comes to trigonometric equations 
as it’s not smart enough. Hence, a bit of some work needs to be done for 
improving the solveset's trigonometric/ transcendental trigonometric solver 
and handling trig systems of equations separately. As solveset is being 
used by the nonlinsolve so improving trig solvers for solveset will 
automatically improve the nonlinsolve.

Currently trigonometric system of nonlinear equations is not handled by 
nonlinsolve, for example, consider a simple non-linear trigonometric 
equations:

THE RELATED REFERENCE LINKS ARE:

   - solveset: current state of _solve_trig and _invert 
   <https://github.com/sympy/sympy/issues/17334>
   - 
   
   improving _solve_trig in solveset 
   <https://github.com/sympy/sympy/issues/12340> . 
   
The Plan

In this section, I’ve tried to explain the plan how things are working 
currently, and further how it should work in the desired way. I expect this 
structure to be considerably enhanced under the guidance of my mentor.


   1. 
   
   Extending transcendental equations (_transolve)
   

   - 
   
   Transcendental Function:
   
 A transcendental function is an analytic function 
<https://en.wikipedia.org/wiki/Analytic_function> that does not satisfy a 
polynomial equation, in contrast to an algebraic function.

In other words, a transcendental function "transcends" algebra in that it 
cannot be expressed in terms of a finite sequence of the algebraic 
operations of addition, multiplication, and root extraction.

 

Examples: logarithmic equations, trigonometric equations, exponential 
equations, Lambert equations, Modular equations.

 

Currently solveset does not support Lambert equations, it returns 
ConditionSet instead. And for solving transcendental equations in complex 
domain, here it doesn't always return the solution in the desired way, so 
this should be improved to obtain complex solutions simultaneously (under 
the extension of _transolve) .

 _transolve needs to be implemented to solve such equations, initial commit 
for transolve has been made in #13045 
<https://github.com/sympy/sympy/pull/13045> then it’s closed in favour of 
#14736 <https://github.com/sympy/sympy/pull/14736> (and it’s extension is 
#14792 <https://github.com/sympy/sympy/pull/14792> ) and which is currently 
capable for solving a large variety of exponential and logarithmic 
equations.

 

Still more of work needs to be done:

   1. 
   
    Lambert type equations (PR #14972 
   <https://github.com/sympy/sympy/pull/14972> →#18759 
   <https://github.com/sympy/sympy/pull/18759> ) in both real and complex 
   domains
   2. 
   
    Handling modular equations (#13178 
   <https://github.com/sympy/sympy/issues/13178> closed)
   
 

Adding a new class of equation solver is a three-step procedure

(in documentation):

- Identify the type of the equations

- Define the identification helper.

- Define the solving helper.

 

   1. 
   
   Lambert type equations in both real and complex domains
   
solve is already able to handle such equations but solveset returns a 
ConditionSet. solve makes it possible by taking advantage of the bivariate 
module.

 

In #14972 <https://github.com/sympy/sympy/pull/14972> for lambert solver 
for transolve is closed in the favor of  #21025 
<https://github.com/sympy/sympy/pull/21025> where I’ve refactored lambert 
solver and tried to do the left part of it and solved most of the issues 
(some of them are still left) and resolved conflicting files (bivariate.py, 
solvers.py ), in this I’ve also tried to integrate some parts with _tsolve 
and solve to get outputs of failed tests in lambertW.  During Gsoc 19 this 
module(lambert pr-16890 <https://github.com/sympy/sympy/pull/16890>) was 
highly developed by Jogi Miglani. And also Handling modular equations was 
nicely implemented in pr  #16976 <https://github.com/sympy/sympy/pull/16976> 
under solveset.

 

So,  #18759 <https://github.com/sympy/sympy/pull/18759> it returns in the 
desired way, further it the quality code should be improved, to get a more 
optimized solution (which is already discussed).

 

>>> f = x + exp(x)
>>> solve(f, x)
[-LambertW(1)]
>>> solveset(f, x, S.Reals)
ConditionSet(x, Eq(x + exp(x), 0), S.Reals)

# after #21025

>>> solveset(f, x, S.Reals)

FiniteSet(-LambertW(1))

>>> solveset(f, x, S.Complexes)

ImageSet(Lambda(n, -Lambert(1, n)), S.Integers)

 

 

 

   1. 
   
    Handling modular equations 
   
This task is already completed, but I think this should be integrated to 
transolve since, as of now it is integrated with solveset directly . In my 
opinion, this should be integrated with transolve so as to increase its 
speed and also better for maintenance also.

Jogi Miglani had done Handling modular equations was nicely implemented in 
pr  #16976 <https://github.com/sympy/sympy/pull/16976> under solveset.

..

 

   1. 
   
   Invert development in complex domain
   
The _invert in a complex domain should be developed in the following class 
of equations when compared to real domain.

   - 
   
   Pow
   - 
   
   Trigonometric function
   

For Pow

>>> _invert(2**x, 32, x, S.Complexes)

(2**x, FiniteSet(32))

>>> _invert(2**x, 32, x, S.Reals)

(x, FiniteSet(5))

# supported in real domain

>>> solveset(2**x - 32, x, S.Reals)
FiniteSet(5)

# not supported in complex domain
>>> solveset(2**x - 32, x)
ConditionSet(x, Eq(2**x - 32, 0), Complexes(S.Reals x S.Reals, False))


# correct result    
Imageset(Lambda(n, (2*n*I*pi + 5 log(2))/log(2))), S.Integers)

For trigonometric

>>> invert_complex(sin(x), y, x)

(sin(x), FiniteSet(y))

>>> invert_real(sin(x), y, x)

(x, ImageSet(Lambda(_n, (-1)**_n*asin(y) + _n*pi), Integers))

     

 

 

 


   1. 
   
   Build the better API for nonlinsolve/linsolve and Integration of helper 
   solvers with solveset and writing the respective test cases:
   
As per my knowledge, linsolve, nonlinsolve and solve_decomposition are 
already in a fully fledged mode (they can be used individually) and further 
we just need this functionality to be integrated with solveset so as to 
increase the user interface .

So what I’ve decided is to integrate(link) solvers (linsolve, nonlinsolve, 
solve_decomposition) to solveset and resolve related (conflicting) 
dependencies over different modules (if we encounter). And further adding 
respective helper(solving helpers) , check functions(Identifying helpers) 
hence optimally designing the structure, ultimately to get faster solution. 
Finally an integrated form of linsolve, nonlinsolve, solve_decomposition 
can be established .

 

 

# currently
>>> x1, x2, x3, x4 = symbols(‘ x1, x2, x3, x4 ’) 

>>> Eqns = [ x1 + 2*x2 + x3 +x4 - 7 , x1 + 2*x2 + 2*x3 - x4 - 12, 2*x1 + 
4*x2 + 6*x4 - 4 ]

>>> linsolve(Eqns, (x1, x2, x3, x4)

FiniteSet((-2*x2 - 3*x4 +2 , x2, 2*x4 + 5 , x4 ))

>>> linsolve(Eqns, *(x1, x2, x3, x4)

FiniteSet((-2*x2 - 3*x4 +2 , x2, 2*x4 + 5 , x4 ))


# should be extended to ... 

>>> solveset(Eqns, (x1, x2, x3, x4)

FiniteSet((-2*x2 - 3*x4 +2 , x2, 2*x4 + 5 , x4 ))

>>> solveset(Eqns, *(x1, x2, x3, x4)

FiniteSet((-2*x2 - 3*x4 +2 , x2, 2*x4 + 5 , x4 ))

###For nonlinsolve

>>> system = [x, y-x-5 ]

>>> nonlinsolve(system, [y]) 

FiniteSet((x+5,))

>>> nonlinsolve([x**2 - 1], [x]) 

FiniteSet((-1,),(1,))

>>> nonlinsolve([Abs(x) - y], x, y)

FiniteSet((x,Abs(x)))

# should be extended to ... 

>>> solveset(system, [y]) 

FiniteSet((x+5,))

>>> solveset([Abs(x) - y], x, y)

FiniteSet((x,Abs(x)))

>>> solveset([x**2 - 1], [x]) 

FiniteSet((-1,),(1,))

### for solve-decomposition

>>> solve_decomposition(exp(3*x)  - 6*exp(2*x) + 11*exp(x) - 6, x, S.Reals)

FiniteSet(0, log(2), log(3))

>>> solve_decomposition(sin(x)**2 - sin(x) + 1, x, S.Reals)

ImageSet(Lambda(n, 2*n*pi + pi/2), S.Integers)

# should be extended to ... 

>>> solveset(exp(3*x)  - 6*exp(2*x) + 11*exp(x) - 6, x, S.Reals)

FiniteSet(0, log(2), log(3))

>>> solveset(sin(x)**2 - sin(x) + 1, x, S.Reals)

ImageSet(Lambda(n, 2*n*pi + pi/2), S.Integers)



 

3) Building and improving the set infrastructure

   1. 
   
   This task mainly deals in unifying the ImageSet. Currently there is no 
   union of imageset which sometimes becomes complicated for complex 
   equations. In solveset the solutions for trigonometric equations are 
   affected, a proper unification needs to be carried out so that we get 
   accurate results.
   
Few works and discussions has been done regarding this

#7673 <https://github.com/sympy/sympy/pull/7673>, #10898 
<https://github.com/sympy/sympy/pull/10898>, #10482 
<https://github.com/sympy/sympy/pull/10482>, #12011 
<https://github.com/sympy/sympy/pull/12011>, #11188 
<https://github.com/sympy/sympy/pull/11188>, #17838 
<https://github.com/sympy/sympy/pull/17838>, 

Finally I’ve opened this in order to work on this issue

   - 
   
   Fix(solvers): ImageSet Union simplify (#18489 improved a bit) #21196 
   <https://github.com/sympy/sympy/pull/21196>
   

# currently
>>> solveset(sin(x), x, S.Reals)
{2⋅n⋅π | n ∊ ℤ} ∪ {2⋅n⋅π + π | n ∊ ℤ}
# this could be simplified to {n⋅π | n ∊ ℤ}

>>> solveset(sin(2*x) - sin(4*x) + sin(6*x) , x, S.Reals)
Union(ImageSet(Lambda(_n, 2*_n*pi), S.Integers), ImageSet(Lambda(_n, 
2*_n*pi + pi), S.Integers), ImageSet(Lambda(_n, 2*_n*pi + pi/2), 
S.Integers), ImageSet(Lambda(_n, 2*_n*pi + 3*pi/2), S.Integers), 
ImageSet(Lambda(_n, 2*_n*pi + 4*pi/3), S.Integers), ImageSet(Lambda(_n, 
2*_n*pi + 2*pi/3), S.Integers), ImageSet(Lambda(_n, 2*_n*pi + 5*pi/3), 
S.Integers), ImageSet(Lambda(_n, 2*_n*pi + pi/3), S.Integers), 
ImageSet(Lambda(_n, 2*_n*pi + 5*pi/4), S.Integers), ImageSet(Lambda(_n, 
2*_n*pi + 3*pi/4), S.Integers), ImageSet(Lambda(_n, 2*_n*pi + 7*pi/4), 
S.Integers), ImageSet(Lambda(_n, 2*_n*pi + pi/4), S.Integers))

# could have been simplified to (n⋅π / 4), (n⋅π ± π/6)

 

   1. 
   
   Also to make set module more powerful, implementation of BigUnion and 
   BigIntersection was proposed in #9815 
   <https://github.com/sympy/sympy/issues/9815> to represent arbitrary 
   index unions and intersections. For this implementation we will be needing 
   to implement a new set, called the IndexSet, which will work something as:
   
 

>>> X = {FiniteSet(1, 2, 3), FinitSet(3, 4), FiniteSet(6, 7)}

I = IndexSet()

>>> BigUnion(X[i], i, I(0, 1, 2))

FiniteSet(1, 2, 3, 4, 6, 7)

>>> for i in range(0, 3):

   ....print(I[i])

Output:

FiniteSet(1, 2, 3)

FinitSet(3, 4)

FiniteSet(6, 7)

Discussion: [Discussion] on the API of BigUnion and BigIntersection #14566 
<https://github.com/sympy/sympy/issues/14566>

As of now I didn’t get more into the analysis of BigUnion but definitely 
I’ll cover up this part prior to Gsoc. The implementation of this concept 
is very vital due to this issue Solveset returns wrong result for 
trigonometric inequality #19997 
<https://github.com/sympy/sympy/issues/19997>

 

 

 

 

   1. 
   
   Improving nonlinsolve for trigonometric and integration of non-linsolve 
   with solveset:
   

       Currently solveset is unable to solve a lot of trigonometric 
equations very

       smoothly most of the time, so some issues are to be dealt to make 
this reliable.

       Most of the times the solveset uses _solve_trig to solve such 
equations so this

       should also be improved during this period. The helper solvers for 
_solve_trig are 

        _solve_trig1, _solve_trig2 which are developed under this issue but 
more work

           has to be done to achieve perfection.In #17334 
<https://github.com/sympy/sympy/issues/17334>, very strong points are

       raises for the improvement of solve_trig Which is to be further 
integrated with

       nonlinsolve then ultimately to solveset to make it more effective.

Nested trigonometric equations returns ConditionSet. issue#10217 
<https://github.com/sympy/sympy/issues/10217>. 

such problems are the ones that can be converted to polynomial equations(by 
the principle of Decomposition and Rewriting) and thus solved. For these 
types of problems we can have an internal call to solve_decomposition which 
solves the problem.

Discussion related to these equations: #12340 
<https://github.com/sympy/sympy/issues/12340> . 

 

In #17334 <https://github.com/sympy/sympy/issues/17334>, very strong points 
are raises for the improvement of solve_trig

Which is to be further integrated with nonlinsolve then ultimately to 
solveset to

make it more effective.

As of now, the trigonometric system of nonlinear equations is not handled 
by nonlinsolve effectively, 

for example, consider a simple non-linear trigonometric equations:

 

 

## step 1: 

# to improve solveset for transcendental equations

## step 2: 

# then integrate nonlinsolve with the solveset…

# NOW THIS IS RETURNING CONDITION SET

>>> eqns = [sin(x) + cos(y) - 1, sin(x)**2 + cos(y)**2 - 0.5]
>>> nonlinsolve(eqns, [x, y])
ConditionSet((x, y), Eq(sin(x) + cos(y) - 1, 0) & Eq(sin(x)**2 + cos(y)**2 
- 0.5, 0), ProductSet(Complexes, Complexes))

# fails because solveset trig solver is not much smart.

>>> sys = [x + y - pi/2, sin(x) + sin(y) - 1]

# solveset returns ConditionSet for sin(x) + sin(y) - 1

>>> soln_1 = (ImageSet(Lambda(n, n*pi + pi/2), 
S.Integers),ImageSet(Lambda(n, n*pi)), S.Integers)

>>> soln_1 = FiniteSet(soln_1)

>>> soln_2 = (ImageSet(Lambda(n, n*pi), S.Integers), ImageSet(Lambda(n, 
n*pi+ pi/2), S.Integers))

>>> soln_2 = FiniteSet(soln_2)

>>> soln = soln_1 + soln_2

>>> nonlinsolve(sys, [x, y])

soln




-- 
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 on the web visit 
https://groups.google.com/d/msgid/sympy/f82960d6-e47a-4920-94d8-b6b7d583dce5n%40googlegroups.com.

Reply via email to