Skip to content

Commit

Permalink
Add type assertions in add_expression and attach_expression functions (
Browse files Browse the repository at this point in the history
  • Loading branch information
abelsiqueira authored Mar 3, 2025
1 parent e8e59d5 commit 559ed85
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 31 deletions.
4 changes: 2 additions & 2 deletions src/expressions/intersection.jl
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ function attach_expression_on_constraints_grouping_variables!(
empty!.(workspace)

# Loop over each variable in the group
for (var_idx, time_block_start, time_block_end) in zip(
for (var_idx::Int64, time_block_start::Int32, time_block_end::Int32) in zip(
group_row.var_idx::Vector{Union{Missing,Int64}},
group_row.var_time_block_start::Vector{Union{Missing,Int32}},
group_row.var_time_block_end::Vector{Union{Missing,Int32}},
Expand All @@ -114,7 +114,7 @@ function attach_expression_on_constraints_grouping_variables!(
end

# Loop over each constraint
for (cons_idx, time_block_start, time_block_end) in zip(
for (cons_idx::Int64, time_block_start::Int32, time_block_end::Int32) in zip(
group_row.cons_idx::Vector{Union{Missing,Int64}},
group_row.cons_time_block_start::Vector{Union{Missing,Int32}},
group_row.cons_time_block_end::Vector{Union{Missing,Int32}},
Expand Down
71 changes: 44 additions & 27 deletions src/model-preparation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,12 @@ function add_expression_terms_rep_period_constraints!(
outgoing_flow_durations = typemax(Int64) #LARGE_NUMBER to start finding the minimum outgoing flow duration

# Step 1.1. Loop over each variable in the group
for (var_idx, time_block_start, time_block_end, efficiency) in zip(
for (
var_idx::Int64,
time_block_start::Int32,
time_block_end::Int32,
efficiency::Float64,
) in zip(
group_row.var_idx::Vector{Union{Missing,Int64}},
group_row.var_time_block_start::Vector{Union{Missing,Int32}},
group_row.var_time_block_end::Vector{Union{Missing,Int32}},
Expand All @@ -155,10 +160,10 @@ function add_expression_terms_rep_period_constraints!(
1.0
else
if case.expr_key == :incoming
efficiency::Float64
efficiency
else
# Divide by efficiency for outgoing flows
1.0 / efficiency::Float64
1.0 / efficiency
end
end
# Step 1.1.1.2.
Expand All @@ -171,7 +176,7 @@ function add_expression_terms_rep_period_constraints!(
end

# Step 1.2. Loop over each constraint
for (cons_idx, time_block_start, time_block_end) in zip(
for (cons_idx::Int64, time_block_start::Int32, time_block_end::Int32) in zip(
group_row.cons_idx::Vector{Union{Missing,Int64}},
group_row.cons_time_block_start::Vector{Union{Missing,Int32}},
group_row.cons_time_block_end::Vector{Union{Missing,Int32}},
Expand Down Expand Up @@ -315,31 +320,40 @@ function add_expression_terms_over_clustered_year_constraints!(
empty!.(workspace)

for (
var_indices,
var_time_block_start_vec,
var_time_block_end_vec,
var_efficiencies,
var_periods,
var_weights,
var_indices::Vector{Union{Missing,Int64}},
var_time_block_start_vec::Vector{Union{Missing,Int32}},
var_time_block_end_vec::Vector{Union{Missing,Int32}},
var_efficiencies::Vector{Union{Missing,Float64}},
var_periods::Vector{Union{Missing,Int32}},
var_weights::Vector{Union{Missing,Float64}},
) in zip(
group_row.var_indices,
group_row.var_time_block_start_vec,
group_row.var_time_block_end_vec,
group_row.var_efficiencies,
group_row.var_periods,
group_row.var_weights,
group_row.var_indices::Vector{Union{Missing,Vector{Union{Missing,Int64}}}},
group_row.var_time_block_start_vec::Vector{
Union{Missing,Vector{Union{Missing,Int32}}},
},
group_row.var_time_block_end_vec::Vector{
Union{Missing,Vector{Union{Missing,Int32}}},
},
group_row.var_efficiencies::Vector{Union{Missing,Vector{Union{Missing,Float64}}}},
group_row.var_periods::Vector{Union{Missing,Vector{Union{Missing,Int32}}}},
group_row.var_weights::Vector{Union{Missing,Vector{Union{Missing,Float64}}}},
)

# Loop over each variable in the (group,rp) and accumulate them
group_flows_accumulation = Dict{Int,Float64}()

for (var_idx, time_block_start, time_block_end, var_efficiency) in zip(
var_indices,
var_time_block_start_vec,
var_time_block_end_vec,
var_efficiencies,
for (
var_idx::Int64,
time_block_start::Int32,
time_block_end::Int32,
var_efficiency::Float64,
) in zip(
var_indices::Vector{Union{Missing,Int64}},
var_time_block_start_vec::Vector{Union{Missing,Int32}},
var_time_block_end_vec::Vector{Union{Missing,Int32}},
var_efficiencies::Vector{Union{Missing,Float64}},
)
coefficient = (time_block_end - time_block_start + 1)
coefficient = (time_block_end - time_block_start + 1.0)::Float64
if is_storage_level
if case.expr_key == :outgoing
coefficient /= var_efficiency
Expand All @@ -351,7 +365,10 @@ function add_expression_terms_over_clustered_year_constraints!(
end

# Loop over each period in the group and add the accumulated flows to the workspace
for (period, weight) in zip(var_periods, var_weights)
for (period::Int32, weight::Float64) in zip(
var_periods::Vector{Union{Missing,Int32}},
var_weights::Vector{Union{Missing,Float64}},
)
if weight == 0
continue
end
Expand All @@ -368,10 +385,10 @@ function add_expression_terms_over_clustered_year_constraints!(
end

# Loop over each constraint and aggregate from the workspace into the expression
for (cons_idx, period_block_start, period_block_end) in zip(
group_row.cons_indices,
group_row.cons_period_block_start_vec,
group_row.cons_period_block_end_vec,
for (cons_idx::Int64, period_block_start::Int32, period_block_end::Int32) in zip(
group_row.cons_indices::Vector{Union{Missing,Int64}},
group_row.cons_period_block_start_vec::Vector{Union{Missing,Int32}},
group_row.cons_period_block_end_vec::Vector{Union{Missing,Int32}},
)
period_block = period_block_start:period_block_end
workspace_aggregation = Dict{Int,Float64}()
Expand Down
6 changes: 4 additions & 2 deletions src/structures.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ All deriving types must satisfy:
abstract type TulipaTabularIndex end

function get_num_rows(connection, table_name::Union{String,Symbol})
return only([row[1] for row in DuckDB.query(connection, "SELECT COUNT(*) FROM $table_name")])
return only([
row[1] for row in DuckDB.query(connection, "SELECT COUNT(*) FROM $table_name")
])::Int64
end

function get_num_rows(connection, object::TulipaTabularIndex)
Expand Down Expand Up @@ -62,7 +64,7 @@ mutable struct TulipaConstraint <: TulipaTabularIndex
num_rows::Int
constraint_names::Vector{Symbol}
expressions::Dict{Symbol,Vector{JuMP.AffExpr}}
coefficients::Dict{Symbol,Vector{Float64}} # TODO: This was created only because of min_outgoing_flow_duration
coefficients::Dict{Symbol,Vector{Float64}}
duals::Dict{Symbol,Vector{Float64}}

function TulipaConstraint(connection, table_name::String)
Expand Down

0 comments on commit 559ed85

Please sign in to comment.