physrisk.api.v1

Submodules

physrisk.api.v1.common

physrisk.api.v1.common.before_validator(list: list) ndarray[tuple[Any, ...], dtype[_ScalarT]]

Deserialize a list into a numpy array.

physrisk.api.v1.common.serialize_array(array: ndarray[tuple[Any, ...], dtype[_ScalarT]])

Serialize a numpy array into a list.

class physrisk.api.v1.common.Asset(*, asset_class: str | None = None, latitude: float | None = None, longitude: float | None = None, wkt: str | None = None, buffer: float = 0.0, type: str | None = None, location: str | None = None, occupancy_code: int = 1000, number_of_storeys: int | None = -1, basement: int = 0, construction_code: int = 5000, first_floor_height: float = 0.305, capacity: float | None = None, **extra_data: Any)

Bases: BaseModel

Defines an asset.

Assets can be specified in two ways 1) ‘asset_class’ set explicitly. This must correspond to a physrisk Asset subclass, e.g. PowerGeneratingAsset’, ManufacturingAsset, or the parent Asset. physrisk will create an instance of the asset and set its attributes from the other fields provided (which can therefore be specific to the class). 2) Inferred from ‘occupancy_code’.

https://github.com/OasisLMF/ODS_OpenExposureData/blob/main/OpenExposureData/OEDInputFields.csv

An asset’s value may be impacted through damage or through disruption disruption being reduction of an asset’s ability to generate cashflows (or equivalent value, e.g. by increased expense or reduced sales).

asset_class: str | None
latitude: float | None
longitude: float | None
wkt: str | None
buffer: float
type: str | None
location: str | None
occupancy_code: int
number_of_storeys: int | None
basement: int
construction_code: int
first_floor_height: float
capacity: float | None
classmethod validate_occupancy_code(v: int) int
model_config: ClassVar[ConfigDict] = {'extra': 'allow', 'json_schema_extra': {'examples': [{'asset_class': 'RealEstateAsset', 'latitude': 22.2972, 'location': 'Asia', 'longitude': 91.8062, 'type': 'Buildings/Commercial'}]}}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.Assets(*, items: List[Asset])

Bases: BaseModel

Defines a collection of assets.

items: List[Asset]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.BaseHazardRequest(*, group_ids: List[str] = ['public'])

Bases: BaseModel

group_ids: List[str]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.Country(*, country: str, continent: str, country_iso_a3: str)

Bases: BaseModel

Country information.

country: str
continent: str
country_iso_a3: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.Countries(*, items: List[Country])

Bases: BaseModel

List of Country.

items: List[Country]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.IntensityCurve(*, intensities: List[float] = [], return_periods: Sequence[float] | None = [], index_values: Sequence[float] | Sequence[str] | None = [], index_name: str = '')

Bases: BaseModel

Hazard indicator intensity curve. Acute hazards are parameterized by event intensities and return periods in years. Chronic hazards are parameterized by a set of index values. Index values are defined per indicator.

intensities: List[float]
return_periods: Sequence[float] | None
index_values: Sequence[float] | Sequence[str] | None
index_name: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.ExceedanceCurve(*, values: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>, exceed_probabilities: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>)

Bases: BaseModel

General exceedance curve (e.g. hazazrd, impact).

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

values: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
exceed_probabilities: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
class physrisk.api.v1.common.Distribution(*, bin_edges: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>, probabilities: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>)

Bases: BaseModel

General exceedance curve (e.g. hazazrd, impact).

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

bin_edges: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
probabilities: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
class physrisk.api.v1.common.HazardEventDistrib(*, intensity_bin_edges: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>, probabilities: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>, path: ~typing.List[str] = [])

Bases: BaseModel

Intensity curve of an acute hazard.

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

intensity_bin_edges: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
probabilities: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
path: List[str]
class physrisk.api.v1.common.VulnerabilityCurve(*, asset_type: str, location: str, event_type: str, impact_type: str, intensity: List[float], intensity_units: str, impact_mean: List[float], impact_std: List[float])

