Second major update for the library, which leads to version 3.0. Several improvements have been done, specially regarding the `RichDataFrame` class and the treatment of correlation between variables of rich values. The user guide has been updated with the new features and modifications.
**List of changes**
- Correlation between variables are now taken into account when performing operations with rich values. To do so, `RichValue` objects now store information on its dependence with independent variables. Every time a `RichValue` object is created, an arbitrary name is assigned to it, stored in the instance variables `vars` and `expression`. Then, if an operation is applied to it and a new rich value is created, the mathematical expression of this new rich value with respect to the previous ones is stored in the instance variable `expression`. Additionally, the instance variable `vars` will store the names of the independent variables involved in `expression`. In order to implement this, a new way of specifying functions to be applied to rich values has been added, and it is now the recommended way. It consists on supplying a text string describing the source code of the function, instead of directly passing the Python function; see the user guide (section 4.1.3) for more details.
- Most of the methods of the `RichValue` and `RichArray` classes that returned a property of a rich value have been converted into class attributes. This means that now they are called without using parenthesis. For example, to access to the main values of the `RichArray` object `v` now you would just write `v.mains` instead of `v.mains()`.
- The `RichDataFrame` class has been vastly improved. First of all, now `RichDataFrame` objects always preserve its class when any Pandas' `DataFrame` class method is applied (before this version, a `DataFrame` object was returned instead). Besides, all the attributes from the `RichArray` class have been implemented, which can be used to better inspect the dataframe. In order to do so, a new class called `RichSeries` have been added, which is just an implementation of Pandas' `Series` class with all the attributes from the `RichArray` class.
- Applying comparison operators (`<`, `<`, `==`, `!=`, `<=`, `>=`) between rich values is now supported. The comparisons are based on the `interval` method of the `RichValue` class. Related with this, a few functions to compare rich values/arrays have been added: `greater`, `less`, `equiv`, `greater_equiv`, `less_equiv`.
- The absolute value operator (`abs`) can now be applied to rich values.
- The functions `curve_fit` and `point_fit` now also estimate the real dispersion between the input data and the fitted model. Moreover, now they also return the final mean loss after the fit, as a rich value. Lastly, some of the names of the outputs of these functions have been renamed.
- Several minor improvements and bug fixes within different parts of the code.