else:# Here source_i_start > target_i_start becuase the case of source_i_start == target_i_start is handled in the else branch of target_i_srat not in dynamic.indices
root=dynamic.root()
root_p_start=source_i_start# because root is a TrivialDynamic, positions and indices are equivalent
length=0
source_position=0
whileroot_p_startnotintarget_dynamic.indices:
length+=root.step_size_p(root_p_start)
root_p_start+=1
ifroot_p_startindynamic.indices[:-1]:
length=0
source_position+=1
elifroot_p_start>dynamic.indices[-1]:# because root is a TrivialDynamic, positions and indices are equivalent
assignment.compile()# here, we discover that the entire source_dynamic does not cover one time_step of the target_dynamic
returnassignment
target_position=target_dynamic.position_of(root_p_start)# because root is a TrivialDynamic, positions and indices are equivalent