Core Calculations API

The core_calculations module provides functions for calculating baseline biodiversity units.

Functions

bngmetric.core_calculations.get_distinctiveness_value(habitat_id: int) float[source]

Retrieves distinctiveness value for a given habitat ID.

bngmetric.core_calculations.get_condition_multiplier(habitat_id: int, condition_id: int) float[source]

Retrieves condition multiplier for a given habitat ID (row) and condition ID (column) from the pre-loaded matrix.

bngmetric.core_calculations.calculate_baseline_bng_unit(habitat_id: int, condition_id: int, area: float, strategic_multiplier: float) float[source]

Calculates the baseline biodiversity units for a single habitat parcel. Uses habitat-specific condition multipliers.

bngmetric.core_calculations.calculate_batched_baseline_bng_units(habitat_ids: Array, condition_ids: Array, areas: Array, strategic_multipliers: Array) Array[source]

Vectorized version of calculate_batched_baseline_bng_units. Takes similar arguments as calculate_batched_baseline_bng_units but with additional array axes over which calculate_batched_baseline_bng_units is mapped.

Original documentation:

Calculates baseline biodiversity units for multiple habitat parcels in a batch. Inputs should be JAX arrays of the same length.

bngmetric.core_calculations.calculate_bng_from_dataframe(df: DataFrame) float[source]

Calculates total baseline biodiversity units from a pandas DataFrame. Automatically maps string inputs to JAX-compatible numerical IDs.

bngmetric.core_calculations.calculate_total_bng_from_jax_arrays(habitat_ids: Array, condition_ids: Array, areas: Array, strategic_multipliers: Array) float[source]

Calculates the sum of baseline biodiversity units from JAX arrays. This is the function we’ll differentiate.

Usage Examples

Single Parcel Calculation

from bngmetric.core_calculations import calculate_baseline_bng_unit

units = calculate_baseline_bng_unit(
    habitat_id=5,
    condition_id=2,
    area=1.5,
    strategic_multiplier=1.15
)

Batched Calculation

import jax.numpy as jnp
from bngmetric.core_calculations import calculate_batched_baseline_bng_units

units = calculate_batched_baseline_bng_units(
    habitat_ids=jnp.array([0, 1, 2]),
    condition_ids=jnp.array([2, 0, 4]),
    areas=jnp.array([1.0, 2.0, 0.5]),
    strategic_multipliers=jnp.array([1.0, 1.15, 1.1])
)

DataFrame Interface

import pandas as pd
from bngmetric.core_calculations import calculate_bng_from_dataframe

df = pd.DataFrame({
    'Habitat': ['Grassland - Lowland meadows'],
    'Condition': ['Good'],
    'Area': [2.0],
    'Strategic_Significance': [1.15]
})

total = calculate_bng_from_dataframe(df)