bw2io.extractors.simapro_csv#

Attributes#

Exceptions#

EndOfDatasets

Raise exception when there are no more datasets to iterate.

Classes#

SimaProCSVExtractor

Extract datasets from SimaPro CSV export files.

Functions#

replace_with_uppercase(string, names, precompiled)

Replace all occurrences of elements of names in string with their uppercase equivalents.

to_number(obj)

Convert a string to a number.

Module Contents#

exception bw2io.extractors.simapro_csv.EndOfDatasets[source]#

Bases: Exception

Raise exception when there are no more datasets to iterate.

Initialize self. See help(type(self)) for accurate signature.

class bw2io.extractors.simapro_csv.SimaProCSVExtractor[source]#

Bases: object

Extract datasets from SimaPro CSV export files.

The CSV file should be in a specific format, with row 1 containing either the string “SimaPro” or “CSV separator.”

Parameters:
  • filepath (str) – The path to the SimaPro CSV export file.

  • delimiter (str, optional) – The delimiter in the CSV file. Default is “;”.

  • name (str, optional) – The name of the project. If the name is not provided, it is extracted from the CSV file.

  • encoding (str, optional) – The character encoding in the SimaPro CSV file. Defaults to “cp1252”.

Returns:

  • datasets (list) – The list of extracted datasets from the CSV file.

  • global_parameters (dict) – The dictionary of global parameters for the CSV file.

  • project_metadata (dict) – The dictionary of project metadata.

Raises:

AssertionError: – If the CSV file is not a valid Simapro export file.

classmethod create_distribution(amount, kind, field1, field2, field3)[source]#

Create a distribution based on the given uncertainty data.

Parameters:
  • amount (str) – The amount of uncertainty.

  • kind (str) – The kind of uncertainty.

  • field1 (str) – The first field of uncertainty data.

  • field2 (str) – The second field of uncertainty data.

  • field3 (str) – The third field of uncertainty data.

Returns:

A dictionary representing the distribution.

Return type:

dict

Raises:

ValueError – If the given uncertainty type is unknown.

Notes

This method creates a distribution based on the given uncertainty data. The distribution is returned as a dictionary with the following keys: - “uncertainty type”: the ID of the uncertainty type - “loc”: the location parameter of the distribution - “amount”: the amount of uncertainty Depending on the kind of uncertainty, other keys may be included: - “scale”: the scale parameter of the distribution (for “Lognormal” and “Normal” uncertainties) - “minimum”: the minimum value of the distribution (for “Triangle” and “Uniform” uncertainties) - “maximum”: the maximum value of the distribution (for “Triangle” and “Uniform” uncertainties) - “negative”: True if the amount of uncertainty is negative, False otherwise. If the kind of uncertainty is “Undefined”, an undefined uncertainty distribution is created. If the kind of uncertainty is “Lognormal”, a lognormal uncertainty distribution is created. If the kind of uncertainty is “Normal”, a normal uncertainty distribution is created. If the kind of uncertainty is “Triangle”, a triangular uncertainty distribution is created. If the kind of uncertainty is “Uniform”, a uniform uncertainty distribution is created. If the kind of uncertainty is unknown, a ValueError is raised.

classmethod extract(filepath, delimiter=';', name=None, encoding='cp1252', **kwargs)[source]#

Extract data from a SimaPro export file (.csv) and returns a list of datasets, global parameters, and project metadata.

Parameters:#

filepathstr

The file path of the SimaPro export file to extract data from.

delimiterstr, optional

The delimiter used in the SimaPro export file. Defaults to “;”.

namestr, optional

The name of the project. If not provided, the method will attempt to infer it from the SimaPro export file.

encodingstr, optional

The character encoding of the SimaPro export file. Defaults to “cp1252”.

Returns:#

Tuple[List[Dict], Dict, Dict]
A tuple containing:
  • a list of dictionaries representing each dataset extracted from the SimaPro export file,

  • a dictionary containing global parameters extracted from the SimaPro export file, and

  • a dictionary containing project metadata extracted from the SimaPro export file.

classmethod get_global_parameters(data, pm)[source]#

Extract and return global parameters from a SimaPro export file.

Parameters:
  • data (List[List[str]]) – A list of lists containing the data read from the SimaPro export file.

  • pm (Dict[str, str]) – A dictionary containing project metadata extracted from the SimaPro export file.

Returns:

  • parameters (Dict[str, Dict[str, Any]]): A dictionary containing global parameters extracted from the SimaPro export file. Each parameter is represented as a dictionary with keys ‘name’, ‘unit’, ‘formula’, and ‘amount’.

  • global_precompiled (Dict[str, Pattern]): A dictionary containing compiled regular expression patterns used to search for parameter names in the SimaPro export file.

Return type:

A tuple containing

Raises:

ValueError – If an invalid parameter is encountered in the SimaPro export file.

classmethod get_next_process_index(data, index)[source]#

Get the index of the next process in the given data.

Parameters:#

dataList[List[str]]

The data to search for the next process.

indexint

The index to start the search from.

Returns:#

int

The index of the next process in the data.

classmethod get_project_metadata(data)[source]#

Parse metadata from a list of strings and returns a dictionary of metadata key-value pairs.

Parameters:

data (list) – A list of strings containing metadata in the format “{key}: {value}”.

Returns:

A dictionary of metadata key-value pairs extracted from the input data list.

Return type:

dict

Raises:
  • ValueError – If a line of metadata does not contain a colon : character, or if it contains multiple colons.

  • AssertionError – If a line of metadata does not start and end with curly braces {}.

Notes

This method assumes that each line in the input data list contains only one metadata key-value pair, and that the key and value are separated by a single colon : character.

Examples

