Example #1
0
def test_budget(small_system_80):

    year = 2019
    technology = 'fttp'
    policy = 's1_market_based_roll_out'
    annual_budget = 2000
    adoption_cap = 40
    subsidy = 1000
    telco_match_funding = 1000
    service_obligation_capacity = 10

    expected_budget_constrained_interventions = [
        ('distribution_{EACAM}{1}', 'fttp', 's1_market_based_roll_out', 'market_based', 30720.0, 1837, 16.72291780076211)
    ]

    #Total cost should be £1837
    #fttp modem: £20 * 20 = £400
    #optical network terminal: £10 * 20 = £200
    #planning cost: £10 * 20 = £200
    #optical connection point: £37 * 1 = £37 (32 premises per connection point)
    #fibre upgrade cost: £5 * 200 = 1000

    #build interventions
    budget_constrained_interventions = decide_interventions(
        small_system_80._distributions, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'distribution')

    assert budget_constrained_interventions == expected_budget_constrained_interventions
Example #2
0
def test_fttp_s1_from_cabinet(small_system_40):

    year = 2019
    technology = 'fttp'
    policy = 's1_market_based_roll_out'
    annual_budget = 8000
    adoption_cap = 70
    subsidy = 2000
    telco_match_funding = 2000
    service_obligation_capacity = 10

    fttp_s1_expected_built_interventions = [
        ('cabinet_{EACAM}{P100}', 'fttp', 's1_market_based_roll_out', 'market_based', 49920.0, 7811, 6.390987069517347)
    ]

    #Total cost for exchange_EACOM should be:
    #cabinet = 1550 +
    #distribution = £1837 + £2087 + £2337
    # == 7811

    #build interventions
    fttp_s1_built_interventions = decide_interventions(
        small_system_40._cabinets, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'cabinet')

    assert fttp_s1_expected_built_interventions == fttp_s1_built_interventions
Example #3
0
def test_fttdp_s1_from_exchange(small_system_40):

    year = 2019
    technology = 'fttdp'
    policy = 's1_market_based_roll_out'
    annual_budget = 60000
    adoption_cap = 80
    subsidy = 2000
    telco_match_funding = 2000
    service_obligation_capacity = 10

    fttdp_s1_expected_built_interventions = [
        ('exchange_EACAM', 'fttdp', 's1_market_based_roll_out', 'market_based',  49920.0, 32450, 1.538366718027735),
    ]

    #Total cost should be £32400
    #fttdp modem: £20 * 20 = £400
    #costs_assets_distribution_fttdp_8_ports: £250 * 3 = £750
    #fibre from cab to dist: £5 * (200+250+300) = £3750
    #cabinet upgrade = £2500
    #exchange upgrade = £25000

    #build interventions
    fttdp_s1_built_interventions = decide_interventions(
        small_system_40._exchanges, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'exchange')

    assert fttdp_s1_built_interventions == fttdp_s1_expected_built_interventions
Example #4
0
def test_fttp_s1_from_exchange(small_system_40):

    year = 2019
    technology = 'fttp'
    policy = 's1_market_based_roll_out'
    annual_budget = 60000
    adoption_cap = 70
    subsidy = 2000
    telco_match_funding = 2000
    service_obligation_capacity = 10

    fttp_s1_expected_built_interventions = [
        ('exchange_EACAM', 'fttp', 's1_market_based_roll_out', 'market_based', 49920.0, 57811, 0.8635034854958399),
        #('exchange_EACOM', 'fttp', 's1_market_based_roll_out', 'market_based', 57474.0)
    ]

    #Total cost for exchange_EACAM should be:
    #exchange = £50000 +
    #cabinet = 1550 +
    #distribution = £1837 + £2087 + £2337
    # == 57811

    #build interventions
    fttp_s1_built_interventions = decide_interventions(
        small_system_40._exchanges, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'exchange')

    assert fttp_s1_built_interventions == fttp_s1_expected_built_interventions
Example #5
0
def test_fttp_s1(small_system_40):

    year = 2019
    technology = 'fttp'
    policy = 's1_market_based_roll_out'
    annual_budget = 3000
    adoption_cap = 40
    subsidy = 2000
    telco_match_funding = 2000
    service_obligation_capacity = 10

    fttp_s1_expected_built_interventions = [
        ('distribution_{EACAM}{2}', 'fttp', 's1_market_based_roll_out', 'market_based', 26880.0, 2087, 12.879731672256828)
    ]

    #Total cost for the distribution downwards should be £2087
    #fttp modem: £20 * 20 = £400
    #optical network terminal: £10 * 20 = £200
    #planning cost: £10 * 20 = £200
    #optical connection point: £37 * 1 = £37 (32 premises per connection point)
    #distribution point upgrade = £10
    #fibre upgrade cost: £5 * 250 = 1250

    #build interventions
    fttp_s1_built_interventions = decide_interventions(
        small_system_40._distributions, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'distribution')

    assert fttp_s1_built_interventions == fttp_s1_expected_built_interventions