Bases: BaseModel

Defines a damage or disruption curve.

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

asset_type: str
location: str
event_type: str
impact_type: str
intensity: List[float]
intensity_units: str
impact_mean: List[float]
impact_std: List[float]
class physrisk.api.v1.common.VulnerabilityCurves(*, items: List[VulnerabilityCurve])

Bases: BaseModel

List of VulnerabilityCurve.

items: List[VulnerabilityCurve]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.common.VulnerabilityDistrib(*, intensity_bin_edges: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>, impact_bin_edges: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>, prob_matrix: ~typing.Annotated[~numpy.ndarray[tuple[~typing.Any, ...], ~numpy.dtype[~numpy._typing._array_like._ScalarT]], ~pydantic.functional_validators.BeforeValidator(func=~physrisk.api.v1.common.before_validator, json_schema_input_type=PydanticUndefined), ~pydantic.functional_serializers.PlainSerializer(func=~physrisk.api.v1.common.serialize_array, return_type=list, when_used=always)] = <factory>)

Bases: BaseModel

Defines a vulnerability matrix.

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

intensity_bin_edges: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
impact_bin_edges: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]
prob_matrix: Annotated[ndarray[tuple[Any, ...], dtype[_ScalarT]], BeforeValidator(func=before_validator, json_schema_input_type=PydanticUndefined), PlainSerializer(func=serialize_array, return_type=list, when_used=always)]

physrisk.api.v1.example_portfolios

class physrisk.api.v1.example_portfolios.ExamplePortfoliosRequest

Bases: BaseModel

Example portfolios request.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.example_portfolios.ExamplePortfoliosResponse(*, portfolios: dict[str, Assets])

Bases: BaseModel

Example portfolios response.

portfolios: dict[str, Assets]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

physrisk.api.v1.exposure_req_resp

class physrisk.api.v1.exposure_req_resp.AssetExposureRequest(*, assets: ~physrisk.api.v1.common.Assets, calc_settings: ~physrisk.api.v1.impact_req_resp.CalcSettings = <factory>, scenario: str = 'rcp8p5', year: int = 2050, provider_max_requests: ~typing.Dict[str, int] = {})

Bases: BaseModel

Impact calculation request.

assets: Assets
calc_settings: CalcSettings
scenario: str
year: int
provider_max_requests: Dict[str, int]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.exposure_req_resp.Exposure(*, category: str, value: float | None, path: str = 'unknown')

Bases: BaseModel

category: str
value: float | None
path: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.exposure_req_resp.AssetExposure(*, asset_id: str | None = None, exposures: Dict[str, Exposure] = {})

Bases: BaseModel

Impact at asset level. Each asset can have impacts for multiple hazard types.

asset_id: str | None
exposures: Dict[str, Exposure]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.exposure_req_resp.AssetExposureResponse(*, items: List[AssetExposure])

Bases: BaseModel

Response to impact request.

items: List[AssetExposure]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

physrisk.api.v1.hazard_data

class physrisk.api.v1.hazard_data.Colormap(*, min_index: int | None = 1, min_value: float, max_index: int | None = 255, max_value: float, name: str, nodata_index: int | None = 0, units: str)

Bases: BaseModel

Provides details of colormap.

min_index: int | None
min_value: float
max_index: int | None
max_value: float
name: str
nodata_index: int | None
units: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.MapInfo(*, colormap: Colormap | None, bounds: List[Tuple[float, float]] = [(-180.0, 85.0), (180.0, 85.0), (180.0, -85.0), (-180.0, -85.0)], bbox: List[float] | None = [-180.0, -85.0, 180.0, 85.0], index_values: Sequence[float | int | str] | None = None, path: str, source: str | None)

Bases: BaseModel

Provides information about map layer.

colormap: Colormap | None
bounds: List[Tuple[float, float]]
bbox: List[float] | None
index_values: Sequence[float | int | str] | None
path: str
source: str | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.Period(*, year: int, map_id: str)

