Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data for modeler (epic 4.1) #2577

Merged
merged 38 commits into from
Feb 3, 2025
Merged
Changes from 1 commit
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
8459ed0
Data for new modeler : make class linearProblemData derive from an in…
guilpier-code Jan 13, 2025
df7656c
Data for new modeler (4.1) : passing new interface ILinearProblemData…
guilpier-code Jan 14, 2025
d6db716
[skip ci] Data for new modeler (4.1) : clang format
guilpier-code Jan 14, 2025
2c2b769
[skip ci] Data for new modeler (4.1) : remove commented code
guilpier-code Jan 16, 2025
7701b5b
Data for new modeler (4.1) : adding a data series repository to class…
guilpier-code Jan 16, 2025
448ca34
Data for new modeler (4.1) : separate linear problem data implementat…
guilpier-code Jan 16, 2025
252a670
Data for new modeler (4.1) : packaging a data-series-lib library
guilpier-code Jan 17, 2025
60cf26b
Data for new modeler (4.1) : clang format
guilpier-code Jan 17, 2025
a12cb4b
Data for new modeler (4.1) : coding scenario group repository
guilpier-code Jan 17, 2025
99c2a7f
Data for new modeler (4.1) : testing scenario group repository
guilpier-code Jan 17, 2025
1816792
Data for new modeler (4.1) : avoid use of std::format(..)
guilpier-code Jan 17, 2025
2ad9df2
Data for new modeler (4.1) : fix for Linux
guilpier-code Jan 17, 2025
965173f
Data for new modeler (4.1) : adding an implementation of IDataSeries …
guilpier-code Jan 17, 2025
fe02503
Data for new modeler (4.1) : coding the data series repository
guilpier-code Jan 17, 2025
a73c08d
Data for new modeler (4.1) : compilation fix
guilpier-code Jan 17, 2025
ce46a25
Data for new modeler (4.1) : clang format
guilpier-code Jan 17, 2025
12f6d0c
Data for new modeler (4.1) : unit testing for time series set
guilpier-code Jan 20, 2025
9d4d566
Data for new modeler (4.1) : clang format
guilpier-code Jan 20, 2025
35cd165
Data for new modeler (4.1) : mainly testind data series repository
guilpier-code Jan 20, 2025
62a5437
Data for new modeler (4.1) : start for testing linear problem data
guilpier-code Jan 20, 2025
3eea870
Data for new modeler (4.1) : moving linear problem data (from api to …
guilpier-code Jan 21, 2025
f7829c0
Data for new modeler (4.1) : tiny corrections
guilpier-code Jan 21, 2025
654b97e
Data for new modeler (4.1) : adding unit tests on linear problem data
guilpier-code Jan 21, 2025
6118f76
Data for new modeler (4.1) : adding unit tests on time series set
guilpier-code Jan 21, 2025
ea803e8
Merge remote-tracking branch 'remotes/origin/develop' into feature/da…
guilpier-code Jan 21, 2025
4549a6a
Formatting
flomnes Jan 22, 2025
47bb961
[skip ci] Data for new modeler (4.1) : correction due to review
guilpier-code Jan 23, 2025
7f3ecb8
[skip ci] Data for new modeler (4.1) : correction due to review
guilpier-code Jan 23, 2025
981d02f
[skip ci] Data for new modeler (4.1) : correction due to review
guilpier-code Jan 23, 2025
f0029c3
[skip ci] Data for new modeler (4.1) : correction due to review
guilpier-code Jan 23, 2025
6bbaeea
[skip ci] Data for new modeler (4.1) : correction due to review : int…
guilpier-code Jan 23, 2025
7e47a49
[skip ci] Data for new modeler (4.1) : correction due to review > add…
guilpier-code Jan 23, 2025
ce6d3d4
[skip ci] Data for new modeler (4.1) : adding an exception + unit tes…
guilpier-code Jan 23, 2025
5bca306
[skip ci] Data for new modeler (4.1) : add custom exceptions + add on…
guilpier-code Jan 23, 2025
7550fc1
Data for new modeler (4.1) : more fix due to review
guilpier-code Jan 23, 2025
a9974e9
Merge remote-tracking branch 'remotes/origin/develop' into feature/da…
guilpier-code Jan 29, 2025
abf480a
Define exception classes as subclasses (#2612)
flomnes Feb 3, 2025
b6866e9
Merge branch 'develop' into feature/data-for-new-modeler--4.1
flomnes Feb 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Data for new modeler (4.1) : mainly testind data series repository
guilpier-code committed Jan 20, 2025
commit 35cd165d3db595d748b992a5ee2070e358c551cb
12 changes: 9 additions & 3 deletions src/solver/modeler/dataSeries/dataSeriesRepo.cpp
Original file line number Diff line number Diff line change
@@ -6,15 +6,21 @@ namespace Antares::Solver::Modeler::DataSeries
{
void DataSeriesRepository::addDataSeries(std::unique_ptr<IDataSeries> dataSeries)
{
dataSeries_[dataSeries->name()] = std::move(dataSeries);
std::string name = dataSeries->name();
dataSeries_[name] = std::move(dataSeries);
}

IDataSeries& DataSeriesRepository::getDataSeries(std::string setId)
{
std::string error_message = err_prefix;
if (dataSeries_.empty())
{
error_message += "empty";
throw std::invalid_argument(error_message);
}
if (!dataSeries_.contains(setId))
{
std::string error_message = "Data series repo : data series named '" + setId
+ "' does not exist.";
error_message += "data series '" + setId + "' does not exist";
throw std::invalid_argument(error_message);
}
return *(dataSeries_[setId]);
Original file line number Diff line number Diff line change
@@ -9,13 +9,18 @@ namespace Antares::Solver::Modeler::DataSeries
class IDataSeries
{
public:
std::string name()
IDataSeries(std::string name):
name_(name)
{
return name_;
}

virtual double getData(unsigned int rank, unsigned int hour) = 0;

std::string name()
{
return name_;
}

private:
std::string name_;
};
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@ class DataSeriesRepository

private:
std::map<std::string, std::unique_ptr<IDataSeries>> dataSeries_;
std::string err_prefix = "Data series repo : ";
};

} // namespace Antares::Solver::Modeler::DataSeries
Original file line number Diff line number Diff line change
@@ -13,7 +13,6 @@ class TimeSeriesSet: public IDataSeries
double getData(unsigned rank, unsigned hour) override;

private:
std::string name_;
unsigned height_ = 0;
std::vector<std::vector<double>> tsSet_;
std::string err_prefix_;
4 changes: 2 additions & 2 deletions src/solver/modeler/dataSeries/timeSeriesSet.cpp
Original file line number Diff line number Diff line change
@@ -6,9 +6,9 @@
namespace Antares::Solver::Modeler::DataSeries
{
TimeSeriesSet::TimeSeriesSet(std::string name, unsigned int height):
name_(name),
IDataSeries::IDataSeries(name),
height_(height),
err_prefix_("TS set '" + name_ + "' : ")
err_prefix_("TS set '" + this->name() + "' : ")
{
}

1 change: 1 addition & 0 deletions src/tests/src/solver/modeler/dataSeries/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@ add_boost_test(unit-tests-for-modeler-data-series
main.cpp
testScenarioGroupRepo.cpp
testTimeSeriesSet.cpp
testDataSeriesRepo.cpp
INCLUDE
"${solver_modeler_data_series}"
LIBS
87 changes: 87 additions & 0 deletions src/tests/src/solver/modeler/dataSeries/testDataSeriesRepo.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#define WIN32_LEAN_AND_MEAN
#include <memory>
#include <unit_test_utils.h>

#include <boost/test/unit_test.hpp>

#include <antares/solver/modeler/dataSeries/dataSeriesRepo.h>
#include "antares/solver/modeler/dataSeries/timeSeriesSet.h"

using namespace Antares::Solver::Modeler::DataSeries;

BOOST_AUTO_TEST_CASE(repo_is_empty__asking_any_data_series_raises_exception)
{
DataSeriesRepository dataSeriesRepository;

std::string expected_err_msg = "Data series repo : empty";
BOOST_CHECK_EXCEPTION(dataSeriesRepository.getDataSeries("dummy name"),
std::invalid_argument,
checkMessage(expected_err_msg));
}

BOOST_AUTO_TEST_CASE(repo_not_empty__asking_nonexistent_data_raises_exception)
{
DataSeriesRepository dataSeriesRepository;
auto some_TS_set = std::make_unique<TimeSeriesSet>("some TS set", 5);
dataSeriesRepository.addDataSeries(std::move(some_TS_set));

std::string expected_err_msg = "Data series repo : data series 'dummy name' does not exist";
BOOST_CHECK_EXCEPTION(dataSeriesRepository.getDataSeries("dummy name"),
std::invalid_argument,
checkMessage(expected_err_msg));
}

BOOST_AUTO_TEST_CASE(ask_a_simple_data_repo_some_data_it_contains___answer_is_correct)
{
DataSeriesRepository dataSeriesRepository;

auto some_TS_set = std::make_unique<TimeSeriesSet>("some TS set", 5);
some_TS_set->add({1., 2., 3., 4., 5.});
some_TS_set->add({11., 12., 13., 14., 15.});

dataSeriesRepository.addDataSeries(std::move(some_TS_set));

unsigned rank = 1;
unsigned hour = 3;
BOOST_CHECK_EQUAL(dataSeriesRepository.getDataSeries("some TS set").getData(rank, hour), 14.);
}

BOOST_AUTO_TEST_CASE(asking_repo_data_for_a_too_big_hour___exception_from_data_series_is_caught)
{
DataSeriesRepository dataSeriesRepository;
auto some_TS_set = std::make_unique<TimeSeriesSet>("some TS set", 5);
some_TS_set->add({1., 2., 3., 4., 5.});
dataSeriesRepository.addDataSeries(std::move(some_TS_set));

unsigned rank = 0;
unsigned hour = 100; // Hour too big
std::string expected_err_msg = "TS set 'some TS set' : hour 100 exceeds TS set's height";
BOOST_CHECK_EXCEPTION(dataSeriesRepository.getDataSeries("some TS set").getData(rank, hour),
std::invalid_argument,
checkMessage(expected_err_msg));
}

BOOST_AUTO_TEST_CASE(ask_a_more_complex_data_repo_some_data_it_contains___answer_is_correct)
{
DataSeriesRepository dataSeriesRepository;

auto TS_set_1 = std::make_unique<TimeSeriesSet>("TS set 1", 5);
TS_set_1->add({1., 2., 3., 4., 5.});
TS_set_1->add({11., 12., 13., 14., 15.});

auto TS_set_2 = std::make_unique<TimeSeriesSet>("TS set 2", 5);
TS_set_2->add({21., 22., 23., 24., 25.});
TS_set_2->add({31., 32., 33., 34., 35.});
TS_set_2->add({41., 42., 43., 44., 45.});

dataSeriesRepository.addDataSeries(std::move(TS_set_1));
dataSeriesRepository.addDataSeries(std::move(TS_set_2));

unsigned rank = 1;
unsigned hour = 3;
BOOST_CHECK_EQUAL(dataSeriesRepository.getDataSeries("TS set 1").getData(rank, hour), 14.);

rank = 2;
hour = 1;
BOOST_CHECK_EQUAL(dataSeriesRepository.getDataSeries("TS set 2").getData(rank, hour), 42.);
}