# GSoC 2018 - Week 6 - Continuing with transolve Part-III

23 Jun 2018For the sixth week, I started working on a few things as per the discussions with Amit:

- Improving the API of
`transolve`

.

As `transolve`

grew over the past few weeks the API became a bit messy, which was against the plan. So Amit suggested on to work on it to make it look clean. For this I added two internal functions `add_type()`

and `pow_type()`

, to handle expressions having `add`

or `power`

terms respectively. This could help us in achieving what we planned of: making the API extensible without it getting affected from the changes done in the function itself. If new solvers are to be added the modifcation has to be done in either of the internal functions.

- Improved the working of
`_check_expo`

.

The implementation of the `check_expo`

had a probelm, of not being generalised, only equations having two terms were checked. So the task was to make it generalised, so I implemented it using atoms, filtered the equations having `Pow`

or `exp`

with the help of `.atoms()`

and then checked whether the variable that needs to be solved is present in the exponent or not but this too possesed a problem: asking for atoms was not a great choice as they can come from anywhere like `cos(2**x).atoms(Pow, exp)`

would give `2**x`

and consequently the helper would return `True`

, which is wrong. For this smichr suggested even better method of using .make_args(). We will seperate out all the `Add`

arguments and then in each of them we will look for `Mul`

arguments which will give us the atomic argument of the expression, now this term can be tested to have variable in the exponent.

- Changes in the documentation

Also there were a few things that needed to fixed in the documentation. The docstring of `expo_solver`

and `check_expo`

were improved. Few changes were also done in `transolve's`

documentation.

- Worked on improvement of
`log solver`

Apart from this I did some improvement in `check_log`

to handle corner cases. As per the current logic `check_log`

would return a “*logcombined*” equation to be further solved by `log_solver`

, but this lead to a problem that the some equation (`log(x**y) - y*log(x)`

) might get reduced to `0`

and the check would fail, therefore this was handled by improving the condition as `if condition not False`

. Apart from this single term expression needs to be properly handled.

Also I started getting familiar with `lambert`

equations.

So these were the things that I worked on this week. The PR needs a bit more improvement to get merged, I will try to get it finished by mid of the coming week and start working on implementation of other solvers.

Follow @Yathartha22