Bases: BaseModel

Provides information about a period, which currently corresponds to a year, belonging to a scenario.

year: int
map_id: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.Scenario(*, id: str, years: List[int])

Bases: BaseModel

Scenario ID and the list of available years for that scenario e.g. RCP8.5 = ‘rcp8.5’

id: str
years: List[int]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

physrisk.api.v1.hazard_data.expanded(item: str, key: str, param: str)
class physrisk.api.v1.hazard_data.HazardResource(*, hazard_type: str, group_id: str | None = 'public', path: str, indicator_id: str, indicator_model_id: str | None = None, indicator_model_gcm: str, params: Dict[str, List[str]] = {}, display_name: str, display_groups: List[str] = [], description: str, map: MapInfo | None = None, scenarios: List[Scenario], store_netcdf_coords: bool = False, units: str)

Bases: BaseModel

Provides information about a set of hazard indicators, including available scenarios and years.

hazard_type: str
group_id: str | None
path: str
indicator_id: str
indicator_model_id: str | None
indicator_model_gcm: str
params: Dict[str, List[str]]
display_name: str
display_groups: List[str]
description: str
map: MapInfo | None
scenarios: List[Scenario]
store_netcdf_coords: bool
units: str
expand()
key()

Unique key for the resource. array_path should be unique, although indicator_id is typically not. Vulnerability models request a hazard indicator by indicator_id from the Hazard Model. The Hazard Model selects based on its own logic (e.g. selects a particular General Circulation Model).

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

physrisk.api.v1.hazard_data.expand(item: str, key: str, param: str)
physrisk.api.v1.hazard_data.expand_resource(resource: HazardResource, keys: List[str], params: Dict[str, List[str]]) Iterable[HazardResource]
class physrisk.api.v1.hazard_data.InventorySource(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)

Bases: Flag

Source of inventory. Where multiple are selected, order is as shown: results from HAZARD_TEST override those of HAZARD and EMBEDDED (to facilitate testing).

EMBEDDED = 1
HAZARD = 2
HAZARD_TEST = 4
class physrisk.api.v1.hazard_data.HazardAvailabilityRequest(*, types: List[str] | None = [], sources: List[str] | None = None)

Bases: BaseModel

types: List[str] | None
sources: List[str] | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardAvailabilityResponse(*, models: List[HazardResource], colormaps: dict)

Bases: BaseModel

models: List[HazardResource]
colormaps: dict
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardDescriptionRequest(*, paths: List[str])

Bases: BaseModel

paths: List[str]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardDescriptionResponse(*, descriptions: Dict[str, str])

Bases: BaseModel

descriptions: Dict[str, str]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.StaticInformationResponse(*, scenario_descriptions: Dict[str, str], oed_occupancy_codes: Dict[int, str])

Bases: BaseModel

scenario_descriptions: Dict[str, str]
oed_occupancy_codes: Dict[int, str]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardDataRequestItem(*, longitudes: List[float], latitudes: List[float], request_item_id: str, hazard_type: str | None = None, indicator_id: str, indicator_model_gcm: str | None = '', path: str | None = None, scenario: str, year: int)

Bases: BaseModel

longitudes: List[float]
latitudes: List[float]
request_item_id: str
hazard_type: str | None
indicator_id: str
indicator_model_gcm: str | None
path: str | None
scenario: str
year: int
classmethod validate_hazard_type(hazard_type: str | None) str | None
property event_type: str | None

use hazard_type instead.

Type:

Deprecated

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardDataRequest(*, group_ids: List[str] = ['public'], interpolation: str = 'floor', interpolate_years: bool = True, provider_max_requests: Dict[str, int] = {}, items: List[HazardDataRequestItem])

Bases: BaseHazardRequest

