Skip to main content

Factory Functions

Convenience functions for creating SPA instances from different data sources.

from_leontief()

Create SPA from a pre-computed Leontief inverse.

from_leontief(
L: ArrayLike,
direct_intensities: Union[ArrayLike, Dict[str, ArrayLike]],
sectors: Optional[Sequence[str]] = None,
mode: Literal["sector_specific", "system_wide"] = "system_wide",
) -> SPA

Parameters

ParameterTypeDefaultDescription
LArrayLike-Leontief inverse matrix (I - A)^(-1)
direct_intensitiesArrayLike or Dict-Direct intensity vector(s)
sectorsSequence[str]NoneOptional sector names
modestr"system_wide"Analysis mode

Example

from fastspa import from_leontief

# If you already have L computed
spa = from_leontief(L_matrix, intensities, sectors)

from_dataframe()

Create SPA from pandas DataFrames.

from_dataframe(
A_df: pd.DataFrame,
intensities_df: pd.DataFrame,
intensity_columns: Optional[List[str]] = None,
) -> SPA

Parameters

ParameterTypeDescription
A_dfDataFrameA-matrix with sector names as index and columns
intensities_dfDataFrameIntensities with sector index
intensity_columnsList[str]Which columns to use (None = all numeric)

Example

from fastspa import from_dataframe
import pandas as pd

A_df = pd.read_csv("A.csv", index_col=0)
intensities_df = pd.read_csv("intensities.csv", index_col=0)

spa = from_dataframe(A_df, intensities_df, intensity_columns=["CO2", "Water"])

from_csv()

Create SPA from CSV files.

from_csv(
A_path: str,
intensities_path: str,
intensity_columns: Optional[List[str]] = None,
sectors_path: Optional[str] = None,
mode: Literal["sector_specific", "system_wide"] = "sector_specific",
) -> SPA

Parameters

ParameterTypeDefaultDescription
A_pathstr-Path to A-matrix CSV
intensities_pathstr-Path to intensities CSV
intensity_columnsList[str]NoneColumns to use (None = all numeric)
sectors_pathstrNonePath to sector names file
modestr"sector_specific"Analysis mode

Example

from fastspa import from_csv

spa = from_csv(
"A_matrix.csv",
"intensities.csv",
intensity_columns=["ghg", "water"],
)

from_io_table()

Create SPA from an IO table in XLSX format (experimental).

from_io_table(
xlsx_path: str,
sheet_name: str = "Table 5",
intensities: Optional[ArrayLike] = None,
) -> SPA

Parameters

ParameterTypeDefaultDescription
xlsx_pathstr-Path to XLSX file
sheet_namestr"Table 5"Sheet containing IO table
intensitiesArrayLikeNoneDirect intensities (random if not provided)

Notes

This function automatically:

  • Extracts the largest continuous numeric matrix as transactions
  • Identifies sector names from adjacent rows/columns
  • Computes technical coefficients

Example

from fastspa import from_io_table

spa = from_io_table(
"national_io_table.xlsx",
sheet_name="Transactions",
intensities=my_emissions_vector
)