1+ from typing import Literal
2+
3+
14def import_fmu_to_modelica (fmu_path , model_path , interface_type = 'CoSimulation' , variables = None ):
25
36 from os import makedirs
@@ -6,6 +9,7 @@ def import_fmu_to_modelica(fmu_path, model_path, interface_type='CoSimulation',
69
710 import jinja2
811 from fmpy import extract , read_model_description
12+ from fmpy .model_description import ScalarVariable
913 from fmpy .util import sha256_checksum
1014
1115 fmu_path = Path (fmu_path )
@@ -273,40 +277,44 @@ def shape(variable):
273277 s .append (int (dimension .start if dimension .start else variables [dimension .valueReference ].start ))
274278 return tuple (s )
275279
276- def dependencies3 (variable , type ):
280+ def dependencies3 (variable : ScalarVariable , types : list [ str ] ):
277281
278- unknowns = list ( filter ( lambda u : u . variable . name == variable . name , model_description . initialUnknowns ))
282+ arguments = []
279283
280- if not unknowns :
281- return ''
284+ for type in types :
282285
283- unknown = unknowns [ 0 ]
286+ unknowns = list ( filter ( lambda u : u . variable . name == variable . name , model_description . initialUnknowns ))
284287
285- vrs = []
286- values = []
288+ if not unknowns :
289+ continue
287290
288- for dependency in unknown . dependencies :
291+ unknown = unknowns [ 0 ]
289292
290- if dependency . type != type or dependency . causality != 'input' :
291- continue
293+ vrs = []
294+ values = []
292295
293- vrs .append (str (dependency .valueReference ))
294- s = shape (dependency )
296+ for dependency in unknown .dependencies :
295297
296- if not s :
297- values .append (name (dependency ))
298- elif len (s ) == 1 :
299- for i in range (1 , numel (dependency ) + 1 ):
300- values .append (f'{ name (dependency )} [{ i } ]' )
301- elif len (s ) == 2 :
302- for i in range (1 , s [0 ] + 1 ):
303- for j in range (1 , s [1 ] + 1 ):
304- values .append (f'{ name (dependency )} [{ i } ,{ j } ]' )
298+ if dependency .type != type or dependency .causality != 'input' :
299+ continue
305300
306- if not vrs :
307- return ''
301+ vrs .append (str (dependency .valueReference ))
302+ s = shape (dependency )
303+
304+ if not s :
305+ values .append (name (dependency ))
306+ elif len (s ) == 1 :
307+ for i in range (1 , numel (dependency ) + 1 ):
308+ values .append (f'{ name (dependency )} [{ i } ]' )
309+ elif len (s ) == 2 :
310+ for i in range (1 , s [0 ] + 1 ):
311+ for j in range (1 , s [1 ] + 1 ):
312+ values .append (f'{ name (dependency )} [{ i } ,{ j } ]' )
313+
314+ if vrs :
315+ arguments .append (f'{ type .lower ()} InputValueReferences' + '={' + ', ' .join (vrs ) + '}, ' + f'{ type .lower ()} InputValues=' + '{' + ', ' .join (values ) + '}, ' )
308316
309- return f' { type . lower () } InputValueReferences' + '={' + ', ' .join (vrs ) + '}, ' + f' { type . lower () } InputValues=' + '{' + ', ' . join ( values ) + '}, '
317+ return '' .join (arguments )
310318
311319 template .globals .update ({
312320 'as_array' : as_array ,
0 commit comments