Ejemplo n.º 1
0
    def test_wind_v3_template(self):
        # Test running an end to end cyclone test based
        # on a wind config template.

        # The output file
        f = tempfile.NamedTemporaryFile(
            suffix='.npz',
            prefix='HAZIMPt_wind_scenarios_test_const',
            delete=False)

        wind_dir = os.path.join(misc.EXAMPLE_DIR, 'wind')
        exp_filename = os.path.join(wind_dir,
                                    'syn_small_exposure_tcrm.csv')
        wind_filename = os.path.join(wind_dir, 'gust01.txt')
        a_config = [{TEMPLATE: WINDV3},
                    {LOADCSVEXPOSURE: {'file_name': exp_filename,
                                       'exposure_latitude': 'LATITUDE',
                                       'exposure_longitude': 'LONGITUDE'}},
                    {LOADWINDTCRM: [wind_filename]},
                    {CALCSTRUCTLOSS: {REP_VAL_NAME: 'REPLACEMENT_VALUE'}},
                    {SAVE: f.name}]

        context = hazimp.start(config_list=a_config)

        self.assertTrue(allclose(
            context.exposure_att['structural_loss'],
            context.exposure_att['calced-loss']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = numpy.load(f.name)
            self.assertTrue(allclose(exp_dict['structural_loss'],
                                     exp_dict['calced-loss']))
        os.remove(f.name)
Ejemplo n.º 2
0
    def test_startII(self):

        # The config file
        f = tempfile.NamedTemporaryFile(suffix='.yaml',
                                        prefix='HAZIMPt_test_hazimp',
                                        delete=False)

        print(' - ' + templates.TEMPLATE + ': ' + templates.DEFAULT, file=f)
        print(' - constant : ', file=f)
        print('    var : c_test', file=f)
        print('    value : 7  ', file=f)
        print(' -  add_test:', file=f)
        print(' -  multiply_test:', file=f)
        f.close()

        a_test = 5
        b_test = 2
        cont_in = context.Context()
        cont_in.exposure_long = scipy.asarray([11.0])

        cont_in.exposure_att = {'a_test': a_test, 'b_test': b_test}

        cont_in = hazimp.start(config_file=f.name, cont_in=cont_in)
        os.remove(f.name)
        self.assertEqual(cont_in.exposure_att['d_test'], 35)  # 7 * 5
        self.assertEqual(cont_in.exposure_att['c_test'], 7)  # 5 + 2
Ejemplo n.º 3
0
    def test_startII(self):

        # The config file
        f = tempfile.NamedTemporaryFile(
            suffix='.yaml',
            prefix='HAZIMPt_test_hazimp',
            delete=False)

        print(' - ' + templates.TEMPLATE + ': ' + templates.DEFAULT, file=f)
        print(' - constant : ', file=f)
        print('    var : c_test', file=f)
        print('    value : 7  ', file=f)
        print(' -  add_test:', file=f)
        print(' -  multiply_test:', file=f)
        f.close()

        a_test = 5
        b_test = 2
        cont_in = context.Context()
        cont_in.exposure_long = scipy.asarray([11.0])

        cont_in.exposure_att = {'a_test': a_test, 'b_test': b_test}

        cont_in = hazimp.start(config_file=f.name, cont_in=cont_in)
        os.remove(f.name)
        self.assertEqual(cont_in.exposure_att['d_test'], 35)  # 7 * 5
        self.assertEqual(cont_in.exposure_att['c_test'], 7)  # 5 + 2
Ejemplo n.º 4
0
    def test_flood_fabric_v2_template_list(self):
        # Test running an end to end  test based
        # on a config template.

        # The output file
        f = tempfile.NamedTemporaryFile(
            suffix='.csv',
            prefix='HAZIMP_flood_scenarios_test_const',
            delete=False)
        resource_dir = os.path.join(misc.EXAMPLE_DIR, 'flood')
        exp_filename = os.path.join(resource_dir,
                                    'small_exposure.csv')
        haz_filename = os.path.join(resource_dir, 'depth_small_synthetic.txt')
        config = [{TEMPLATE: FLOODFABRICV2},
                  {LOADCSVEXPOSURE: {'file_name': exp_filename,
                                     'exposure_latitude': 'LATITUDE',
                                     'exposure_longitude': 'LONGITUDE'}},
                  {FLOOR_HEIGHT: .3},
                  {LOADFLOODASCII: [haz_filename]},
                  {CALCSTRUCTLOSS: {REP_VAL_NAME: 'REPLACEMENT_VALUE'}},
                  {SAVE: f.name}]

        context = hazimp.start(config_list=config)
        self.assertTrue(allclose(
            context.exposure_att['structural_loss'],
            context.exposure_att['calced-loss']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = misc.csv2dict(f.name)
            self.assertTrue(allclose(exp_dict['structural_loss'],
                                     exp_dict['calced-loss']))
        os.remove(f.name)
Ejemplo n.º 5
0
    def test_flood_contents_v2_template_list(self):
        # Test running an end to end  test based
        # on a config template.
        # Note, removing randomness for testing purposes

        # The output file
        f = tempfile.NamedTemporaryFile(
            suffix='.csv',
            prefix='HAZIMP_flood_scenarios_test_const',
            delete=False)
        resource_dir = os.path.join(misc.EXAMPLE_DIR, 'flood')
        exp_filename = os.path.join(resource_dir,
                                    'small_exposure.csv')
        haz_filename = os.path.join(resource_dir, 'depth_small_synthetic.txt')
        config = [{TEMPLATE: FLOODCONTENTSV2},
                  {LOADCSVEXPOSURE: {'file_name': exp_filename,
                                     'exposure_latitude': 'LATITUDE',
                                     'exposure_longitude': 'LONGITUDE'}},
                  {FLOOR_HEIGHT: .3},
                  {LOADFLOODASCII: [haz_filename]},
                  {flood_conts.INSURE_PROB: {flood_conts.INSURED: 1.0,
                                             flood_conts.UNINSURED: 0.0}},
                  {flood_conts.CONT_ACTIONS: {flood_conts.SAVE_CONT: 0.0,
                                              flood_conts.NO_ACTION_CONT: 0.0,
                                              flood_conts.EXPOSE_CONT: 1.0}},
                  {CALCCONTLOSS: {REP_VAL_NAME: 'REPLACEMENT_VALUE'}},
                  {SAVE: f.name}]

        context = hazimp.start(config_list=config)

        # These don't work on parallelised tests
        # if they are wrong the error will flow
        # on and be caught in the contents_loss
        # self.assertTrue(allclose(
        #     context.exposure_att['calced_haz'][[0, 1, 3]],
        #     context.exposure_att['water_depth'][[0, 1, 3]]))
        #
        # index = 'water depth above ground floor (m)'
        # self.assertTrue(allclose(
        #     context.exposure_att['calced_floor_depth'][[0, 1, 3]],
        #     context.exposure_att[index][[0, 1, 3]]))

        # print ('file name', f.name)

        # self.assertTrue(numpy.array_equal(
        #    context.exposure_att['calced_CONTENTS_FLOOD_FUNCTION_ID'],
        #    context.exposure_att['CONTENTS_FLOOD_FUNCTION_ID']))

        self.assertTrue(allclose(
            context.exposure_att['calced_contents_loss_ratio'],
            context.exposure_att['contents_loss_ratio']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = misc.csv2dict(f.name)
            self.assertTrue(allclose(exp_dict['contents_loss'],
                                     exp_dict['calced_contents_loss']))
        os.remove(f.name)
Ejemplo n.º 6
0
    def test_wind_yaml_v3_list(self):
        # Test running an end to end cyclone test based
        # on a wind config template.

        wind_dir = os.path.join(misc.EXAMPLE_DIR, 'wind')
        exp_filename = os.path.join(wind_dir,
                                    'syn_small_exposure_tcrm.csv')
        wind_filename = os.path.join(wind_dir, 'gust01.txt')

        # The output file
        f_out = tempfile.NamedTemporaryFile(
            suffix='.npz',
            prefix='HAZIMPt_wind_scenarios_test_const',
            delete=False)

        # The config file
        f = tempfile.NamedTemporaryFile(
            suffix='.yaml',
            prefix='HAZIMP_wind_scenarios_test_const',
            delete=False)

        print(' - ' + TEMPLATE + ': ' + WINDV3, file=f)
        print(' - ' + LOADCSVEXPOSURE + ': ', file=f)
        print('      file_name: ' + exp_filename, file=f)
        print('      exposure_latitude: LATITUDE', file=f)
        print('      exposure_longitude: LONGITUDE', file=f)
        print(
            ' - ' +
            LOADWINDTCRM +
            ': [' +
            wind_filename +
            ']',
            file=f)
        print(' - ' + CALCSTRUCTLOSS + ': ', file=f)
        print('      ' + REP_VAL_NAME + ': ' + 'REPLACEMENT_VALUE', file=f)
        print(' - ' + SAVE + ': ' + f_out.name, file=f)
        f.close()

        context = hazimp.start(config_file=f.name)
        self.assertTrue(allclose(
            context.exposure_att['structural_loss'],
            context.exposure_att['calced-loss']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = numpy.load(f_out.name)
            self.assertTrue(allclose(exp_dict['structural_loss'],
                                     exp_dict['calced-loss']))
        os.remove(f.name)
        os.remove(f_out.name)
Ejemplo n.º 7
0
    def test_start(self):
        config_list = [{templates.TEMPLATE: templates.DEFAULT},
                       {'constant': {'var': 'c_test', 'value': 7}},
                       {'add_test': None},
                       {'multiply_test': None}]
        a_test = 5
        b_test = 2
        cont_in = context.Context()
        cont_in.exposure_att = {'a_test': a_test, 'b_test': b_test}
        cont_in.exposure_long = scipy.asarray([11.0])

        cont_in = hazimp.start(config_list=config_list, cont_in=cont_in)
        self.assertEqual(cont_in.exposure_att['d_test'], 35)
        self.assertEqual(cont_in.exposure_att['c_test'], 7)
Ejemplo n.º 8
0
    def test_wind_v3_template_list_csv(self):
        # Test running an end to end cyclone test based
        # on a wind config template.

        # The output file
        f = tempfile.NamedTemporaryFile(
            suffix='.csv',
            prefix='HAZIMPt_wind_scenarios_test_const',
            delete=False)

        wind_dir = os.path.join(misc.EXAMPLE_DIR, 'wind')
        exp_filename = os.path.join(wind_dir, 'syn_small_exposure_tcrm.csv')
        wind_filename = os.path.join(wind_dir, 'gust01.txt')
        a_config = [{
            TEMPLATE: WINDV3
        }, {
            LOADCSVEXPOSURE: {
                'file_name': exp_filename,
                'exposure_latitude': 'LATITUDE',
                'exposure_longitude': 'LONGITUDE'
            }
        }, {
            LOADWINDTCRM: [wind_filename]
        }, {
            CALCSTRUCTLOSS: {
                REP_VAL_NAME: 'REPLACEMENT_VALUE'
            }
        }, {
            SAVE: f.name
        }]

        context = hazimp.start(config_list=a_config)
        self.assertTrue(
            allclose(context.exposure_att['structural_loss'],
                     context.exposure_att['calced-loss']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = misc.csv2dict(f.name)
            self.assertTrue(
                allclose(exp_dict['structural_loss'], exp_dict['calced-loss']))
            # Failing this shows how versions of numpy
            # less than 1.8 reduce the
            # number of significant figures in the output
            self.assertTrue(
                allclose(exp_dict['exposure_latitude'],
                         [-22.99, -23.01, -22.99, -23.99, -23]))
        os.remove(f.name)
Ejemplo n.º 9
0
    def test_flood_struct_yaml_list(self):
        # Test running an end to end flood test based
        # on a flood config template.
        # IF YOU CHANGE THIS CHANGE list_flood_v2.yaml as well

        flood_dir = os.path.join(misc.EXAMPLE_DIR, 'flood')
        exp_filename = os.path.join(flood_dir,
                                    'small_exposure.csv')
        flood_filename = os.path.join(flood_dir, 'depth_small_synthetic.txt')

        # The output file
        f_out = tempfile.NamedTemporaryFile(
            suffix='.npz',
            prefix='HAZIMPt_flood_scenarios_test_const',
            delete=False)

        # The config file
        f = tempfile.NamedTemporaryFile(
            suffix='.yaml',
            prefix='HAZIMP_flood_scenarios_test_const',
            delete=False)

        print(' - ' + TEMPLATE + ': ' + FLOODFABRICV2, file=f)
        print(' - ' + LOADCSVEXPOSURE + ': ', file=f)
        print('      file_name: ' + exp_filename, file=f)
        print('      exposure_latitude: LATITUDE', file=f)
        print('      exposure_longitude: LONGITUDE', file=f)
        print(' - ' + FLOOR_HEIGHT + ': .3', file=f)
        a_str = ' - ' + LOADFLOODASCII + ': [' + flood_filename + ']'
        print(a_str, file=f)
        print(' - ' + CALCSTRUCTLOSS + ': ', file=f)
        print('      ' + REP_VAL_NAME + ': ' + 'REPLACEMENT_VALUE', file=f)
        print(' - ' + SAVE + ': ' + f_out.name, file=f)
        f.close()

        context = hazimp.start(config_file=f.name)
        self.assertTrue(allclose(
            context.exposure_att['structural_loss'],
            context.exposure_att['calced-loss']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = numpy.load(f_out.name)
            self.assertTrue(allclose(exp_dict['structural_loss'],
                                     exp_dict['calced-loss']))
        os.remove(f.name)
        os.remove(f_out.name)
Ejemplo n.º 10
0
    def test_const_test(self):
        # First test running an end to end wind test based
        # on a config list, no template

        # The output file
        f = tempfile.NamedTemporaryFile(
            suffix='.npz',
            prefix='HAZIMPt_wind_scenarios_test_const',
            delete=False)

        wind_dir = os.path.join(misc.EXAMPLE_DIR, 'wind')
        exp_filename = os.path.join(wind_dir,
                                    'syn_small_exposure_tcrm.csv')
        wind_filename = os.path.join(wind_dir, 'gust01.txt')
        vul_filename = os.path.join(misc.RESOURCE_DIR,
                                    'synthetic_domestic_wind_vul_curves.xml')
        sim_at = {'domestic_wind_2012': 'WIND_VULNERABILITY_FUNCTION_ID'}
        slv_at = {'domestic_wind_2012': 'mean'}
        a_config = [
            {TEMPLATE: DEFAULT},
            {LOADCSVEXPOSURE: {'file_name': exp_filename,
                               'exposure_latitude': 'LATITUDE',
                               'exposure_longitude': 'LONGITUDE'}},
            {LOADRASTER: {'file_list': [wind_filename],
                          'attribute_label':
                          '0.2s gust at 10m height m/s'}},
            {LOADXMLVULNERABILITY: {'file_name':
                                    vul_filename}},
            {SIMPLELINKER: {'vul_functions_in_exposure': sim_at}},
            {SELECTVULNFUNCTION: {'variability_method': slv_at}},
            {LOOKUP: None},
            {calcs.STRUCT_LOSS: None},
            {SAVEALL: {'file_name': f.name}}]

        context = hazimp.start(config_list=a_config)
        self.assertTrue(allclose(
            context.exposure_att['structural_loss'],
            context.exposure_att['calced-loss']))
        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = numpy.load(f.name)

            self.assertTrue(allclose(exp_dict['structural_loss'],
                                     exp_dict['calced-loss']))

        os.remove(f.name)
Ejemplo n.º 11
0
    def test_exposure_and_vuln_functions(self):

        # Create the files
        file_vuln = build_example_vuln()
        file_exp, lat_name, long_name = build_example_exposure()

        the_config = [{'template': 'default'},
                      {jobs.LOADCSVEXPOSURE:
                       {'file_name': file_exp,
                        'exposure_latitude': lat_name,
                        'exposure_longitude': long_name}},
                      {jobs.LOADXMLVULNERABILITY: {'file_name': file_vuln}},
                      {jobs.SIMPLELINKER: {'vul_functions_in_exposure':
                                           {"EQ_building": 'building',
                                            "EQ_contents": 'contents'}}},
                      {jobs.SELECTVULNFUNCTION: {'variability_method':
                                                 {"EQ_building": 'mean',
                                                  "EQ_contents": 'mean'}}},
                      {jobs.LOOKUP: None}]
        context = hazimp.start(config_list=the_config)

        # SW1 loss ratio
        #  SW1 4 MMI - 0.4 building_loss , 0.004 contents_loss
        #  SW2 5 MMI - 0.05 building_loss 0.0005 contents_loss

        if parallel.STATE.size == 1:
            results = [0.4, 0.05]
            actual = context.exposure_att['building_loss']
            self.assertTrue(allclose(actual,
                                     results), 'actual:' + str(actual) +
                            '\n results:' + str(results))
        else:
            if parallel.STATE.rank == 0:
                results = [0.4]
                actual = context.exposure_att['building_loss']
                self.assertTrue(allclose(actual,
                                         results), 'actual:' + str(actual) +
                                '\n results:' + str(results))
            elif parallel.STATE.rank == 1:
                results = [0.05]
                actual = context.exposure_att['building_loss']
                self.assertTrue(allclose(actual,
                                         results), 'actual:' + str(actual) +
                                '\n results:' + str(results))
        os.remove(file_vuln)
        os.remove(file_exp)
Ejemplo n.º 12
0
    def test_wind_yaml_v3_list(self):
        # Test running an end to end cyclone test based
        # on a wind config template.

        wind_dir = os.path.join(misc.EXAMPLE_DIR, 'wind')
        exp_filename = os.path.join(wind_dir, 'syn_small_exposure_tcrm.csv')
        wind_filename = os.path.join(wind_dir, 'gust01.txt')

        # The output file
        f_out = tempfile.NamedTemporaryFile(
            suffix='.npz',
            prefix='HAZIMPt_wind_scenarios_test_const',
            delete=False)

        # The config file
        f = tempfile.NamedTemporaryFile(
            suffix='.yaml',
            prefix='HAZIMP_wind_scenarios_test_const',
            delete=False)

        print(' - ' + TEMPLATE + ': ' + WINDV3, file=f)
        print(' - ' + LOADCSVEXPOSURE + ': ', file=f)
        print('      file_name: ' + exp_filename, file=f)
        print('      exposure_latitude: LATITUDE', file=f)
        print('      exposure_longitude: LONGITUDE', file=f)
        print(' - ' + LOADWINDTCRM + ': [' + wind_filename + ']', file=f)
        print(' - ' + CALCSTRUCTLOSS + ': ', file=f)
        print('      ' + REP_VAL_NAME + ': ' + 'REPLACEMENT_VALUE', file=f)
        print(' - ' + SAVE + ': ' + f_out.name, file=f)
        f.close()

        context = hazimp.start(config_file=f.name)
        self.assertTrue(
            allclose(context.exposure_att['structural_loss'],
                     context.exposure_att['calced-loss']))

        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = numpy.load(f_out.name)
            self.assertTrue(
                allclose(exp_dict['structural_loss'], exp_dict['calced-loss']))
        os.remove(f.name)
        os.remove(f_out.name)
Ejemplo n.º 13
0
    def test_start(self):
        config_list = [{
            templates.TEMPLATE: templates.DEFAULT
        }, {
            'constant': {
                'var': 'c_test',
                'value': 7
            }
        }, {
            'add_test': None
        }, {
            'multiply_test': None
        }]
        a_test = 5
        b_test = 2
        cont_in = context.Context()
        cont_in.exposure_att = {'a_test': a_test, 'b_test': b_test}
        cont_in.exposure_long = scipy.asarray([11.0])

        cont_in = hazimp.start(config_list=config_list, cont_in=cont_in)
        self.assertEqual(cont_in.exposure_att['d_test'], 35)
        self.assertEqual(cont_in.exposure_att['c_test'], 7)
Ejemplo n.º 14
0
    def test_exposure_and_vuln_functions(self):

        # Create the files
        file_vuln = build_example_vuln()
        file_exp, lat_name, long_name = build_example_exposure()

        the_config = [{
            'template': 'default'
        }, {
            jobs.LOADCSVEXPOSURE: {
                'file_name': file_exp,
                'exposure_latitude': lat_name,
                'exposure_longitude': long_name
            }
        }, {
            jobs.LOADXMLVULNERABILITY: {
                'file_name': file_vuln
            }
        }, {
            jobs.SIMPLELINKER: {
                'vul_functions_in_exposure': {
                    "EQ_building": 'building',
                    "EQ_contents": 'contents'
                }
            }
        }, {
            jobs.SELECTVULNFUNCTION: {
                'variability_method': {
                    "EQ_building": 'mean',
                    "EQ_contents": 'mean'
                }
            }
        }, {
            jobs.LOOKUP: None
        }]
        context = hazimp.start(config_list=the_config)

        # SW1 loss ratio
        #  SW1 4 MMI - 0.4 building_loss , 0.004 contents_loss
        #  SW2 5 MMI - 0.05 building_loss 0.0005 contents_loss

        if parallel.STATE.size == 1:
            results = [0.4, 0.05]
            actual = context.exposure_att['building_loss']
            self.assertTrue(
                allclose(actual, results),
                'actual:' + str(actual) + '\n results:' + str(results))
        else:
            if parallel.STATE.rank == 0:
                results = [0.4]
                actual = context.exposure_att['building_loss']
                self.assertTrue(
                    allclose(actual, results),
                    'actual:' + str(actual) + '\n results:' + str(results))
            elif parallel.STATE.rank == 1:
                results = [0.05]
                actual = context.exposure_att['building_loss']
                self.assertTrue(
                    allclose(actual, results),
                    'actual:' + str(actual) + '\n results:' + str(results))
        os.remove(file_vuln)
        os.remove(file_exp)
Ejemplo n.º 15
0
                                          x[:-2] + 'txt')) for x in ncfiles]
ncfiles = []


for ncfile in ncfiles:
    ncfile =  os.path.abspath(os.path.join(ncpath, ncfile))
    call(["python", "../../tcrm/Utilities/nc2txt.py", "-v", "vmax", 
          "--filename", ncfile])

# Run HazImp
exp_file = 'qldsmall.csv'
exp_file = 'smaller_quoted.csv'
exp_file = 'smaller_missing.csv'
exp_file = 'QLD_Residential_Wind_Exposure_201212_for_TCRM.CSV'

exp_filename = os.path.abspath(
    os.path.join('..', 'exposure_data', exp_file))

config = [
    {'template': 'wind_v3'},
    {'load_exposure': {'file_name': exp_filename,
                      'exposure_latitude': 'LATITUDE',
                      'exposure_longitude': 'LONGITUDE'}},
    {'load_wind_ascii': gridfiles},
    {'calc_struct_loss':
        {'replacement_value_label': 'REPLACEMENT_VALUE'}},
    {'save': 'impact_all.csv'}]
    
# It takes a while
hazimp.start(config_list=config)
Ejemplo n.º 16
0
    def test_const_test(self):
        # First test running an end to end wind test based
        # on a config list, no template

        # The output file
        f = tempfile.NamedTemporaryFile(
            suffix='.npz',
            prefix='HAZIMPt_wind_scenarios_test_const',
            delete=False)

        wind_dir = os.path.join(misc.EXAMPLE_DIR, 'wind')
        exp_filename = os.path.join(wind_dir, 'syn_small_exposure_tcrm.csv')
        wind_filename = os.path.join(wind_dir, 'gust01.txt')
        vul_filename = os.path.join(misc.RESOURCE_DIR,
                                    'synthetic_domestic_wind_vul_curves.xml')
        sim_at = {'domestic_wind_2012': 'WIND_VULNERABILITY_FUNCTION_ID'}
        slv_at = {'domestic_wind_2012': 'mean'}
        a_config = [{
            TEMPLATE: DEFAULT
        }, {
            LOADCSVEXPOSURE: {
                'file_name': exp_filename,
                'exposure_latitude': 'LATITUDE',
                'exposure_longitude': 'LONGITUDE'
            }
        }, {
            LOADRASTER: {
                'file_list': [wind_filename],
                'attribute_label': '0.2s gust at 10m height m/s'
            }
        }, {
            LOADXMLVULNERABILITY: {
                'file_name': vul_filename
            }
        }, {
            SIMPLELINKER: {
                'vul_functions_in_exposure': sim_at
            }
        }, {
            SELECTVULNFUNCTION: {
                'variability_method': slv_at
            }
        }, {
            LOOKUP: None
        }, {
            calcs.STRUCT_LOSS: None
        }, {
            SAVEALL: {
                'file_name': f.name
            }
        }]

        context = hazimp.start(config_list=a_config)
        self.assertTrue(
            allclose(context.exposure_att['structural_loss'],
                     context.exposure_att['calced-loss']))
        # Only the head node writes a file
        if parallel.STATE.rank == 0:
            exp_dict = numpy.load(f.name)

            self.assertTrue(
                allclose(exp_dict['structural_loss'], exp_dict['calced-loss']))

        os.remove(f.name)