- result = []
- for _ in range(nb_runs):
- stack = [x.item() for x in torch.randint(max_input + 1, (nb_starting_values,))]
- result_stack = rpl_exec(prog, stack)
- result = result + ["<input>"] + stack + ["<output>"] + result_stack
+ while True:
+ no_empty_stack = True
+ prog = [rpl_ops[k] for k in torch.randint(len(rpl_ops), (prog_len,))]
+
+ result = []
+ for _ in range(nb_runs):
+ stack = [
+ x.item() for x in torch.randint(max_input + 1, (nb_starting_values,))
+ ]
+ result_stack = rpl_exec(prog, stack)
+ if len(result_stack) == 0:
+ no_empty_stack = False
+ result = result + ["<in>"] + stack + ["<out>"] + result_stack
+
+ result = result + ["<prg>"] + prog
+ result = result + ["<end>"]
+
+ if no_empty_stack and (
+ nb_result_values_max is None or len(result_stack) <= nb_result_values_max
+ ):
+ break