def METHOD_NAME(self):
    main_program = paddle.static.Program()
    startup_program = paddle.static.Program()
    with paddle.static.program_guard(main_program, startup_program):
        input = paddle.static.data(name="image", shape=[None, 3, 16, 16])
        conv1 = conv_bn_layer(input, 8, 3, "conv1")
        conv2 = conv_bn_layer(input, 4, 3, "conv2")
        split_0, split_1 = paddle.split(conv1, 2, axis=1)
        add = split_0 + conv2
        out = conv_bn_layer(add, 4, 3, "conv3")
        out1 = conv_bn_layer(split_1, 4, 4, "conv4")
    shapes = {}
    for param in main_program.global_block().all_parameters():
        shapes[param.name] = param.shape
    place = paddle.CPUPlace()
    exe = paddle.static.Executor(place)
    scope = paddle.static.Scope()
    exe.run(startup_program, scope=scope)
    pruner = Pruner()
    # test backward search of concat
    pruned_program, _, _ = pruner.prune(
        main_program,
        scope,
        params=["conv2_weights"],
        ratios=[0.5],
        place=place,
        lazy=False,
        only_graph=True,
        param_backup=None,
        param_shape_backup=None)
    shapes = {
        "conv1_weights": (6, 3, 3, 3),
        "conv2_weights": (2, 3, 3, 3),
        "conv3_weights": (4, 2, 3, 3),
        "conv4_weights": (4, 4, 3, 3),
    }
    for param in pruned_program.global_block().all_parameters():
        if "weights" in param.name and "conv2d" in param.name:
            self.assertTrue(shapes[param.name] == param.shape)