# GSoC 2020 Week-2

Part of this week was spent in getting the PR for `ParametricRegion` merged. I made some fixes to get the failing tests to pass. I also added the docstring.

### ParametricIntegral

I started working on the `ParametricIntegral` class. `ParametricIntegral` class returns the integral of a scalar or vector field over a region defined parametrically. It should be able to calculate line, surface, or volume integral depending on the nature of the parametric region. To identify the nature of the region, the `dimensions` property needs to be added in the `ParametricRegion` class.

I started with writing the test cases to avoid my previous mistake of working on the implementation before deciding the API. The API of the ParametricIntegral class:

``````ParametricIntegral(field, parametricregion)
``````

Some examples:

``````>>> curve = ParametricRegion((3*t - 2, t + 1), {t: (1, 2)})
>>> ParametricIntegral(C.x, curve)
5*sqrt(10)/2
>>> semisphere = ParametricRegion((theta, pi), (2*sin(phi)*cos(theta), 2*sin(phi)*sin(theta), 2*cos(phi)),\
{theta: (0, 2*pi), phi: (0, pi/2)})
>>> ParametricIntegral(C.z, semisphere)
8*pi
``````

I initially thought to make it a subclass of `Integral` as the `ParametricIntegral` is a kind of integral. But there was no reuse of any code from `Integral` in the `ParametricIntegral` so decided against it.
A rough sketch of the algorithm to calculate integral is described below:

1. Replace the base scalars in the field with their definition in terms of parameters and obtain the parametric representation of the field.
2. Form the position vector of the region using definition tuple and base vectors determined from the field.
3. Depending on the type of region, calculate the derivative of the position vector, or find the normal vector or calculate dV using Jacobian.
4. Calculate the integrand using dot product or multiplication with the parametric field.
5. Use the `integrate` function to calculate the integral.
6. If the `integrate` function can evaluate the integral, return it otherwise return an object of the `ParametricRegion` class.

We also had discussion on whether swapping the upper and lower limit has any affect on the result of a vector integral. For multiple integrals, the sign of the result changes when the upper and lower bound of a parameter are interchanged. I do not think we came to any conclusion. But this won’t matter for integrals over parametric regions as the bounds are directly defined by the user.

### Next week’s goal

I will start working on the implementation of the `ParametricIntegral` class. I am also trying to get more involved in SymPy outside of my GSoC project. I hope I can become a contributing member of the community.