backend fix + xgboost 2 support
The main issue that this PR is solving is the following:
In XGBoost, the cuts on the inputs are <cut and >=cut while for all the backends in Conifer is the opposite ( <=cut and >cut ). This usually is irrelevant but when the input is binary it makes a lot of difference, not allowing to pass any cut for that feature.
So I changed the comparison in the decision function methods of all the backends to be in agreement with XGBoost.
Since then, I tested the python, cpp and vivado backend on xgboost (both v1 and v2, both XGBClassifier and Booster objects) and yggdrasil models and everything is okay. We should test also the vhdl and fpu backend and the sklearn, tmva and the onnx models.
I tried to run all the tests but a lot of them complained about not having pybind11 compiled, I will investigate to ensure that this PR passes all the tests.
Other minor fixes are the following:
- Added support for xgboost2 (practically the same of the xgb2 branch)
- Fixed the profile method in ModelBase
- Added the dictionary map between the feature name and the feature numbering to the ensembleDict to allow an easier inspection of the model.