>>> data = ["{name}: John Smith", "{age}: 25", "", "{country: UK}"]
>>> meta = get_project_metadata(data)
>>> print(meta)
{"name": "John Smith", "age": "25", "country": "UK"}
classmethod get_project_name(data)[source]#

Extract the project name from the given data.

Parameters:

data (list) – A list of data, where each item is a list of strings representing a row of the data.

Returns:

The project name.

Return type:

str

Notes

This method searches for a row in the data where the first item starts with “{Project:” or “{Projet:”. If such a row is found, the project name is extracted from that row and returned. Otherwise, None is returned.

classmethod invalid_uncertainty_data(amount, kind, field1, field2, field3)[source]#

Determine if the uncertainty data is invalid.

Parameters:
  • amount (str) – The amount of uncertainty.

  • kind (str) – The kind of uncertainty.

  • field1 (str) – The first field of uncertainty data.

  • field2 (str) – The second field of uncertainty data.

  • field3 (str) – The third field of uncertainty data.

Returns:

True if the uncertainty data is invalid, False otherwise.

Return type:

bool

Notes

This method checks if the given uncertainty data is invalid based on the kind of uncertainty. If the kind is “Lognormal” and amount is empty or field1 is “0” or “1”, the uncertainty data is considered invalid.

classmethod parse_biosphere_flow(line, category, pm)[source]#

Parse biosphere flow line.

  1. name

  2. subcategory

  3. unit

  4. value or formula

  5. uncertainty type

  6. uncert. param.

  7. uncert. param.

  8. uncert. param.

  9. comment

However, sometimes the value is in index 2, and the unit in index 3. Because why not! We assume default ordering unless we find a number in index 2.

classmethod parse_calculated_parameter(line, pm)[source]#

Parse a line in the ‘Calculated parameters’ section of a SimaPro file and return a dictionary of its components.

Parameters:
  • line (List[str]) – The line to be parsed, with the first string being the name, the second string the formula, and subsequent strings comments associated with the parameter.

  • pm (Dict[str, float]) – A dictionary mapping variable names to their values in the context of the parameter.

Returns:

  • parsed_parameter (Dict[str, Union[str, List[str]]])

  • A dictionary with the following keys

  • - ‘name’ (str) – The name of the parameter.

  • - ‘formula’ (str) – The formula used in the parameter, with variables replaced by their values according to pm.

  • - ‘comment’ (List[str]) – A list of comments on the parameter.

Examples

#TODO

classmethod parse_final_waste_flow(line, pm)[source]#

Parse final wate flow line.

0: name 1: subcategory? 2: unit 3. value or formula 4. uncertainty type 5. uncert. param. 6. uncert. param. 7. uncert. param.

However, sometimes the value is in index 2, and the unit in index 3. Because why not! We assume default ordering unless we find a number in index 2.

classmethod parse_input_line(line, category, pm)[source]#

Parse technosphere input line.

  1. name

  2. unit

  3. value or formula

  4. uncertainty type

  5. uncert. param.

  6. uncert. param.

  7. uncert. param.

  8. comment

However, sometimes the value is in index 1, and the unit in index 2. Because why not! We assume default ordering unless we find a number in index 1.

classmethod parse_input_parameter(line)[source]#

Parse input parameters section of a SimaPro file.

  1. name

  2. value (not formula)

  3. uncertainty type

  4. uncert. param.

  5. uncert. param.

  6. uncert. param.

  7. hidden (“Yes” or “No” - we ignore)

  8. comment

Return type:

#TODO

Examples

#TODO

classmethod parse_reference_product(line, pm)[source]#

Parse reference product line.

  1. name

  2. unit

  3. value or formula

  4. allocation

  5. waste type

  6. category (separated by )

  7. comment

However, sometimes the value is in index 1, and the unit in index 2. Because why not! We assume default ordering unless we find a number in index 1.

classmethod parse_waste_treatment(line, pm)[source]#

Parse reference product line.

  1. name

  2. unit

  3. value or formula

  4. waste type

  5. category (separated by )

  6. comment

classmethod read_data_set(data, index, db_name, filepath, gp, pm, global_precompiled)[source]#
classmethod read_dataset_metadata(data, index)[source]#

Read metadata from a SIMAPRO dataset.

Returns:

A tuple containing the metadata as a dictionary and the index of the next line after the metadata.

Return type:

Tuple[Dict[str, str], int]

Raises:

IndexError – If the index is out of range for the given dataset.

bw2io.extractors.simapro_csv.replace_with_uppercase(string, names, precompiled)[source]#

Replace all occurrences of elements of names in string with their uppercase equivalents.

Parameters:
  • string (str) – String to be modified.

  • names (list) – List of variable name strings that should already all be uppercase.

  • precompiled (dict) – Dictionary #TODO.

Return type:

The modified string.

bw2io.extractors.simapro_csv.to_number(obj)[source]#

Convert a string to a number.

Parameters:

obj (str) – The string to be converted to a number

Returns:

converted number as float, or the unchanged string if not successfully converted.

Return type:

float or str

bw2io.extractors.simapro_csv.INTRODUCTION = Multiline-String[source]#
Show Value
"""Starting SimaPro import:
  Filepath: %s
  Delimiter: %s
  Name: %s
"""
bw2io.extractors.simapro_csv.SIMAPRO_END_OF_DATASETS[source]#
bw2io.extractors.simapro_csv.SIMAPRO_PRODUCTS[source]#
bw2io.extractors.simapro_csv.SIMAPRO_TECHNOSPHERE[source]#
bw2io.extractors.simapro_csv.strip_whitespace_and_delete[source]#
bw2io.extractors.simapro_csv.uppercase_expression = '(?:^|[^a-zA-Z_])(?P<variable>{})(?:[^a-zA-Z_]|$)'[source]#