@@ -305,8 +305,21 @@ def process_prog(
305305 PDLRuntimeError: If the program raises an error.
306306 """
307307 scope = empty_scope | scope
308+
309+ # Process stdlib
310+ stdlib_file = Path (__file__ ).parent / "pdl_stdlib.pdl"
311+ stdlib , _ = parse_file (stdlib_file )
312+ _ , _ , stdlib_dict , _ = process_block (
313+ state .with_yield_background (False ).with_yield_result (False ),
314+ empty_scope ,
315+ stdlib .root ,
316+ loc ,
317+ )
318+
319+ stdlib_scope = scope | PdlDict ({"stdlib" : stdlib_dict })
320+
308321 result , document , final_scope , trace = process_block (
309- state , scope , block = prog .root , loc = loc
322+ state , stdlib_scope , block = prog .root , loc = loc
310323 )
311324 return result , document , final_scope , trace
312325
@@ -442,7 +455,7 @@ def set_error_to_scope_for_retry(
442455 return scope
443456
444457
445- def process_advanced_block (
458+ def process_advanced_block ( # noqa: C901
446459 state : InterpreterState ,
447460 scope : ScopeType ,
448461 block : AdvancedBlockType ,
@@ -472,7 +485,7 @@ def process_advanced_block(
472485 return result , background , new_scope , trace
473486
474487
475- def process_advance_block_retry (
488+ def process_advance_block_retry ( # noqa: C901
476489 state : InterpreterState ,
477490 scope : ScopeType ,
478491 block : AdvancedBlockType ,
@@ -495,31 +508,39 @@ def process_advance_block_retry(
495508
496509 max_retry = block .retry if block .retry else 0
497510 trial_total = max_retry + 1
498- for trial_idx in range (trial_total ):
511+ for trial_idx in range (trial_total ): # pylint: disable=too-many-nested-blocks
499512 try :
500513 result , background , new_scope , trace = process_block_body_with_replay (
501514 state , scope , block , loc
502515 )
503516 if block .requirements != []:
504517 requirements_satisfied = True
505518 for req in block .requirements :
506- evalfn , _ = process_expr (scope , getattr (req , "evaluate" ), loc )
507- evaluation = evalfn (
508- requirement = getattr (req , "description" ), response = result
509- )
510- if evaluation .result () is False :
519+ evaluate = getattr (req , "evaluate" , None )
520+ stdlib_dict : Any = scope ["stdlib" ]
521+ if evaluate is None :
522+ evaluate = stdlib_dict ["requirements" ]["evaluation" ]
523+ evalfn : Any
524+ evalfn , _ = process_expr (scope , evaluate , loc )
525+ requirement , _ = process_expr (scope , getattr (req , "expect" ), loc )
526+ evaluation = evalfn (requirement = requirement , response = result )
527+ if evaluation < - 0.3 :
511528 requirements_satisfied = False
512- transfn , _ = process_expr (
513- scope , getattr (req , "transformContext" ), loc
514- )
529+ transform_context = getattr (req , "transformContext" , None )
530+ if transform_context is None :
531+ transform_context = stdlib_dict ["requirements" ][
532+ "transformContext"
533+ ]
534+ transfn : Any
535+ transfn , _ = process_expr (scope , transform_context , loc )
515536 new_context = transfn (
516537 pdl_context = scope ["pdl_context" ],
517- requirement = getattr ( req , "description" ) ,
538+ requirement = requirement ,
518539 response = result ,
519540 )
520- scope = scope | {"pdl_context" : new_context }
541+ if trial_idx < max_retry :
542+ scope = scope | {"pdl_context" : new_context }
521543 if requirements_satisfied is False :
522- print ("\n Trying again!" )
523544 continue
524545
525546 result = lazy_apply (id_with_set_first_use_nanos (block .pdl__timing ), result )
@@ -710,7 +731,7 @@ def process_block_body(
710731 yield_result (result .result (), block .kind )
711732 if state .yield_background :
712733 yield_background (background )
713- case TextBlock (): # HERE
734+ case TextBlock ():
714735 result , background , scope , trace = process_blocks_of (
715736 block ,
716737 "text" ,
0 commit comments