Skip to content

Commit

Permalink
Add missing element accessor and fix missing boolean attributes in da…
Browse files Browse the repository at this point in the history
…taframes.

Signed-off-by: Bertrand Rix <[email protected]>
  • Loading branch information
obrix committed Dec 17, 2024
1 parent fd243d7 commit 0e5aacd
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
13 changes: 12 additions & 1 deletion cpp/powsybljl-cpp/powsybl_jl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ JLCXX_MODULE define_module_powsybl(jlcxx::Module& mod)
})
.method("as_string_array", [](series& s) {
return pypowsybl::toVector<std::string>((array *) & s.data);
})
.method("as_bool_array", [](series& s) {
return jlcxx::ArrayRef<bool,1>(static_cast<bool*>(s.data.ptr), s.data.length);
});

mod.add_type<network_metadata>("NetworkMetadata")
Expand Down Expand Up @@ -128,6 +131,14 @@ JLCXX_MODULE define_module_powsybl(jlcxx::Module& mod)

mod.method("create_network_elements_series_array", [] (pypowsybl::JavaHandle handle, element_type type, std::vector<std::string> const& attributes, filter_attributes_type filter_attributes, bool nominal_apparent_power, double per_unit) {
return pypowsybl::createNetworkElementsSeriesArray(handle, type, filter_attributes, attributes, nullptr, nominal_apparent_power, per_unit);
}, "Get a series");
}, "Create a network elements series array for a given element type");

mod.method("create_network_elements_extension_series_array", [] (pypowsybl::JavaHandle handle, std::string const& extension_name, std::string const& table_name) {
return pypowsybl::createNetworkElementsExtensionSeriesArray(handle, extension_name, table_name);
}, "Create a network elements extensions series array for a given extension name");

mod.method("get_extensions_names", [] () {
return pypowsybl::getExtensionsNames();
}, "Get all the extensions names available");

}
23 changes: 22 additions & 1 deletion src/Network.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ module Network
return Powsybl.get_network_metadata(network.handle)
end

function get_extensions_names()
return [String(extension_name) for extension_name in Powsybl.get_extensions_names()]
end

function get_elements(network::NetworkHandle, type::Powsybl.ElementType, all_attributes::Bool = false, attributes::Vector{String} = Vector{String}())
filter_attributes = Powsybl.DEFAULT_ATTRIBUTES
if all_attributes
Expand Down Expand Up @@ -154,18 +158,35 @@ module Network
return get_elements(network, Powsybl.TERMINAL, all_attributes, attributes)
end

function get_loads(network::NetworkHandle, all_attributes::Bool = false, attributes::Vector{String} = Vector{String}())
return get_elements(network, Powsybl.LOAD, all_attributes, attributes)
end

function get_operational_limits(network::NetworkHandle, all_attributes::Bool = false, attributes::Vector{String} = Vector{String}())
return get_elements(network, Powsybl.OPERATIONAL_LIMITS, all_attributes, attributes)
end

function get_extensions(network::NetworkHandle, extension_name::String, table_name::String = "")
series_array = Powsybl.create_network_elements_extension_series_array(network.handle, extension_name, table_name)
return create_dataframe_from_series_array(series_array[])
end

function create_dataframe_from_series_array(array::Powsybl.SeriesArray)
myArray = Powsybl.as_array(array)
df = DataFrame()
for serie in myArray
type = Powsybl.type(serie)
name = Powsybl.name(serie)
if type == 0
data = Powsybl.as_string_array(serie)
# To avoid getting CxxWrap StdString type in the dataframe
data = [String(cxx_str_elem) for cxx_str_elem in Powsybl.as_string_array(serie)]
elseif type == 1
data = Powsybl.as_double_array(serie)
elseif type == 2
data = Powsybl.as_int_array(serie)
elseif type == 3
# To avoid getting CxxWrap CxxBool type in the dataframe
data = [Bool(cxx_bool_elem) for cxx_bool_elem in Powsybl.as_bool_array(serie)]
else
continue
end
Expand Down

0 comments on commit 0e5aacd

Please sign in to comment.