Skip to content

Commit

Permalink
Extending parameter/data map APIs
Browse files Browse the repository at this point in the history
Now support the use of SequenceContexts
  • Loading branch information
whart222 committed Oct 6, 2024
1 parent 1df7da2 commit bd2fcee
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 7 deletions.
21 changes: 18 additions & 3 deletions lib/coek/coek/compact/data_map.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#include "coek/compact/data_map.hpp"

#include <unordered_map>

#include "coek/api/data_assoc_array_repn.hpp"
#include "coek/ast/compact_terms.hpp"
#include "coek/api/data_assoc_array_repn.hpp"
#include "coek/compact/coek_sets.hpp"
#include "coek/compact/data_map.hpp"
#include "coek/model/model.hpp"
#include "coek/model/model_repn.hpp"

Expand All @@ -22,6 +22,13 @@ class DataMapRepn : public DataAssocArrayRepn {
#endif
}

DataMapRepn(const SequenceContext& _arg) : concrete_set(_arg.index_set())
{
#ifdef CUSTOM_INDEXVECTOR
cache.resize((size() + 1) * (dim() + 1));
#endif
}

virtual ~DataMapRepn() {}

std::shared_ptr<ConstantTerm> index(const IndexVector& args);
Expand Down Expand Up @@ -65,6 +72,12 @@ DataMap::DataMap(const ConcreteSet& arg)
repn->resize_index_vectors(tmp, reftmp);
}

DataMap::DataMap(const SequenceContext& arg)
{
repn = std::make_shared<DataMapRepn>(arg);
repn->resize_index_vectors(tmp, reftmp);
}

std::shared_ptr<DataAssocArrayRepn> DataMap::get_repn() { return repn; }
const std::shared_ptr<DataAssocArrayRepn> DataMap::get_repn() const { return repn; }

Expand Down Expand Up @@ -131,6 +144,8 @@ DataMap& DataMap::name(const std::string& name)

DataMap data(const ConcreteSet& arg) { return DataMap(arg); }

DataMap data(const SequenceContext& arg) { return DataMap(arg); }

DataMap& Model::add_data(DataMap& data)
{
data.repn->expand();
Expand Down
14 changes: 14 additions & 0 deletions lib/coek/coek/compact/data_map.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "coek/api/data_assoc_array.hpp"
#include "coek/compact/sequence_context.hpp"
#include "coek/util/template_utils.hpp"
#include "coek_sets.hpp"

Expand Down Expand Up @@ -122,6 +123,7 @@ class DataMap : public DataAssocArray {

public:
explicit DataMap(const ConcreteSet& arg);
explicit DataMap(const SequenceContext& arg);
virtual ~DataMap() {}

/** Set the initial data value. \returns the data object. */
Expand Down Expand Up @@ -153,4 +155,16 @@ inline DataMap data_map(const std::string& name, const ConcreteSet& arg)
return data(arg).name(name);
}

DataMap data(const SequenceContext& arg);
inline DataMap data_map(const SequenceContext& arg) { return data(arg); }

inline DataMap data(const std::string& name, const SequenceContext& arg)
{
return data(arg).name(name);
}
inline DataMap data_map(const std::string& name, const SequenceContext& arg)
{
return data(arg).name(name);
}

} // namespace coek
21 changes: 18 additions & 3 deletions lib/coek/coek/compact/parameter_map.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#include "coek/compact/parameter_map.hpp"

#include <unordered_map>

#include "coek/api/parameter_assoc_array_repn.hpp"
#include "coek/ast/compact_terms.hpp"
#include "coek/api/parameter_assoc_array_repn.hpp"
#include "coek/compact/coek_sets.hpp"
#include "coek/compact/parameter_map.hpp"
#include "coek/model/model.hpp"
#include "coek/model/model_repn.hpp"

Expand All @@ -23,6 +23,13 @@ class ParameterMapRepn : public ParameterAssocArrayRepn {
#endif
}

ParameterMapRepn(const SequenceContext& _arg) : concrete_set(_arg.index_set())
{
#ifdef CUSTOM_INDEXVECTOR
cache.resize((size() + 1) * (dim() + 1));
#endif
}

virtual ~ParameterMapRepn() {}

std::shared_ptr<ParameterTerm> index(const IndexVector& args);
Expand Down Expand Up @@ -106,6 +113,12 @@ ParameterMap::ParameterMap(const ConcreteSet& arg)
repn->resize_index_vectors(tmp, reftmp);
}

ParameterMap::ParameterMap(const SequenceContext& arg)
{
repn = std::make_shared<ParameterMapRepn>(arg);
repn->resize_index_vectors(tmp, reftmp);
}

std::shared_ptr<ParameterAssocArrayRepn> ParameterMap::get_repn() { return repn; }
const std::shared_ptr<ParameterAssocArrayRepn> ParameterMap::get_repn() const { return repn; }

Expand Down Expand Up @@ -174,6 +187,8 @@ ParameterMap& ParameterMap::name(const std::string& name)

ParameterMap parameter(const ConcreteSet& arg) { return ParameterMap(arg); }

ParameterMap parameter(const SequenceContext& arg) { return ParameterMap(arg); }

ParameterMap& Model::add_parameter(ParameterMap& params)
{
params.repn->expand();
Expand Down
14 changes: 14 additions & 0 deletions lib/coek/coek/compact/parameter_map.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "coek/api/parameter_assoc_array.hpp"
#include "coek/compact/sequence_context.hpp"
#include "coek/util/template_utils.hpp"
#include "coek_sets.hpp"

Expand Down Expand Up @@ -124,6 +125,7 @@ class ParameterMap : public ParameterAssocArray {

public:
explicit ParameterMap(const ConcreteSet& arg);
explicit ParameterMap(const SequenceContext& arg);
virtual ~ParameterMap() {}

/** Set the initial parameter value. \returns the parameter object. */
Expand Down Expand Up @@ -155,4 +157,16 @@ inline ParameterMap parameter_map(const std::string& name, const ConcreteSet& ar
return parameter(arg).name(name);
}

ParameterMap parameter(const SequenceContext& arg);
inline ParameterMap parameter_map(const SequenceContext& arg) { return parameter(arg); }

inline ParameterMap parameter(const std::string& name, const SequenceContext& arg)
{
return parameter(arg).name(name);
}
inline ParameterMap parameter_map(const std::string& name, const SequenceContext& arg)
{
return parameter(arg).name(name);
}

} // namespace coek
1 change: 0 additions & 1 deletion lib/coek/coek/compact/variable_map.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

#include <unordered_map>

#include "coek/api/variable_assoc_array_repn.hpp"
Expand Down
1 change: 1 addition & 0 deletions lib/coek/test/smoke/test_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "coek/ast/base_terms.hpp"
#include "coek/ast/value_terms.hpp"
#include "coek/util/string_utils.hpp"
#include "coek/compact/coek_sets.hpp"
#include "coek/model/model_repn.hpp"
#include "coek/coek.hpp"

Expand Down

0 comments on commit bd2fcee

Please sign in to comment.