Skip to content

Commit

Permalink
Simplified function calls.
Browse files Browse the repository at this point in the history
  • Loading branch information
maxschaller committed Apr 21, 2024
1 parent c975e16 commit ac7320c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 17 deletions.
6 changes: 1 addition & 5 deletions cvxpygen/solvers.py
Original file line number Diff line number Diff line change
Expand Up @@ -721,11 +721,7 @@ def __init__(self, data, p_prob, enable_settings):
),
'AbcGh': ParameterUpdateLogic(
update_pending_logic=UpdatePendingLogic(['A', 'b', 'G'], '||', ['c', 'h']),
function_call=f'{{prefix}}cpg_copy_A();\n'
f' {{prefix}}cpg_copy_b();\n'
f' {{prefix}}cpg_copy_c();\n'
f' {{prefix}}cpg_copy_G();\n'
f' {{prefix}}cpg_copy_h();\n'
function_call=f'{{prefix}}cpg_copy_all();\n'
f' ECOS_updateData({{prefix}}ecos_workspace, {{prefix}}Canon_Params_conditioning.G->x, {"0" if canon_constants["p"] == 0 else "{prefix}Canon_Params_conditioning.A->x"}'
f', {{prefix}}Canon_Params_conditioning.c, {{prefix}}Canon_Params_conditioning.h, {"0" if canon_constants["p"] == 0 else "{prefix}Canon_Params_conditioning.b"})'
),
Expand Down
33 changes: 21 additions & 12 deletions cvxpygen/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -849,20 +849,22 @@ def write_solve_def(f, configuration, variable_info, dual_variable_info, paramet
if solver_interface.inmemory_preconditioning:
f.write('// Copy canonical parameters for preconditioning\n')
for p_id, size in parameter_canon.p_id_to_size.items():
f.write(f'void {configuration.prefix}cpg_copy_{p_id}(){{\n')
if size == 1:
f.write(f' {configuration.prefix}Canon_Params_conditioning.{p_id} = {configuration.prefix}Canon_Params.{p_id};\n')
elif size > 1:
f.write(f' for (i=0; i<{size}; i++){{\n')
if p_id.isupper():
f.write(f' {configuration.prefix}Canon_Params_conditioning.{p_id}->x[i] = {configuration.prefix}Canon_Params.{p_id}->x[i];\n')
else:
f.write(f' {configuration.prefix}Canon_Params_conditioning.{p_id}[i] = {configuration.prefix}Canon_Params.{p_id}[i];\n')
f.write(' }\n')
f.write('}\n\n')
if p_id != 'd':
f.write(f'void {configuration.prefix}cpg_copy_{p_id}(){{\n')
if size == 1:
f.write(f' {configuration.prefix}Canon_Params_conditioning.{p_id} = {configuration.prefix}Canon_Params.{p_id};\n')
elif size > 1:
f.write(f' for (i=0; i<{size}; i++){{\n')
if p_id.isupper():
f.write(f' {configuration.prefix}Canon_Params_conditioning.{p_id}->x[i] = {configuration.prefix}Canon_Params.{p_id}->x[i];\n')
else:
f.write(f' {configuration.prefix}Canon_Params_conditioning.{p_id}[i] = {configuration.prefix}Canon_Params.{p_id}[i];\n')
f.write(' }\n')
f.write('}\n\n')
f.write(f'void {configuration.prefix}cpg_copy_all(){{\n')
for p_id in parameter_canon.p.keys():
f.write(f' {configuration.prefix}cpg_copy_{p_id}();\n')
if p_id != 'd':
f.write(f' {configuration.prefix}cpg_copy_{p_id}();\n')
f.write('}\n\n')

f.write('// Solve via canonicalization, canonical solve, retrieval\n')
Expand Down Expand Up @@ -947,6 +949,13 @@ def write_solve_prot(f, configuration, variable_info, dual_variable_info, parame
f.write('\n// Retrieve solver information\n')
f.write(f'extern void {configuration.prefix}cpg_retrieve_info();\n')

if solver_interface.inmemory_preconditioning:
f.write('\n// Copy canonical parameters for preconditioning\n')
for p_id in parameter_canon.p_id_to_size.keys():
if p_id != 'd':
f.write(f'extern void {configuration.prefix}cpg_copy_{p_id}();\n')
f.write(f'extern void {configuration.prefix}cpg_copy_all();\n')

f.write('\n// Solve via canonicalization, canonical solve, retrieval\n')
f.write(f'extern void {configuration.prefix}cpg_solve();\n')

Expand Down

0 comments on commit ac7320c

Please sign in to comment.