Example #6
0
def test_enhanced_fttp_capacity_at_exchange(small_system):

    year = 2019
    technology = 'fttp'
    policy = 's1_market_based_roll_out'
    annual_budget = 10000000
    adoption_cap = 40
    subsidy = 2000
    telco_match_funding = 2000
    service_obligation_capacity = 10

    #build interventions
    built_interventions = decide_interventions(
        small_system._exchanges, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'exchange')

    small_system.upgrade(built_interventions)

    expected_capacity = [{
        'id': 'exchange_EACAM',
        #  fttp       fttdp     fttc     docsis3   adsl
        # ((20*1000) + (0*300) + (5*80) + (5*150) + (0*24)) / 20 == round(69.5)
        'average_capacity': 1000,
    }]

    actual_capacity = small_system.capacity('exchange')

    assert expected_capacity == actual_capacity
Example #7
0
def test_fttdp_upgrade_distributions(small_system):

    year = 2019
    technology = 'fttdp'
    policy = 's1_market_based_roll_out'
    annual_budget = 2000
    adoption_cap = 40
    subsidy = 2000
    telco_match_funding = 2000
    service_obligation_capacity = 10

    # build interventions
    built_interventions = decide_interventions(
        small_system._distributions, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'distribution')

    small_system.upgrade(built_interventions)

    actual_coverage = small_system.coverage('exchange')

    expected_coverage = [{
        'id': 'exchange_EACAM',
        'percentage_of_premises_with_fttp': 0,
        'percentage_of_premises_with_fttdp': 100,
        'percentage_of_premises_with_fttc': 0,
        'percentage_of_premises_with_docsis3': 0,
        'percentage_of_premises_with_adsl': 0,
        'sum_of_premises': 20,
    }]

    assert expected_coverage == actual_coverage
Example #8
0
def test_fttp_s3(small_system_40):

    year = 2019
    technology = 'fttp'
    policy = 's3_outside_in_subsidy'
    annual_budget = 60000
    adoption_cap = 80
    subsidy = 30000
    telco_match_funding = 30000
    service_obligation_capacity = 10

    fttp_s3_expected_built_interventions = [
        ('exchange_EACAM', 'fttp', 's3_outside_in_subsidy', 'market_based', 49920.0, 57811, 0.8635034854958399),
        ('exchange_EACOM', 'fttp', 's3_outside_in_subsidy', 'subsidy_based', 0, 57474.0, 0.0),
        ]

    #Total cost should be £1837
    #fttp modem: £20 * 20 = £400
    #optical network terminal: £10 * 20 = £200
    #planning cost: £10 * 20 = £200
    #optical connection point: £37 * 1 = £37 (32 premises per connection point)
    #fibre upgrade cost: £5 * 200 = 1000

    #Total cost should be 2837
    #fttp modem: £20 * 20 = £400
    #optical network terminal: £10 * 20 = £200
    #planning cost: £10 * 20 = £200
    #optical connection point: £37 * 1 = £37 (32 premises per connection point)
    #fibre upgrade cost: £5 * 400 = 2000

    #build interventions
    fttp_s3_built_interventions = decide_interventions(
        small_system_40._exchanges, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'exchange')

    assert fttp_s3_built_interventions == fttp_s3_expected_built_interventions

    with pytest.raises(ValueError) as ex:
        decide_interventions(
        small_system_40._exchanges, year, technology, 'unknown_policy', annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'exchange')

    msg = 'Did not recognise stipulated policy'

    assert msg in str(ex)
Example #9
0
def test_fttp_s2_from_exchange(small_system_40):

    year = 2019
    technology = 'fttp'
    policy = 's2_rural_based_subsidy'
    annual_budget = 60000
    adoption_cap = 80
    subsidy = 30000
    telco_match_funding = 30000
    service_obligation_capacity = 10

    fttp_s2_expected_built_interventions = [
        ('exchange_EACAM', 'fttp', 's2_rural_based_subsidy', 'market_based', 49920.0, 57811, 0.8635034854958399),
        ('exchange_EACOM', 'fttp', 's2_rural_based_subsidy', 'subsidy_based', 0, 57474.0, 0),
        ]

    #build interventions
    fttp_s2_built_interventions = decide_interventions(
        small_system_40._exchanges, year, technology, policy, annual_budget, adoption_cap,
        subsidy, telco_match_funding, service_obligation_capacity, 'exchange')
    print(fttp_s2_built_interventions)
    assert fttp_s2_built_interventions == fttp_s2_expected_built_interventions
