1919 PID ,
2020 Schedule ,
2121)
22- from .custom_pathsim_blocks import Process , Splitter , Bubbler
22+ from pathsim .blocks .noise import WhiteNoise , PinkNoise
23+ from .custom_pathsim_blocks import Process , Splitter , Splitter2 , Splitter3 , Bubbler
2324from flask import jsonify
25+ import inspect
2426
2527NAME_TO_SOLVER = {
2628 "SSPRK22" : pathsim .solvers .SSPRK22 ,
3436 "amplifier" : Amplifier ,
3537 "amplifier_reverse" : Amplifier ,
3638 "scope" : Scope ,
37- "splitter2" : Splitter ,
38- "splitter3" : Splitter ,
39+ "splitter2" : Splitter2 ,
40+ "splitter3" : Splitter3 ,
3941 "adder" : Adder ,
4042 "adder_reverse" : Adder ,
4143 "multiplier" : Multiplier ,
4749 "function" : Function ,
4850 "delay" : Delay ,
4951 "bubbler" : Bubbler ,
52+ "white_noise" : WhiteNoise ,
53+ "pink_noise" : PinkNoise ,
5054}
5155
5256
@@ -296,14 +300,25 @@ def auto_block_construction(node: dict, eval_namespace: dict = None) -> Block:
296300
297301 block_class = map_str_to_object [block_type ]
298302
299- # skip 'self'
300- parameters_for_class = block_class .__init__ .__code__ .co_varnames [1 :]
303+ parameters_for_class = inspect .signature (block_class .__init__ ).parameters
304+ parameters = {}
305+ for k , value in parameters_for_class .items ():
306+ if k == "self" :
307+ continue
308+ # Skip 'operations' for Adder, as it is handled separately
309+ # https://github.com/festim-dev/fuel-cycle-sim/issues/73
310+ if k in ["operations" ]:
311+ continue
312+ user_input = node ["data" ][k ]
313+ if user_input == "" :
314+ if value .default is inspect ._empty :
315+ raise ValueError (
316+ f"expected parameter for { k } in { block_type } ({ node ['label' ]} )"
317+ )
318+ parameters [k ] = value .default
319+ else :
320+ parameters [k ] = eval (user_input , eval_namespace )
301321
302- parameters = {
303- k : eval (v , eval_namespace )
304- for k , v in node ["data" ].items ()
305- if k in parameters_for_class
306- }
307322 return block_class (** parameters )
308323
309324
@@ -329,21 +344,15 @@ def make_blocks(
329344 tau = eval (node ["data" ]["delay" ], eval_namespace ),
330345 )
331346 elif block_type == "splitter2" :
332- block = Splitter (
333- n = 2 ,
334- fractions = [
335- eval (node ["data" ]["f1" ], eval_namespace ),
336- eval (node ["data" ]["f2" ], eval_namespace ),
337- ],
347+ block = Splitter2 (
348+ f1 = eval (node ["data" ]["f1" ], eval_namespace ),
349+ f2 = eval (node ["data" ]["f2" ], eval_namespace ),
338350 )
339351 elif block_type == "splitter3" :
340- block = Splitter (
341- n = 3 ,
342- fractions = [
343- eval (node ["data" ]["f1" ], eval_namespace ),
344- eval (node ["data" ]["f2" ], eval_namespace ),
345- eval (node ["data" ]["f3" ], eval_namespace ),
346- ],
352+ block = Splitter3 (
353+ f1 = eval (node ["data" ]["f1" ], eval_namespace ),
354+ f2 = eval (node ["data" ]["f2" ], eval_namespace ),
355+ f3 = eval (node ["data" ]["f3" ], eval_namespace ),
347356 )
348357 elif block_type == "bubbler" :
349358 block , events_bubbler = create_bubbler (node )
0 commit comments