from typing import Optional
from dflow.python import (
OP,
OPIO,
OPIOSign,
Parameter
)
from rid.constants import block_tag_fmt
[docs]class Recorder(OP):
"""
Record iteration index of RiD and make names for `block` (or iterations).
"""
[docs] @classmethod
def get_output_sign(cls):
return OPIOSign(
{
"next_iteration": int,
"block_tag": str
}
)
[docs] @OP.exec_sign_check
def execute(
self,
op_in: OPIO,
) -> OPIO:
r"""Execute the OP.
Parameters
----------
op_in : dict
Input dict with components:
- `iteration`: (`int`) Last iteration index. `iteration` is None means not any iteration performed before.
Returns
-------
Output dict with components:
- `next_iteration`: (`int`) Next iteration index.
- `block_tag`: (`str`) Names for `block`. See `rid.superop.blocks`
"""
if op_in["iteration"] is None:
next_iteration = 1
else:
next_iteration = op_in["iteration"] + 1
block_tag = block_tag_fmt.format(idx_iter=next_iteration)
op_out = OPIO({
"next_iteration": next_iteration,
"block_tag": block_tag
})
return op_out