@@ -304,8 +304,21 @@ def process_prog(
304304 PDLRuntimeError: If the program raises an error.
305305 """
306306 scope = empty_scope | scope
307+
308+ # Process stdlib
309+ stdlib_file = Path (__file__ ).parent / "pdl_stdlib.pdl"
310+ stdlib , _ = parse_file (stdlib_file )
311+ _ , _ , stdlib_dict , _ = process_block (
312+ state .with_yield_background (False ).with_yield_result (False ),
313+ empty_scope ,
314+ stdlib .root ,
315+ loc ,
316+ )
317+
318+ stdlib_scope = scope | PdlDict ({"stdlib" : stdlib_dict })
319+
307320 result , document , final_scope , trace = process_block (
308- state , scope , block = prog .root , loc = loc
321+ state , stdlib_scope , block = prog .root , loc = loc
309322 )
310323 return result , document , final_scope , trace
311324
@@ -441,7 +454,7 @@ def set_error_to_scope_for_retry(
441454 return scope
442455
443456
444- def process_advanced_block (
457+ def process_advanced_block ( # noqa: C901
445458 state : InterpreterState ,
446459 scope : ScopeType ,
447460 block : AdvancedBlockType ,
@@ -471,7 +484,7 @@ def process_advanced_block(
471484 return result , background , new_scope , trace
472485
473486
474- def process_advance_block_retry (
487+ def process_advance_block_retry ( # noqa: C901
475488 state : InterpreterState ,
476489 scope : ScopeType ,
477490 block : AdvancedBlockType ,
@@ -494,31 +507,39 @@ def process_advance_block_retry(
494507
495508 max_retry = block .retry if block .retry else 0
496509 trial_total = max_retry + 1
497- for trial_idx in range (trial_total ):
510+ for trial_idx in range (trial_total ): # pylint: disable=too-many-nested-blocks
498511 try :
499512 result , background , new_scope , trace = process_block_body (
500513 state , scope , block , loc
501514 )
502515 if block .requirements != []:
503516 requirements_satisfied = True
504517 for req in block .requirements :
505- evalfn , _ = process_expr (scope , getattr (req , "evaluate" ), loc )
506- evaluation = evalfn (
507- requirement = getattr (req , "description" ), response = result
508- )
509- if evaluation .result () is False :
518+ evaluate = getattr (req , "evaluate" , None )
519+ stdlib_dict : Any = scope ["stdlib" ]
520+ if evaluate is None :
521+ evaluate = stdlib_dict ["requirements" ]["evaluation" ]
522+ evalfn : Any
523+ evalfn , _ = process_expr (scope , evaluate , loc )
524+ requirement , _ = process_expr (scope , getattr (req , "expect" ), loc )
525+ evaluation = evalfn (requirement = requirement , response = result )
526+ if evaluation < - 0.3 :
510527 requirements_satisfied = False
511- transfn , _ = process_expr (
512- scope , getattr (req , "transformContext" ), loc
513- )
528+ transform_context = getattr (req , "transformContext" , None )
529+ if transform_context is None :
530+ transform_context = stdlib_dict ["requirements" ][
531+ "transformContext"
532+ ]
533+ transfn : Any
534+ transfn , _ = process_expr (scope , transform_context , loc )
514535 new_context = transfn (
515536 pdl_context = scope ["pdl_context" ],
516- requirement = getattr ( req , "description" ) ,
537+ requirement = requirement ,
517538 response = result ,
518539 )
519- scope = scope | {"pdl_context" : new_context }
540+ if trial_idx < max_retry :
541+ scope = scope | {"pdl_context" : new_context }
520542 if requirements_satisfied is False :
521- print ("\n Trying again!" )
522543 continue
523544
524545 result = lazy_apply (id_with_set_first_use_nanos (block .pdl__timing ), result )
@@ -680,7 +701,7 @@ def process_block_body(
680701 yield_result (result .result (), block .kind )
681702 if state .yield_background :
682703 yield_background (background )
683- case TextBlock (): # HERE
704+ case TextBlock ():
684705 result , background , scope , trace = process_blocks_of (
685706 block ,
686707 "text" ,
0 commit comments