Request hazard indicator data for a set of locations, specified by latitude and longitude (in coordinate reference system EPSG:4326). A hazard indicator is defined by the type of the hazard (‘hazard_type’) and the indicator (‘indicator_id’). A hazard indicator is a measure that is used to quantify the hazard. For example, for hazard type ‘RiverineInundation’, flood depth (unprotected) is given by the indicator ‘flood_depth’. In addition, ‘scenario’ and ‘year’ are required. For ‘historical’ scenario, year is ignored and can be set to e.g. ‘-1’. Scenarios can be RCPs and SSPs; convention is e.g. ‘rcp8p5’ (RCP 8.5) and ‘ssp585’.

If only ‘hazard_type’ and ‘indicator_id’ are provided, then the default physrisk logic will be used to identify the data sets. If a specific data set is required, ‘path’ can be supplied. The path is the unique identifier of a ‘hazard resource’. A hazard resource is a collection of data arrays for different scenarios and years, typically made available by the same model provider.

Current behaviour is that empty arrays are returned if there is no match for the scenario and year in the selected / specified resource (an alternative would be to allow interpolation of years and proxying/interpolation of scenarios).

interpolation: str
interpolate_years: bool
provider_max_requests: Dict[str, int]
items: List[HazardDataRequestItem]
model_config: ClassVar[ConfigDict] = {'json_schema_extra': {'examples': [{'items': [{'hazard_type': 'RiverineInundation', 'indicator_id': 'flood_depth', 'latitudes': [45.4089, 43.4923], 'longitudes': [20.3162, 4.7877], 'path': 'inundation/river_tudelft/v2/flood_depth_unprot_{scenario}_{year}', 'request_item_id': 'my_id', 'scenario': 'rcp8p5', 'year': 2035}]}, {'items': [{'hazard_type': 'RiverineInundation', 'indicator_id': 'flood_depth', 'latitudes': [45.4089, 43.4923], 'longitudes': [20.3162, 4.7877], 'path': 'inundation/river_tudelft/v2/flood_depth_unprot_{scenario}_{year}', 'request_item_id': 'my_id', 'scenario': 'historical', 'year': -1}]}]}}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardDataResponseItem(*, intensity_curve_set: List[IntensityCurve], request_item_id: str, hazard_type: str | None, indicator_id: str, scenario: str, year: int)

Bases: BaseModel

intensity_curve_set: List[IntensityCurve]
request_item_id: str
hazard_type: str | None
indicator_id: str
scenario: str
year: int
property event_type: str | None

use hazard_type instead.

Type:

Deprecated

property model: str

use indicator_id instead.

Type:

Deprecated

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_data.HazardDataResponse(*, items: List[HazardDataResponseItem])

Bases: BaseModel

items: List[HazardDataResponseItem]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

physrisk.api.v1.hazard_image

exception physrisk.api.v1.hazard_image.TileNotAvailableError

Bases: KeyError

Raised if the requested tile is not available, most commonly because the zoom level requested is not present.

class physrisk.api.v1.hazard_image.Tile(x, y, z)

Bases: NamedTuple

x: int

Alias for field number 0

y: int

Alias for field number 1

z: int

Alias for field number 2

class physrisk.api.v1.hazard_image.HazardImageInfoRequest(*, group_ids: List[str] = ['public'], resource: str, scenario_id: str, year: int)

Bases: BaseHazardRequest

resource: str
scenario_id: str
year: int
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_image.HazardImageInfoResponse(*, group_ids: List[str] = ['public'], all_index_values: List[Any] = [], available_index_values: List[Any] = [], index_display_name: str = 'index', index_units: str = '', max_zoom: int | None = None)

Bases: BaseHazardRequest

all_index_values: List[Any]
available_index_values: List[Any]
index_display_name: str
index_units: str
max_zoom: int | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_image.HazardImageRequest(*, group_ids: List[str] = ['public'], resource: str, scenario_id: str, year: int, colormap: str | None = 'heating', format: str | None = 'PNG', min_value: float | None, max_value: float | None, tile: Tile | None, index_value: Any | None = None)

Bases: BaseHazardRequest

