def copy(self, *args):
    new_instance = self.__class__
    n_seq_op_args = len(self.seq_op_args)
    n_constructor_args = len(self.constructor_args)
    constr_args = args[:n_constructor_args]
    init_op_args = args[n_constructor_args:(- n_seq_op_args)]
    seq_op_args = args[(- n_seq_op_args):]
    return new_instance(self.agg_op, constr_args, (init_op_args if (len(init_op_args) != 0) else None), seq_op_args)
def copy(self, *args):
    new_instance = self.__class__
    n_seq_op_args = len(self.seq_op_args)
    n_constructor_args = len(self.constructor_args)
    constr_args = args[:n_constructor_args]
    init_op_args = args[n_constructor_args:(- n_seq_op_args)]
    seq_op_args = args[(- n_seq_op_args):]
    return new_instance(self.agg_op, constr_args, (init_op_args if (len(init_op_args) != 0) else None), seq_op_args)