def test_generate_proposals_binary(FLASH, SRAM, BinaryGraph):
        graph = BinaryGraph
        input_configs = 2
        parts = 3
        home_map = make_simple_home_map(graph, SRAM, FLASH)
        options = make_options(
            cascade_region=SRAM,
            max_proposals=32,
            stripe_factors=4,
            max_plan_size=10,
        )

        proposals = generate_proposals(graph, home_map, options)

        for proposal in proposals:
            assert 0 < len(proposal.plans) <= parts
            assert len(proposal.input_tensor_configs) == input_configs
            assert len(proposal.part_group) == parts
            assert proposal.cycles > 0
    def test_generate_proposals_mobilenetv1(FLASH, SRAM, MobileNetv1Graph):
        graph = MobileNetv1Graph
        min_sram = 200000
        max_sram = 1300000
        input_configs = 1
        parts = 27
        home_map = make_simple_home_map(graph, SRAM, FLASH)
        options = make_options(
            cascade_region=SRAM,
            max_proposals=32,
            stripe_factors=5,
            max_plan_size=10,
        )

        proposals = generate_proposals(graph, home_map, options)

        for proposal in proposals:
            assert 0 < len(proposal.plans) <= parts
            assert len(proposal.input_tensor_configs) == input_configs
            assert len(proposal.part_group) == parts
            assert min_sram < proposal.memory_usage < max_sram
            assert proposal.cycles > 0
    def test_generate_proposals_mobilenetv1_disable_striping(
            FLASH, SRAM, MobileNetv1Graph):
        graph = MobileNetv1Graph
        home_map = make_simple_home_map(graph, SRAM, FLASH)
        options = make_options(
            cascade_region=SRAM,
            max_proposals=32,
            stripe_factors=5,
            max_plan_size=10,
            enable_striping=False,
        )

        proposals = generate_proposals(graph, home_map, options)
        assert len(proposals) == 1
        proposal = proposals[0]
        for plan in proposal.plans:
            for stripe_config in plan.output_config.stripe_configs:
                for shape_dim, stride_dim in list(
                        zip(stripe_config.shape, stripe_config.strides)):
                    # The striding and shape sizes in each dimension should be the same
                    # if striping is disabled
                    assert int(shape_dim) == int(stride_dim)