resource: str
scenario_id: str
year: int
colormap: str | None
format: str | None
min_value: float | None
max_value: float | None
tile: Tile | None
index_value: Any | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.hazard_image.HazardImageResponse(*, image: bytes)

Bases: BaseModel

image: bytes
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

physrisk.api.v1.impact_req_resp

class physrisk.api.v1.impact_req_resp.CalcSettings(*, hazard_interp: str | None = None, hazard_scope: str | None = None, interpolate_years: bool = True, hazard_scope_by_indicator: Dict[str, List[str] | None] | None = None)

Bases: BaseModel

hazard_interp: str | None
hazard_scope: str | None
interpolate_years: bool
hazard_scope_by_indicator: Dict[str, List[str] | None] | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.AssetImpactRequest(*, assets: ~physrisk.api.v1.common.Assets, calc_settings: ~physrisk.api.v1.impact_req_resp.CalcSettings = <factory>, include_asset_level: bool = True, include_measures: bool = False, include_calc_details: bool = True, use_case_id: str = '', provider_max_requests: ~typing.Dict[str, int] = {}, scenarios: ~typing.Sequence[str] | None = [], years: ~typing.Sequence[int] | None = [], scenario: str = 'rcp8p5', year: int = 2050)

Bases: BaseModel

Impact calculation request.

assets: Assets
calc_settings: CalcSettings
include_asset_level: bool
include_measures: bool
include_calc_details: bool
use_case_id: str
provider_max_requests: Dict[str, int]
scenarios: Sequence[str] | None
years: Sequence[int] | None
scenario: str
year: int
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskMeasureDefinition(*, measure_id: str = '', label: str = '<short description of the measure, e.g. fractional loss for 1-in-100 year event>', description: str, units: str = '')

Bases: BaseModel

measure_id: str
label: str
description: str
units: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskScoreValue(*, value: int = -1, label: str = '', description: str = '', lower_bound: List[Any] | None = None, upper_bound: List[Any] | None = None)

Bases: BaseModel

value: int
label: str
description: str
lower_bound: List[Any] | None
upper_bound: List[Any] | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.ScoreBasedRiskMeasureDefinition(*, hazard_types: List[str] = [], values: List[RiskScoreValue] = [], underlying_measures: List[RiskMeasureDefinition] = [])

Bases: BaseModel

hazard_types: List[str]
values: List[RiskScoreValue]
underlying_measures: List[RiskMeasureDefinition]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskMeasureKey(*, hazard_type: str, scenario_id: str, year: str, measure_id: str, hazard_indicator_id: str | None = None)

Bases: BaseModel

Hazard type (e.g. ‘RiverineInundation’), scenario ID (e.g. ‘ssp585’), year (e.g. ‘2050’) and measure ID (e.g. ‘measure_set_1’) that together identify a risk measure. For drill-down by hazard indicator ID, hazard_indicator_id can optionally be provided.

hazard_type: str
scenario_id: str
year: str
measure_id: str
hazard_indicator_id: str | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskMeasure(*, key: RiskMeasureKey, score: int = [0], measure_0: float, measure_1: float | None = None)

Bases: BaseModel

A single risk measure, most commonly for a portfolio.

key: RiskMeasureKey
score: int
measure_0: float
measure_1: float | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskMeasuresForAssets(*, key: RiskMeasureKey, scores: List[int] = [0], measures_0: List[float], measures_1: List[float] | None = [])

Bases: BaseModel

Risk measures for multiple assets. Results returned in this form, i.e. using an array for asset scores, for compactness (keep response size down). List-based version of RiskMeasure.

key: RiskMeasureKey
scores: List[int]
measures_0: List[float]
measures_1: List[float] | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.ScoreBasedRiskMeasureSetDefinition(*, measure_set_id: str, asset_measure_ids_for_hazard: ~typing.Dict[str, ~typing.List[str]], score_definitions: ~typing.Dict[str, ~physrisk.api.v1.impact_req_resp.ScoreBasedRiskMeasureDefinition], asset_measure_ids_for_hazard_drilldown: dict[str, dict[str, list[str]]] = <factory>)

