diff --git a/docs/_build/doctrees/authors.doctree b/docs/_build/doctrees/authors.doctree index dec391e..d73ed4e 100644 Binary files a/docs/_build/doctrees/authors.doctree and b/docs/_build/doctrees/authors.doctree differ diff --git a/docs/_build/doctrees/contributing.doctree b/docs/_build/doctrees/contributing.doctree index 33c40be..1afdccd 100644 Binary files a/docs/_build/doctrees/contributing.doctree and b/docs/_build/doctrees/contributing.doctree differ diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 23fe2ab..a34f886 100644 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/history.doctree b/docs/_build/doctrees/history.doctree index 0b4bc68..14c8c2a 100644 Binary files a/docs/_build/doctrees/history.doctree and b/docs/_build/doctrees/history.doctree differ diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 34cbad7..87d2534 100644 Binary files a/docs/_build/doctrees/index.doctree and b/docs/_build/doctrees/index.doctree differ diff --git a/docs/_build/doctrees/installation.doctree b/docs/_build/doctrees/installation.doctree index 1911ee0..72245cb 100644 Binary files a/docs/_build/doctrees/installation.doctree and b/docs/_build/doctrees/installation.doctree differ diff --git a/docs/_build/doctrees/modules.doctree b/docs/_build/doctrees/modules.doctree index f8b1a22..2b10164 100644 Binary files a/docs/_build/doctrees/modules.doctree and b/docs/_build/doctrees/modules.doctree differ diff --git a/docs/_build/doctrees/pycirk.doctree b/docs/_build/doctrees/pycirk.doctree index 20880f9..ea040e3 100644 Binary files a/docs/_build/doctrees/pycirk.doctree and b/docs/_build/doctrees/pycirk.doctree differ diff --git a/docs/_build/doctrees/readme.doctree b/docs/_build/doctrees/readme.doctree index 0a97001..b1ffdbd 100644 Binary files a/docs/_build/doctrees/readme.doctree and b/docs/_build/doctrees/readme.doctree differ diff --git a/docs/_build/doctrees/usage.doctree b/docs/_build/doctrees/usage.doctree index e0f7412..21fb8bc 100644 Binary files a/docs/_build/doctrees/usage.doctree and b/docs/_build/doctrees/usage.doctree differ diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo index 4398e61..f46eee4 100644 --- a/docs/_build/html/.buildinfo +++ b/docs/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d6fa29c12a3539fe59921482cb73f252 +config: 32d434fc321b4f2ced7d28506d7c6b3b tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html index b3a8f96..94ef618 100644 --- a/docs/_build/html/_modules/index.html +++ b/docs/_build/html/_modules/index.html @@ -1,11 +1,9 @@ - +
- - +
else:
organize[keys] = self.list_of_something(labels)
- count = max(len(labels) for keys, labels in organize.items())
- organize["count"] = count
-
+ try:
+ organize["count"] = len(organize["synonym"])
+ except KeyError:
+ organize["count"] = len(organize["characterization"])
+
return Munch(organize)
attr_name = name + name_2 + "_labels"
row_labels = eval("self." + attr_name)
-
+
no_row_labs = row_labels.count
no_reg_labs = len(reg_labels)
no_col_labs = column_labels.count
@@ -362,13 +366,11 @@ Related Topics
An object contaning a mofified IO system
"""
# set basic data and variables
-
+ print(f"Scenario {scen_no} started")
data = deepcopy(data)
x_ = ops.IOT.x(data.Z, data.Y)
@@ -99,6 +98,7 @@ Source code for pycirk.make_scenarios
inv_diag_x_int = np.diag(ops.inv(ops.IOT.x(data.Z, data.Y)))
A = ops.IOT.A(data.Z, inv_diag_x_int)
+
data.A = counterfactual(scen_file, scen_no, A, "A", labels)
data.Y = counterfactual(scen_file, scen_no, data.Y, "Y", labels)
@@ -106,6 +106,7 @@ Source code for pycirk.make_scenarios
L = ops.IOT.L(data.A)
x_new = ops.IOT.x_IAy(L, data.Y.sum(1))
+
diag_x_new = np.diag(x_new)
diag_yj_new = np.diag(data.Y.sum(axis=0))
@@ -141,13 +142,13 @@ Source code for pycirk.make_scenarios
data.E = counterfactual(scen_file, scen_no, data.E, "E", labels)
data.R = counterfactual(scen_file, scen_no, data.R, "R", labels)
data.M = counterfactual(scen_file, scen_no, data.M, "M", labels)
-
# Apply policy to final demand extension coefficient matrices
data.EY = counterfactual(scen_file, scen_no, data.EY, "EY", labels)
data.RY = counterfactual(scen_file, scen_no, data.RY, "RY", labels)
data.MY = counterfactual(scen_file, scen_no, data.MY, "MY", labels)
-# print((1-np.sum(x_)/np.sum(x_new))*100)
+ #print((1-np.sum(x_)/np.sum(x_new))*100)
+ print(f"Scenario {scen_no} completed")
return data
@@ -181,8 +182,7 @@ Source code for pycirk.make_scenarios
elif scen_no.startswith("scenario_"):
pass
else:
- raise KeyError("only integer or explicit name (scenario_x)" +
- "are allowed")
+ raise KeyError("only integer or explicit name (scenario_x) are allowed")
scenario = pd.read_excel(scen_file, sheet_name=scen_no, header=1, index=None)
@@ -373,7 +373,6 @@ Source code for pycirk.make_scenarios
int4 = inter_sets["at2"]
int4 = basic_add(int3, int4)
-
M[np.ix_(i, g)] = int4
if subs is True:
@@ -456,7 +455,7 @@ Source code for pycirk.make_scenarios
try:
change_type = entry.change_type
ide = entry.identifier # used during debugging
-
+
# Collecting the specified coordinates for the intevention
# coordinates for region and category
# Row items (i) => Supplied category or extension category
@@ -467,11 +466,14 @@ Source code for pycirk.make_scenarios
cat_d = sing_pos(entry.cat_d, column_labels)
# Identify coordinates
orig_coor = coord(cat_o, reg_o, no_reg_labs, no_row_labs)
+ #print(f"row\n ide: {ide}, row: {entry.reg_o}, {entry.cat_o}, {orig_coor}")
dest_coor = coord(cat_d, reg_d, no_reg_labs, no_col_labs)
+ #print(f"columns\n ide: {ide}, column: {entry.reg_d}, {entry.cat_d}, {dest_coor}")
+
# organize main changes
kt1 = {"kt": entry.kt1, "kp": entry.kp1}
kt2 = {"kt": entry.kt2, "kp": entry.kp2}
-
+
intervention = {"change_type": change_type,
"ide": ide,
"i": orig_coor,
@@ -481,24 +483,24 @@ Source code for pycirk.make_scenarios
"at1": entry.at1,
"at2": entry.at2,
}
-
+
substitution = False
copy = False
-
+
# the following is only relevant for susbtitution
if "x" in [entry.Sub, entry.Copy]:
-
+
sub_reg_o = sing_pos(entry.reg_o_sc, reg_labels)
sub_cat_o = sing_pos(entry.cat_o_sc, row_labels)
-
+
# Column items => Consumption / manufacturing activity
sub_reg_d = sing_pos(entry.reg_d_sc, reg_labels)
sub_cat_d = sing_pos(entry.cat_d_sc, column_labels)
-
+
# Translate coordinates from str to numerical position
sub_orig_coor = coord(sub_cat_o, sub_reg_o, no_reg_labs, no_row_labs)
sub_dest_coor = coord(sub_cat_d, sub_reg_d, no_reg_labs, no_col_labs)
-
+
intervention["swk"] = entry.swk
intervention["i1"] = sub_orig_coor
intervention["g1"] = sub_dest_coor
@@ -506,7 +508,7 @@ Source code for pycirk.make_scenarios
intervention["sk2"] = entry.sk2
intervention["sk3"] = entry.sk3
intervention["sk4"] = entry.sk4
-
+
if entry.Copy == "x":
copy = True
elif entry.Sub == "x":
@@ -515,115 +517,8 @@ Source code for pycirk.make_scenarios
raise ValueError(f"Check in this entry for potential coordinate errors in your scenario settings:\n{entry} ")
M = counterfactual_engine(M, intervention, substitution, copy)
-
+
return M
-
-# =============================================================================
-# =============================================================================
-# # Here I put work that I started but I still need to finish
-# =============================================================================
-# =============================================================================
-# =============================================================================
-#
-#
-# def make_counterfactuals_SUT(data, scen_no, scen_file, labels):
-# """
-# Calculate all the counterfactual SUT matrices
-#
-# Parameters
-# ----------
-# data : obj
-# An object containing all necessary matrices of the SUT system
-#
-# scen_no : int
-# the identification number of the scenario to reference in scen_file
-#
-# scen_file : str
-# the directory where the scenarios.xlsx file is store
-#
-# labels : obj
-# an object containing all labels for the SUT matrices
-#
-# Outputs
-# -------
-# An object contaning a mofified SUT system
-# """
-#
-# met = ops.PxP_ITA_MSC
-#
-# w = ops.IOT.B(data.W, data.inv_diag_g) # Primary input coef
-# e = ops.IOT.B(data.E, data.inv_diag_g) # emissions extension coef
-# r = ops.IOT.B(data.R, data.inv_diag_g) # Resources extension coef
-# m = ops.IOT.B(data.M, data.inv_diag_g) # Materials extension coef
-# S = met.S(data.U, data.inv_diag_g) # industry coefficients for intermediate use table
-#
-# # Start first from a supply approach
-# # Supply matrix counterfactual
-# data.V = counterfactual(scen_file, scen_no, data.V, "V", labels)
-# # new total industry output
-# g1 = np.sum(data.V, axis=0)
-# # industry use coefficients counterfactual
-# S_ = counterfactual(scen_file, scen_no, S, "S", labels)
-#
-# data.U = counterfactual(scen_file, scen_no, S_ @ np.diag(g1), "U", labels) # industry use transactions counterfactual
-#
-# W_ = np.array(ops.IOT.R(w, np.diag(g1)))
-#
-# g2 = np.array(W_[:9].sum(0)) + data.U.sum(0) # recalculate total industry output
-#
-# g_dif = np.multiply(g2, ops.inv(g1))*100 # calculate the difference between original and new total industry input
-#
-# # print([round((1-l)*100,4) for l in g_dif if 1-l>.5e-3 and l!=0])
-# q2 = np.sum(data.U, axis=1) + np.sum(data.Y, axis=1)
-#
-# # updating the supply table to match the new total industry input
-# D = met.D(data.V, np.diag(ops.inv(data.V.sum(1))))
-# data.V = D @ np.diag(q2)
-#
-# q1 = np.sum(data.V, axis=0) # total product output
-#
-# q_dif = np.multiply(q2, ops.inv(q1))
-#
-# g1 = np.sum(data.V, axis=1)
-#
-# data.E = met.R(e, np.diag(x))
-#
-# data.R = met.R(r, np.diag(x))
-#
-# data.M = met.R(m, np.diag(x))
-#
-#
-# return(IOT)
-# def balancing_operation(V, U, Y, W):
-# """
-# Re-balancing of supply-use tables after data changes
-#
-# Parameters
-# ----------
-# V (supply) : numpy.array
-#
-# U (use) : numpy.array
-#
-# Y (final_demand) : numpy.array
-#
-# W (primary_inputs) : numpy.array
-#
-# Output
-# ------
-# output : dict
-#
-# It outputs a dictionary containing a re-balanced supply-use tables system
-# where:
-# V = supply table
-#
-# U = use table
-#
-# Y = final demand
-#
-# W = primary inputs
-#
-# """
-# =============================================================================
@@ -663,13 +558,11 @@ Related Topics
@@ -690,7 +583,7 @@ Quick search
©2019, Franco Donati.
|
- Powered by Sphinx 1.8.2
+ Powered by Sphinx 2.2.0
& Alabaster 0.7.12
diff --git a/docs/_build/html/_modules/pycirk/make_secondary_flows.html b/docs/_build/html/_modules/pycirk/make_secondary_flows.html
index 21d4778..9b71549 100644
--- a/docs/_build/html/_modules/pycirk/make_secondary_flows.html
+++ b/docs/_build/html/_modules/pycirk/make_secondary_flows.html
@@ -1,11 +1,9 @@
-
+
-
-
+
pycirk.make_secondary_flows — pycirk 1.5.0 documentation
@@ -13,6 +11,7 @@
+
@@ -124,6 +123,7 @@ Source code for pycirk.make_secondary_flows
V = V.copy()
U = U.copy()
Y = Y.copy()
+
# position of the secondary material
des_prod_ix_pos = prod_or + 1
@@ -132,7 +132,7 @@ Source code for pycirk.make_secondary_flows
# getting the value of secondary material from the supply table
# which is placed on the primary material row
misplaced = V.iloc[prod_or, des_ind_col_pos]
-
+
# placing the misplaced value to the secondary material row
V.iloc[des_prod_ix_pos, des_ind_col_pos] = np.array(misplaced)
@@ -165,17 +165,17 @@ Source code for pycirk.make_secondary_flows
eye = np.identity(len(ratio_prim_sec))
- U.iloc[prod_or] = (eye - ratio_prim_sec) @ prim_sec_use_trans
+ U.iloc[prod_or] = (eye - ratio_prim_sec) @ np.array(prim_sec_use_trans)
- U.iloc[des_prod_ix_pos] = ratio_prim_sec @ prim_sec_use_trans
+ U.iloc[des_prod_ix_pos] = ratio_prim_sec @ np.array(prim_sec_use_trans)
- Y.iloc[prod_or] = (eye - ratio_prim_sec) @ prim_sec_fin_dem_trans
+ Y.iloc[prod_or] = (eye - ratio_prim_sec) @ np.array(prim_sec_fin_dem_trans)
- Y.iloc[des_prod_ix_pos] = ratio_prim_sec @ prim_sec_fin_dem_trans
+ Y.iloc[des_prod_ix_pos] = ratio_prim_sec @ np.array(prim_sec_fin_dem_trans)
V.iloc[prod_or, des_ind_col_pos] = 0
- print('splitting off secondary materials ready')
+ print('splitting off secondary materials completed')
return {"V": V,
"U": U,
@@ -219,13 +219,11 @@ Related Topics
@@ -246,7 +244,7 @@ Quick search
©2019, Franco Donati.
|
- Powered by Sphinx 1.8.2
+ Powered by Sphinx 2.2.0
& Alabaster 0.7.12
diff --git a/docs/_build/html/_modules/pycirk/organize_io.html b/docs/_build/html/_modules/pycirk/organize_io.html
index 0d2f8fa..0d21faf 100644
--- a/docs/_build/html/_modules/pycirk/organize_io.html
+++ b/docs/_build/html/_modules/pycirk/organize_io.html
@@ -1,11 +1,9 @@
-
+
-
-
+
pycirk.organize_io — pycirk 1.5.0 documentation
@@ -13,6 +11,7 @@
+
@@ -45,22 +44,23 @@ Source code for pycirk.organize_io
@institution: Leiden University CML
"""
+import numpy as np
[docs]def organizer(data):
- return {"Z": data["Z"],
- "Y": data["Y"],
- "W": data["W"],
- "E": data["E"],
- "R": data["R"],
- "M": data["M"],
- "EY": data["EY"],
- "RY": data["RY"],
- "MY": data["MY"],
- "Cr_E_k": data["Cr_E_k"],
- "Cr_M_k": data["Cr_M_k"],
- "Cr_R_k": data["Cr_R_k"],
- "Cr_W_k": data["Cr_W_k"]
+ return {"Z": np.array(data["Z"]),
+ "Y": np.array(data["Y"]),
+ "W": np.array(data["W"]),
+ "E": np.array(data["E"]),
+ "R": np.array(data["R"]),
+ "M": np.array(data["M"]),
+ "EY": np.array(data["EY"]),
+ "RY": np.array(data["RY"]),
+ "MY": np.array(data["MY"]),
+ "Cr_E_k": np.array(data["Cr_E_k"]),
+ "Cr_M_k": np.array(data["Cr_M_k"]),
+ "Cr_R_k": np.array(data["Cr_R_k"]),
+ "Cr_W_k": np.array(data["Cr_W_k"])
}
@@ -101,13 +101,11 @@ Related Topics
@@ -128,7 +126,7 @@ Quick search
©2019, Franco Donati.
|
- Powered by Sphinx 1.8.2
+ Powered by Sphinx 2.2.0
& Alabaster 0.7.12
diff --git a/docs/_build/html/_modules/pycirk/positions.html b/docs/_build/html/_modules/pycirk/positions.html
index 3e92bf0..fd8e63b 100644
--- a/docs/_build/html/_modules/pycirk/positions.html
+++ b/docs/_build/html/_modules/pycirk/positions.html
@@ -1,11 +1,9 @@
-
+
-
-
+
pycirk.positions — pycirk 1.5.0 documentation
@@ -13,6 +11,7 @@
+
@@ -130,24 +129,26 @@ Source code for pycirk.positions
no_countries = 1
else:
pass
-
+
if cat_coord is None:
s = np.array(range(no_categories * no_countries))
else:
n = 0
while n in range(no_countries):
+
g = cat_coord[0] + no_categories * n
if "s" not in locals():
- s = [g]
+ s = np.array([g])
else:
- s = np.hstack([s, g])
+ s = np.append(s, g)
n = n+1
-
+
if reg_coord is None:
return s
else:
- s = np.split(s, no_countries)
- return np.take(s, reg_coord, axis=0)[0]
+ s = np.split(s, no_countries)
+ s = s[reg_coord[0]]
+ return s
[docs]def make_coord_array_for_make_sec(coordinates, no_countries, no_categories):
"""
@@ -222,13 +223,11 @@ Related Topics
@@ -249,7 +248,7 @@ Quick search
©2019, Franco Donati.
|
- Powered by Sphinx 1.8.2
+ Powered by Sphinx 2.2.0
& Alabaster 0.7.12
diff --git a/docs/_build/html/_modules/pycirk/pycirk.html b/docs/_build/html/_modules/pycirk/pycirk.html
index 2dbe3bc..b1816c1 100644
--- a/docs/_build/html/_modules/pycirk/pycirk.html
+++ b/docs/_build/html/_modules/pycirk/pycirk.html
@@ -1,11 +1,9 @@
-
+
-
-
+
pycirk.pycirk — pycirk 1.5.0 documentation
@@ -13,6 +11,7 @@
+
@@ -297,13 +296,11 @@ Related Topics
@@ -324,7 +321,7 @@ Quick search
©2019, Franco Donati.
|
- Powered by Sphinx 1.8.2
+ Powered by Sphinx 2.2.0
& Alabaster 0.7.12
loc = dataset_spec["loc"]
typ = dataset_spec["type"]
-
+
try:
data = self.load_dataset(loc)
except Exception:
@@ -332,7 +331,7 @@ Source code for pycirk.pycirk_settings
IOT = data
del(data)
- self.assign_labels_to_class()
+ self.lb.organize_unique_labels(self.directory_labels)
return IOT
@@ -353,33 +352,7 @@ Source code for pycirk.pycirk_settings
" check your file:\n\n" + loc)
return Transform(data)
-
-[docs] def assign_labels_to_class(self):
- """
- Assigns all labels to their respective attributes in the Labels class
- These are used througout the program to find coordinates and
- label results
- """
-
- all_labels = self.lb.organize_unique_labels(self.directory_labels)
-
- try:
- self.lb.country_labels = all_labels.products.country_code
- except Exception:
- pass
-
- self.lb.region_labels = all_labels.products.region
- self.lb.product_labels = all_labels.products
- self.lb.industry_labels = all_labels.industries
- self.lb.W_labels = all_labels.primary
- self.lb.E_labels = all_labels.emis
- self.lb.R_labels = all_labels.res
- self.lb.M_labels = all_labels.mat
- self.lb.Y_labels = all_labels.fin_dem
- self.lb.Cr_E_labels = all_labels.car_emis
- self.lb.Cr_R_labels = all_labels.car_res
- self.lb.Cr_M_labels = all_labels.car_mat
- self.lb.Cr_W_labels = all_labels.car_prim
+
@@ -476,7 +447,7 @@ Quick search
©2019, Franco Donati.
|
- Powered by Sphinx 1.8.2
+ Powered by Sphinx 2.2.0
& Alabaster 0.7.12
return results
raise ValueError(f"\nThe specified coordinates to retrieve results are wrong.\nPlease check that name and matrix in your scenarios.xlsx file are correct.\nCheck: {M_name, i_cat}")
- if "tot" in M_name:
- select = df([M[i].sum()])
- else:
- select = df([M[np.ix_(i, g)].sum()])
+
+ select = df([M[np.ix_(i, g)].sum()])
key_names = ["matrix", "i_category", "i_region", "g_category",
- "g_region", "unit"]
+ "g_region", "unit"]
+
try:
unit = str(row_labels.unit[cat_o].iloc[0])
@@ -141,8 +125,48 @@ Source code for pycirk.results
index_label = [M_name, i_cat, i_reg, g_cat, g_reg, unit]
select.index = mi.from_tuples([index_label], names=key_names)
-
+
return select
+
+[docs]def retrieve_specified_data(data, spec_row, labels):
+ """
+ Separate, collect and rename results for base and scenarios according
+ to specifications under th sheet "analysis" in scenarios.xls
+
+ data = any IOT table
+ spec_row = row in the scenarios sheet specifying settings
+ """
+
+ pd.options.display.float_format = '{:,.4f}'.format
+
+ M_name = spec_row.matrix # matrix of reference
+
+ if "Cr" in M_name:
+ data = ops.calculate_characterized(data)
+
+ if "tot" in M_name:
+ M_name_1 = M_name[-1]
+ M_name_2 = M_name[-1] + "Y"
+
+ if "Cr" in M_name:
+ M_name_1 = "Cr_" + M_name_1
+ M_name_2 = "Cr_" + M_name_2
+
+
+ output = rsd_engine(data, M_name_1, spec_row, labels)
+ output = output + rsd_engine(data, M_name_2, spec_row, labels).values
+ index_label = [list(i) for i in output.index][0]
+ index_label[0] = M_name
+ key_names = output.index.names
+ output.index = mi.from_tuples([index_label], names=key_names)
+ else:
+ output = rsd_engine(data, M_name, spec_row, labels)
+
+ return output
+
+
+
+
If you are reporting a bug, please include:
Your operating system name and version.
Any details about your local setup that might be helpful in troubleshooting.
Detailed steps to reproduce the bug.
If you are proposing a feature:
Explain in detail how it would work.
Keep the scope as narrow as possible, to make it easier to implement.
Remember that this is a volunteer-driven project, and that contributions +are welcome :)
Ready to contribute? Here’s how to set up pycirk for local development.
Fork the pycirk repo on GitHub.
-Clone your fork locally:
+Fork the pycirk repo on GitHub.
Clone your fork locally:
$ git clone git@github.com:your_name_here/pycirk.git
Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:
+Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:
$ mkvirtualenv pycirk
$ cd pycirk/
$ python setup.py develop
Create a branch for local development:
+Create a branch for local development:
$ git checkout -b name-of-your-bugfix-or-feature
Now you can make your changes locally.
When you’re done making changes, check that your changes pass flake8 and the +
When you’re done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox:
$ flake8 pycirk tests
$ python setup.py test or py.test
@@ -111,28 +109,27 @@ Get Started!Commit your changes and push your branch to GitHub:
+Commit your changes and push your branch to GitHub:
$ git add .
$ git commit -m "Your detailed description of your changes."
$ git push origin name-of-your-bugfix-or-feature
-Submit a pull request through the GitHub website.
-
+Submit a pull request through the GitHub website.
Before you submit a pull request, check that it meets these guidelines:
The pull request should include tests.
If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the -feature to the list in README.rst.
The pull request should work for Python 2.7, 3.4, 3.5 and 3.6, and for PyPy. Check https://travis-ci.org/FDonati/pycirk/pull_requests -and make sure that the tests pass for all supported Python versions.
First release on PyPI.
pycirk.fundamental_operations.
Operations
[source]¶pycirk.fundamental_operations.
Operations
[source]¶
Bases: object
Contains all basic operations to transform SUTs into IOTs and verify them It contains two subclasses defining two different trasformation methods @@ -58,58 +57,58 @@
IOT
[source]¶IOT
[source]¶
Bases: object
General IOT operations subclass some methods repeat from other subclasses but it’s good to have them divided for clarity
bY
(inv_diag_yj)[source]¶bY
(inv_diag_yj)[source]¶
Calculates intensities of extensions in final demand Method for transformation matrix of bY (e.g. final demand emissions)
@@ -117,13 +116,13 @@x
(Y)[source]¶x
(Y)[source]¶
total product output s the sum of Si and y
PxP_ITA_MSC
[source]¶PxP_ITA_MSC
[source]¶
Bases: object
Model with Market Share Coef. Prod x Prod Industry Technology assumption
S
(inv_diag_g)[source]¶S
(inv_diag_g)[source]¶
Intermediate coefficients Input requirements Z = U * inv(diag(g))
@@ -179,7 +178,7 @@Z
(D, diag_q)[source]¶Z
(D, diag_q)[source]¶
Intermediates Z = inter_coef * D * diag(q)
PxP_ITA_TC
[source]¶PxP_ITA_TC
[source]¶
Bases: object
Model with Transformation Coefficients ProdxProd Industry Technology assumption
L
(T, inv_diag_q)[source]¶L
(T, inv_diag_q)[source]¶
Input coefficients intermediates A = U * T * inv[diag (q)]
Multiplier matrix @@ -209,20 +208,20 @@
R
(diag_q)[source]¶R
(diag_q)[source]¶
Calculates absolute extensions
calculate_characterized
()[source]¶calculate_characterized
()[source]¶
delta_Y
(Yalt)[source]¶delta_Y
(Yalt)[source]¶
method to calculate difference in Y Y = final demand baseline Yalt = final demand scenario
@@ -244,7 +243,7 @@delta_x
(Lalt, y)[source]¶delta_x
(Lalt, y)[source]¶
method to calculate difference in q L = Leontief of baseline Lalt = Leontief of scenario
@@ -252,13 +251,13 @@inv
()[source]¶inv
()[source]¶
Returns inverse by dividing by 1 and eliminating inf and nan values
pycirk.labels.
Labels
[source]¶pycirk.labels.
Labels
[source]¶
Bases: object
apply_labels
(matrix, labels, axis=0)[source]¶apply_labels
(matrix, labels, axis=0)[source]¶
Applies labels to a dataframe axis = 0 => Index axis = 1 => columns
@@ -285,20 +284,20 @@calc_no_of_something
(labels)[source]¶calc_no_of_something
(labels)[source]¶
A general method to calculate the number of unique entries contained in a series
get_unique_labels
(dataframe_of_labels, for_units=True)[source]¶get_unique_labels
(dataframe_of_labels, for_units=True)[source]¶
Calculates all unique entries (labels) contained in a dataframe and puts them together with their units and total count of unique entries
It returns an object… which is munched, not a pretty solution but it @@ -307,43 +306,43 @@
identify_labels
(M_name)[source]¶identify_labels
(M_name)[source]¶
A method to understand what type of labels are being handled depending on the name of the matrix in dataframe type that is being passed
list_of_something
(labels)[source]¶list_of_something
(labels)[source]¶
A general method to return a list of unique entries contained in a series
relabel
(M, column_labels, index_labels)[source]¶relabel
(M, column_labels, index_labels)[source]¶
Processes apply_labels and apply _names together
relabel_to_save
(data, trans_method, labels_directory)[source]¶relabel_to_save
(data, trans_method, labels_directory)[source]¶
This function makes sure that everything is labeled in IOT tables
trans_method = 0 is prod x prod , 1 is ind x ind
save_labels
(data, directory)[source]¶save_labels
(data, directory)[source]¶
saves the labels of the database in the labels directory
pycirk.make_scenarios.
basic_add
(a, at)[source]¶pycirk.make_scenarios.
basic_add
(a, at)[source]¶
Adds values together
a : numpy.array
at : numpy array
@@ -367,39 +366,39 @@pycirk.make_scenarios.
basic_mult
(ide, a, kt, kp)[source]¶pycirk.make_scenarios.
basic_mult
(ide, a, kt, kp)[source]¶
Policy intervention
It may be a primary intervention or an acillary action.
-a supply chain or a point in it subject to a change
+technical coefficient (max achievable technically)
+penetration coefficient (level of market penet. of the policy)
+identification number of the intervention in case of missing information
+A a numpy.array of the same order/shape of a
pycirk.make_scenarios.
counterfactual
(scen_file, scen_no, M, M_name, labels)[source]¶pycirk.make_scenarios.
counterfactual
(scen_file, scen_no, M, M_name, labels)[source]¶
Separates changes by matrix subject to intervention and apply them on a specific matrix
-@@ -570,53 +569,53 @@-
- scen_file: str
-- directory of the file in which the scenarios are specified
-- scen_no : int
-- specific scenario e.g “1” or “scenario_1”
-- M : numpy.array
-- matrix affected by the policies
-- M_name : str
-- matrix name as diplayed under sheet_name[“matrix”]
-- labels : obj
-- matrix labels
++
- scen_file: str
- +
directory of the file in which the scenarios are specified
+- scen_noint
- +
specific scenario e.g “1” or “scenario_1”
+- Mnumpy.array
- +
matrix affected by the policies
+- M_namestr
- +
matrix name as diplayed under sheet_name[“matrix”]
+- labelsobj
matrix labels
+A numpy array modified according to the specified changes in the scenario file
@@ -407,22 +406,22 @@Submodules
- -
+pycirk.make_scenarios.
counterfactual_engine
(M, inter_sets, subs=False, copy=False)[source]¶pycirk.make_scenarios.
counterfactual_engine
(M, inter_sets, subs=False, copy=False)[source]¶This function allows for the proccessing of the specified interventions onto a selected matrix. It calls various functions to modify the values in a specified matrix.
--
- M : numpy.array
-- matrix of reference
-- inter_sets: dict
-- contains all specfication concerning the changes to be applied -(intervention sets)
-- subs : bool
-- If True it will call the subsitution function according to -specifications in scenarios.xlsx
-- copy : bool
-- if True it will copy value from one part of the matrix to another -according to specifications in scenarios.xlsx
++
- Mnumpy.array
- +
matrix of reference
+- inter_sets: dict
- +
contains all specfication concerning the changes to be applied +(intervention sets)
+- subsbool
- +
If True it will call the subsitution function according to +specifications in scenarios.xlsx
+- copybool
if True it will copy value from one part of the matrix to another +according to specifications in scenarios.xlsx
+i : index coordinate
g : column coordinate
@@ -436,35 +435,35 @@Submodules
- -
+pycirk.make_scenarios.
make_counterfactuals
(data, scen_no, scen_file, labels)[source]¶pycirk.make_scenarios.
make_counterfactuals
(data, scen_no, scen_file, labels)[source]¶Calculate all the counterfactual IO matrices
--
- data : obj
-- An object containing all necessary matrices of the IO system
-- scen_no : int
-- the identification number of the scenario to reference in scen_file
-- scen_file : str
-- the directory where the scenarios.xlsx file is store
-- labels : obj
-- an object containing all labels for the IO matrices
++
- dataobj
- +
An object containing all necessary matrices of the IO system
+- scen_noint
- +
the identification number of the scenario to reference in scen_file
+- scen_filestr
- +
the directory where the scenarios.xlsx file is store
+- labelsobj
an object containing all labels for the IO matrices
+An object contaning a mofified IO system
- -
+pycirk.make_scenarios.
make_new
(filtered_changes, M, M_name, labels)[source]¶pycirk.make_scenarios.
make_new
(filtered_changes, M, M_name, labels)[source]¶Organizes the data concerning the changes and calls the functions to modified matrices based on specied scenarios
--
@@ -505,7 +504,7 @@- filterd_changes: pandas.DataFrame
-- A table filtered by matrix name containing all changes to be applied
-- M : numpy.array
-- matrix on which to implement the changes
-- M_name : str
-- nomenclature referring to the matrix to be changed
-- labels: obj
-- object containing all matrix labels
++
- filterd_changes: pandas.DataFrame
- +
A table filtered by matrix name containing all changes to be applied
+- Mnumpy.array
- +
matrix on which to implement the changes
+- M_namestr
- +
nomenclature referring to the matrix to be changed
+- labels: obj
object containing all matrix labels
+g is any column in the matrix
i is any row row in the matrix
@@ -473,7 +472,7 @@Submodules
- -
+pycirk.make_scenarios.
substitution
(d, s, fx_kp)[source]¶pycirk.make_scenarios.
substitution
(d, s, fx_kp)[source]¶Moves the value from one or multiple cells (in the same row or column)
Substitution: Material subsitution or certain types of rebound effects
If the size of the array of the original value is different from that @@ -481,14 +480,14 @@
Submodules -
- d : numpy.array
-- transaction with which we are substituting
-- s : numpy.array
-- original transaction that was subject to changes -(the transactions from which the value is coming from)
-- fx_kp : float
-- relative size of c that is added on the transaction to expand d
++
- dnumpy.array
- +
transaction with which we are substituting
+- snumpy.array
- +
original transaction that was subject to changes +(the transactions from which the value is coming from)
+- fx_kpfloat
relative size of c that is added on the transaction to expand d
+A numpy.array of modified d
Submodules
- -
+pycirk.make_secondary_flows.
allocate_sec_mat
(V, U, Y, prod_or, ind_or)[source]¶pycirk.make_secondary_flows.
allocate_sec_mat
(V, U, Y, prod_or, ind_or)[source]¶This function allows to move the primary material output from the secondary material industries to the secondary material output. This allows for the presence of secondary materials in the IOT @@ -516,7 +515,7 @@
Submodules
- -
+pycirk.make_secondary_flows.
make_secondary
(data)[source]¶pycirk.make_secondary_flows.
make_secondary
(data)[source]¶This allows to allign secondary flow in such a way that they then appear in the IOT
Primary Products’ positions
@@ -557,7 +556,7 @@Submodules
- -
+pycirk.organize_io.
organizer
(data)[source]¶pycirk.organize_io.
organizer
(data)[source]¶Submodules
- -
+pycirk.positions.
make_coord_array
(cat_coord, reg_coord, no_countries, no_categories)[source]¶pycirk.positions.
make_coord_array
(cat_coord, reg_coord, no_countries, no_categories)[source]¶It creates an an array of coordinates based on the specification of the users.
--
- cat_coord : int, numpy.array, bool
-- the numerical coordinate of a specific category belonging to a matrix +
++
- cat_coordint, numpy.array, bool
- -
the numerical coordinate of a specific category belonging to a matrix in the IO or SUT system. If None is passed then it will return an -array of all coordinates in range no_categories.
- reg_coord : int, numpy.array, bool
-- the numerical coordinate of a specific region in the IO or SUT system. +array of all coordinates in range no_categories. +
+- reg_coordint, numpy.array, bool
- -
the numerical coordinate of a specific region in the IO or SUT system. If None is passed then it will return an array of all coordinates in -range no_countries.
- no_countries : int
-- the total number of countries or regions in the dataset
-- no_categories : int
-- the total number of categories referring one axis in the chosen matrix
+range no_countries. +- no_countriesint
- +
the total number of countries or regions in the dataset
+- no_categoriesint
the total number of categories referring one axis in the chosen matrix
+A numpy.array referring to each coordinate point specified by the user
pycirk.positions.
make_coord_array_for_make_sec
(coordinates, no_countries, no_categories)[source]¶pycirk.positions.
make_coord_array_for_make_sec
(coordinates, no_countries, no_categories)[source]¶
It creates an an array of coordinates based on the total location of secondary materials and processing categories
-the numerical coordinate of secondary categories belonging to the SUT system
+the total number of countries or regions in the dataset
+the total number of categories referring one axis in the chosen matrix
+A numpy.array referring to each coordinate point
pycirk.positions.
single_position
(item, labels)[source]¶pycirk.positions.
single_position
(item, labels)[source]¶
Takes a dataframe of the multiindex and identifies the position of the specified values
-The label the user is looking for
+An object cointaining a set of labels +(as specified in the labels.py module)
+An numpy.array containing the coordinate of a specific label or None in case of there is no specified label
@@ -632,62 +631,59 @@pycirk.pycirk.
Launch
(method=0, make_secondary=False, save_directory=None, aggregation=1, file=None, test=False)[source]¶pycirk.pycirk.
Launch
(method=0, make_secondary=False, save_directory=None, aggregation=1, file=None, test=False)[source]¶
Bases: object
Pycirk’s main class and methods
Initialize the pycirk programme to make EEIO scenarios and analysis. From here, you can launch all the analysis specifications listed under scenarios.xlsx
-SUTs to IO transformation methods
+SUTs to IO transformation methods
0 = Prod X Prod Ind-Tech Assumption Technical Coeff method
-1 = Prod X Prod Ind-Tech Assumption Market Share Coeff method
+1 = Prod X Prod Ind-Tech Assumption Market Share Coeff method
modifies SUT so that secondary technologies which process scrap +
modifies SUT so that secondary technologies which process scrap materials into primary materials are also available in the IO tables
False = Don’t modify
-True = Modify
+True = Modify
+directory in which you want to work and save your results
aggregation : int, bool
-0 = None (multi-regional 49 regions)
1 = bi-regional (EU- ROW)
allows you to specify where the dataset is placed. None will use the +default location within the installed package
+if set to true it will run the test settings under under pycirk//tests
+Allows to calculate the results for a given specified scenario
-0 = baseline data
-Allows to calculate the results for a given specified scenario
+0 = baseline data
+Retrieves all results for all specified scenarios and baseline
+save all specified analytical results from all scenario and baseline
+to be found under the default folder on the specified directory +it allows to specify the parameters for your scenario and analysis
+IO tables of the specified scenarios, these are located in the output +folder in the save directory
+results gathered from the processed scenarios and baseline
+all_results
()[source]¶all_results
()[source]¶
Process all scenarios and collects their results together with Baseline analysis results
It outputs a pandas.DataFrame with all results
@@ -695,52 +691,51 @@delete_previous_IO_builds
()[source]¶delete_previous_IO_builds
()[source]¶
Call this method if you want to elinate all previous IO databases created by pycirk. SUTs database is not affected.
save_results
(scen_no=None, output_dataset=False)[source]¶save_results
(scen_no=None, output_dataset=False)[source]¶
Saves all results in excel format for info and results or in pickle format for the dataset
-0 = baseline
-1-n = specified scenarios
-0 = baseline
+1-n = specified scenarios
+If true it will output a dictionary containing all IOT tables in +pd.DataFrames
+Default values will save all results from the all_results method and they will output only scenario.xlsx and info_and_results.xlsx
Output_dataset is only possible when scen_no is specified in which case it would save also a data.pkl file
-scenario settings excel file used for the analysis in the same +output directory with the results
+excel file containing general info about project plus the +results from the analysis
+new modified IO dataset in pickle format +This is only possible if outputting single scenario (scen_no != None)
+scenario_results
(scen_no, output_dataset=False)[source]¶scenario_results
(scen_no, output_dataset=False)[source]¶
Run to output results of a specified scenario
-0 = baseline +1-n = specified scenarios
+If true it will output a dictionary containing all IOT tables in pd.DataFrames
+specified results in DataFrame form or a dictionary containing results and a dictionary of dataframes containing IO matrices
@@ -758,47 +753,37 @@pycirk.pycirk_settings.
Settings
(method=0, make_secondary=False, save_directory='', aggregation=1, file=None, test=False)[source]¶pycirk.pycirk_settings.
Settings
(method=0, make_secondary=False, save_directory='', aggregation=1, file=None, test=False)[source]¶
Bases: object
This class allows for to specify the settings for pycirk.
-SUTs to IO transformation methods
+SUTs to IO transformation methods
0 = Prod X Prod Ind-Tech Assumption Technical Coeff method
-1 = Prod X Prod Ind-Tech Assumption Market Share Coeff method
+1 = Prod X Prod Ind-Tech Assumption Market Share Coeff method
modifies SUT so that secondary technologies which process scrap +
modifies SUT so that secondary technologies which process scrap materials into primary materials are also available in the IO tables
False = Don’t modify
-True = Modify
+True = Modify
+directory in which you want to work and save your results
aggregation : int, bool
-0 = None (multi-regional 49 regions)
1 = bi-regional (EU- ROW)
allows you to specify where the dataset is placed. None will use the +default location within the installed package
+if set to true it will run the test settings under under pycirk//tests
+assign_labels_to_class
()[source]¶Assigns all labels to their respective attributes in the Labels class -These are used througout the program to find coordinates and -label results
-check_dataset_location
()[source]¶check_dataset_location
()[source]¶
It identifies where the baseline dataset is located and whether it is present in the directory. If an IO database was already created in the past then it will just return it’s location and type instead of @@ -808,74 +793,74 @@
check_expand_directory
(directory)[source]¶check_expand_directory
(directory)[source]¶
Checking that we are using the right directory for the right OS
create_output_folder
()[source]¶create_output_folder
()[source]¶
It creates an output folder where to save analytical results This is placed in the user’s working directory
create_scenario_file
()[source]¶create_scenario_file
()[source]¶
It creates a new scenario file by copying the original from pycirk directory to the new working directory specified by the user
project_specs
(test=False)[source]¶project_specs
(test=False)[source]¶
General specifications for the project, they are also used to mark the output files
scenario_file
()[source]¶scenario_file
()[source]¶
It returns where the working scenarios.xlsx file is located
set_IO_scenario
(data, scen_no)[source]¶set_IO_scenario
(data, scen_no)[source]¶
Class the functions to modify the IO database according to your scenario specifications
set_save_directory
()[source]¶set_save_directory
()[source]¶
It specifies where the scenario file for input is located
transform_to_io
()[source]¶transform_to_io
()[source]¶
Transforms the SUT dataset into an IO system
If the user specified to make secondary material processing apparent then it will launch the function to modify the database
@@ -899,20 +884,25 @@pycirk.results.
iter_thru_for_results
(data, analysis_specs, scen_no, labels)[source]¶pycirk.results.
iter_thru_for_results
(data, analysis_specs, scen_no, labels)[source]¶
It uses your analytical specification on scenarios.xlxl to return a dataframe of the desired results
pycirk.results.
retrieve_specified_data
(data, spec_row, labels)[source]¶pycirk.results.
retrieve_specified_data
(data, spec_row, labels)[source]¶
Separate, collect and rename results for base and scenarios according to specifications under th sheet “analysis” in scenarios.xls
data = any IOT table spec_row = row in the scenarios sheet specifying settings
pycirk.save_utils.
add_date_to_gen_specs
(specs)[source]¶pycirk.save_utils.
add_date_to_gen_specs
(specs)[source]¶
Adds timemark to general specifications e.g. authors, institution etc
pycirk.save_utils.
save_outputs
(results, directory, specs, scen_no, data=None)[source]¶pycirk.save_utils.
save_outputs
(results, directory, specs, scen_no, data=None)[source]¶
It saves results into a previously specified directory
-a dataframe containing only selected results
+the general location specified for your scenarios.xlsx file
+a dictionary containing general info about the project (e.g. author, institution, etc)
+an integer specifying the scenario number or enter None to save all results
+a completely new dataset to be pickled. Default value is None otherwise +pass the dataset
+scenario settings excel file used for the analysis in the same output directory with the results
+excel file containing general info about project plus the results from the analysis
+new modified IO dataset in pickle format
+pycirk.transformation_methods.
Transform
(SUTs)[source]¶pycirk.transformation_methods.
Transform
(SUTs)[source]¶
Bases: object
Transforms SUTs to IOT an calcualate extensions
IOTpxpSTA_MSCm
()[source]¶IOTpxpSTA_MSCm
()[source]¶
IOT prod x prod Single tech Industry-technology assumption Market share coef method
IOTpxpSTA_TCm
()[source]¶IOTpxpSTA_TCm
()[source]¶
IOT prod x prod Single tech Industry-technology assumption Technical coef method
10.5281/zenodo.1492957
+To cite the use of the software in your research please use the following publication:
+“Modeling the circular economy in environmentally extended input-output tables: Methods, software and case study”
+https://doi.org/10.1016/j.resconrec.2019.104508
Clone repository:
-+$ git clone https://fdonati@bitbucket.org/CML-IE/pycirk.git
$ git clone https://fdonati@bitbucket.org/CML-IE/pycirk.git
+Once you have a copy of the source, you can install it with:
-+$ python setup.py install
$ python setup.py install
+-+import pycirk
import pycirk
+-+my_work = pycirk.Launch(method, directory, aggregation)
my_work = pycirk.Launch(method, directory, aggregation)
+Open scenarios.xls in the directory that was specified
From there you can specify interventions and parameters for the analysis
save and continue to the following steps
Run one specific scenario
-+my_work.scenario_results(scen_no, output_dataset) -(0 = baseline)
my_work.scenario_results(scen_no, output_dataset) +(0 = baseline)
+Run all scenarios
-+my_work.all_results()
my_work.all_results()
+Save your results
-+my_work.save_results()
my_work.save_results()
+2.6. Use from command line
2.6.1. pycirk –help
Usage: pycirk [OPTIONS]
@@ -110,82 +120,83 @@Command | -Variables | + +||
---|---|---|---|
Command |
+Variables |
||
-tm, –transf_method TEXT | -0 = PXP ITA_TC; 1 = PXP ITA_MSC | +||
-tm, –transf_method TEXT |
+0 = PXP ITA_TC; 1 = PXP ITA_MSC |
||
-dr, –directory TEXT | -if left black it will be default | +||
-dr, –directory TEXT |
+if left black it will be default |
||
-ag, –aggregation | -1 = bi-regional (EU-ROW) -0 = None (49 regions) | +||
-ag, –aggregation |
+1 = bi-regional (EU-ROW) +0 = None (49 regions) |
||
-sc, –scenario TEXT | -all, 1, 2,… accepted - 0=baseline | +||
-sc, –scenario TEXT |
+all, 1, 2,… accepted - 0=baseline |
||
-s, –save TEXT | -False=no, True=yes | +||
-s, –save TEXT |
+False=no, True=yes |
||
-od, –output_dataset | -False=no, True=yes | +||
-od, –output_dataset |
+False=no, True=yes |
||
–help | -Show this message and exit. | +||
–help |
+Show this message and exit. |
2.6.2. Command example
-+pycirk -tm 0 -dr “” -sc “1” -s True -od False
pycirk -tm 0 -dr “” -sc “1” -s True -od False
+Examples of policies that can be modelled through the software:
sharing
recycling
life extension
rebound effects
substituion
market and value added changes
efficiency
The tables in which it is possible to apply changes:
total requirement matrix (A)
intermediate transactions (Z)
final demand (Y)
primary inputs (W)
emission intermediate extentions (E)
material intermediate extensions (M)
resource intermediate extensions (R)
emission final demand extension (EY)
material final demand extension (MY)
resource final demand extensions (RY)
primary inputs coefficients (w)
emission intermediate extentions coefficients (e)
material intermediate extensions coefficients (m)
resource intermediate extensions coefficients (r)
emission final demand extension coefficients (eY)
material final demand extension coefficients (mY)
resource final demand extensions coefficients (rY)
It is possible to specify:
region of the intervention
whether the intervention affects domestic, import transactions or both
From this .xls file it is possible to set different types of interventions and the analysis to perform:
matrix = specifies in which matrix of IOT the changes are applied
change_type = Primary and ancillary are only used to specify the type of intervention from a conceptual level
reg_o or reg_d = Regional coordinates (o=origin or row, d=destination or column)
cat_o or cat_d = category (e.g. products or extensions ) coordinates (o=origin or row, d=destination or column)
kt = technical coefficient (max achievable technically); a negative value means reduction; unit = %
ka = absolute values for addition
kp = penetration coefficient (level of market penetration of the policy); unit = %
copy = allows you to copy a specific transation to a different point in the matrices (useful for proxy creation)
substitution = tells the software whether it needs to substitute values among specified categories
sk = which intervention should be substituted
swk = Substitution weighing factor (how much of the original transaction should be substituted); allows to simulate difference in prices and physical properties between categories; unit = %
These can be set for:
product category e.g. C_STEL (basic iron), C_PULP (pulp), etc.
final demand category e.g. F_HOUS (households), F_GOVE (government), etc.
primary input category e.g. E_HRHS (employment highly skilled), T_TLSA (taxes less subsidies), etc.
emissions extensions e.g. E_CO2_c (CO2 - combustion)
material extensions e.g. NI.02 (Nature Inputs: Coking Coal)
resource extension e.g. L_1.1 (Land use - Arable Land - Rice)
Furthemore, from the analysis sheet you can set the following variables to be compared in the analysis:
product categories
primary input categories
emissions extensions
material extensions
resource extensions
region of interest
impact categories # Please see the data_validation_list sheet in the scenarios.xls file for the comprehensive list