예제 #1
0
    def fromFiles(cls, inventory_file, collapse_file, casualty_file, workforce_file):
        """Create SemiEmpiricalFatality object from a number of input files.

        :param inventory_file:
          HDF5 file containing Semi-Empirical building inventory data in an HDFContainer. (described in __init__).
        :param collapse_file:
          HDF5 file containing Semi-Empirical collapse rate data  in an HDFContainer. (described in __init__).
        :param casualty_file:
          HDF5 file containing Semi-Empirical casualty rate data in an HDFContainer.(described in __init__).
        :param workforce_file:
          HDF5 file containing Semi-Empirical workforce data in an HDFContainer. (described in __init__).
        :param growth_file:
          Excel spreadsheet containing population growth rate data (described in PopulationGrowth.fromUNSpreadsheet()).
        :returns:
          SemiEmpiricalFatality object.
        """
        # turn the inventory,collapse, and casualty spreadsheets into Panels...
        inventory = HDFContainer.load(inventory_file)
        collapse = HDFContainer.load(collapse_file)
        casualty = HDFContainer.load(casualty_file)
        workforce = HDFContainer.load(workforce_file)
        # extract the one dataframe from the Panel
        workforce = workforce.getDataFrame('Workforce')
        workforce = workforce.set_index('CountryCode')

        # read the growth spreadsheet into a PopulationGrowth object...
        popgrowth = PopulationGrowth.fromDefault()

        return cls(inventory, collapse, casualty, workforce, popgrowth)
예제 #2
0
def test_hdf_dictonaries():
    f, testfile = tempfile.mkstemp()
    os.close(f)
    try:
        container = HDFContainer.create(testfile)

        # before we put anything in here, let's make sure we get empty lists from
        # all of the methods that are supposed to return lists of stuff.
        assert container.getDictionaries() == []
        assert container.getLists() == []
        assert container.getArrays() == []
        assert container.getStrings() == []
        assert container.getDataFrames() == []

        # test simple dictionary
        print('Test simple dictionary...')
        indict1 = {'name': 'Fred', 'age': 34,
                   'dob': datetime(1950, 1, 1, 23, 43, 12).strftime(TIMEFMT)}
        container.setDictionary('person', indict1)
        outdict = container.getDictionary('person')
        assert outdict == indict1

        # this should fail because we can't serialize datetimes to json.
        try:
            indict1 = {'name': 'Fred', 'age': 34,
                       'dob': datetime(1950, 1, 1, 23, 43, 12)}
            container.setDictionary('person', indict1)
        except TypeError as te:
            print(f'Expected failure: {str(te)}')
            assert 1 == 1

        # test more complicated dictionary
        print('Test complex dictionary...')
        indict2 = {'names': ['Fred', 'Akyüz'], 'ages': [34, 33]}
        container.setDictionary('people', indict2)
        outdict = container.getDictionary('people')
        assert outdict == indict2

        # test getDictionaryNames()
        print('Test dictionary names...')
        names = container.getDictionaries()
        assert sorted(names) == sorted(['person', 'people'])

        # test dropping a dictionary
        container.dropDictionary('person')
        assert container.getDictionaries() == ['people']

        # try closing container and reopening
        container.close()
        container2 = HDFContainer.load(testfile)
        assert container2.getDictionaries() == ['people']

    except Exception:
        assert 1 == 2
    finally:
        os.remove(testfile)
예제 #3
0
def test_hdf_dataframes():
    f, testfile = tempfile.mkstemp()
    os.close(f)
    try:
        container = HDFContainer.create(testfile)

        # test pandas dataframe
        print('Test dataframe...')
        ttime1 = datetime(1900, 1, 1)
        ttime2 = datetime(2000, 1, 1)
        utc = pytz.timezone('UTC')
        utc_time1 = utc.localize(ttime1)
        utc_time2 = utc.localize(ttime2)
        d = {
            'Time': [utc_time1, utc_time2],
            'ID': ['thing1', 'thing2'],
            'Number': np.array([12.34, 25.67])
        }
        df = pd.DataFrame(d)
        container.setDataFrame('testframe1', df)
        outdf = container.getDataFrame('testframe1')
        assert outdf['Number'].sum() == df['Number'].sum()
        assert pd.to_datetime(outdf['Time'][0]) == df['Time'][0]

        # test another dataframe
        df2 = pd.DataFrame(data=[4, 5, 6, 7], index=range(0, 4), columns=['A'])
        container.setDataFrame('testframe2', df2)
        outdf = container.getDataFrame('testframe2')
        outdf['A'].sum() == df2['A'].sum()

        # test getdataframes
        assert sorted(
            container.getDataFrames()) == ['testframe1', 'testframe2']

        # drop a dataframe
        container.dropDataFrame('testframe1')
        assert container.getDataFrames() == ['testframe2']

        # close container, re-open
        container.close()
        container2 = HDFContainer.load(testfile)
        assert container2.getDataFrames() == ['testframe2']

    except Exception:
        assert 1 == 2
    finally:
        os.remove(testfile)
