<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _pull_out_unaffected_blocks_lhs(lhs, rest, out_port, in_port):
 """In a self-Feedback of a series product, where the left-most operand is reducible, pull all non-trivial blocks outside of the feedback. Args: lhs (Circuit):
 The reducible circuit rest (tuple):
 The other SeriesProduct operands out_port (int):
 The feedback output port index in_port (int):
 The feedback input port index Returns: Circuit: The simplified circuit """


    _, block_index = lhs.index_in_block(out_port)

    bs = lhs.block_structure

    nbefore, nblock, nafter = (sum(bs[:block_index]),
                               bs[block_index],
                               sum(bs[block_index + 1:]))
    before, block, after = lhs.get_blocks((nbefore, nblock, nafter))

    if before != cid(nbefore) or after != cid(nafter):
        outer_lhs = before + cid(nblock - 1) + after
        inner_lhs = cid(nbefore) + block + cid(nafter)
        return outer_lhs << Feedback.create(
                SeriesProduct.create(inner_lhs, *rest),
                out_port=out_port, in_port=in_port)
    elif block == cid(nblock):
        outer_lhs = before + cid(nblock - 1) + after
        return outer_lhs << Feedback.create(
                SeriesProduct.create(*rest),
                out_port=out_port, in_port=in_port)
    raise CannotSimplify()