Example #10
0
def test_decide_interventions(base_system, parameters, constrained_parameters):

    built_interventions = decide_interventions(base_system, 'fttdp',
                                               'market_insideout', parameters)

    built_intervention_ids = [i[0] for i in built_interventions]

    expected_intervention_ids = ['A', 'B', 'C', 'D']

    assert built_intervention_ids == expected_intervention_ids

    built_interventions = decide_interventions(base_system, 'fttdp',
                                               'subsidy_rural', parameters)

    built_intervention_ids = [i[0] for i in built_interventions]

    expected_intervention_ids = ['D', 'C', 'B', 'A']

    assert built_intervention_ids == expected_intervention_ids

    built_interventions = decide_interventions(base_system, 'fttdp',
                                               'subsidy_outsidein', parameters)

    built_intervention_ids = [i[0] for i in built_interventions]

    expected_intervention_ids = ['D', 'C', 'B', 'A']

    assert built_intervention_ids == expected_intervention_ids

    built_interventions = decide_interventions(base_system, 'fttdp',
                                               'market_insideout',
                                               constrained_parameters)

    #asset_id, tech, policy, capital_investment_type, total_cost, private_sector_spend, subsidy
    expected_interventions = [('A', 'fttdp', 'market', 'private', 50000, 0, 0),
                              ('B', 'fttdp', 'market', 'private', 50000, 0, 0)]

    assert built_interventions == expected_interventions

    built_interventions = decide_interventions(base_system, 'fttp',
                                               'market_insideout',
                                               constrained_parameters)

    expected_interventions = [('A', 'fttp', 'market', 'private', 100000, 0, 0)]

    assert built_interventions == expected_interventions

    built_interventions = decide_interventions(base_system, 'fttdp',
                                               'subsidy_rural',
                                               constrained_parameters)

    expected_interventions = [
        ('D', 'fttdp', 'subsidy', 'private', 50000, 50000, 0),
        ('C', 'fttdp', 'subsidy', 'private', 50000, 50000, 0),
        ('B', 'fttdp', 'subsidy', 'public_private', 50000, 8000, 42000),
        ('A', 'fttdp', 'subsidy', 'public_private', 50000, 9000, 41000)
    ]

    assert built_interventions == expected_interventions

    built_interventions = decide_interventions(base_system, 'fttp',
                                               'subsidy_rural',
                                               constrained_parameters)

    expected_interventions = [
        ('D', 'fttp', 'subsidy', 'private', 100000, 100000, 0),
        ('B', 'fttp', 'subsidy', 'public_private', 100000, 8000, 92000),
        ('A', 'fttp', 'subsidy', 'public_private', 100000, 9000, 91000)
    ]

    assert built_interventions == expected_interventions

    built_interventions = decide_interventions(base_system, 'fttdp',
                                               'subsidy_outsidein',
                                               constrained_parameters)

    expected_interventions = [
        ('D', 'fttdp', 'subsidy', 'private', 50000, 50000, 0),
        ('C', 'fttdp', 'subsidy', 'private', 50000, 50000, 0),
        ('B', 'fttdp', 'subsidy', 'public_private', 50000, 8000, 42000),
        ('A', 'fttdp', 'subsidy', 'public_private', 50000, 9000, 41000)
    ]

    assert built_interventions == expected_interventions

    built_interventions = decide_interventions(base_system, 'fttp',
                                               'subsidy_outsidein',
                                               constrained_parameters)

    expected_interventions = [
        ('D', 'fttp', 'subsidy', 'private', 100000, 100000, 0),
        ('C', 'fttp', 'subsidy', 'public_private', 100000, 7000, 93000),
        ('B', 'fttp', 'subsidy', 'public_private', 100000, 8000, 92000),
        ('A', 'fttp', 'subsidy', 'public_private', 100000, 9000, 91000)
    ]

    assert built_interventions == expected_interventions
Example #11
0
        for year in TIMESTEPS:

            print('Processing {}'.format(year))

            lads = dwelling_density_by_lad(lads, dwellings, year)

            #THIS DOES NOT CORRECTLY ALLOCATE - NEED TO GENERATE EX TO LAD LUT
            exchanges = estimate_dwelling_density(exchanges, lads)

            # Simulate first year
            if year == BASE_YEAR:
                system = NetworkManager(exchanges, parameters)

            # actually decide which interventions to build
            built_interventions = decide_interventions(system, technology,
                                                       policy, parameters)

            # give the interventions to the system model
            system.upgrade(built_interventions)

            # write out the decisions
            path = os.path.join(RESULTS_DIRECTORY, 'fixed_outputs')
            write_decisions(built_interventions, path, year, technology,
                            policy)

            write_spend(built_interventions, path, year, technology, policy)

            write_exchange_results(system, path, year, technology, policy)

            # # write_lad_results(system, exchange_to_lad_lut, path, year, technology, policy, roll_out)