Bases: BaseModel

measure_set_id: str
asset_measure_ids_for_hazard: Dict[str, List[str]]
score_definitions: Dict[str, ScoreBasedRiskMeasureDefinition]
asset_measure_ids_for_hazard_drilldown: dict[str, dict[str, list[str]]]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskMeasures(*, measures_for_assets: List[RiskMeasuresForAssets], measures_for_portfolio: List[RiskMeasure], score_based_measure_set_defn: ScoreBasedRiskMeasureSetDefinition, measures_definitions: List[RiskMeasureDefinition] | None = [], scenarios: List[Scenario], asset_ids: List[str])

Bases: BaseModel

Risk measures

measures_for_assets: List[RiskMeasuresForAssets]
measures_for_portfolio: List[RiskMeasure]
score_based_measure_set_defn: ScoreBasedRiskMeasureSetDefinition
measures_definitions: List[RiskMeasureDefinition] | None
scenarios: List[Scenario]
asset_ids: List[str]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.CalculationDetails(*, hazard_exceedance: ExceedanceCurve | None = None, hazard_distribution: Distribution | None = None, vulnerability_distribution: VulnerabilityDistrib | None = None, hazard_path: List[str] = ['unknown'], hazard_units: str = ['unknown'])

Bases: BaseModel

Details of a calculation. hazard_exceedance, hazard_distribution and vulnerability_distribution are only set in the case of an acute hazard calculation.

hazard_exceedance: ExceedanceCurve | None
hazard_distribution: Distribution | None
vulnerability_distribution: VulnerabilityDistrib | None
hazard_path: List[str]
hazard_units: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.ImpactKey(*, hazard_type: str = '', scenario_id: str = '', year: str = '')

Bases: BaseModel

hazard_type: str
scenario_id: str
year: str
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.AssetSingleImpact(*, key: ImpactKey, impact_type: str = 'damage', hazard_indicator_id: str = '', impact_distribution: Distribution | None = None, impact_exceedance: ExceedanceCurve | None = None, impact_mean: float | None, impact_std_deviation: float | None = None, impact_semi_std_deviation: float | None = None, calc_details: CalculationDetails | None = None)

Bases: BaseModel

Impact at level of single asset and single type of hazard.

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'ser_json_inf_nan': 'strings'}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

key: ImpactKey
impact_type: str
hazard_indicator_id: str
impact_distribution: Distribution | None
impact_exceedance: ExceedanceCurve | None
impact_mean: float | None
impact_std_deviation: float | None
impact_semi_std_deviation: float | None
calc_details: CalculationDetails | None
class physrisk.api.v1.impact_req_resp.AssetLevelImpact(*, asset_id: str | None = None, impacts: List[AssetSingleImpact] = [])

Bases: BaseModel

Impact at asset level. Each asset can have impacts for multiple hazard types.

asset_id: str | None
impacts: List[AssetSingleImpact]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.AssetImpactResponse(*, asset_impacts: List[AssetLevelImpact] | None = None, risk_measures: RiskMeasures | None = None)

Bases: BaseModel

Response to impact request.

asset_impacts: List[AssetLevelImpact] | None
risk_measures: RiskMeasures | None
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class physrisk.api.v1.impact_req_resp.RiskMeasuresHelper(risk_measures: RiskMeasures)

Bases: object

get_measure(hazard_type: str, scenario: str, year: int, hazard_indicator_id: str | None = None)
get_score_details(score: int, definition: ScoreBasedRiskMeasureDefinition)
class Key(hazard_type, scenario_id, year, measure_id, hazard_indicator_id)

Bases: NamedTuple

hazard_type: str

Alias for field number 0

scenario_id: str

Alias for field number 1

year: str

Alias for field number 2

measure_id: str

Alias for field number 3

hazard_indicator_id: str | None

Alias for field number 4

Module contents