예제 #4
0
def test_hdf_strings():
    f, testfile = tempfile.mkstemp()
    os.close(f)
    try:
        container = HDFContainer.create(testfile)

        # test simple string
        print('Test simple string...')
        string1 = "These are the times that try men's souls."
        container.setString('test_string1', string1)
        outstring = container.getString('test_string1')
        assert outstring == string1

        # test unicode string
        print('Test unicode string...')
        string2 = "#SOURCE: Barka, A., H. S. Akyüz, E. Altunel, G. Sunal, Z. Çakir,"
        container.setString('test_string2', string2)
        outstring = container.getString('test_string2')
        assert outstring == string2

        # test getstrings
        print('Test string names...')
        names = container.getStrings()
        assert names == ['test_string1', 'test_string2']

        # drop string
        container.dropString('test_string1')
        assert container.getStrings() == ['test_string2']

        # test a really big string
        sets = string.ascii_uppercase + string.digits + string.ascii_lowercase
        num_chars = 1000000
        print('Making a really big string...')
        big_string = ''.join(random.choice(sets) for _ in range(num_chars))
        container.setString('big', big_string)
        big_string2 = container.getString('big')
        assert big_string == big_string2

        # close container, re-open
        container.close()
        container2 = HDFContainer.load(testfile)
        assert container2.getStrings() == ['big', 'test_string2']

    except Exception:
        assert 1 == 2
    finally:
        os.remove(testfile)
예제 #5
0
def test_hdf_arrays():
    f, testfile = tempfile.mkstemp()
    os.close(f)
    try:
        container = HDFContainer.create(testfile)

        # test simple array, without compression
        print('Test simple array...')
        data = np.random.rand(4, 3)
        metadata = {'xmin': 54.1, 'xmax': 123.1}
        container.setArray('testdata1', data, metadata, compression=False)
        outdata, outmetadata = container.getArray('testdata1')
        np.testing.assert_array_equal(outdata, data)
        assert outmetadata == metadata

        # test array with nans, and compression on
        print('Test nans array...')
        data = np.random.rand(4, 3)
        data[1, 1] = np.nan
        metadata = {'xmin': 54.1, 'xmax': 123.1}
        container.setArray('testdata2', data, metadata, compression=True)
        outdata, outmetadata = container.getArray('testdata2')
        np.testing.assert_array_equal(outdata, data)
        assert outmetadata == metadata

        # test getArrayNames
        print('Test array names...')
        names = container.getArrays()
        assert sorted(names) == sorted(['testdata1', 'testdata2'])

        # drop an array
        container.dropArray('testdata1')
        names = container.getArrays()
        assert names == ['testdata2']

        # close container, re-open
        container.close()
        container2 = HDFContainer.load(testfile)
        assert container2.getArrays() == ['testdata2']

    except Exception:
        assert 1 == 2
    finally:
        os.remove(testfile)
예제 #6
0
def test_hdf_lists():
    f, testfile = tempfile.mkstemp()
    os.close(f)
    try:
        container = HDFContainer.create(testfile)

        # test setting a list of strings
        inlist = ['one', 'two', 'three']
        container.setList('test_list1', inlist)
        assert container.getList('test_list1') == inlist

        # test setting a list of numbers
        inlist = [5.4, 1.2, 3.4]
        container.setList('test_list2', inlist)
        assert container.getList('test_list2') == inlist

        # test getlists
        assert sorted(container.getLists()) == [
            'test_list1', 'test_list2']

        # test setting a list with dictionaries in it
        inlist = [{'a': 1}, {'b': 2}]
        container.setList('test_list3', inlist)

        # drop a list
        container.dropList('test_list1')
        assert sorted(container.getLists()) == ['test_list2', 'test_list3']

        # close container, re-open
        container.close()
        container2 = HDFContainer.load(testfile)
        assert sorted(container2.getLists()) == ['test_list2', 'test_list3']

    except Exception:
        assert 1 == 2
    finally:
        os.remove(testfile)