From f58ccb5af114af0bf8be16a59a782e7952142c1e Mon Sep 17 00:00:00 2001 From: Clea Aumont Date: Mon, 14 Sep 2026 14:16:38 -0400 Subject: [PATCH 1/4] add demo apps for cloud --- energy-leaflet-cytoscape-visualizer/app.py | 756 ++++++++++++++++++ .../assets/style.css | 8 + energy-leaflet-cytoscape-visualizer/data.py | 194 +++++ .../requirements.txt | 6 + lithium-supply-chain/Procfile | 2 + lithium-supply-chain/app.py | 51 ++ lithium-supply-chain/assets/media_queries.css | 0 lithium-supply-chain/assets/styles.css | 133 +++ lithium-supply-chain/constants.py | 68 ++ lithium-supply-chain/data/colors.csv | 573 +++++++++++++ .../dummy_resource_data.csv | 182 +++++ .../forecast_version_1/dummy_spot_data.csv | 37 + .../forecast_version_1/dummy_supply_data.csv | 307 +++++++ lithium-supply-chain/pages/__init__.py | 1 + lithium-supply-chain/pages/supply_sankey.py | 199 +++++ lithium-supply-chain/requirements.txt | 10 + lithium-supply-chain/runtime.txt | 1 + lithium-supply-chain/tests/__init__.py | 1 + lithium-supply-chain/tests/mock_data.py | 43 + .../tests/test_chart_utils.py | 46 ++ lithium-supply-chain/tests/test_data_utils.py | 9 + lithium-supply-chain/tests/test_ui_utils.py | 3 + lithium-supply-chain/utils/__init__.py | 1 + lithium-supply-chain/utils/chart_utils.py | 300 +++++++ lithium-supply-chain/utils/data_utils.py | 91 +++ lithium-supply-chain/utils/ui_utils.py | 192 +++++ 26 files changed, 3214 insertions(+) create mode 100644 energy-leaflet-cytoscape-visualizer/app.py create mode 100644 energy-leaflet-cytoscape-visualizer/assets/style.css create mode 100644 energy-leaflet-cytoscape-visualizer/data.py create mode 100644 energy-leaflet-cytoscape-visualizer/requirements.txt create mode 100644 lithium-supply-chain/Procfile create mode 100644 lithium-supply-chain/app.py create mode 100644 lithium-supply-chain/assets/media_queries.css create mode 100644 lithium-supply-chain/assets/styles.css create mode 100644 lithium-supply-chain/constants.py create mode 100644 lithium-supply-chain/data/colors.csv create mode 100644 lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_resource_data.csv create mode 100644 lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_spot_data.csv create mode 100644 lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_supply_data.csv create mode 100644 lithium-supply-chain/pages/__init__.py create mode 100644 lithium-supply-chain/pages/supply_sankey.py create mode 100644 lithium-supply-chain/requirements.txt create mode 100644 lithium-supply-chain/runtime.txt create mode 100644 lithium-supply-chain/tests/__init__.py create mode 100644 lithium-supply-chain/tests/mock_data.py create mode 100644 lithium-supply-chain/tests/test_chart_utils.py create mode 100644 lithium-supply-chain/tests/test_data_utils.py create mode 100644 lithium-supply-chain/tests/test_ui_utils.py create mode 100644 lithium-supply-chain/utils/__init__.py create mode 100644 lithium-supply-chain/utils/chart_utils.py create mode 100644 lithium-supply-chain/utils/data_utils.py create mode 100644 lithium-supply-chain/utils/ui_utils.py diff --git a/energy-leaflet-cytoscape-visualizer/app.py b/energy-leaflet-cytoscape-visualizer/app.py new file mode 100644 index 0000000..833fad6 --- /dev/null +++ b/energy-leaflet-cytoscape-visualizer/app.py @@ -0,0 +1,756 @@ +"""Dash Cytoscape + Leaflet + Context Menu demo for designing a BT (low-voltage) +distribution network. UI chrome is built entirely with Dash Mantine Components. + +Left panel : search a transformer, toggle labels, pick a tree layout. +Center map : the network overlaid on a real OpenStreetMap basemap (CyLeaflet), + right-click a node/edge to edit the topology (context menu). +Right panel : the same network as a clean dagre tree. +Bottom-left : selection info (updates the chart as soon as a node/edge is clicked). +Bottom-right : time-series of the aggregated downstream load (kVA). +""" +import copy +import math +import time + +import dash +import dash_cytoscape as cyto +import dash_mantine_components as dmc +import plotly.graph_objects as go +from dash import Input, Output, State, callback_context, dcc, no_update +from dash.exceptions import PreventUpdate + +import data as netdata + +cyto.load_extra_layouts() +dmc.add_figure_templates() + +NETWORK = netdata.build_network() +PR_IDS = netdata.all_pr_ids(NETWORK) +LOAD_DF = netdata.build_load_curves(PR_IDS) + +DEFAULT_TRANSFO = next(iter(NETWORK)) + +MAP_ID = "network-map" +MAP_CY_ID = {"id": MAP_ID, "component": "cyleaflet", "sub": "cy"} + +CONTEXT_MENU_ITEMS = [ + { + "id": "add-node", + "label": "Add Node", + "tooltipText": "Add a new node here", + "availableOn": ["canvas"], + }, + { + "id": "remove-edge", + "label": "Remove Edge", + "tooltipText": "Remove this edge", + "availableOn": ["edge"], + }, + { + "id": "revert-edge", + "label": "Revert Edge", + "tooltipText": "Reverse the direction of this edge", + "availableOn": ["edge"], + }, + { + "id": "split-edge", + "label": "Split Edge", + "tooltipText": "Insert a node in the middle of this edge", + "availableOn": ["edge"], + }, + { + "id": "link-nodes", + "label": "Link to selected node", + "tooltipText": "Draw an edge between the last selected node and this node", + "availableOn": ["node"], + }, +] + +CONVERSION_FACTOR = 20037508.34 + + +def xy_to_lonlat(x, y): + lon = x * 180.0 / CONVERSION_FACTOR + lat = math.atan(math.exp(-y * math.pi / CONVERSION_FACTOR)) * 360.0 / math.pi - 90.0 + return lon, lat + + +def build_stylesheet(show_labels): + label_style = {"label": "data(label)", "font-size": 8, "text-wrap": "wrap"} if show_labels else {"label": ""} + return [ + { + "selector": "node", + "style": { + **label_style, + "text-valign": "top", + "text-margin-y": -6, + }, + }, + { + "selector": 'node[kind = "transfo"]', + "style": { + "shape": "triangle", + "background-color": "#e03131", + "width": 22, + "height": 22, + }, + }, + { + "selector": 'node[kind = "pole"]', + "style": { + "shape": "ellipse", + "background-color": "#868e96", + "width": 14, + "height": 14, + }, + }, + { + "selector": 'node[kind = "pr"]', + "style": { + "shape": "rectangle", + "background-color": "#ffffff", + "border-color": "#495057", + "border-width": 2, + "width": 14, + "height": 14, + }, + }, + { + "selector": "node:selected", + "style": {"border-color": "#4263eb", "border-width": 3}, + }, + { + "selector": 'node[kind = "boundary"]', + "style": {"opacity": 0, "width": 1, "height": 1, "events": "no"}, + }, + { + "selector": "edge", + "style": { + "width": 3, + "line-color": "#f59f00", + "target-arrow-color": "#f59f00", + "target-arrow-shape": "triangle", + "curve-style": "straight", + }, + }, + { + "selector": "edge:selected", + "style": {"line-color": "#4263eb", "target-arrow-color": "#4263eb"}, + }, + ] + + +def elements_index(elements): + nodes, edges = {}, {} + for el in elements: + d = el["data"] + if "source" in d: + edges[d["id"]] = el + else: + nodes[d["id"]] = el + return nodes, edges + + +def downstream_pr_ids(elements, start_id): + if not start_id: + return [] + nodes, edges = elements_index(elements) + adjacency = {} + for e in edges.values(): + adjacency.setdefault(e["data"]["source"], []).append(e["data"]["target"]) + + result, seen, stack = [], set(), [start_id] + while stack: + cur = stack.pop() + if cur in seen: + continue + seen.add(cur) + node = nodes.get(cur) + if node is not None: + d = node["data"] + if d.get("kind") == "pr" or d.get("also_pr"): + result.append(cur) + for nxt in adjacency.get(cur, []): + stack.append(nxt) + return sorted(set(result)) + + +def apply_context_menu_action(menu_item_id, ctx, elements, last_node_id): + """Return updated elements, or None if nothing changed.""" + elements = copy.deepcopy(elements) + nodes, edges = elements_index(elements) + + if menu_item_id == "add-node": + lon, lat = xy_to_lonlat(ctx["x"], ctx["y"]) + new_id = "N" + str(int(time.time() * 1000))[-8:] + elements.append( + {"data": {"id": new_id, "label": new_id, "kind": "pole", "lat": lat, "lon": lon}} + ) + return elements + + if menu_item_id == "remove-edge": + eid = ctx["elementId"] + return [e for e in elements if e["data"]["id"] != eid] + + if menu_item_id == "revert-edge": + eid = ctx["elementId"] + for e in elements: + if e["data"]["id"] == eid: + e["data"]["source"], e["data"]["target"] = ( + e["data"]["target"], + e["data"]["source"], + ) + return elements + + if menu_item_id == "split-edge": + eid, src, tgt = ctx["elementId"], ctx["edgeSource"], ctx["edgeTarget"] + src_node, tgt_node = nodes.get(src), nodes.get(tgt) + if src_node is None or tgt_node is None: + return None + mid_lat = (src_node["data"]["lat"] + tgt_node["data"]["lat"]) / 2 + mid_lon = (src_node["data"]["lon"] + tgt_node["data"]["lon"]) / 2 + new_id = "N" + str(int(time.time() * 1000))[-8:] + elements = [e for e in elements if e["data"]["id"] != eid] + elements.append( + {"data": {"id": new_id, "label": new_id, "kind": "pole", "lat": mid_lat, "lon": mid_lon}} + ) + elements.append( + {"data": {"id": f"e-{src}-{new_id}", "source": src, "target": new_id, "kind": "conductor"}} + ) + elements.append( + {"data": {"id": f"e-{new_id}-{tgt}", "source": new_id, "target": tgt, "kind": "conductor"}} + ) + return elements + + if menu_item_id == "connect-node-edge": + src = ctx["edgeSource"] + if not last_node_id or last_node_id not in nodes or last_node_id == src: + return None + new_edge_id = f"e-{last_node_id}-{src}-link" + if new_edge_id in edges: + return None + elements.append( + {"data": {"id": new_edge_id, "source": last_node_id, "target": src, "kind": "conductor"}} + ) + return elements + + if menu_item_id == "link-nodes": + tgt = ctx["elementId"] + if not last_node_id or last_node_id not in nodes or last_node_id == tgt or tgt not in nodes: + return None + new_edge_id = f"e-{last_node_id}-{tgt}-link" + if new_edge_id in edges: + return None + elements.append( + {"data": {"id": new_edge_id, "source": last_node_id, "target": tgt, "kind": "conductor"}} + ) + return elements + + return None + + +MAP_ZOOM_OUT_PAD = 0.6 # fraction of the network's own lat/lon span added as margin +MIN_PAD_DEG = 0.0008 # floor so a tiny/single-node network still gets some margin + + +def with_map_padding(elements): + """Append two invisible nodes that widen the auto-fit bounding box, so the + CyLeaflet map shows some margin around the network instead of a tight crop.""" + lats = [e["data"]["lat"] for e in elements if "source" not in e["data"] and "lat" in e["data"]] + lons = [e["data"]["lon"] for e in elements if "source" not in e["data"] and "lon" in e["data"]] + if not lats: + return elements + pad_lat = max((max(lats) - min(lats)) * MAP_ZOOM_OUT_PAD, MIN_PAD_DEG) + pad_lon = max((max(lons) - min(lons)) * MAP_ZOOM_OUT_PAD, MIN_PAD_DEG) + padding_nodes = [ + { + "data": { + "id": "__pad_nw", + "kind": "boundary", + "lat": max(lats) + pad_lat, + "lon": min(lons) - pad_lon, + } + }, + { + "data": { + "id": "__pad_se", + "kind": "boundary", + "lat": min(lats) - pad_lat, + "lon": max(lons) + pad_lon, + } + }, + ] + return elements + padding_nodes + + +def make_cy_leaflet(elements, show_labels): + return cyto.CyLeaflet( + id=MAP_ID, + cytoscape_props={ + "elements": with_map_padding(elements), + "stylesheet": build_stylesheet(show_labels), + "contextMenu": CONTEXT_MENU_ITEMS, + "boxSelectionEnabled": False, + }, + tiles=cyto.CyLeaflet.OSM, + width="100%", + height="100%", + ) + + +LAYOUT_OPTIONS = [ + {"label": "Dagre (tree)", "value": "dagre"}, + {"label": "Breadthfirst", "value": "breadthfirst"}, + {"label": "Cose (force)", "value": "cose"}, + {"label": "Circle", "value": "circle"}, +] + +PAPER_PROPS = dict(shadow="sm", radius="lg", withBorder=True) +PAPER_BG = {"backgroundColor": "white"} + +app = dash.Dash(__name__) +app.title = "LV Network - Cytoscape / Leaflet" +server = app.server + + +def section_label(text): + return dmc.Text(text, size="xs", fw=700, tt="uppercase", c="dimmed", lts="0.03em") + + +control_panel = dmc.Paper( + **PAPER_PROPS, + p="md", + style={**PAPER_BG, "height": "100%", "flex": "0 0 300px", "overflowY": "auto"}, + children=dmc.Stack( + gap="sm", + children=[ + section_label("Control panel"), + dmc.Select( + id="transfo-search", + data=[ + { + "label": tid + if not netdata.TRANSFO_META[tid].get("note") + else f"{tid} -> {netdata.TRANSFO_META[tid]['note']}", + "value": tid, + } + for tid in NETWORK + ], + value=DEFAULT_TRANSFO, + placeholder="Search transformer...", + leftSection=dmc.Text("🔍", size="sm"), + searchable=True, + allowDeselect=False, + radius="md", + ), + dmc.Divider(), + dmc.Stack( + gap=6, + children=[ + section_label("Selected transformer"), + dmc.Badge( + DEFAULT_TRANSFO, + id="selected-transfo-display", + variant="light", + color="indigo", + size="lg", + radius="sm", + ), + ], + ), + dmc.Divider(), + dmc.Switch(id="show-labels", label="Show node labels", checked=True, color="indigo"), + dmc.Divider(), + dmc.Stack( + gap=6, + children=[ + section_label("Tree layout"), + dmc.Select( + id="layout-dropdown", + data=LAYOUT_OPTIONS, + value="dagre", + allowDeselect=False, + radius="md", + ), + ], + ), + dmc.Paper( + id="edit-edge-panel", + withBorder=True, + radius="md", + p="sm", + style={"display": "none", "backgroundColor": "#f8f9fc"}, + children=dmc.Stack( + gap="xs", + children=[ + dmc.Text("Edit edge", fw=700, size="sm"), + dmc.NumberInput(id="edit-edge-length", label="Length (m)", min=0, radius="md"), + dmc.Select( + id="edit-edge-conductor", + label="Conductor type", + data=netdata.CONDUCTOR_TYPES, + radius="md", + ), + dmc.Group( + grow=True, + gap="xs", + children=[ + dmc.Button("Apply", id="edit-edge-apply", n_clicks=0, color="indigo", size="xs"), + dmc.Button("Cancel", id="edit-edge-cancel", n_clicks=0, variant="default", size="xs"), + ], + ), + ], + ), + ), + ], + ), +) + +map_panel = dmc.Paper( + **PAPER_PROPS, + style={**PAPER_BG, "height": "100%", "flex": "1 1 0%", "position": "relative", "overflow": "hidden"}, + children=[ + dmc.Box(id="map-container", style={"height": "100%", "width": "100%"}, children=[ + make_cy_leaflet(NETWORK[DEFAULT_TRANSFO], False) + ]), + ], +) + +tree_panel = dmc.Paper( + **PAPER_PROPS, + style={**PAPER_BG, "height": "100%", "flex": "1 1 0%", "position": "relative", "overflow": "hidden"}, + children=[ + cyto.Cytoscape( + id="tree-view", + elements=NETWORK[DEFAULT_TRANSFO], + layout={"name": "dagre"}, + stylesheet=build_stylesheet(False), + style={"width": "100%", "height": "100%"}, + ), + ], +) + +info_panel = dmc.Paper( + **PAPER_PROPS, + p="md", + style={**PAPER_BG, "height": "100%", "flex": "0 0 320px", "overflowY": "auto"}, + children=dmc.Stack( + gap="sm", + children=[ + section_label("Downstream load lookup"), + dmc.Text( + "Select a node or a conductor on the map or the tree view to see the " + "downstream load.", + size="sm", + c="dimmed", + ), + dmc.Divider(), + dmc.Group( + justify="space-between", + children=[ + dmc.Text("Current selection", size="sm", fw=600), + dmc.Badge("-", id="current-selection", variant="light", color="gray"), + ], + ), + dmc.Stack( + gap=6, + children=[ + dmc.Text("Downstream connection points (PR)", size="sm", fw=600), + dmc.Group(id="downstream-pr-display", gap=6), + ], + ), + dmc.Divider(), + dmc.Stack( + gap=0, + children=[ + dmc.Text("Peak load", size="xs", c="dimmed", tt="uppercase", fw=700), + dmc.Text("-", id="peak-display", fz=28, fw=800, c="indigo"), + ], + ), + ], + ), +) + +chart_panel = dmc.Paper( + **PAPER_PROPS, + p="md", + style={**PAPER_BG, "height": "100%", "flex": "1 1 0%"}, + children=dmc.Stack( + gap="xs", + style={"height": "100%"}, + children=[ + section_label("Downstream load (kVA)"), + dcc.Graph( + id="load-chart", + style={"flex": "1 1 auto", "minHeight": 0}, + config={"displayModeBar": False}, + ), + ], + ), +) + +app.layout = dmc.MantineProvider( + theme={ + "primaryColor": "indigo", + "defaultRadius": "md", + "fontFamily": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif", + }, + children=dmc.Box( + style={ + "height": "100vh", + "backgroundColor": "#eef1f8", + "display": "flex", + "flexDirection": "column", + "overflow": "hidden", + }, + children=[ + dmc.Box( + style={ + "background": "linear-gradient(135deg, #1e1b4b 0%, #4338ca 100%)", + "padding": "12px 28px", + "flex": "0 0 auto", + }, + children=dmc.Stack( + gap=0, + children=[ + dmc.Title("LV Network Studio", order=3, c="white"), + dmc.Text( + "Cytoscape + Leaflet context-menu network editor", + size="xs", + c="indigo.1", + ), + ], + ), + ), + dmc.Box( + style={ + "flex": "1 1 auto", + "display": "flex", + "flexDirection": "column", + "gap": "12px", + "padding": "12px 20px", + "minHeight": 0, + }, + children=[ + dmc.Box( + style={"flex": "3 1 0%", "display": "flex", "gap": "12px", "minHeight": 0}, + children=[control_panel, map_panel, tree_panel], + ), + dmc.Box( + style={"flex": "2 1 0%", "display": "flex", "gap": "12px", "minHeight": 0}, + children=[info_panel, chart_panel], + ), + ], + ), + dcc.Store(id="network-elements", data=NETWORK[DEFAULT_TRANSFO]), + dcc.Store(id="selected-transfo", data=DEFAULT_TRANSFO), + dcc.Store(id="last-tapped-node", data=DEFAULT_TRANSFO), + dcc.Store(id="current-selection-store", data={"id": DEFAULT_TRANSFO, "kind": "node"}), + dcc.Store(id="downstream-pr-store", data=[]), + dcc.Store(id="edit-edge-target"), + ], + ), +) + + +# --------------------------------------------------------------------------- +# Transformer search +# --------------------------------------------------------------------------- +@app.callback( + Output("selected-transfo", "data"), + Output("network-elements", "data", allow_duplicate=True), + Output("selected-transfo-display", "children"), + Output("current-selection-store", "data", allow_duplicate=True), + Input("transfo-search", "value"), + prevent_initial_call=True, +) +def pick_transfo(tid): + if not tid or tid not in NETWORK: + raise PreventUpdate + return tid, NETWORK[tid], tid, {"id": tid, "kind": "node"} + + +# --------------------------------------------------------------------------- +# Render the map (CyLeaflet) and the tree view whenever the data changes +# --------------------------------------------------------------------------- +@app.callback( + Output("map-container", "children"), + Input("network-elements", "data"), + Input("show-labels", "checked"), +) +def render_map(elements, show_labels): + return make_cy_leaflet(elements or [], bool(show_labels)) + + +@app.callback( + Output("tree-view", "elements"), + Output("tree-view", "stylesheet"), + Output("tree-view", "layout"), + Input("network-elements", "data"), + Input("show-labels", "checked"), + Input("layout-dropdown", "value"), +) +def render_tree(elements, show_labels, layout_name): + layout = {"name": layout_name or "dagre", "animate": True} + if layout_name == "dagre": + layout["rankDir"] = "TB" + return elements or [], build_stylesheet(bool(show_labels)), layout + + +# --------------------------------------------------------------------------- +# Context menu (add/remove/revert/edit/split/connect/link) +# --------------------------------------------------------------------------- +@app.callback( + Output("network-elements", "data", allow_duplicate=True), + Output("edit-edge-panel", "style"), + Output("edit-edge-target", "data"), + Output("edit-edge-length", "value"), + Output("edit-edge-conductor", "value"), + Input(MAP_CY_ID, "contextMenuData"), + State("network-elements", "data"), + State("last-tapped-node", "data"), + prevent_initial_call=True, +) +def handle_context_menu(ctx, elements, last_node_id): + if not ctx: + raise PreventUpdate + + if ctx["menuItemId"] == "edit-edge": + nodes, edges = elements_index(elements or []) + edge = edges.get(ctx["elementId"]) + length = edge["data"].get("length_m") if edge else None + conductor = edge["data"].get("conductor_type") if edge else None + return no_update, {"display": "block", "backgroundColor": "#f8f9fc"}, ctx["elementId"], length, conductor + + new_elements = apply_context_menu_action(ctx["menuItemId"], ctx, elements or [], last_node_id) + if new_elements is None: + raise PreventUpdate + return new_elements, {"display": "none"}, None, no_update, no_update + + +@app.callback( + Output("network-elements", "data", allow_duplicate=True), + Output("edit-edge-panel", "style", allow_duplicate=True), + Input("edit-edge-apply", "n_clicks"), + State("edit-edge-target", "data"), + State("edit-edge-length", "value"), + State("edit-edge-conductor", "value"), + State("network-elements", "data"), + prevent_initial_call=True, +) +def apply_edit_edge(n_clicks, edge_id, length, conductor, elements): + if not n_clicks or not edge_id: + raise PreventUpdate + elements = copy.deepcopy(elements) + for e in elements: + if e["data"].get("id") == edge_id: + if length is not None: + e["data"]["length_m"] = length + if conductor is not None: + e["data"]["conductor_type"] = conductor + return elements, {"display": "none"} + + +@app.callback( + Output("edit-edge-panel", "style", allow_duplicate=True), + Input("edit-edge-cancel", "n_clicks"), + prevent_initial_call=True, +) +def cancel_edit_edge(n_clicks): + if not n_clicks: + raise PreventUpdate + return {"display": "none"} + + +# --------------------------------------------------------------------------- +# Selection tracking (map + tree) -> downstream PR computation +# --------------------------------------------------------------------------- +@app.callback( + Output("last-tapped-node", "data"), + Output("current-selection-store", "data", allow_duplicate=True), + Input(MAP_CY_ID, "tapNodeData"), + Input(MAP_CY_ID, "tapEdgeData"), + Input("tree-view", "tapNodeData"), + Input("tree-view", "tapEdgeData"), + prevent_initial_call=True, +) +def track_selection(map_node, map_edge, tree_node, tree_edge): + # prop_id looks like "tree-view.tapNodeData" or '{"component":...}.tapEdgeData' + prop_id = callback_context.triggered[0]["prop_id"] + _, _, prop_name = prop_id.rpartition(".") + + if prop_id.startswith("tree-view."): + data = tree_node if prop_name == "tapNodeData" else tree_edge + kind = "node" if prop_name == "tapNodeData" else "edge" + else: + data = map_node if prop_name == "tapNodeData" else map_edge + kind = "node" if prop_name == "tapNodeData" else "edge" + + if not data: + raise PreventUpdate + + selection = {"id": data.get("id"), "kind": kind} + last_node = data.get("id") if kind == "node" else no_update + return last_node, selection + + +EMPTY_FIGURE = go.Figure(go.Scatter(x=[], y=[], mode="lines")) +EMPTY_FIGURE.update_layout( + margin={"l": 50, "r": 20, "t": 10, "b": 30}, + yaxis_title="Load (kVA)", + template="mantine_light", +) + + +def make_chart(series): + fig = go.Figure( + go.Scatter(x=series.index, y=series.values, mode="lines", line={"width": 1, "color": "#4263eb"}) + ) + fig.update_layout( + margin={"l": 50, "r": 20, "t": 10, "b": 30}, + yaxis_title="Load (kVA)", + template="mantine_light", + ) + return fig + + +@app.callback( + Output("current-selection", "children"), + Output("current-selection", "color"), + Output("downstream-pr-display", "children"), + Output("downstream-pr-store", "data"), + Output("load-chart", "figure"), + Output("peak-display", "children"), + Input("current-selection-store", "data"), + State("network-elements", "data"), +) +def update_selection_display(selection, elements): + empty_pr = [dmc.Text("-", size="sm", c="dimmed")] + if not selection: + return "-", "gray", empty_pr, [], EMPTY_FIGURE, "-" + start_id = selection["id"] + if selection["kind"] == "edge": + nodes, edges = elements_index(elements or []) + edge = edges.get(start_id) + start_id = edge["data"]["target"] if edge else None + pr_ids = downstream_pr_ids(elements or [], start_id) + label = selection["id"] + badge_color = "blue" if selection["kind"] == "node" else "orange" + pr_badges = ( + [dmc.Badge(pr, variant="dot", color="gray", size="sm") for pr in pr_ids] + if pr_ids + else [dmc.Text("-", size="sm", c="dimmed")] + ) + + cols = [c for c in pr_ids if c in LOAD_DF.columns] + if not cols: + return label, badge_color, pr_badges, pr_ids, EMPTY_FIGURE, "-" + + series = LOAD_DF[cols].sum(axis=1) + peak = series.max() + fig = make_chart(series) + return label, badge_color, pr_badges, pr_ids, fig, f"{peak:.1f} kVA" + + +if __name__ == "__main__": + app.run(debug=True, port=8080) diff --git a/energy-leaflet-cytoscape-visualizer/assets/style.css b/energy-leaflet-cytoscape-visualizer/assets/style.css new file mode 100644 index 0000000..85981e7 --- /dev/null +++ b/energy-leaflet-cytoscape-visualizer/assets/style.css @@ -0,0 +1,8 @@ +html, body { + margin: 0; + padding: 0; +} + +#react-entry-point, #_dash-app-content { + min-height: 100vh; +} diff --git a/energy-leaflet-cytoscape-visualizer/data.py b/energy-leaflet-cytoscape-visualizer/data.py new file mode 100644 index 0000000..91cce94 --- /dev/null +++ b/energy-leaflet-cytoscape-visualizer/data.py @@ -0,0 +1,194 @@ +"""Synthetic data generation for the BT (low-voltage) network demo. + +Builds a handful of fake distribution-network trees (one per transformer) +with realistic-looking lat/lon positions, plus synthetic hourly load +curves for every connection point (PR - Point de Raccordement). + +Everything is deterministic (seeded) so the app looks the same on every run. +""" +import math +import random + +import numpy as np +import pandas as pd + +# --------------------------------------------------------------------------- +# Transformer metadata (shown in the search box on the left) +# --------------------------------------------------------------------------- +TRANSFO_META = { + "IDM_K7G2R": { + "note": None, + "base": (45.5230, -73.5820), # Plateau-Mont-Royal, Montreal + "n_nodes": 11, + "also_pr": False, + }, + "IDM_H7Y8R": { + "note": "transformer and PR on the same node", + "base": (45.5450, -73.5800), # Rosemont, Montreal + "n_nodes": 9, + "also_pr": True, + }, + "IDM_9X3LQ": { + "note": None, + "base": (45.4590, -73.5680), # Verdun, Montreal + "n_nodes": 14, + "also_pr": False, + }, + "IDM_3F9PL": { + "note": None, + "base": (45.5240, -73.6050), # Mile End, Montreal + "n_nodes": 7, + "also_pr": False, + }, + "IDM_Q2N6Z": { + "note": "large feeder, many downstream PRs", + "base": (45.5480, -73.5560), # Hochelaga-Maisonneuve, Montreal + "n_nodes": 19, + "also_pr": False, + }, +} + +CONDUCTOR_TYPES = ["Alu 50mm2", "Alu 95mm2", "Cu 95mm2", "Cu 150mm2"] + +EARTH_RADIUS_M = 6378137.0 + + +def _local_to_latlon(base_lat, base_lon, dx_m, dy_m): + """Offset (in meters) from a base lat/lon -> new lat/lon.""" + dlat = (dy_m / EARTH_RADIUS_M) * (180.0 / math.pi) + dlon = (dx_m / (EARTH_RADIUS_M * math.cos(math.radians(base_lat)))) * ( + 180.0 / math.pi + ) + return base_lat + dlat, base_lon + dlon + + +def _random_tree(rng, n_total): + """Return {child_index: parent_index} for a uniform random recursive tree.""" + parent = {0: None} + for i in range(1, n_total): + p = rng.randint(0, i - 1) + parent[i] = p + return parent + + +def _gen_pr_id(rng, used): + while True: + pid = str(rng.randint(100000, 999999)) + if pid not in used: + used.add(pid) + return pid + + +def build_transfo_elements(transfo_id, meta, seed): + """Build the cytoscape elements (nodes + edges) for one transformer's subtree.""" + rng = random.Random(seed) + n_total = meta["n_nodes"] + parent = _random_tree(rng, n_total) + + children = {i: [] for i in range(n_total)} + for child, p in parent.items(): + if p is not None: + children[p].append(child) + + # local xy layout: root at origin, children fan out generally eastwards + xy = {0: (0.0, 0.0)} + order = sorted(parent.keys()) + for i in order[1:]: + p = parent[i] + px, py = xy[p] + dx = rng.uniform(25, 55) + dy = rng.uniform(-30, 30) + xy[i] = (px + dx, py + dy) + + base_lat, base_lon = meta["base"] + used_ids = set() + node_id = {} + node_kind = {} + + elements = [] + for i in order: + dx, dy = xy[i] + lat, lon = _local_to_latlon(base_lat, base_lon, dx, dy) + if i == 0: + nid = transfo_id + kind = "transfo" + else: + is_leaf = len(children[i]) == 0 + kind = "pr" if is_leaf else rng.choice(["pole", "pole", "pr"]) + nid = _gen_pr_id(rng, used_ids) if kind == "pr" else f"N{seed}{i:02d}" + node_id[i] = nid + node_kind[i] = kind + data = {"id": nid, "label": nid, "kind": kind, "lat": lat, "lon": lon} + if kind == "transfo" and meta.get("also_pr"): + data["also_pr"] = True + elements.append({"data": data}) + + for i in order[1:]: + p = parent[i] + eid = f"e-{node_id[p]}-{node_id[i]}" + elements.append( + { + "data": { + "id": eid, + "source": node_id[p], + "target": node_id[i], + "kind": "conductor", + "length_m": round(math.hypot(*[a - b for a, b in zip(xy[i], xy[p])]), 1), + "conductor_type": rng.choice(CONDUCTOR_TYPES), + } + } + ) + + return elements + + +def build_network(): + """Return {transfo_id: elements} for every transformer in TRANSFO_META.""" + network = {} + for seed, (tid, meta) in enumerate(TRANSFO_META.items()): + network[tid] = build_transfo_elements(tid, meta, seed=seed + 1) + return network + + +def all_pr_ids(network): + ids = [] + for elements in network.values(): + for el in elements: + d = el["data"] + if "source" in d: + continue + if d.get("kind") == "pr" or d.get("also_pr"): + ids.append(d["id"]) + return ids + + +def build_load_curves(pr_ids, start="2022-06-01", end="2023-05-31", freq="30min", seed=0): + """Synthetic half-hourly load curves (kVA) for every PR, June 2022 - May 2023.""" + rng = np.random.default_rng(seed) + idx = pd.date_range(start=start, end=end, freq=freq, inclusive="left") + n = len(idx) + + hour = idx.hour.values + idx.minute.values / 60.0 + day_of_year = idx.dayofyear.values + + # winter (heating) ramp: higher consumption from ~Nov to ~Mar + winter_factor = 1 + 1.4 * np.clip( + np.cos(2 * np.pi * (day_of_year - 15) / 365.0), 0, None + ) + daily_pattern = 1 + 0.6 * np.exp(-((hour - 12.5) ** 2) / (2 * 4.0 ** 2)) + 0.5 * np.exp( + -((hour - 20) ** 2) / (2 * 2.5 ** 2) + ) + + data = {} + for pid in pr_ids: + base = rng.uniform(2.5, 6.5) + noise = rng.normal(0, 0.6, size=n) + walk = np.cumsum(rng.normal(0, 0.03, size=n)) + walk -= walk.mean() + series = base * daily_pattern * winter_factor + noise + walk + spikes_idx = rng.choice(n, size=max(1, n // 900), replace=False) + series[spikes_idx] += rng.uniform(8, 25, size=len(spikes_idx)) + series = np.clip(series, 0.1, None) + data[pid] = series + + return pd.DataFrame(data, index=idx) diff --git a/energy-leaflet-cytoscape-visualizer/requirements.txt b/energy-leaflet-cytoscape-visualizer/requirements.txt new file mode 100644 index 0000000..9680675 --- /dev/null +++ b/energy-leaflet-cytoscape-visualizer/requirements.txt @@ -0,0 +1,6 @@ +dash>=2.17 +dash-cytoscape>=1.0.2 +dash-leaflet>=1.0.15 +dash-mantine-components>=2.0.0 +pandas +numpy diff --git a/lithium-supply-chain/Procfile b/lithium-supply-chain/Procfile new file mode 100644 index 0000000..75f6e60 --- /dev/null +++ b/lithium-supply-chain/Procfile @@ -0,0 +1,2 @@ + +web: gunicorn app:server --workers 4 \ No newline at end of file diff --git a/lithium-supply-chain/app.py b/lithium-supply-chain/app.py new file mode 100644 index 0000000..d18d802 --- /dev/null +++ b/lithium-supply-chain/app.py @@ -0,0 +1,51 @@ +import dash_mantine_components as dmc +from dash import html + +import pages +from constants import MANTINE_THEME, NAVY, app + +server = app.server + +header = html.Div( + dmc.Group( + gap=14, + style={"height": "100%"}, + children=[ + dmc.Text( + "Lithium Supply Chain Tracker", + c="white", + fw=600, + size="lg", + style={"lineHeight": 1.2}, + ), + ], + ), + className="app-header", +) + + + +app.layout = dmc.MantineProvider( + theme=MANTINE_THEME, + children=[ + html.Meta( + name="viewport", + content="width=device-width, initial-scale=1, shrink-to-fit=no", + ), + html.Link( + rel="stylesheet", + href="https://fonts.googleapis.com/css?family=Poppins", + ), + html.Meta(name="theme-color", content=NAVY), + header, + html.Div( + id="content", + className="app-content", + children=pages.supply_sankey.layout(), + ) + ], +) + + +if __name__ == "__main__": + app.run(debug=True,port=8060) diff --git a/lithium-supply-chain/assets/media_queries.css b/lithium-supply-chain/assets/media_queries.css new file mode 100644 index 0000000..e69de29 diff --git a/lithium-supply-chain/assets/styles.css b/lithium-supply-chain/assets/styles.css new file mode 100644 index 0000000..7417ba5 --- /dev/null +++ b/lithium-supply-chain/assets/styles.css @@ -0,0 +1,133 @@ +:root { + --brand: #3a92d4; + --brand-dark: #2778b8; + --navy: #155d90; + --page-bg: #fbfaf8; + --card-border: #e7e3dd; + --text-muted: #877869; +} + +* { + font-family: "Poppins", sans-serif; +} + +body { + background-color: var(--page-bg); + margin: 0; +} + +.app-header { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 68px; + padding: 0px 24px; + background-color: var(--navy); + z-index: 100; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); +} + +.app-content { + margin-top: 68px; + min-height: calc(100vh - 68px); +} + +/* layout utilities */ +.flex-row { + display: flex !important; + flex-direction: row !important; +} + +.flex-column { + display: flex; + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-start { + justify-content: flex-start; +} + +.flex-end { + display: flex; + justify-content: flex-end; +} + +.justify-center { + justify-content: center; + width: 100%; +} + +.space-between { + justify-content: space-between; + width: 100%; +} + +.space-evenly { + justify-content: space-evenly; + width: 100%; +} + +.center-align { + display: flex; + align-items: center; +} + +.left-align { + justify-content: left; + width: 100%; +} + +.flex-grow-1 { + display: flex; + flex-grow: 1; +} + +.page-div { + padding: 20px; + gap: 20px; + box-sizing: border-box; +} + +.node-container { + overflow-x: auto; + /* overflow-y left unset (not "hidden"): with overflow-x:auto, browsers + force overflow-y to compute as "auto" too (never truly "visible"), + so it still clips an open dropdown's popup at the row's bottom edge. + The :focus-within rule below is what actually lets it escape. */ +} + +/* While a node dropdown is open (its card has focus), drop clipping on + the whole row so the popup isn't cut off. Horizontal scrolling still + works the rest of the time, which is the only time it's needed. */ +.node-container:focus-within { + overflow: visible; +} + +.filter-container { + overflow-x: auto; + white-space: nowrap; +} + +.node-card { + min-width: 240px !important; + max-width: 280px !important; + margin: 8px !important; + flex-shrink: 0 !important; +} + +/* Without this, an open dropdown still loses to sibling node cards: + z-index on the (unportaled) dropdown only wins within its own + stacking context, and a plain position:relative card doesn't start + one. Bumping the whole card while it has focus does. + overflow only goes visible while focused (dropdown open) so the + card's rounded top corners are clipped/visible normally. */ +.node-card:focus-within { + position: relative; + z-index: 1000; + overflow: visible; +} diff --git a/lithium-supply-chain/constants.py b/lithium-supply-chain/constants.py new file mode 100644 index 0000000..8345b65 --- /dev/null +++ b/lithium-supply-chain/constants.py @@ -0,0 +1,68 @@ +import os + +import dash + + +app = dash.Dash( + __name__, + suppress_callback_exceptions=True, + external_stylesheets=[ + "assets/styles.css", + "assets/media_queries.css", + ], +) + +app.title = "Lithium Supply Chain Tracker" + +# Dash always renders a favicon (falling back to its own default +# icon when assets/favicon.ico is absent), so the only way to have none +# at all is to drop the {%favicon%} placeholder from the index template. +app.index_string = """ + + + {%metas%} + {%title%} + {%css%} + + + {%app_entry%} + + +""" + + +DEFAULT_SANKEY_NODES = [ + "Resource Country", + "Product", +] + +# Brand color ramp (light -> dark) used as the Mantine primary color +# (drives buttons and other primary-colored controls). +BRAND_COLOR = [ + "#eef6fd", + "#dcedfb", + "#c3e0f7", + "#a0cdf0", + "#7ab9e8", + "#56a5df", + "#3a92d4", + "#2778b8", + "#1a6099", + "#0f4a7a", +] +NAVY = "#155d90" +PAGE_BACKGROUND = "#fbfaf8" +CARD_BORDER = "#e7e3dd" + +MANTINE_THEME = { + "fontFamily": "'Poppins', sans-serif", + "headings": {"fontFamily": "'Poppins', sans-serif", "fontWeight": 600}, + "primaryColor": "brand", + "defaultRadius": "md", + "colors": {"brand": BRAND_COLOR}, + "black": "#2f2821", +} diff --git a/lithium-supply-chain/data/colors.csv b/lithium-supply-chain/data/colors.csv new file mode 100644 index 0000000..462728b --- /dev/null +++ b/lithium-supply-chain/data/colors.csv @@ -0,0 +1,573 @@ +name,color +Northstar Industries,#afa28e +Atlas Corp,#afa28e +Blue Horizon Minerals,#afa28e +Granite Energy,#afa28e +Pioneer Materials,#afa28e +Northstar Minerals,#afa28e +Cobalt Bay Mining,#afa28e +Atlas Energy,#afa28e +Atlas Holdings,#afa28e +Vantage Materials,#afa28e +Cascade Mining,#afa28e +Granite Industries,#afa28e +Golden Peak Industries,#a29486 +Sierra Holdings,#afa28e +Frontier Industries,#afa28e +Summit Holdings,#afa28e +Ironclad Holdings,#436d95 +Summit Industries,#afa28e +Highland Minerals,#afa28e +Horizon Materials,#afa28e +Summit Materials,#afa28e +Falcon Energy,#afa28e +Cobalt Bay Materials,#afa28e +Amber Metals,#8bb094 +Frontier Group,#7fa1bd +Amber Resources,#afa28e +Amber Corp,#afa28e +Vantage Energy,#afa28e +Cascade Materials,#afa28e +Stonebridge Holdings,#afa28e +Blue Horizon Mining,#afa28e +Redwood Metals,#afa28e +Golden Peak Holdings,#afa28e +Amber Energy,#788a98 +Pioneer Mining,#afa28e +Ironclad Energy,#afa28e +Copper Creek Group,#afa28e +Pioneer Resources,#afa28e +Ironclad Industries,#afa28e +Silverridge Industries,#afa28e +Cobalt Bay Corp,#afa28e +Frontier Holdings,#afa28e +Frontier Metals,#afa28e +Titan Corp,#afa28e +Silverridge Minerals,#afa28e +Northstar Metals,#afa28e +Titan Resources,#afa28e +Crescent Corp,#afa28e +Pioneer Energy,#afa28e +Blue Horizon Corp,#afa28e +Atlas Materials,#afa28e +Pioneer Industries,#afa28e +Northstar Corp,#afa28e +Ironclad Corp,#afa28e +Redwood Industries,#afa28e +Horizon Energy,#afa28e +Cascade Energy,#afa28e +Cascade Resources,#afa28e +Falcon Materials,#afa28e +Silverridge Group,#afa28e +Atlas Resources,#afa28e +Vantage Metals,#afa28e +Atlas Industries,#afa28e +Sierra Metals,#afa28e +Stonebridge Energy,#afa28e +Meridian Corp,#afa28e +Blue Horizon Group,#afa28e +Titan Holdings,#ddbd5f +Falcon Mining,#d2af6a +Summit Corp,#afa28e +Blue Horizon Resources,#afa28e +Granite Resources,#afa28e +Cobalt Bay Industries,#afa28e +Falcon Minerals,#afa28e +Golden Peak Group,#afa28e +Redwood Holdings,#afa28e +Summit Mining,#afa28e +Granite Mining,#afa28e +Golden Peak Resources,#afa28e +Vantage Mining,#afa28e +Titan Mining,#afa28e +Ironclad Minerals,#afa28e +Sierra Mining,#afa28e +Horizon Minerals,#afa28e +Pioneer Corp,#afa28e +Stonebridge Metals,#afa28e +Horizon Resources,#afa28e +Meridian Mining,#c6b775 +Vantage Minerals,#afa28e +Frontier Energy,#afa28e +Atlas Group,#afa28e +Silverridge Mining,#afa28e +Stonebridge Minerals,#afa28e +Northstar Holdings,#afa28e +Highland Resources,#85b7a3 +Horizon Industries,#d4a72b +Germany,#c7422b +Argentina,#afa28e +South Korea,#638759 +Norway,#afa28e +Vietnam,#833b45 +Indonesia,#9b963b +Zambia,#afa28e +Japan,#e2713d +United States,#71442f +Austria,#afa28e +France,#afa28e +Kazakhstan,#4d9889 +India,#afa28e +Bolivia,#574a3d +Finland,#afa28e +Poland,#d0846d +Sweden,#d2571e +Morocco,#dfae2a +DR Congo,#7b984c +United Kingdom,#7c7928 +Spain,#5daa98 +Serbia,#5e8eaf +Italy,#874927 +South Africa,#d6a94b +Mexico,#afa28e +Ghana,#905f78 +Ireland,#afa28e +Lithium Carbonate,#5f6f7c +Lithium Hydroxide,#b4a388 +Spodumene Concentrate,#e4a63f +Lithium Metal,#e05d23 +North America,#4b8053 +South America,#9f7480 +Europe,#c8b174 +Asia Pacific,#a89581 +Middle East & Africa,#829946 +Oceania,#afa28e +RES-1094,#afa28e +Spot Market Spod,#d07c51 +RES-1211,#afa28e +RES-1089,#afa28e +RES-1185,#afa28e +RES-1242,#afa28e +RES-1129,#afa28e +RES-1054,#afa28e +RES-1137,#afa28e +RES-1179,#afa28e +RES-1265,#afa28e +RES-1196,#afa28e +RES-1159,#afa28e +RES-1181,#afa28e +RES-1002,#afa28e +RES-1018,#afa28e +RES-1189,#afa28e +RES-1117,#afa28e +RES-1076,#afa28e +RES-1165,#afa28e +RES-1227,#afa28e +RES-1033,#afa28e +RES-1101,#afa28e +RES-1250,#afa28e +Spot Market Lep,#6f95bb +RES-1194,#afa28e +RES-1238,#afa28e +RES-1171,#afa28e +RES-1052,#afa28e +RES-1066,#afa28e +RES-1226,#afa28e +RES-1133,#afa28e +RES-1144,#afa28e +RES-1223,#afa28e +RES-1168,#afa28e +RES-1107,#afa28e +RES-1215,#afa28e +RES-1158,#afa28e +RES-1010,#afa28e +RES-1212,#afa28e +RES-1231,#afa28e +RES-1063,#afa28e +RES-1145,#afa28e +RES-1255,#afa28e +RES-1103,#afa28e +RES-1060,#afa28e +RES-1172,#afa28e +RES-1213,#afa28e +RES-1152,#afa28e +RES-1017,#afa28e +RES-1263,#afa28e +RES-1020,#afa28e +RES-1130,#afa28e +RES-1225,#afa28e +RES-1040,#afa28e +RES-1135,#afa28e +RES-1218,#afa28e +RES-1128,#afa28e +RES-1122,#afa28e +RES-1149,#afa28e +RES-1012,#afa28e +RES-1232,#afa28e +RES-1080,#afa28e +RES-1191,#afa28e +RES-1015,#afa28e +RES-1138,#afa28e +RES-1188,#afa28e +RES-1148,#afa28e +RES-1014,#afa28e +RES-1055,#afa28e +RES-1075,#afa28e +RES-1048,#afa28e +RES-1039,#afa28e +RES-1124,#afa28e +RES-1183,#afa28e +RES-1169,#afa28e +RES-1142,#afa28e +RES-1247,#afa28e +RES-1187,#afa28e +RES-1178,#afa28e +RES-1108,#afa28e +RES-1073,#afa28e +RES-1116,#afa28e +RES-1259,#afa28e +RES-1200,#afa28e +RES-1237,#afa28e +RES-1067,#afa28e +RES-1099,#afa28e +RES-1000,#afa28e +RES-1097,#afa28e +RES-1042,#afa28e +RES-1030,#afa28e +RES-1205,#afa28e +RES-1109,#afa28e +RES-1246,#afa28e +RES-1248,#afa28e +RES-1208,#afa28e +RES-1085,#afa28e +RES-1121,#afa28e +RES-1047,#afa28e +RES-1007,#afa28e +RES-1025,#afa28e +Spodumene,#d07c51 +Petalite,#8db255 +Lepidolite,#d3aa65 +Brine,#8b9284 +Hard Rock,#dfb55d +Pegmatite,#a0ba82 +Clay,#3a6644 +Salar Brine,#722d37 +China,#5c3a23 +Australia,#afa28e +Netherlands,#9e4b29 +Falcon Holdings,#b59e87 +Crescent Energy,#afa28e +Amber Mining,#afa28e +Highland Corp,#afa28e +Cascade Corp,#afa28e +Redwood Group,#da7231 +CNV-1036,#afa28e +CNV-1228,#afa28e +CNV-1160,#afa28e +CNV-1193,#afa28e +CNV-1262,#afa28e +CNV-1257,#afa28e +CNV-1249,#afa28e +CNV-1120,#afa28e +CNV-1102,#afa28e +CNV-1245,#afa28e +CNV-1110,#afa28e +CNV-1091,#afa28e +CNV-1256,#afa28e +CNV-1176,#afa28e +CNV-1162,#afa28e +CNV-1068,#afa28e +CNV-1082,#afa28e +CNV-1202,#afa28e +CNV-1161,#afa28e +CNV-1092,#afa28e +CNV-1078,#afa28e +CNV-1206,#afa28e +CNV-1100,#afa28e +CNV-1229,#afa28e +CNV-1177,#afa28e +CNV-1136,#afa28e +CNV-1083,#afa28e +CNV-1154,#afa28e +CNV-1056,#afa28e +CNV-1216,#afa28e +CNV-1132,#afa28e +CNV-1164,#afa28e +CNV-1095,#afa28e +CNV-1104,#afa28e +CNV-1224,#afa28e +CNV-1140,#afa28e +CNV-1050,#afa28e +CNV-1057,#afa28e +CNV-1157,#afa28e +CNV-1065,#afa28e +CNV-1180,#afa28e +CNV-1059,#afa28e +CNV-1197,#afa28e +CNV-1038,#afa28e +CNV-1006,#afa28e +CNV-1201,#afa28e +CNV-1190,#afa28e +CNV-1037,#afa28e +CNV-1195,#afa28e +CNV-1199,#afa28e +CNV-1264,#afa28e +CNV-1222,#afa28e +CNV-1021,#afa28e +CNV-1081,#afa28e +CNV-1175,#afa28e +CNV-1043,#afa28e +CNV-1111,#afa28e +CNV-1032,#afa28e +CNV-1221,#afa28e +CNV-1253,#afa28e +CNV-1166,#afa28e +CNV-1049,#afa28e +CNV-1230,#afa28e +CNV-1008,#afa28e +CNV-1035,#afa28e +CNV-1084,#afa28e +CNV-1051,#afa28e +CNV-1024,#afa28e +CNV-1086,#afa28e +CNV-1234,#afa28e +CNV-1150,#afa28e +CNV-1105,#afa28e +CNV-1044,#afa28e +CNV-1058,#afa28e +CNV-1174,#afa28e +CNV-1028,#afa28e +CNV-1209,#afa28e +CNV-1114,#afa28e +CNV-1235,#afa28e +CNV-1096,#afa28e +CNV-1167,#afa28e +CNV-1203,#afa28e +CNV-1098,#afa28e +CNV-1251,#afa28e +CNV-1254,#afa28e +CNV-1118,#afa28e +CNV-1003,#afa28e +CNV-1093,#afa28e +CNV-1022,#afa28e +CNV-1241,#afa28e +CNV-1207,#afa28e +CNV-1258,#afa28e +CNV-1079,#afa28e +CNV-1240,#afa28e +CNV-1123,#afa28e +CNV-1260,#afa28e +CNV-1210,#afa28e +CNV-1131,#afa28e +CNV-1031,#afa28e +CNV-1143,#afa28e +CNV-1153,#afa28e +CNV-1045,#afa28e +CNV-1119,#afa28e +CNV-1186,#afa28e +CNV-1046,#afa28e +CNV-1147,#afa28e +CNV-1005,#afa28e +CNV-1016,#afa28e +CNV-1233,#afa28e +CNV-1173,#afa28e +CNV-1126,#afa28e +CNV-1074,#afa28e +CNV-1214,#afa28e +CNV-1106,#afa28e +CNV-1004,#afa28e +CNV-1146,#afa28e +CNV-1019,#afa28e +CNV-1115,#afa28e +CNV-1088,#afa28e +CNV-1127,#afa28e +CNV-1009,#afa28e +CNV-1217,#afa28e +CNV-1001,#afa28e +CNV-1071,#afa28e +CNV-1184,#afa28e +CNV-1090,#afa28e +CNV-1134,#afa28e +CNV-1113,#afa28e +CNV-1041,#afa28e +CNV-1204,#afa28e +CNV-1198,#afa28e +CNV-1261,#afa28e +CNV-1252,#afa28e +CNV-1011,#afa28e +CNV-1070,#afa28e +CNV-1244,#afa28e +CNV-1023,#afa28e +CNV-1013,#afa28e +CNV-1064,#afa28e +CNV-1125,#afa28e +CNV-1170,#afa28e +CNV-1151,#afa28e +CNV-1192,#afa28e +CNV-1087,#afa28e +CNV-1053,#afa28e +CNV-1163,#afa28e +CNV-1069,#afa28e +CNV-1236,#afa28e +CNV-1155,#afa28e +CNV-1027,#afa28e +CNV-1029,#afa28e +CNV-1239,#afa28e +CNV-1034,#afa28e +CNV-1026,#afa28e +CNV-1182,#afa28e +CNV-1141,#afa28e +CNV-1243,#afa28e +CNV-1219,#afa28e +CNV-1156,#afa28e +CNV-1077,#afa28e +CNV-1139,#afa28e +CNV-1112,#afa28e +CNV-1220,#afa28e +CNV-1072,#afa28e +Highland Group,#afa28e +Highland Metals,#afa28e +Vantage Holdings,#afa28e +Granite Corp,#afa28e +Highland Materials,#afa28e +Northstar Group,#afa28e +Meridian Energy,#afa28e +Cascade Metals,#afa28e +Vantage Group,#afa28e +Ironclad Resources,#afa28e +Summit Group,#afa28e +Silverridge Metals,#afa28e +Granite Metals,#afa28e +Meridian Materials,#afa28e +Falcon Group,#afa28e +Golden Peak Minerals,#afa28e +Horizon Metals,#afa28e +Highland Energy,#afa28e +Czech Republic,#db8261 +Nigeria,#afa28e +Canada,#afa28e +Brazil,#afa28e +Portugal,#7f6851 +Namibia,#afa28e +Mali,#afa28e +Peru,#afa28e +Tier 1 Priority,#ceac6f +Tier 2 Priority,#aba291 +Tier 3 Priority,#afa28e +Strategic Reserve,#9cae8e +Highland Park Deposit,#afa28e +Moonlight Basin Prospect,#afa28e +Rustic Hollow Prospect,#afa28e +Crystal Springs Project,#afa28e +Green Hollow Deposit,#afa28e +Willow Bend Claim,#afa28e +Amber Hills Claim,#afa28e +Thunder Ridge Prospect,#afa28e +Cedar Grove Mine,#afa28e +Crystal Springs Claim,#afa28e +Sunset Basin Deposit,#afa28e +Copperhead Mine,#afa28e +Silver Creek Mine,#afa28e +Eagle Point Claim,#afa28e +Amber Hills Mine,#afa28e +Falcon Crest Mine,#afa28e +Golden Ridge Project,#afa28e +Granite Falls Deposit,#afa28e +Blue Mesa Claim,#afa28e +Silver Creek Claim,#afa28e +Thunder Ridge Deposit,#afa28e +Painted Mesa Project,#afa28e +Stone Valley Prospect,#afa28e +Highland Park Mine,#afa28e +Black Rock Project,#afa28e +Timber Creek Mine,#afa28e +Moonlight Basin Deposit,#afa28e +Timber Creek Prospect,#afa28e +Silver Creek Project,#afa28e +Amber Hills Project,#afa28e +Maple Run Deposit,#afa28e +White Pine Claim,#afa28e +Falcon Crest Project,#afa28e +Blue Mesa Project,#afa28e +Falcon Crest Claim,#afa28e +Blue Mesa Mine,#afa28e +Green Hollow Prospect,#afa28e +Crystal Springs Prospect,#afa28e +Thunder Ridge Mine,#afa28e +Crystal Springs Mine,#afa28e +Highland Park Project,#afa28e +Eagle Point Project,#afa28e +White Pine Project,#afa28e +Granite Falls Project,#afa28e +Willow Bend Project,#afa28e +Stone Valley Deposit,#afa28e +Rustic Hollow Deposit,#afa28e +Moonlight Basin Project,#afa28e +Cedar Grove Prospect,#afa28e +Painted Mesa Claim,#afa28e +Sunset Basin Project,#afa28e +Copperhead Prospect,#afa28e +Iron Bluff Project,#afa28e +Copperhead Project,#afa28e +Blue Mesa Deposit,#afa28e +Black Rock Deposit,#afa28e +Timber Creek Project,#afa28e +Red Canyon Claim,#afa28e +White Pine Prospect,#afa28e +Green Hollow Claim,#afa28e +Falcon Crest Prospect,#afa28e +Willow Bend Prospect,#afa28e +Golden Ridge Claim,#afa28e +Sunset Basin Claim,#afa28e +Golden Ridge Prospect,#afa28e +Rustic Hollow Mine,#afa28e +Eagle Point Prospect,#afa28e +Maple Run Mine,#afa28e +Rustic Hollow Claim,#afa28e +Amber Hills Prospect,#afa28e +Highland Park Claim,#afa28e +Stone Valley Claim,#afa28e +Sunset Basin Prospect,#afa28e +Iron Bluff Prospect,#afa28e +Copperhead Claim,#afa28e +Painted Mesa Prospect,#afa28e +White Pine Mine,#afa28e +Copperhead Deposit,#afa28e +Silver Creek Prospect,#afa28e +Blue Mesa Prospect,#afa28e +Red Canyon Deposit,#afa28e +Red Canyon Prospect,#afa28e +Black Rock Claim,#afa28e +White Pine Deposit,#afa28e +Golden Ridge Mine,#afa28e +Green Hollow Project,#afa28e +Maple Run Claim,#afa28e +Granite Falls Mine,#afa28e +Thunder Ridge Project,#afa28e +Eagle Point Mine,#afa28e +Moonlight Basin Claim,#afa28e +Golden Ridge Deposit,#afa28e +Granite Falls Claim,#afa28e +Stone Valley Mine,#afa28e +Thunder Ridge Claim,#afa28e +Amber Hills Deposit,#afa28e +Falcon Crest Deposit,#afa28e +Red Canyon Project,#afa28e +Painted Mesa Mine,#afa28e +Rustic Hollow Project,#afa28e +Iron Bluff Mine,#afa28e +Iron Bluff Claim,#afa28e +Green Hollow Mine,#afa28e +Granite Falls Prospect,#afa28e +Maple Run Project,#afa28e +Cedar Grove Claim,#afa28e +Crystal Springs Deposit,#afa28e +Iron Bluff Deposit,#afa28e +Red Canyon Mine,#afa28e +Black Rock Mine,#afa28e +Timber Creek Claim,#afa28e +Silver Creek Deposit,#afa28e +Moonlight Basin Mine,#d4a72b +Cedar Grove Deposit,#afa28e +Sunset Basin Mine,#afa28e +Zinnwaldite,#8b9284 +Exploration,#afa28e +Feasibility Study,#afa28e +Permitting,#afa28e +Construction,#afa28e +Production,#afa28e +Expansion,#afa28e +Care & Maintenance,#afa28e +RES-1062,#afa28e +RES-1061,#afa28e +Other,#d67f4b diff --git a/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_resource_data.csv b/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_resource_data.csv new file mode 100644 index 0000000..1274dcd --- /dev/null +++ b/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_resource_data.csv @@ -0,0 +1,182 @@ +,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,Resource Company,Resource Country,Resource Region,Criteria,Resource Name,Resource SubType,Stage +0,0.0,0.0,0.0,0.27974100031552673,0.7459760008414048,0.8546087559639342,0.8546087559639342,0.8546087559639342,0.8546087559639342,0.8546087559639342,0.8546087559639342,Highland Group,Netherlands,North America,Tier 1 Priority,Highland Park Deposit,Spodumene,Exploration +1,0.0,0.0,0.11314285714285714,0.3017142857142857,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,Blue Horizon Corp,DR Congo,South America,Tier 1 Priority,Blue Horizon Corp,Spodumene,Exploration +2,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Frontier Group,Germany,Germany,Tier 2 Priority,Moonlight Basin Prospect,Petalite,Feasibility Study +3,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Amber Resources,Germany,Germany,Tier 2 Priority,Moonlight Basin Prospect,Petalite,Feasibility Study +4,0.0,0.0,0.0,0.0,0.0,0.0,0.6,1.5999999999999999,1.833,1.833,1.833,Summit Holdings,Indonesia,Europe,Tier 2 Priority,Rustic Hollow Prospect,Petalite,Permitting +5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Summit Mining,Germany,Germany,Tier 1 Priority,Crystal Springs Project,Spodumene,Construction +6,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Horizon Materials,Germany,Germany,Tier 2 Priority,Green Hollow Deposit,Petalite,Feasibility Study +7,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,Horizon Energy,Spain,Europe,Tier 2 Priority,Willow Bend Claim,Spodumene,Feasibility Study +8,0.0,0.0,0.0,3.2488102536644132,8.66349400977177,9.925115324944782,9.925115324944782,9.925115324944782,9.925115324944782,9.925115324944782,9.925115324944782,Crescent Energy,Bolivia,Bolivia,Tier 2 Priority,Amber Hills Claim,Spodumene,Exploration +9,0.0,0.0,0.0,0.07896325508906459,0.21056868023750558,0.24123274429709235,0.24123274429709235,0.24123274429709235,0.24123274429709235,0.24123274429709235,0.24123274429709235,Highland Metals,Czech Republic,North America,Tier 1 Priority,Thunder Ridge Prospect,Spodumene,Exploration +10,0.0,0.0,0.0,0.01885496727126698,0.050279912723378624,0.05760192501372064,0.05760192501372064,0.05760192501372064,0.05760192501372064,0.05760192501372064,0.05760192501372064,Highland Metals,Czech Republic,North America,Tier 1 Priority,Cedar Grove Mine,Zinnwaldite,Exploration +11,0.0,0.0,0.0,0.10681020012047386,0.28482720032126363,0.3263051613680476,0.3263051613680476,0.3263051613680476,0.3263051613680476,0.3263051613680476,0.3263051613680476,Vantage Holdings,Czech Republic,North America,Tier 1 Priority,Crystal Springs Claim,Spodumene,Production +12,0.0,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Granite Corp,Germany,Germany,Tier 3 Priority,Sunset Basin Deposit,Brine,Exploration +13,0.0,0.0,0.0,4.450425005019743,11.867800013385985,13.596048390335314,13.596048390335314,13.596048390335314,13.596048390335314,13.596048390335314,13.596048390335314,Amber Mining,China,North America,Tier 2 Priority,Copperhead Mine,Spodumene,Exploration +14,0.0,0.0,0.0,0.04132537504661191,0.11020100012429844,0.12624902076739938,0.12624902076739938,0.12624902076739938,0.12624902076739938,0.12624902076739938,0.12624902076739938,Vantage Holdings,Czech Republic,North America,Tier 1 Priority,Silver Creek Mine,Zinnwaldite,Production +15,0.0,0.0,0.0,0.0,0.46247142857142853,1.233257142857143,1.4128502142857144,1.4128502142857144,1.4128502142857144,1.4128502142857144,1.4128502142857144,Northstar Metals,Japan,Middle East & Africa,Tier 3 Priority,Eagle Point Claim,Petalite,Permitting +16,0.0,1.0632277261992407,2.835273936531309,3.2481607035386806,3.2481607035386806,3.2481607035386806,3.2481607035386806,3.2481607035386806,3.2481607035386806,3.2481607035386806,3.2481607035386806,Cascade Corp,Bolivia,Bolivia,Tier 2 Priority,Amber Hills Mine,Spodumene,Feasibility Study +17,0.0,1.311285938979032,3.496762503944086,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,Redwood Group,Bolivia,Bolivia,Tier 2 Priority,Falcon Crest Mine,Spodumene,Feasibility Study +18,0.0,1.311285938979032,3.496762503944086,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,Frontier Group,Bolivia,Bolivia,Tier 2 Priority,Falcon Crest Mine,Spodumene,Feasibility Study +19,0.0,0.0,0.0,0.0,0.07542857142857143,0.2011428571428572,0.23043428571428579,0.23043428571428579,0.23043428571428579,0.23043428571428579,0.23043428571428579,Atlas Group,South Korea,South America,Tier 1 Priority,Golden Ridge Project,Clay,Exploration +20,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Ironclad Holdings,Indonesia,Europe,Tier 2 Priority,Granite Falls Deposit,Petalite,Feasibility Study +21,0.0,0.0,0.0,0.08571428571428572,0.2285714285714286,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,Pioneer Resources,Indonesia,Europe,Tier 1 Priority,Blue Mesa Claim,Petalite,Production +22,0.0,3.857142857142857,10.285714285714286,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,Titan Holdings,Vietnam,Europe,Tier 2 Priority,Silver Creek Claim,Petalite,Expansion +23,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,0.49098214285714287,Pioneer Industries,Germany,Germany,Tier 2 Priority,Thunder Ridge Deposit,Spodumene,Feasibility Study +24,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,Summit Corp,Germany,Germany,Tier 1 Priority,Painted Mesa Project,Spodumene,Feasibility Study +25,0.0,0.0,0.0,0.06574973132416076,0.1753326168644287,0.2008654291953111,0.2008654291953111,0.2008654291953111,0.2008654291953111,0.2008654291953111,0.2008654291953111,Highland Materials,Serbia,Middle East & Africa,Tier 1 Priority,Stone Valley Prospect,Zinnwaldite,Exploration +26,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Stonebridge Minerals,Germany,Germany,Tier 2 Priority,Highland Park Mine,Petalite,Feasibility Study +27,0.0,0.0,0.0,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Summit Holdings,Indonesia,Europe,Tier 2 Priority,Black Rock Project,Petalite,Permitting +28,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,Redwood Group,Bolivia,Bolivia,Tier 2 Priority,Falcon Crest Mine,Spodumene,Feasibility Study +29,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,4.005978543580942,Frontier Group,Bolivia,Bolivia,Tier 2 Priority,Falcon Crest Mine,Spodumene,Feasibility Study +30,0.0,1.5735431267748383,4.196115004732901,4.807174252297131,4.807174252297131,4.807174252297131,4.807174252297131,4.807174252297131,4.807174252297131,4.807174252297131,4.807174252297131,Highland Corp,Spain,Europe,Tier 2 Priority,Timber Creek Mine,Spodumene,Feasibility Study +31,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.19714285714285712,0.5257142857142858,0.6022714285714287,Titan Resources,Morocco,Europe,Tier 1 Priority,Moonlight Basin Deposit,Hard Rock,Production +32,0.0,0.0,0.0,2.403229502710662,6.4086120072284345,7.3418661307810735,7.3418661307810735,7.3418661307810735,7.3418661307810735,7.3418661307810735,7.3418661307810735,Falcon Holdings,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Prospect,Spodumene,Exploration +33,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Northstar Group,Germany,Germany,Tier 2 Priority,Silver Creek Project,Brine,Feasibility Study +34,0.0,0.9536625010756596,2.543100002868426,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,Meridian Energy,Germany,Germany,Tier 2 Priority,Amber Hills Project,Spodumene,Feasibility Study +35,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,1.5732570280245157,Highland Minerals,Spain,Europe,Tier 2 Priority,Maple Run Deposit,Spodumene,Feasibility Study +36,0.0,0.0,0.0,0.7119355476780098,1.898494793808026,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,Cascade Metals,Serbia,Middle East & Africa,Tier 2 Priority,White Pine Claim,Spodumene,Exploration +37,0.0,0.0,0.0,0.7119355476780098,1.898494793808026,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,Ironclad Holdings,Serbia,Middle East & Africa,Tier 2 Priority,White Pine Claim,Spodumene,Exploration +38,0.0,0.0,0.0,0.0,1.9073250021513186,5.08620000573685,5.82687788157228,5.82687788157228,5.82687788157228,5.82687788157228,5.82687788157228,Highland Corp,Australia,North America,Tier 2 Priority,Falcon Crest Project,Spodumene,Permitting +39,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Granite Industries,Germany,Germany,Tier 2 Priority,Blue Mesa Project,Petalite,Feasibility Study +40,0.0,0.0,0.0,0.0,0.14791403286978508,0.39443742098609375,0.4518773704171935,0.4518773704171935,0.4518773704171935,0.4518773704171935,0.4518773704171935,Atlas Materials,United Kingdom,South America,Tier 1 Priority,Falcon Crest Claim,Brine,Production +41,0.0,0.0,0.22887900025815835,0.6103440006884222,0.6992253457886737,0.6992253457886737,0.6992253457886737,0.6992253457886737,0.6992253457886737,0.6992253457886737,0.6992253457886737,Highland Minerals,Spain,Europe,Tier 2 Priority,Maple Run Deposit,Spodumene,Expansion +42,0.0,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Frontier Group,Indonesia,Europe,Tier 3 Priority,Blue Mesa Mine,Petalite,Permitting +43,0.0,0.778503309503093,2.076008825341581,2.3783276105319486,2.3783276105319486,2.3783276105319486,2.3783276105319486,2.3783276105319486,2.3783276105319486,2.3783276105319486,2.3783276105319486,Cascade Materials,Serbia,Middle East & Africa,Tier 2 Priority,Green Hollow Prospect,Spodumene,Feasibility Study +44,0.0,0.25950110316769764,0.6920029417805269,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,Vantage Group,Serbia,Middle East & Africa,Tier 2 Priority,Green Hollow Prospect,Spodumene,Feasibility Study +45,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Meridian Mining,Germany,Germany,Brine,Crystal Springs Prospect,Brine,Expansion +46,3.666,3.666,3.666,3.666,3.666,3.666,3.666,3.666,3.666,3.666,3.666,Titan Holdings,Vietnam,Europe,Tier 2 Priority,Silver Creek Claim,Petalite,Feasibility Study +47,0.42857142857142855,1.1428571428571428,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Redwood Holdings,Germany,Germany,Tier 2 Priority,Thunder Ridge Mine,Petalite,Feasibility Study +48,0.0,0.34285714285714286,0.9142857142857144,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Silverridge Minerals,Sweden,Europe,Tier 1 Priority,Crystal Springs Mine,Petalite,Expansion +49,0.0,0.34285714285714286,0.9142857142857144,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Atlas Resources,Germany,Germany,Tier 2 Priority,Highland Park Project,Petalite,Expansion +50,0.0,0.42857142857142855,1.1428571428571428,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Cascade Resources,Indonesia,Europe,Tier 2 Priority,Eagle Point Project,Petalite,Feasibility Study +51,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Frontier Group,Indonesia,Europe,Tier 2 Priority,Eagle Point Project,Petalite,Feasibility Study +52,0.0,0.0,0.0,1.6085107518142787,4.289362004838075,4.914000346792621,4.914000346792621,4.914000346792621,4.914000346792621,4.914000346792621,4.914000346792621,Frontier Group,Netherlands,North America,Tier 2 Priority,White Pine Project,Spodumene,Expansion +53,0.0,0.0,0.0,1.6085107518142787,4.289362004838075,4.914000346792621,4.914000346792621,4.914000346792621,4.914000346792621,4.914000346792621,4.914000346792621,Ironclad Resources,Netherlands,North America,Tier 2 Priority,White Pine Project,Spodumene,Expansion +54,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,Cobalt Bay Materials,Germany,Germany,Tier 1 Priority,Granite Falls Project,Spodumene,Feasibility Study +55,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Golden Peak Industries,Indonesia,Europe,Tier 2 Priority,Willow Bend Project,Petalite,Feasibility Study +56,0.0,1.0714285714285714,2.857142857142857,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Silverridge Mining,Indonesia,Europe,Tier 2 Priority,Willow Bend Project,Petalite,Feasibility Study +57,0.0,0.0,0.0,0.0,1.5385755017353973,4.102868004627727,4.7003481578016375,4.7003481578016375,4.7003481578016375,4.7003481578016375,4.7003481578016375,Cascade Materials,Japan,Middle East & Africa,Tier 2 Priority,Stone Valley Deposit,Spodumene,Production +58,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,Granite Corp,Germany,Germany,Tier 2 Priority,Rustic Hollow Deposit,Brine,Feasibility Study +59,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Meridian Mining,Germany,Germany,Tier 1 Priority,Moonlight Basin Project,Spodumene,Construction +60,0.0,0.0,0.15085714285714286,0.4022857142857144,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,Stonebridge Energy,Japan,Middle East & Africa,Tier 1 Priority,Cedar Grove Prospect,Lepidolite,Exploration +61,0.0,0.0,0.0,0.0,0.9,2.4,2.7495000000000003,2.7495000000000003,2.7495000000000003,2.7495000000000003,2.7495000000000003,Cascade Resources,Indonesia,Europe,Tier 3 Priority,Painted Mesa Claim,Petalite,Exploration +62,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Summit Group,Germany,Germany,Tier 2 Priority,Sunset Basin Project,Brine,Feasibility Study +63,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Golden Peak Industries,Indonesia,Europe,Tier 2 Priority,Willow Bend Project,Petalite,Feasibility Study +64,1.6497,1.6497,1.6497,1.6497,1.6497,1.6497,1.6497,1.6497,1.6497,1.6497,1.6497,Silverridge Mining,Indonesia,Europe,Tier 2 Priority,Willow Bend Project,Petalite,Feasibility Study +65,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,Cascade Resources,Japan,Middle East & Africa,Tier 2 Priority,Copperhead Prospect,Hard Rock,Production +66,0.0,0.0,0.0,0.0,0.5142857142857143,1.3714285714285714,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,Frontier Energy,Japan,Middle East & Africa,Tier 1 Priority,Iron Bluff Project,Lepidolite,Permitting +67,0.0,0.0,0.0,1.1742857142857142,3.1314285714285717,3.5874428571428574,3.5874428571428574,3.5874428571428574,3.5874428571428574,3.5874428571428574,3.5874428571428574,Pioneer Corp,Japan,Middle East & Africa,Tier 2 Priority,Copperhead Project,Hard Rock,Production +68,0.0,0.0,4.285714285714286,11.428571428571429,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,Meridian Mining,Germany,Germany,Brine,Crystal Springs Prospect,Brine,Exploration +69,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.27600857142857144,0.7360228571428573,0.843206185714286,Sierra Metals,Japan,Middle East & Africa,Tier 1 Priority,Blue Mesa Deposit,Hard Rock,Permitting +70,0.0,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Ironclad Holdings,Indonesia,Europe,Tier 2 Priority,Granite Falls Deposit,Petalite,Exploration +71,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.721975006453955,15.258600017210549,17.480633644716836,Amber Mining,China,North America,Tier 2 Priority,Copperhead Mine,Spodumene,Exploration +72,0.0,0.0,0.0,1.5216744829663342,4.057798621243559,4.648715545462151,4.648715545462151,4.648715545462151,4.648715545462151,4.648715545462151,4.648715545462151,Highland Corp,Spain,Europe,Tier 3 Priority,Timber Creek Mine,Spodumene,Production +73,0.0,0.0,0.0,0.0,0.0,0.0,0.2225212502509872,0.5933900006692994,0.6798024195167659,0.6798024195167659,0.6798024195167659,Silverridge Metals,Kazakhstan,South America,Tier 1 Priority,Black Rock Deposit,Spodumene,Production +74,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,3.5089225527713,Silverridge Mining,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Project,Spodumene,Feasibility Study +75,0.0,0.0,0.0,0.0,1.1656934638148144,3.1085159035061714,3.5611935319542583,3.5611935319542583,3.5611935319542583,3.5611935319542583,3.5611935319542583,Amber Energy,Bolivia,Bolivia,Tier 2 Priority,Red Canyon Claim,Spodumene,Permitting +76,0.0,0.0,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Titan Corp,Indonesia,Europe,Tier 2 Priority,White Pine Prospect,Petalite,Exploration +77,0.0,0.0,0.0,0.0,0.0,0.04285714285714286,0.1142857142857143,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,Frontier Metals,Indonesia,Europe,Tier 1 Priority,Green Hollow Claim,Petalite,Permitting +78,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Stonebridge Metals,Germany,Germany,Tier 2 Priority,Falcon Crest Prospect,Petalite,Feasibility Study +79,0.0,0.0,0.0,0.19165865992414668,0.5110897597977245,0.5855172060682682,0.5855172060682682,0.5855172060682682,0.5855172060682682,0.5855172060682682,0.5855172060682682,Blue Horizon Resources,Italy,South America,Tier 1 Priority,Willow Bend Prospect,Clay,Production +80,0.0,0.0,0.504,1.3439999999999999,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,Falcon Minerals,Indonesia,Europe,Tier 3 Priority,Golden Ridge Claim,Petalite,Expansion +81,0.0,0.0,0.5245714285714286,1.398857142857143,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,Meridian Corp,Indonesia,Europe,Tier 3 Priority,Golden Ridge Claim,Petalite,Expansion +82,0.0,0.0,0.0,1.0714285714285714,2.857142857142857,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Cobalt Bay Industries,Bolivia,Bolivia,Tier 2 Priority,Sunset Basin Claim,Spodumene,Exploration +83,0.0,0.0,0.0,1.0714285714285714,2.857142857142857,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Titan Holdings,Bolivia,Bolivia,Tier 2 Priority,Sunset Basin Claim,Spodumene,Exploration +84,1.1314285714285712,3.0171428571428573,3.4565142857142854,3.4565142857142854,3.4565142857142854,3.4565142857142854,3.4565142857142854,3.4565142857142854,3.4565142857142854,3.4565142857142854,3.4565142857142854,Titan Holdings,Germany,Germany,Tier 2 Priority,Silver Creek Claim,Petalite,Feasibility Study +85,0.0,0.0,0.0,0.0,0.0,0.0,0.38095638042969016,1.0158836811458403,1.1638217422127035,1.1638217422127035,1.1638217422127035,Silverridge Mining,Serbia,Middle East & Africa,Tier 1 Priority,Golden Ridge Prospect,Spodumene,Production +86,0.0,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Atlas Resources,Germany,Germany,Tier 3 Priority,Rustic Hollow Mine,Petalite,Expansion +87,0.0,0.0,0.7255209998183328,1.934722666182221,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,Vantage Group,Serbia,Middle East & Africa,Tier 3 Priority,Eagle Point Prospect,Spodumene,Exploration +88,0.0,0.0,0.0,0.21428571428571427,0.5714285714285714,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Titan Corp,Japan,Middle East & Africa,Tier 3 Priority,Maple Run Mine,Pegmatite,Production +89,0.0,0.0,1.7142857142857142,4.571428571428571,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,Stonebridge Minerals,Germany,Germany,Tier 3 Priority,Rustic Hollow Claim,Petalite,Expansion +90,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9345892510541461,2.4922380028110562,Crescent Energy,Bolivia,Bolivia,Tier 2 Priority,Amber Hills Claim,Spodumene,Exploration +91,0.0,0.08571428571428572,0.2285714285714286,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,Pioneer Resources,Indonesia,Europe,Tier 2 Priority,Blue Mesa Claim,Petalite,Feasibility Study +92,0.0,0.0,0.0,0.1287711401952441,0.34338970718731776,0.3933958332964709,0.3933958332964709,0.3933958332964709,0.3933958332964709,0.3933958332964709,0.3933958332964709,Granite Energy,Serbia,Middle East & Africa,Tier 1 Priority,Amber Hills Prospect,Spodumene,Production +93,0.0,0.0,0.42857142857142855,1.1428571428571428,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Ironclad Holdings,Indonesia,Europe,Tier 2 Priority,Granite Falls Deposit,Petalite,Expansion +94,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Northstar Minerals,Germany,Germany,Tier 2 Priority,Highland Park Claim,Petalite,Feasibility Study +95,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Pioneer Energy,Germany,Germany,Tier 2 Priority,Stone Valley Claim,Petalite,Expansion +96,0.0,0.0,0.0,0.375,1.0,1.1456250000000001,1.1456250000000001,1.1456250000000001,1.1456250000000001,1.1456250000000001,1.1456250000000001,Horizon Resources,South Africa,Middle East & Africa,Tier 2 Priority,Sunset Basin Prospect,Hard Rock,Exploration +97,0.0,0.0,0.0,0.375,1.0,1.1456250000000001,1.1456250000000001,1.1456250000000001,1.1456250000000001,1.1456250000000001,1.1456250000000001,Frontier Group,South Africa,Middle East & Africa,Tier 2 Priority,Sunset Basin Prospect,Hard Rock,Exploration +98,0.0,0.0,0.0,0.0,0.21857142857142858,0.582857142857143,0.6677357142857143,0.6677357142857143,0.6677357142857143,0.6677357142857143,0.6677357142857143,Atlas Energy,Indonesia,Europe,Tier 1 Priority,Iron Bluff Prospect,Petalite,Production +99,0.0,0.0,0.0,0.0,0.6514285714285714,1.737142857142857,1.9901142857142857,1.9901142857142857,1.9901142857142857,1.9901142857142857,1.9901142857142857,Pioneer Materials,Vietnam,Europe,Tier 2 Priority,Copperhead Claim,Petalite,Exploration +100,0.0,0.0,0.6428571428571429,1.7142857142857142,1.9639285714285715,1.9639285714285715,1.9639285714285715,1.9639285714285715,1.9639285714285715,1.9639285714285715,1.9639285714285715,Silverridge Mining,Indonesia,Europe,Tier 2 Priority,Painted Mesa Prospect,Petalite,Expansion +101,0.0,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Horizon Materials,Germany,Germany,Tier 3 Priority,White Pine Mine,Petalite,Expansion +102,0.0,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Horizon Materials,Germany,Germany,Tier 3 Priority,White Pine Mine,Petalite,Expansion +103,0.0,0.0,0.0,0.0,0.9536625010756593,2.543100002868425,2.913438940786139,2.913438940786139,2.913438940786139,2.913438940786139,2.913438940786139,Frontier Group,Netherlands,North America,Tier 2 Priority,White Pine Project,Spodumene,Expansion +104,0.0,0.0,0.0,0.0,0.9536625010756593,2.543100002868425,2.913438940786139,2.913438940786139,2.913438940786139,2.913438940786139,2.913438940786139,Ironclad Resources,Netherlands,North America,Tier 2 Priority,White Pine Project,Spodumene,Expansion +105,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6921428571428571,1.8457142857142856,2.1144964285714285,Ironclad Industries,Japan,Middle East & Africa,Tier 2 Priority,Copperhead Deposit,Hard Rock,Permitting +106,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6921428571428571,1.8457142857142856,2.1144964285714285,Frontier Holdings,Japan,Middle East & Africa,Tier 2 Priority,Copperhead Deposit,Hard Rock,Permitting +107,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,5.768609102756558,Falcon Holdings,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Prospect,Spodumene,Feasibility Study +108,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,0.8740316822358419,Frontier Group,Germany,Germany,Tier 2 Priority,Silver Creek Prospect,Spodumene,Feasibility Study +109,0.17165925019361875,0.45775800051631677,0.5244190093415052,0.5244190093415052,0.5244190093415052,0.5244190093415052,0.5244190093415052,0.5244190093415052,0.5244190093415052,0.5244190093415052,0.5244190093415052,Falcon Holdings,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Prospect,Spodumene,Feasibility Study +110,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Sierra Holdings,Germany,Germany,Tier 2 Priority,Blue Mesa Prospect,Brine,Feasibility Study +111,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,Granite Metals,Czech Republic,North America,Tier 2 Priority,Red Canyon Deposit,Zinnwaldite,Feasibility Study +112,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Cascade Resources,Japan,Middle East & Africa,Tier 2 Priority,Copperhead Prospect,Hard Rock,Expansion +113,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,Ironclad Holdings,Indonesia,Europe,Tier 2 Priority,Granite Falls Deposit,Petalite,Production +114,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Meridian Energy,Germany,Germany,Tier 2 Priority,Crystal Springs Project,Spodumene,Feasibility Study +115,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,Horizon Energy,Spain,Europe,Tier 2 Priority,Red Canyon Prospect,Spodumene,Feasibility Study +116,0.0,0.0,0.7457142857142857,1.9885714285714287,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,Frontier Group,Indonesia,Europe,Tier 2 Priority,Black Rock Claim,Petalite,Expansion +117,0.0,0.42857142857142855,1.1428571428571428,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Ironclad Holdings,Indonesia,Europe,Tier 2 Priority,Granite Falls Deposit,Petalite,Expansion +118,0.0,0.0,0.0,0.0,0.0,0.0,1.0451382857142855,2.7870354285714285,3.1928974628571427,3.1928974628571427,3.1928974628571427,Northstar Metals,Japan,Middle East & Africa,Tier 3 Priority,Eagle Point Claim,Petalite,Permitting +119,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Germany,Tier 1 Priority,White Pine Deposit,Spodumene,Construction +120,0.0,0.0,0.0,0.0,0.0,0.0,0.0375,0.1,0.1145625,0.1145625,0.1145625,Horizon Resources,South Africa,Middle East & Africa,Tier 1 Priority,Sunset Basin Prospect,Hard Rock,Exploration +121,0.0,0.0,0.0,0.0,0.0,0.0,0.1125,0.3,0.34368750000000003,0.34368750000000003,0.34368750000000003,Frontier Group,South Africa,Middle East & Africa,Tier 1 Priority,Sunset Basin Prospect,Hard Rock,Exploration +122,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,8.117571428571429,Titan Holdings,Vietnam,Europe,Tier 2 Priority,Silver Creek Claim,Petalite,Feasibility Study +123,0.0,0.0,0.0,0.0,0.0,0.058834285714285714,0.15689142857142854,0.17973874285714286,0.17973874285714286,0.17973874285714286,0.17973874285714286,Ironclad Energy,Finland,South America,Tier 1 Priority,Golden Ridge Mine,Brine,Permitting +124,0.0,0.0,0.0,0.011469381012936597,0.030585016034497592,0.03503895899452131,0.03503895899452131,0.03503895899452131,0.03503895899452131,0.03503895899452131,0.03503895899452131,Highland Metals,Czech Republic,North America,Tier 1 Priority,Green Hollow Project,Zinnwaldite,Exploration +125,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,Granite Corp,Germany,Germany,Tier 2 Priority,Maple Run Claim,Brine,Feasibility Study +126,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Summit Corp,Germany,Germany,Tier 1 Priority,Granite Falls Mine,Spodumene,Care & Maintenance +127,0.0,0.0,0.0,0.11314285714285714,0.3017142857142857,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,Cobalt Bay Mining,South Korea,South America,Tier 1 Priority,Thunder Ridge Project,Lepidolite,Production +128,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Ironclad Corp,Germany,Germany,Tier 2 Priority,Falcon Crest Prospect,Petalite,Feasibility Study +129,0.0,0.0,0.0,0.00921026051038848,0.02456069469436928,0.028137345859236808,0.028137345859236808,0.028137345859236808,0.028137345859236808,0.028137345859236808,0.028137345859236808,Highland Metals,Czech Republic,North America,Tier 1 Priority,Green Hollow Project,Zinnwaldite,Exploration +130,0.0,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Atlas Industries,Indonesia,Europe,Tier 2 Priority,Eagle Point Mine,Petalite,Exploration +131,0.0,0.0,0.7542857142857143,2.0114285714285716,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,Titan Mining,Germany,Germany,Tier 2 Priority,Moonlight Basin Claim,Petalite,Expansion +132,0.0,0.0,0.06,0.16,0.1833,0.1833,0.1833,0.1833,0.1833,0.1833,0.1833,Ironclad Minerals,Ghana,North America,Tier 1 Priority,Atlas Corp,Brine,Exploration +133,0.0,0.0,0.0,0.0,0.0,0.0,0.04285714285714286,0.1142857142857143,0.13092857142857142,0.13092857142857142,0.13092857142857142,Falcon Energy,Japan,Middle East & Africa,Tier 1 Priority,Golden Ridge Deposit,Petalite,Permitting +134,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,Meridian Materials,Germany,Germany,Tier 2 Priority,Granite Falls Claim,Spodumene,Feasibility Study +135,0.0,0.0,0.0,0.0,0.15170670037926676,0.4045512010113782,0.46346396965866005,0.46346396965866005,0.46346396965866005,0.46346396965866005,0.46346396965866005,Vantage Minerals,Serbia,Middle East & Africa,Tier 1 Priority,Stone Valley Mine,Salar Brine,Permitting +136,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,Northstar Industries,Germany,Germany,Tier 1 Priority,Thunder Ridge Claim,Spodumene,Feasibility Study +137,0.0,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Silverridge Mining,Indonesia,Europe,Tier 2 Priority,Painted Mesa Prospect,Petalite,Exploration +138,0.0,0.0,0.0,0.07683185840707965,0.20488495575221238,0.23472132743362834,0.23472132743362834,0.23472132743362834,0.23472132743362834,0.23472132743362834,0.23472132743362834,Cobalt Bay Corp,Poland,South America,Tier 1 Priority,Amber Hills Deposit,Spodumene,Production +139,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Cascade Mining,Japan,Middle East & Africa,Tier 2 Priority,Falcon Crest Deposit,Petalite,Feasibility Study +140,0.0,0.0,0.0,0.03692793129165193,0.09847448344440515,0.11281483009599662,0.11281483009599662,0.11281483009599662,0.11281483009599662,0.11281483009599662,0.11281483009599662,Highland Metals,Czech Republic,North America,Tier 1 Priority,Cedar Grove Mine,Zinnwaldite,Exploration +141,0.0,0.0,0.0,0.0,0.17142857142857143,0.4571428571428572,0.5237142857142858,0.5237142857142858,0.5237142857142858,0.5237142857142858,0.5237142857142858,Frontier Energy,Japan,Middle East & Africa,Tier 1 Priority,Iron Bluff Project,Lepidolite,Permitting +142,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Stonebridge Minerals,Germany,Germany,Tier 3 Priority,Red Canyon Project,Petalite,Expansion +143,0.0,0.0,0.0,0.0,0.0,0.873990857142857,2.330642285714286,2.6700420685714286,2.6700420685714286,2.6700420685714286,2.6700420685714286,Vantage Metals,Serbia,Middle East & Africa,Tier 3 Priority,Painted Mesa Mine,Spodumene,Permitting +144,0.0,0.0,0.0,0.0,0.1791428571428571,0.4777142857142857,0.5472814285714286,0.5472814285714286,0.5472814285714286,0.5472814285714286,0.5472814285714286,Horizon Minerals,Japan,Middle East & Africa,Tier 1 Priority,Rustic Hollow Project,Salar Brine,Permitting +145,0.0,0.0,0.0,0.0,0.17657142857142857,0.4708571428571429,0.5394257142857143,0.5394257142857143,0.5394257142857143,0.5394257142857143,0.5394257142857143,Northstar Corp,Japan,Middle East & Africa,Tier 1 Priority,Iron Bluff Mine,Hard Rock,Exploration +146,0.0,1.9285714285714286,5.142857142857143,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,Sierra Holdings,Germany,Germany,Brine,Iron Bluff Claim,Brine,Expansion +147,0.8212093759262624,2.1898916691367,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,Falcon Group,Bolivia,Bolivia,Tier 2 Priority,Green Hollow Mine,Spodumene,Feasibility Study +148,0.0,0.0,0.0,0.0,0.0,0.0,0.19407031896889676,0.5175208505837247,0.5928848244499795,0.5928848244499795,0.5928848244499795,Golden Peak Minerals,Serbia,Middle East & Africa,Tier 1 Priority,Granite Falls Prospect,Spodumene,Exploration +149,0.0,0.0,0.0,0.18857142857142858,0.5028571428571429,0.5760857142857143,0.5760857142857143,0.5760857142857143,0.5760857142857143,0.5760857142857143,0.5760857142857143,Cobalt Bay Mining,South Korea,South America,Tier 1 Priority,Thunder Ridge Project,Lepidolite,Production +150,0.0,0.0,0.0705710250795988,0.18818940021226346,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,Golden Peak Minerals,Serbia,Middle East & Africa,Tier 1 Priority,Maple Run Project,Spodumene,Exploration +151,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,Horizon Metals,Germany,Germany,Tier 2 Priority,Cedar Grove Claim,Brine,Feasibility Study +152,1.1787268513295153,3.1432716035453745,3.6010105308116684,3.6010105308116684,3.6010105308116684,3.6010105308116684,3.6010105308116684,3.6010105308116684,3.6010105308116684,3.6010105308116684,3.6010105308116684,Falcon Holdings,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Prospect,Spodumene,Feasibility Study +153,0.0,0.572197500645396,1.525860001721055,1.7480633644716839,1.7480633644716839,1.7480633644716839,1.7480633644716839,1.7480633644716839,1.7480633644716839,1.7480633644716839,1.7480633644716839,Falcon Holdings,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Prospect,Spodumene,Expansion +154,0.0,0.0,0.0,0.011253217512692785,0.03000858003384743,0.03437857950127646,0.03437857950127646,0.03437857950127646,0.03437857950127646,0.03437857950127646,0.03437857950127646,Highland Materials,Serbia,Middle East & Africa,Tier 1 Priority,Crystal Springs Deposit,Brine,Exploration +155,0.0,0.0,0.0,0.0,0.21428571428571427,0.5714285714285714,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Cascade Resources,Indonesia,Europe,Tier 2 Priority,Eagle Point Project,Petalite,Exploration +156,0.0,0.0,0.0,0.0,0.6428571428571429,1.7142857142857142,1.9639285714285715,1.9639285714285715,1.9639285714285715,1.9639285714285715,1.9639285714285715,Frontier Group,Indonesia,Europe,Tier 2 Priority,Eagle Point Project,Petalite,Exploration +157,0.40117402545249403,1.069797401206651,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,Granite Metals,Serbia,Middle East & Africa,Tier 2 Priority,Iron Bluff Deposit,Zinnwaldite,Feasibility Study +158,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,0.2618571428571429,Frontier Industries,Germany,Germany,Tier 2 Priority,Red Canyon Mine,Petalite,Feasibility Study +159,0.0,0.0,0.2571428571428571,0.6857142857142859,0.7855714285714285,0.7855714285714285,0.7855714285714285,0.7855714285714285,0.7855714285714285,0.7855714285714285,0.7855714285714285,Frontier Industries,Germany,Germany,Tier 3 Priority,Red Canyon Mine,Petalite,Expansion +160,0.0,0.0,0.0,0.09384039010584488,0.250241040282253,0.2866823917733562,0.2866823917733562,0.2866823917733562,0.2866823917733562,0.2866823917733562,0.2866823917733562,Highland Metals,Czech Republic,North America,Tier 1 Priority,Thunder Ridge Prospect,Spodumene,Exploration +161,0.0,0.0,1.9285714285714286,5.142857142857143,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,Sierra Holdings,Germany,Germany,Brine,Iron Bluff Claim,Brine,Expansion +162,7.771428571428573,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,8.903142857142857,Titan Holdings,Vietnam,Europe,Tier 2 Priority,Silver Creek Claim,Petalite,Feasibility Study +163,10.427098214285715,9.305948807142856,10.220109521428574,12.692741907142857,13.58257635,16.950222857142858,18.178401828571428,18.08341,17.93101,17.887499285714288,17.723225235714285,Amber Energy,Bolivia,Bolivia,Tier 2 Priority,Black Rock Mine,Spodumene,Feasibility Study +164,10.427098214285715,9.305948807142856,10.220109521428574,12.692741907142857,13.58257635,16.950222857142858,18.178401828571428,18.08341,17.93101,17.887499285714288,17.723225235714285,Horizon Industries,Bolivia,Bolivia,Tier 2 Priority,Black Rock Mine,Spodumene,Feasibility Study +165,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,Amber Energy,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Claim,Spodumene,Feasibility Study +166,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,1.6071428571428572,Horizon Industries,Bolivia,Bolivia,Tier 2 Priority,Timber Creek Claim,Spodumene,Feasibility Study +167,0.5627142857142857,0.6414688860000001,0.6911515677142857,0.9864018591428572,0.985468888,0.9834067544285715,0.96318649,0.9511210355714285,0.9399575765714288,0.9399575765714288,0.9399575765714288,Horizon Industries,Japan,Middle East & Africa,Tier 2 Priority,Silver Creek Deposit,Petalite,Feasibility Study +168,8.077142857142857,7.994959685714286,9.312134147142856,10.602312427142857,10.940388254285713,11.71587896,11.752527795714286,11.716736107142856,11.678756708571429,11.678756708571429,11.678756708571429,Horizon Industries,Vietnam,Europe,Tier 2 Priority,Moonlight Basin Mine,Petalite,Feasibility Study +169,0.0,0.0,0.0,0.0,0.0,1.9701104757142858,6.064624761428571,8.074838094285715,8.95408381,9.404727618571428,9.420546667142858,Horizon Industries,Japan,Middle East & Africa,Tier 2 Priority,Cedar Grove Deposit,Spodumene,Exploration +170,0.4891666666428572,2.4685777378571427,3.1394097142857142,5.796613713571429,5.026247857857143,7.2086347642857165,7.78684487857143,8.266476428571428,8.59667642857143,8.690949642857143,8.76250405,Redwood Group,Bolivia,Bolivia,Tier 2 Priority,Sunset Basin Mine,Spodumene,Feasibility Study +171,0.4891666666428572,2.4685777378571427,3.1394097142857142,5.796613713571429,5.026247857857143,7.2086347642857165,7.78684487857143,8.266476428571428,8.59667642857143,8.690949642857143,8.76250405,Horizon Industries,Bolivia,Bolivia,Tier 2 Priority,Sunset Basin Mine,Spodumene,Feasibility Study +172,0.35813276891147766,0.43372816351257776,0.531171617947814,0.6510403806823432,0.7859818861451698,0.9058768305014062,1.1355949169863302,1.4371903012082805,1.8775436608377267,2.4355763050897936,3.2379858227339775,Highland Energy,Nigeria,Mali,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +173,0.00029393425393154217,0.0008967394181953907,0.0020978383280021097,0.004896682999672312,0.008565526981747767,0.015750947354419877,0.028031363023666912,0.0501997265205662,0.08670126987539699,0.1434586362007026,0.22550014473192861,Highland Energy,Canada,South America,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +174,4.487819801067526,5.757831020367383,7.208974489638391,9.279057907797096,11.703599355916804,13.940118219813126,17.097320323386825,21.08162670958891,25.93133085742387,31.295445017638922,38.34643570978903,Highland Energy,Germany,Germany,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +175,0.659966607987949,0.945669739511419,1.3271680748335093,1.9813332688065715,2.7627295785578845,3.7651617602252045,5.140529954333063,6.862687943062185,9.306772859544436,12.174523322296604,15.320299319078293,Highland Energy,Brazil,South America,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +176,0.012924196587504416,0.023769530586304672,0.04139860972533127,0.06832524273239919,0.10169105617581252,0.14790315726062506,0.21403520879207086,0.3064705885027381,0.43875231929876257,0.6090027555439603,0.8355369112989572,Highland Energy,Zambia,Mali,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +177,0.006769133625808852,0.014726796676726914,0.026440797925274647,0.0447246286438994,0.06734415083117996,0.09759442264204467,0.14350902535102278,0.2166185219423733,0.32626238422270065,0.4795270497936838,0.7026933937518631,Highland Energy,Portugal,Mali,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +178,0.0051627228255365165,0.010026168423114174,0.019285923383422048,0.03671423633318125,0.059064077509973716,0.09164222768886253,0.14166842623392856,0.21661719047607156,0.3250951996971719,0.47316839925222165,0.677745913201961,Highland Energy,Namibia,Europe,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +179,0.006093465173688509,0.012480091478090162,0.025045639835196264,0.05443416549197814,0.0796244794320115,0.1334484449982953,0.18556026866765749,0.25652670914547626,0.4272470842326275,0.5612551922023163,0.7390598418086041,Highland Energy,Mali,Mali,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy +180,0.622753302708026,0.9486833388966611,1.3434463459872499,1.9501027455483346,2.646911239881392,3.3805209139382546,4.3001465224986095,5.636874465927327,7.3307481434292905,9.276354551787898,11.631331878214766,Highland Energy,Peru,Middle East & Africa,Strategic Reserve,Highland Energy,Strategic Reserve,Highland Energy diff --git a/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_spot_data.csv b/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_spot_data.csv new file mode 100644 index 0000000..4fa7377 --- /dev/null +++ b/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_spot_data.csv @@ -0,0 +1,37 @@ +,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,Resource Company,Resource Country,Resource SubType,Resource Region,Offtake Owner,Resource ID +0,0.0,0.0,0.0,0.27974100031552673,0.7459760008414048,0.8546087559639342,0.8546087559639342,0.8546087559639342,0.8546087559639342,0.8546087559639342,0.8546087559639342,Highland Group,Netherlands,Spodumene,North America,Spot Market Spod,RES-1094 +0,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,0.6231522178903689,Horizon Energy,Spain,Spodumene,Europe,Spot Market Spod,RES-1062 +0,0.0,0.0,0.0,0.0,0.4087503442110401,1.1847985025863628,1.1847985025863628,1.1847985025863628,1.1847985025863628,2.1193877536405097,3.6770365053974183,Crescent Energy,Bolivia,Spodumene,Bolivia,Spot Market Spod,RES-1101 +0,0.0,0.0,0.0,0.17280364519490948,0.46080972051975866,0.5279151360704485,0.5279151360704485,0.5279151360704485,0.5279151360704485,0.5279151360704485,0.5279151360704485,Highland Metals,Czech Republic,Spodumene,North America,Spot Market Spod,RES-1089 +0,0.0,0.0,0.0,0.05578289856291891,0.14875439616778377,0.17041675510971727,0.17041675510971727,0.17041675510971727,0.17041675510971727,0.17041675510971727,0.17041675510971727,Highland Metals,Czech Republic,Zinnwaldite,North America,Spot Market Spod,RES-1185 +0,0.0,0.0,0.0,0.10681020012047386,0.28482720032126363,0.3263051613680476,0.3263051613680476,0.3263051613680476,0.3263051613680476,0.3263051613680476,0.3263051613680476,Vantage Holdings,Czech Republic,Spodumene,North America,Spot Market Spod,RES-1242 +0,0.0,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Granite Corp,Germany,Brine,Germany,Spot Market Lep,RES-1129 +0,0.0,0.0,0.0,0.0,1.379419826555883,3.107668203505213,3.107668203505213,3.107668203505213,8.82964320995917,18.366268220715764,20.58830184822205,Amber Mining,China,Spodumene,North America,Spot Market Spod,RES-1238 +0,0.0,0.0,0.0,0.04132537504661191,0.11020100012429844,0.12624902076739938,0.12624902076739938,0.12624902076739938,0.12624902076739938,0.12624902076739938,0.12624902076739938,Vantage Holdings,Czech Republic,Zinnwaldite,North America,Spot Market Spod,RES-1137 +0,0.0,0.0,0.0,0.0,0.0,0.3347217627525408,0.3347217627525408,0.3347217627525408,0.3347217627525408,0.3347217627525408,0.3347217627525408,Cascade Corp,Bolivia,Spodumene,Bolivia,Spot Market Spod,RES-1213 +0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Redwood Group,Bolivia,Spodumene,Bolivia,Spot Market Spod,RES-1039 +0,0.0,0.0,0.0,0.06574973132416076,0.1753326168644287,0.2008654291953111,0.2008654291953111,0.2008654291953111,0.2008654291953111,0.2008654291953111,0.2008654291953111,Highland Materials,Serbia,Zinnwaldite,Middle East & Africa,Spot Market Spod,RES-1196 +0,0.0,1.5735431267748383,4.196115004732901,6.328848735263465,8.86497287354069,9.455889797759282,9.455889797759282,9.455889797759282,9.455889797759282,9.455889797759282,9.455889797759282,Highland Corp,Spain,Spodumene,Europe,Spot Market Spod,RES-1159 +0,0.0,0.0,0.0,0.0,1.38584327331313,2.3190973968657693,2.3190973968657693,2.3190973968657693,2.3190973968657693,2.3190973968657693,2.3190973968657693,Falcon Holdings,Bolivia,Spodumene,Bolivia,Spot Market Spod,RES-1165 +0,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Northstar Group,Germany,Brine,Germany,Spot Market Lep,RES-1002 +0,0.0,0.9536625010756596,2.543100002868426,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,Meridian Energy,Germany,Spodumene,Germany,Spot Market Spod,RES-1018 +0,0.0,0.0,0.0,0.7119355476780098,1.898494793808026,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,2.1749630981563195,Cascade Metals,Serbia,Spodumene,Middle East & Africa,Spot Market Spod,RES-1189 +0,0.0,0.0,0.0,0.0,0.9536625010756593,2.543100002868425,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,Highland Corp,Australia,Spodumene,North America,Spot Market Spod,RES-1171 +0,0.0,0.25950110316769764,0.6920029417805269,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,0.7927758701773163,Vantage Group,Serbia,Spodumene,Middle East & Africa,Spot Market Spod,RES-1076 +0,0.0,0.0,0.0,1.6085107518142787,5.243024505913735,7.457100349661046,7.82743928757876,7.82743928757876,7.82743928757876,7.82743928757876,7.82743928757876,Ironclad Resources,Netherlands,Spodumene,North America,Spot Market Spod,RES-1165 +0,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,1.571142857142857,Granite Corp,Germany,Brine,Germany,Spot Market Lep,RES-1227 +0,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Summit Group,Germany,Brine,Germany,Spot Market Lep,RES-1033 +0,0.0,0.0,0.0,0.0,0.0,0.0,0.2225212502509872,0.5933900006692994,0.6798024195167659,0.6798024195167659,0.6798024195167659,Silverridge Metals,Kazakhstan,Spodumene,South America,Spot Market Spod,RES-1101 +0,0.0,0.0,0.7255209998183328,1.934722666182221,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,2.216466654445007,Vantage Group,Serbia,Spodumene,Middle East & Africa,Spot Market Spod,RES-1250 +0,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,0.06403091360972203,Granite Metals,Czech Republic,Zinnwaldite,North America,Spot Market Spod,RES-1061 +0,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Meridian Energy,Germany,Spodumene,Germany,Spot Market Spod,RES-1194 +0,0.0,0.0,0.0,0.020679641523325076,0.05514571072886687,0.06317630485375812,0.06317630485375812,0.06317630485375812,0.06317630485375812,0.06317630485375812,0.06317630485375812,Highland Metals,Czech Republic,Zinnwaldite,North America,Spot Market Spod,RES-1238 +0,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,Granite Corp,Germany,Brine,Germany,Spot Market Lep,RES-1171 +0,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,3.011357142857143,Meridian Materials,Germany,Spodumene,Germany,Spot Market Spod,RES-1052 +0,0.8212093759262624,2.1898916691367,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,2.5087946434547317,Falcon Group,Bolivia,Spodumene,Bolivia,Spot Market Spod,RES-1066 +0,0.0,0.0,0.0,0.0,0.0,0.0,0.19407031896889676,0.5175208505837247,0.5928848244499795,0.5928848244499795,0.5928848244499795,Golden Peak Minerals,Serbia,Spodumene,Middle East & Africa,Spot Market Spod,RES-1226 +0,0.0,0.0,0.0705710250795988,0.18818940021226346,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,0.21559448161817435,Golden Peak Minerals,Serbia,Spodumene,Middle East & Africa,Spot Market Spod,RES-1133 +0,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,3.142285714285714,Horizon Metals,Germany,Brine,Germany,Spot Market Lep,RES-1144 +0,0.0,0.0,0.0,0.011253217512692785,0.03000858003384743,0.03437857950127646,0.03437857950127646,0.03437857950127646,0.03437857950127646,0.03437857950127646,0.03437857950127646,Highland Materials,Serbia,Brine,Middle East & Africa,Spot Market Lep,RES-1223 +0,0.40117402545249403,1.069797401206651,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,1.2255866477573694,Granite Metals,Serbia,Zinnwaldite,Middle East & Africa,Spot Market Spod,RES-1168 +0,0.4891666666428572,2.4685777378571427,3.1394097142857142,5.796613713571429,5.026247857857143,7.2086347642857165,7.78684487857143,8.266476428571428,8.59667642857143,8.690949642857143,8.76250405,Redwood Group,Bolivia,Spodumene,Bolivia,Spot Market Spod,RES-1107 diff --git a/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_supply_data.csv b/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_supply_data.csv new file mode 100644 index 0000000..48a0b96 --- /dev/null +++ b/lithium-supply-chain/data/forecast_version/forecast_version_1/dummy_supply_data.csv @@ -0,0 +1,307 @@ +,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,Conversion Company,Conversion Country,Product,Conversion Region,Resource ID,Conversion Resource SubType,Resource Region,Resource Country,Resource Company,Conversion ID +0,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,0.06546428571428571,Northstar Industries,Germany,Lithium Carbonate,Germany,RES-1094,Spodumene,Germany,Germany,Northstar Industries,CNV-1036 +1,0.0,0.02476603943551971,0.029521112017942167,0.038854745093444165,0.05528173212466597,0.0691522850330925,0.07170075659398135,0.0688903779983981,0.07088784620348448,0.08171920016569952,0.08643193372910254,Atlas Corp,Argentina,Lithium Hydroxide,North America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1228 +2,0.06682173896817736,0.19972612447999763,0.3007244008618896,0.4700170777432759,0.6687306305403141,0.8365195770132158,0.867347862023968,0.8333513467548156,0.857514268590538,0.9885387116818489,1.0455475854326919,Blue Horizon Minerals,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1160 +3,0.08820469543799413,0.2636384843135969,0.42452261255003415,0.6893583806901379,0.9808049247924605,1.226895379619383,1.2721101976351528,1.2222486419070628,1.2576875939327892,1.4498567771333783,1.533469791967948,Blue Horizon Minerals,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1193 +4,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2851437984494978,0.327881610071881,0.32788161007188105,0.327881610071881,Granite Energy,South Korea,Lithium Hydroxide,South America,RES-1211,Spodumene,Middle East & Africa,Serbia,Granite Energy,CNV-1262 +5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.97105798803211,5.898785214855245,6.800093888076539,7.192254244952882,Granite Energy,South Korea,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1262 +6,0.0,0.0,0.0,0.1287711401952441,0.34338970718731776,0.3933958332964709,0.3933958332964708,0.10825203484697317,0.06551422322458987,0.06551422322458988,0.06551422322458987,Granite Energy,Norway,Lithium Hydroxide,South America,RES-1211,Spodumene,Middle East & Africa,Serbia,Granite Energy,CNV-1257 +7,0.2678883515234231,0.42142212265279505,0.5023350512730481,0.6314259563704068,0.8278778232506382,1.0150492427196094,1.0524568876981486,1.1279329047368114,1.1786398488015692,1.3587308810455967,1.437088679626002,Granite Energy,Norway,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1257 +8,0.0,0.0,0.0,0.0,0.6514285714285714,1.737142857142857,1.9901142857142857,1.9901142857142857,1.9901142857142857,1.9901142857142857,1.9901142857142857,Pioneer Materials,Vietnam,Lithium Carbonate,Europe,RES-1089,Petalite,Europe,Vietnam,Pioneer Materials,CNV-1249 +9,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Northstar Minerals,Germany,Lithium Carbonate,Germany,RES-1185,Petalite,Germany,Germany,Northstar Minerals,CNV-1120 +10,0.0,0.0,0.0,0.3017142857142857,0.8045714285714286,0.9217371428571429,0.9217371428571429,0.9217371428571429,0.9217371428571429,0.9217371428571429,0.9217371428571429,Cobalt Bay Mining,South Korea,Lithium Hydroxide,South America,RES-1242,Lepidolite,South America,South Korea,Cobalt Bay Mining,CNV-1102 +11,0.0,0.0,0.0,0.0,0.21857142857142858,0.582857142857143,0.6677357142857143,0.6677357142857143,0.6677357142857143,0.6677357142857143,0.6677357142857143,Atlas Energy,Indonesia,Lithium Carbonate,Europe,RES-1129,Petalite,Europe,Indonesia,Atlas Energy,CNV-1245 +12,0.20313808646325895,0.31956179916799615,0.38091757442505997,0.5013515495928276,0.713312672576335,0.8922875488140968,0.9251710528255658,0.8889081032051368,0.914681886496574,1.0544412924606388,1.1152507577948714,Atlas Holdings,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1110 +13,0.0444364564138379,0.06990414356799918,0.08332571940548186,0.10967065147343105,0.1560371471260733,0.1951879013030837,0.20238116780559254,0.1944486475761237,0.2000866626711256,0.23065903272576477,0.24396110326762813,Atlas Holdings,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1091 +14,0.0,0.0,0.0,0.0,0.11732116325268668,0.2788398590044053,0.28911595400798934,0.2777837822516052,0.28583808953017936,0.3295129038939496,0.3485158618108972,Vantage Materials,Zambia,Lithium Carbonate,Asia Pacific,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1256 +15,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Cascade Mining,Japan,Lithium Carbonate,Middle East & Africa,RES-1054,Petalite,Middle East & Africa,Japan,Cascade Mining,CNV-1176 +16,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Granite Industries,Germany,Lithium Carbonate,Germany,RES-1137,Petalite,Germany,Germany,Granite Industries,CNV-1162 +17,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Golden Peak Industries,Indonesia,Lithium Carbonate,Europe,RES-1179,Petalite,Europe,Indonesia,Golden Peak Industries,CNV-1068 +18,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Sierra Holdings,Germany,Lithium Carbonate,Germany,RES-1265,Brine,Germany,Germany,Sierra Holdings,CNV-1082 +19,0.0,1.9285714285714286,7.071428571428571,11.034642857142858,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,11.78357142857143,Sierra Holdings,Germany,Lithium Carbonate,Germany,RES-1196,Brine,Germany,Germany,Sierra Holdings,CNV-1202 +20,0.2618571428571429,0.2618571428571429,0.519,0.9475714285714288,1.0474285714285714,1.0474285714285714,1.0474285714285714,1.0474285714285714,1.0474285714285714,1.0474285714285714,1.0474285714285714,Frontier Industries,Germany,Lithium Carbonate,Germany,RES-1159,Petalite,Germany,Germany,Frontier Industries,CNV-1161 +21,0.0,0.0,0.0,0.0,0.0,0.0,0.6,1.5999999999999999,1.833,1.833,1.833,Summit Holdings,Indonesia,Lithium Carbonate,Europe,RES-1181,Petalite,Europe,Indonesia,Summit Holdings,CNV-1092 +22,0.0,0.0,0.0,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Summit Holdings,Indonesia,Lithium Carbonate,Europe,RES-1002,Petalite,Europe,Indonesia,Summit Holdings,CNV-1078 +23,2.6185714285714283,3.0471428571428567,4.1899999999999995,5.070714285714286,6.522857142857142,8.665714285714285,9.165000000000001,9.165000000000001,10.450714285714286,12.593571428571428,13.092857142857143,Ironclad Holdings,Indonesia,Lithium Carbonate,Europe,RES-1018,Petalite,Europe,Indonesia,Ironclad Holdings,CNV-1206 +24,0.3516828121895175,0.5532413648095934,0.6594635507233855,0.8679648702325828,1.23492256439778,1.5447728188844052,1.6017023852042604,1.5389221536738928,1.5835430159971935,1.825501487572481,1.9307778744323707,Summit Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1100 +25,0.2831237080081675,0.4453892575903947,0.5309038693549276,0.6987587222450035,0.9941795374032668,1.2436257711596475,1.2894571548756322,1.238915668842159,1.2748378793045998,1.4696275513670154,1.5543807436766015,Summit Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1229 +26,1.5732570280245157,1.5732570280245157,1.8021360282826742,2.183601028712938,2.2724823738131894,2.2724823738131894,2.2724823738131894,2.2724823738131894,2.2724823738131894,2.2724823738131894,2.2724823738131894,Highland Minerals,South Korea,Lithium Hydroxide,South America,RES-1189,Spodumene,Europe,Spain,Highland Minerals,CNV-1177 +27,0.0,0.0,0.10287400339768883,0.04732471007421115,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Highland Minerals,South Korea,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1177 +28,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Horizon Materials,Germany,Lithium Carbonate,Germany,RES-1117,Petalite,Germany,Germany,Horizon Materials,CNV-1136 +29,0.0,0.0,4.285714285714286,11.428571428571429,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,13.092857142857143,Horizon Materials,Germany,Lithium Carbonate,Germany,RES-1076,Petalite,Germany,Germany,Horizon Materials,CNV-1083 +30,0.0,0.0,4.192620131770044,5.156502827131708,6.118221775650894,6.118221775650894,6.118221775650894,6.118221775650894,6.118221775650894,6.118221775650894,6.118221775650894,Summit Materials,United States,Lithium Hydroxide,Oceania,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1154 +31,0.2399568646347246,0.576157309618351,0.16443758289784607,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Summit Materials,United States,Lithium Hydroxide,Oceania,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1154 +32,0.0,0.0,0.0,0.0,0.0,0.0,0.04285714285714286,0.1142857142857143,0.13092857142857142,0.13092857142857142,0.13092857142857142,Falcon Energy,Japan,Lithium Hydroxide,Middle East & Africa,RES-1227,Petalite,Middle East & Africa,Japan,Falcon Energy,CNV-1056 +33,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,0.34041428571428567,Cobalt Bay Materials,Germany,Lithium Carbonate,Germany,RES-1033,Spodumene,Germany,Germany,Cobalt Bay Materials,CNV-1216 +34,0.0,0.0,0.0,1.1813855467870593,2.9134389407861394,2.9134389407861394,2.9134389407861394,2.9134389407861394,2.9134389407861394,2.9134389407861394,2.9134389407861394,Amber Metals,Germany,Lithium Hydroxide,Germany,RES-1101,Spodumene,Bolivia,Bolivia,Crescent Energy,CNV-1132 +35,0.0,0.0,0.6105908309828181,0.6995081207446908,0.6995081207446907,0.6995081207446907,0.6995081207446907,0.6995081207446907,0.6995081207446907,0.6995081207446907,0.6995081207446907,Amber Metals,Germany,Lithium Hydroxide,Germany,RES-1250,Spodumene,Middle East & Africa,Serbia,Cascade Materials,CNV-1132 +36,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Metals,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1132 +37,0.4163741628383239,0.32100535106210465,0.35019296254256516,0.3992221786407759,0.41119536270587115,0.41134417086026714,0.41134417086026714,0.41134417086026714,0.41134417086026714,0.41134417086026714,0.41134417086026714,Frontier Group,Germany,Lithium Carbonate,Germany,Spot Market Lep,Brine,Spot Market Lep,Spot Market Lep,Spot Market Lep,CNV-1164 +38,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Amber Resources,Germany,Lithium Carbonate,Germany,RES-1194,Petalite,Germany,Germany,Amber Resources,CNV-1095 +39,0.07617678242372208,0.11983567468799854,0.14284409040939752,0.1880068310973104,0.26749225221612555,0.33460783080528617,0.34693914480958704,0.3333405387019261,0.3430057074362152,0.3954154846727395,0.41821903417307654,Amber Corp,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1104 +40,0.0,0.0,0.0,0.12508220924732277,0.2947830294218692,0.2947830294218691,0.2947830294218691,0.2947830294218691,0.2947830294218691,0.2947830294218692,0.2947830294218691,Vantage Energy,Austria,Lithium Carbonate,Oceania,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1224 +41,0.06682173896817736,0.1997261244799975,0.23807348401566245,0.2844650398094333,0.34898441418722037,0.43654691621382147,0.4526349948714139,0.4348935405043154,0.4475032262832935,0.5158797689870172,0.5456304750274096,Vantage Energy,Austria,Lithium Carbonate,Oceania,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1224 +42,0.0,0.0,0.0,0.5503617206882202,1.297045329456224,1.2970453294562243,1.297045329456224,1.297045329456224,1.297045329456224,1.2970453294562243,1.297045329456224,Vantage Energy,Austria,Lithium Hydroxide,Oceania,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1140 +43,0.29401565145998043,0.8787949477119888,1.0475233296689148,1.2516461751615062,1.5355314224237695,1.9208064313408144,1.991593977434221,1.9135315782189877,1.9690141956464908,2.269870983542875,2.400774090120602,Vantage Energy,Austria,Lithium Hydroxide,Oceania,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1140 +44,0.0,0.0,0.0,0.3302170324129321,0.7782271976737345,0.7782271976737345,0.7782271976737344,0.7782271976737344,0.7782271976737344,0.7782271976737345,0.7782271976737344,Vantage Energy,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1050 +45,0.33517784266437767,0.5272769686271933,0.6285139978013489,0.7509877050969038,0.9213188534542617,1.1524838588044886,1.1949563864605326,1.1481189469313924,1.1814085173878943,1.3619225901257253,1.4404644540723608,Vantage Energy,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1050 +46,0.0,0.0,0.0,0.31270552311830696,0.7369575735546728,0.7369575735546728,0.7369575735546727,0.7369575735546727,0.7369575735546726,0.7369575735546728,0.7369575735546727,Vantage Energy,Germany,Lithium Carbonate,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1057 +47,0.3174032600988425,0.49931531119999367,0.5951837100391562,0.7111625995235832,0.872461035468051,1.0913672905345537,1.1315874871785347,1.0872338512607884,1.1187580657082334,1.2896994224675429,1.3640761875685237,Vantage Energy,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1057 +48,0.0,0.0,0.0,0.16510851620646605,0.38911359883686725,0.38911359883686725,0.3891135988368672,0.3891135988368672,0.3891135988368672,0.38911359883686725,0.3891135988368672,Vantage Energy,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1157 +49,0.16758892133218883,0.26363848431359665,0.31425699890067443,0.3754938525484519,0.46065942672713084,0.5762419294022443,0.5974781932302663,0.5740594734656962,0.5907042586939472,0.6809612950628626,0.7202322270361804,Vantage Energy,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1157 +50,0.0,0.0,0.0,0.0,0.9536625010756593,2.543100002868425,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,Cascade Materials,France,Lithium Hydroxide,Middle East & Africa,RES-1171,Spodumene,North America,Australia,Highland Corp,CNV-1065 +51,0.0,0.0,0.0,0.0,1.5385755017353973,4.102868004627727,4.7003481578016375,4.7003481578016375,4.7003481578016375,4.7003481578016375,4.7003481578016375,Cascade Materials,France,Lithium Hydroxide,Middle East & Africa,RES-1052,Spodumene,Middle East & Africa,Japan,Cascade Materials,CNV-1065 +52,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Cascade Materials,France,Lithium Hydroxide,Middle East & Africa,RES-1250,Spodumene,Middle East & Africa,Serbia,Cascade Materials,CNV-1065 +53,0.0,0.0,0.0,0.4353842404358766,0.3582675772923845,0.0,0.0,0.0,0.0,0.0,0.0,Cascade Materials,France,Lithium Hydroxide,Middle East & Africa,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1065 +54,4.16374162838324,3.2100535106210475,3.5019296254256527,3.99222178640776,4.111953627058712,4.113441708602672,4.113441708602672,4.113441708602672,4.113441708602672,4.113441708602672,4.113441708602672,Stonebridge Holdings,Germany,Lithium Carbonate,Germany,Spot Market Lep,Brine,Spot Market Lep,Spot Market Lep,Spot Market Lep,CNV-1180 +55,1.285646537886755,1.8832313928976812,2.054465380249716,2.3421034480258855,2.4123461278744442,2.4132191357135677,2.4132191357135677,2.4132191357135677,2.4132191357135677,2.4132191357135677,2.4132191357135677,Stonebridge Holdings,Germany,Lithium Hydroxide,Germany,Spot Market Lep,Brine,Spot Market Lep,Spot Market Lep,Spot Market Lep,CNV-1059 +56,0.0,0.0,0.0,0.0,0.72269836563655,1.7176535314671366,1.7809542766892137,1.7111480986698884,1.7607626315059053,2.0297994879867294,2.1468577087551273,Blue Horizon Mining,Kazakhstan,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1197 +57,0.0,0.11100567760572501,0.2514055991205397,0.3308920227312662,0.47078636390038114,0.5889097822173038,0.6106128948648734,0.5866793481153902,0.6036900450877389,0.6959312530240217,0.7360655001446149,Redwood Metals,South Korea,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1038 +58,0.12315246491835072,0.19373434074559764,0.23093127949519254,0.3039443769406517,0.8454163023988606,1.5224656301640525,1.5785731088836212,1.5166994510937644,1.5606759688347789,1.7991404552609647,1.9028966054874985,Golden Peak Holdings,India,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1006 +59,0.0002329921617385587,1.7089980656217125,2.597166885977425,3.821249088797399,4.7763233145731,5.960558772767826,6.392448843144842,6.359044894305663,6.3054533182759105,6.290152742470453,6.232385647717891,Amber Energy,Bolivia,Lithium Hydroxide,Bolivia,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1201 +60,3.591139939541165e-05,0.2951449756446884,0.40841227785816603,0.48384290985767003,0.5651530093126297,0.5651530093126297,0.5651530093126297,0.5651530093126297,0.5651530093126297,0.5651530093126297,0.5651530093126296,Amber Energy,Bolivia,Lithium Hydroxide,Bolivia,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1201 +61,0.0,0.0,0.0,0.0,0.4099169940512922,1.0931119841367793,1.2522964168266977,1.2522964168266977,1.2522964168266977,1.2522964168266977,1.2522964168266975,Amber Energy,Bolivia,Lithium Hydroxide,Bolivia,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1201 +62,0.0,0.0,0.0,0.015151239943075347,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Bolivia,Lithium Hydroxide,Bolivia,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1201 +63,0.708529163846957,0.8408121465872724,0.9232470931594896,1.2895700879827796,1.5733238305917128,1.96341171717273,2.105676571364415,2.094673290119992,2.077020192091783,2.0719801730329697,2.0529516565753525,Amber Energy,Germany,Spodumene Concentrate,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1190 +64,0.10920656556144683,0.14520875448503245,0.14518337284332491,0.1632841328413284,0.186161748047756,0.18616174804775604,0.186161748047756,0.18616174804775604,0.186161748047756,0.186161748047756,0.186161748047756,Amber Energy,Germany,Spodumene Concentrate,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1190 +65,0.0,0.0,0.0,0.0,0.13502690936722367,0.3600717583125966,0.41250720811686836,0.4125072081168684,0.41250720811686836,0.4125072081168683,0.4125072081168683,Amber Energy,Germany,Spodumene Concentrate,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1190 +66,0.0,0.0,0.0,0.00511314111496169,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Spodumene Concentrate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1190 +67,4.427084065194354,3.0776866879801124,2.4617763144995033,2.3730587575470037,2.2637230126513055,2.8249875842798002,3.0296804886033057,3.0138487949091295,2.9884492404918954,2.981197581992993,2.9538190539594327,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1037 +68,0.6823524999122167,0.5315183093758625,0.38712170465843626,0.30047443331576174,0.2678524439387712,0.2678524439387712,0.26785244393877117,0.2678524439387712,0.2678524439387712,0.2678524439387712,0.26785244393877117,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1037 +69,0.0,0.0,0.0,0.0,0.19427883574788865,0.5180768953277031,0.5935218432097998,0.5935218432097998,0.5935218432097998,0.5935218432097997,0.5935218432097997,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1037 +70,0.0,0.0,0.0,0.009409170090486405,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1037 +71,3.209700020110384,2.231367391906427,1.784823457109897,1.7204675992215779,1.6412319468598695,2.0481568844291638,2.1965622025682405,2.1850839955090873,2.16666895095081,2.1614113935864143,2.14156156451477,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1195 +72,0.49471543807119084,0.38535846692078735,0.2806688386597872,0.2178439641539273,0.19419689846326574,0.1941968984632658,0.19419689846326568,0.19419689846326574,0.19419689846326574,0.19419689846326568,0.19419689846326568,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1195 +73,0.0,0.0,0.0,0.0,0.14085496769974812,0.3756132471993284,0.43031192632273046,0.4303119263227305,0.4303119263227305,0.43031192632273035,0.43031192632273035,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1195 +74,0.0,0.0,0.0,0.0068216483156026434,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1195 +75,0.9741402282289139,0.6772174118438424,0.5416918462671662,0.5220729266603408,0.498111989679233,0.6216132356125386,0.6666540773038483,0.6631704547926461,0.6575815101571819,0.6559858476034262,0.6499614475345712,Amber Energy,Germany,Lithium Hydroxide,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1199 +76,0.15014556087221612,0.11695584713964956,0.0851826665531773,0.06610437532946757,0.0589385331355193,0.05893853313551932,0.0589385331355193,0.05893853313551931,0.05893853313551931,0.05893853313551931,0.05893853313551929,Amber Energy,Germany,Lithium Hydroxide,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1199 +77,0.0,0.0,0.0,0.0,0.04274931910225368,0.11399818427267652,0.13059916985738504,0.13059916985738504,0.13059916985738504,0.130599169857385,0.13059916985738498,Amber Energy,Germany,Lithium Hydroxide,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1199 +78,0.0,0.0,0.0,0.002070017419907009,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1199 +79,0.8634689514030984,0.6002792940189619,0.4801506774135656,0.4627464577216657,0.4415218927891025,0.5509922628988443,0.5909160513006606,0.5878282003017332,0.5828742111079924,0.5814598304755555,0.5761198575850565,Amber Energy,Germany,Lithium Metal,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1264 +80,0.13308764615939556,0.10366858873464271,0.07550513328057284,0.05859251449657354,0.0522425744559279,0.052242574455927906,0.0522425744559279,0.0522425744559279,0.0522425744559279,0.0522425744559279,0.05224257445592789,Amber Energy,Germany,Lithium Metal,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1264 +81,0.0,0.0,0.0,0.0,0.03789260382515001,0.10104694353373336,0.11576190468583328,0.11576190468583328,0.11576190468583328,0.11576190468583326,0.11576190468583325,Amber Energy,Germany,Lithium Metal,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1264 +82,0.0,0.0,0.0,0.0018347881676448491,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Lithium Metal,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1264 +83,0.24370980117853233,0.1694258341996314,0.13552013183340245,0.1305182316650852,0.12461735020437159,0.15551481570215625,0.1667831056828092,0.16591157515262084,0.16451333643253102,0.16411413455947946,0.1626069538677736,Amber Energy,Germany,Spodumene Concentrate,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1222 +84,0.037563323767600576,0.029259941666604488,0.021310946953987907,0.016526093832366893,0.01474520585021602,0.014745205850216023,0.014745205850216022,0.014745205850216022,0.01474520585021602,0.01474520585021602,0.014745205850216018,Amber Energy,Germany,Spodumene Concentrate,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1222 +85,0.0,0.0,0.0,0.0,0.010694998273369371,0.02851999539565167,0.03267321972514344,0.03267321972514344,0.032673219725143435,0.032673219725143435,0.032673219725143435,Amber Energy,Germany,Spodumene Concentrate,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1222 +86,0.0,0.0,0.0,0.0005175043549767522,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Spodumene Concentrate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1222 +87,0.0002329921617385587,0.00016197498489448517,1.2957331151681242,2.3730587575470037,2.2637230126513055,2.8249875842798002,3.0296804886033057,3.0138487949091295,2.9884492404918954,2.981197581992993,2.9538190539594327,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1066,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1021 +88,3.591139939541165e-05,2.7973175589488053e-05,0.20375791633540444,0.30047443331576174,0.2678524439387712,0.2678524439387712,0.26785244393877117,0.2678524439387712,0.2678524439387712,0.2678524439387712,0.26785244393877117,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1226,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1021 +89,0.0,0.0,0.0,0.0,0.19427883574788865,0.5180768953277031,0.5935218432097998,0.5935218432097998,0.5935218432097998,0.5935218432097997,0.5935218432097997,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1133,Spodumene,Bolivia,Bolivia,Amber Energy,CNV-1021 +90,0.0,0.0,0.0,0.009409170090486405,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1021 +91,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Amber Energy,Germany,Lithium Carbonate,Germany,RES-1144,Spodumene,Germany,Germany,Amber Energy,CNV-1081 +92,1.7348923451596832,1.3375222960921036,1.4591373439273554,1.6634257443365665,1.7133140112744634,1.7139340452511136,1.7139340452511136,1.7139340452511136,1.7139340452511136,1.7139340452511136,1.7139340452511136,Pioneer Mining,Germany,Lithium Carbonate,Germany,Spot Market Lep,Brine,Spot Market Lep,Spot Market Lep,Spot Market Lep,CNV-1175 +93,0.0,0.0,0.0,0.0,0.0,0.058834285714285714,0.15689142857142854,0.17973874285714286,0.17973874285714286,0.17973874285714286,0.17973874285714286,Ironclad Energy,Finland,Lithium Hydroxide,South America,RES-1223,Brine,South America,Finland,Ironclad Energy,CNV-1043 +94,0.0,0.0,0.0,0.1451280801452923,0.39232196991698426,0.4907581518477532,0.5088440790540611,0.48889945676282515,0.5030750375731158,0.5799427108533513,0.6133879167871791,Copper Creek Group,Finland,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1111 +95,0.0,0.08571428571428572,0.2285714285714286,0.3475714285714286,0.4904285714285715,0.5237142857142858,0.5237142857142858,0.5237142857142858,0.5237142857142858,0.5237142857142858,0.5237142857142858,Pioneer Resources,Indonesia,Lithium Carbonate,Europe,RES-1168,Petalite,Europe,Indonesia,Pioneer Resources,CNV-1032 +96,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6921428571428571,1.8457142857142856,2.1144964285714285,Ironclad Industries,Japan,Lithium Carbonate,Middle East & Africa,RES-1107,Hard Rock,Middle East & Africa,Japan,Ironclad Industries,CNV-1221 +97,0.253922608079074,0.39945224895999526,0.4761469680313252,0.6266894369910345,0.8916408407204187,1.115359436017621,1.156463816031957,1.1111351290064209,1.1433523581207174,1.3180516155757986,1.3940634472435889,Silverridge Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1253 +98,0.2004652169045321,0.5991783734399929,0.7142204520469878,0.9400341554865518,1.3374612610806282,1.6730391540264316,1.7346957240479355,1.6667026935096312,1.715028537181076,1.9770774233636979,2.0910951708653833,Silverridge Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1166 +99,0.0,0.0,0.0,0.07683185840707965,0.20488495575221238,0.23472132743362834,0.23472132743362834,0.23472132743362834,0.23472132743362834,0.23472132743362834,0.23472132743362834,Cobalt Bay Corp,Poland,Lithium Hydroxide,South America,RES-1215,Spodumene,South America,Poland,Cobalt Bay Corp,CNV-1049 +100,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6921428571428571,1.8457142857142856,2.1144964285714285,Frontier Holdings,Japan,Lithium Carbonate,Middle East & Africa,RES-1158,Hard Rock,Middle East & Africa,Japan,Frontier Holdings,CNV-1221 +101,0.0,0.0,0.0,0.0,0.0,0.04285714285714286,0.1142857142857143,0.13092857142857142,0.13092857142857142,0.13092857142857142,0.13092857142857142,Frontier Metals,Indonesia,Lithium Carbonate,Europe,RES-1010,Petalite,Europe,Indonesia,Frontier Metals,CNV-1230 +102,0.0,0.0,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Titan Corp,Indonesia,Lithium Carbonate,Europe,RES-1212,Petalite,Europe,Indonesia,Titan Corp,CNV-1008 +103,0.0,0.0,0.0,0.21428571428571427,0.5714285714285714,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Titan Corp,Japan,Lithium Carbonate,Middle East & Africa,RES-1231,Pegmatite,Middle East & Africa,Japan,Titan Corp,CNV-1035 +104,0.0,0.34285714285714286,0.9142857142857144,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Silverridge Minerals,Sweden,Lithium Carbonate,Europe,RES-1063,Petalite,Europe,Sweden,Silverridge Minerals,CNV-1084 +105,0.0,0.0,0.0,0.0,0.46247142857142853,1.233257142857143,2.4579885,4.199885642857143,4.605747677142857,4.605747677142857,4.605747677142857,Northstar Metals,Japan,Lithium Carbonate,Middle East & Africa,RES-1145,Petalite,Middle East & Africa,Japan,Northstar Metals,CNV-1051 +106,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.19714285714285712,0.5257142857142858,0.6022714285714287,Titan Resources,Morocco,Lithium Carbonate,Europe,RES-1255,Hard Rock,Europe,Morocco,Titan Resources,CNV-1024 +107,0.126961304039537,0.19972612447999763,0.23807348401566245,0.31334471849551726,0.44582042036020936,0.5576797180088106,0.5782319080159787,0.5555675645032104,0.5716761790603588,0.6590258077878992,0.6970317236217944,Crescent Corp,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1086 +108,0.055862973777396276,0.08787949477119895,0.10475233296689147,0.1378716761380276,0.19616098495849213,0.2453790759238766,0.2544220395270306,0.24444972838141257,0.2515375187865579,0.2899713554266756,0.30669395839358954,Crescent Corp,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1234 +109,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Pioneer Energy,Germany,Lithium Carbonate,Germany,RES-1103,Petalite,Germany,Germany,Pioneer Energy,CNV-1150 +110,0.0,0.0,0.11314285714285714,0.3017142857142857,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,0.34565142857142855,Blue Horizon Corp,DR Congo,Lithium Hydroxide,South America,RES-1060,Spodumene,South America,DR Congo,Blue Horizon Corp,CNV-1105 +111,0.0,0.0,0.0,0.0,0.14791403286978508,0.39443742098609375,0.4518773704171935,0.4518773704171935,0.4518773704171935,0.4518773704171935,0.4518773704171935,Atlas Materials,United Kingdom,Lithium Hydroxide,South America,RES-1172,Brine,South America,United Kingdom,Atlas Materials,CNV-1044 +112,0.0,0.022865031875643288,0.05255654803631082,0.06021009534409858,0.06021009534409859,0.09360947651663727,0.09360947651663722,0.09360947651663724,0.09360947651663724,0.09360947651663723,0.09360947651663724,Pioneer Industries,Germany,Lithium Carbonate,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1058 +113,0.03592552264808362,0.03660355774207351,0.031550742820422584,0.031550742820422584,0.03155074282042259,0.03155074282042259,0.03155074282042258,0.03155074282042259,0.0315507428204226,0.03155074282042259,0.0315507428204226,Pioneer Industries,Germany,Lithium Carbonate,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1058 +114,0.1705427672655301,0.17376148122454182,0.14977516242661956,0.14977516242661956,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Carbonate,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1058 +115,0.02077784513756756,0.08551199393740515,0.1018158300385461,0.1322396510149578,0.23734888504751678,0.28317675598626657,0.29361267880487485,0.28210425369051084,0.2902838325176081,0.3346379370347799,0.35393645481583996,Pioneer Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1058 +116,0.0,0.023474766058993773,0.05395805598394577,0.06181569788660788,0.06181569788660789,0.09610572922374758,0.09610572922374756,0.09610572922374759,0.09610572922374758,0.09610572922374758,0.09610572922374758,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1174 +117,0.036883536585365854,0.03757965261519546,0.03239209596230052,0.03239209596230052,0.03239209596230053,0.03239209596230053,0.03239209596230051,0.032392095962300534,0.03239209596230053,0.03239209596230053,0.032392095962300534,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1174 +118,0.17509057439261094,0.17839512072386296,0.1537691667579961,0.1537691667579961,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1174 +119,0.0213319210079027,0.08779231377573594,0.10453091883957401,0.13576604170869003,0.24367818864878385,0.2907281361459003,0.30144235023967153,0.2896270337889245,0.29802473471807767,0.3435616153557074,0.3633747602775957,Pioneer Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1174 +120,0.0,0.038108386459405494,0.08759424672718473,0.100350158906831,0.100350158906831,0.15601579419439546,0.1560157941943954,0.15601579419439543,0.15601579419439543,0.15601579419439543,0.15601579419439543,Pioneer Industries,Germany,Lithium Carbonate,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1028 +121,0.05987587108013938,0.061005929570122526,0.05258457136737099,0.05258457136737099,0.05258457136737099,0.052584571367371005,0.052584571367370984,0.052584571367371,0.052584571367371,0.05258457136737099,0.052584571367371,Pioneer Industries,Germany,Lithium Carbonate,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1028 +122,0.2842379454425502,0.28960246870756984,0.2496252707110327,0.2496252707110327,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Carbonate,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1028 +123,0.034629741895945934,0.1425199898956753,0.16969305006424357,0.2203994183582631,0.39558147507919467,0.47196125997711114,0.48935446467479154,0.47017375615085155,0.4838063875293469,0.5577298950579667,0.5898940913597334,Pioneer Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1028 +124,0.0,0.06707076016855366,0.1541658742398451,0.17661627967602253,0.1766162796760226,0.274587797782136,0.27458779778213593,0.274587797782136,0.27458779778213593,0.27458779778213593,0.274587797782136,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1209 +125,0.20022491289198605,0.10737043604341565,0.09254884560657294,0.09254884560657294,0.09254884560657295,0.09254884560657295,0.09254884560657292,0.09254884560657296,0.09254884560657295,0.09254884560657295,0.09254884560657296,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1209 +126,0.9504916895598878,0.5097003449253228,0.4393404764514175,0.4393404764514175,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1209 +127,0.11580185690004322,0.25083518221638845,0.29865976811306866,0.38790297631054305,0.6962233961393827,0.8306518175597154,0.861263857827633,0.8275058108254988,0.8514992420516504,0.9816046153020211,1.0382136007931309,Pioneer Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1209 +128,0.0,0.1006061402528305,0.23124881135976763,0.26492441951403384,0.26492441951403384,0.411881696673204,0.4118816966732039,0.411881696673204,0.4118816966732039,0.4118816966732039,0.411881696673204,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1114 +129,0.15807229965156794,0.16105565406512348,0.1388232684098594,0.13882326840985942,0.13882326840985942,0.13882326840985942,0.1388232684098594,0.13882326840985942,0.13882326840985942,0.13882326840985942,0.13882326840985945,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1114 +130,0.7503881759683324,0.7645505173879842,0.6590107146771261,0.6590107146771264,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1114 +131,0.09142251860529726,0.3762527733245827,0.44798965216960296,0.5818544644658145,1.0443350942090739,1.2459777263395733,1.2918957867414496,1.241258716238248,1.2772488630774759,1.4724069229530319,1.557320401189696,Pioneer Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1114 +132,0.0,0.03530040008871246,0.1541658742398451,0.17661627967602253,0.1766162796760226,0.274587797782136,0.27458779778213593,0.274587797782136,0.27458779778213593,0.27458779778213593,0.274587797782136,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1235 +133,0.0,0.05651075581232402,0.09254884560657294,0.09254884560657294,0.09254884560657295,0.09254884560657295,0.09254884560657292,0.09254884560657296,0.09254884560657295,0.09254884560657295,0.09254884560657296,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1235 +134,0.0,0.26826333943438047,0.4393404764514175,0.4393404764514175,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1235 +135,0.0,0.13201851695599395,0.29865976811306866,0.38790297631054305,0.6962233961393827,0.8306518175597154,0.861263857827633,0.8275058108254988,0.8514992420516504,0.9816046153020211,1.0382136007931309,Pioneer Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1235 +136,0.0,0.019274820730257197,0.08417807110482449,0.09643650270946458,0.09643650270946458,0.149931178220814,0.14993117822081395,0.149931178220814,0.149931178220814,0.149931178220814,0.149931178220814,Pioneer Industries,Germany,Lithium Metal,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1096 +137,0.0,0.030856157008888285,0.050533773084043505,0.05053377308404351,0.05053377308404352,0.05053377308404353,0.050533773084043505,0.05053377308404353,0.05053377308404353,0.05053377308404352,0.05053377308404353,Pioneer Industries,Germany,Lithium Metal,Germany,RES-1152,Spodumene,Germany,Germany,Pioneer Industries,CNV-1096 +138,0.0,0.14647788022524977,0.23988988515330237,0.2398898851533024,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Pioneer Industries,Germany,Lithium Metal,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1096 +139,0.0,0.0720851106788126,0.16307502111173802,0.2118038410422908,0.38015379755110607,0.4535547708380037,0.4702696405524746,0.4518369796609683,0.46493793841570236,0.5359784291507059,0.5668882217967036,Pioneer Industries,Germany,Lithium Metal,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1096 +140,0.0,0.0,0.0,0.0,0.17657142857142857,0.4708571428571429,0.5394257142857143,0.5394257142857143,0.5394257142857143,0.5394257142857143,0.5394257142857143,Northstar Corp,Japan,Lithium Hydroxide,Middle East & Africa,RES-1263,Hard Rock,Middle East & Africa,Japan,Northstar Corp,CNV-1167 +141,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Ironclad Corp,Germany,Lithium Carbonate,Germany,RES-1020,Petalite,Germany,Germany,Ironclad Corp,CNV-1203 +142,0.5846902159715519,1.2982198091199846,1.5474776461018058,2.0367406702208624,2.89783273234136,3.624918167057267,3.7585074021038616,3.6111891692708684,3.7158951638923328,4.283667750621346,4.530706203541665,Redwood Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1098 +143,0.11172594755479255,0.1757589895423979,0.20950466593378295,0.2757433522760552,0.3923219699169841,0.49075815184775307,0.5088440790540611,0.48889945676282526,0.5030750375731158,0.5799427108533514,0.6133879167871792,Redwood Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1251 +144,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,0.19639285714285712,Horizon Energy,Spain,Lithium Carbonate,Europe,RES-1130,Spodumene,Europe,Spain,Horizon Energy,CNV-1254 +145,1.8262024685891405,2.675044592184207,2.918274687854711,3.326851488673133,3.4266280225489267,3.427868090502227,3.427868090502227,3.427868090502227,3.427868090502227,3.427868090502227,3.427868090502227,Cascade Energy,Germany,Lithium Carbonate,Germany,Spot Market Lep,Brine,Spot Market Lep,Spot Market Lep,Spot Market Lep,CNV-1118 +146,0.126961304039537,0.19972612447999763,0.2380734840156626,0.31334471849551726,0.44582042036020925,0.5576797180088106,0.5782319080159785,0.5555675645032104,0.5716761790603588,0.6590258077878992,0.6970317236217946,Cascade Energy,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1003 +147,0.11172594755479255,0.1757589895423979,0.20950466593378309,0.2757433522760552,0.3923219699169841,0.4907581518477532,0.508844079054061,0.48889945676282515,0.5030750375731158,0.5799427108533513,0.6133879167871792,Cascade Energy,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1093 +148,0.0,0.42857142857142855,1.1428571428571428,1.3092857142857142,1.5235714285714284,1.8807142857142856,1.9639285714285712,1.9639285714285712,1.9639285714285712,1.9639285714285712,1.9639285714285712,Cascade Resources,Indonesia,Lithium Carbonate,Europe,RES-1225,Petalite,Europe,Indonesia,Cascade Resources,CNV-1022 +149,0.0,0.0,0.0,0.0,0.9,2.4,2.7495000000000003,2.7495000000000003,2.7495000000000003,2.7495000000000003,2.7495000000000003,Cascade Resources,Indonesia,Lithium Carbonate,Europe,RES-1040,Petalite,Europe,Indonesia,Cascade Resources,CNV-1241 +150,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,5.213571428571429,7.356428571428572,7.855714285714286,7.855714285714286,Cascade Resources,Japan,Lithium Carbonate,Middle East & Africa,RES-1135,Hard Rock,Middle East & Africa,Japan,Cascade Resources,CNV-1207 +151,0.0,0.04204760515368371,0.09522939360626503,0.1253378873982069,0.1783281681440838,0.2230718872035242,0.2312927632063914,0.2222270258012842,0.22867047162414345,0.26361032311515964,0.2788126894487178,Falcon Materials,Serbia,Lithium Carbonate,Middle East & Africa,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1258 +152,0.0,0.0,0.0,0.4824308948530888,1.45671947039307,1.4567194703930701,1.45671947039307,1.4567194703930701,1.45671947039307,1.45671947039307,1.4567194703930697,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1079 +153,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1079 +154,0.0,0.0,0.0,0.3593381761067392,0.5462698013974012,0.5462698013974012,0.5462698013974012,0.5462698013974012,0.5462698013974012,0.5462698013974012,0.5462698013974012,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1079 +155,0.0,0.0,0.0,0.676416138972071,1.695951331724398,2.1214767588899424,2.1996596155306216,2.113441887926126,2.174720880683697,2.507008753559531,2.6515875584510193,Silverridge Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1079 +156,0.0,0.0,0.0,0.4020257457109073,1.2139328919942252,1.2139328919942252,1.2139328919942252,1.2139328919942252,1.2139328919942247,1.2139328919942252,1.2139328919942247,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1240 +157,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1240 +158,0.0,0.0,0.0,0.29944848008894936,0.45522483449783435,0.45522483449783435,0.45522483449783435,0.45522483449783435,0.45522483449783435,0.45522483449783435,0.4552248344978343,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1240 +159,0.0,0.0,0.0,0.5636801158100592,1.4132927764369982,1.7678972990749522,1.8330496796088516,1.7612015732717716,1.8122674005697477,2.0891739612996094,2.2096562987091826,Silverridge Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1240 +160,0.0,0.0,0.0,0.381924458425362,0.6069664459971126,0.6069664459971126,0.6069664459971126,0.6069664459971126,0.6069664459971124,0.6069664459971126,0.6069664459971124,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1123 +161,0.7635219293094709,0.582687788157228,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1123 +162,0.890108639650659,0.6865908983055004,0.4991214442583387,0.28447605608450194,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891715,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1123 +163,0.12461701056658789,0.25260202222169587,0.4362044997533435,0.5354961100195562,0.7066463882184991,0.8839486495374761,0.9165248398044258,0.8806007866358858,0.9061337002848738,1.0445869806498047,1.1048281493545913,Silverridge Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1123 +164,0.0,0.0,0.0,0.381924458425362,0.6069664459971126,0.6069664459971126,0.6069664459971126,0.6069664459971126,0.6069664459971124,0.6069664459971126,0.6069664459971124,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1260 +165,0.40185364700498477,0.582687788157228,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1017,Spodumene,Bolivia,Bolivia,Silverridge Mining,CNV-1260 +166,0.4684782313950837,0.6865908983055004,0.4991214442583387,0.28447605608450194,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891718,0.22761241724891715,Silverridge Group,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1260 +167,0.06558790029820416,0.25260202222169587,0.4362044997533435,0.5354961100195562,0.7066463882184991,0.8839486495374761,0.9165248398044258,0.8806007866358858,0.9061337002848738,1.0445869806498047,1.1048281493545913,Silverridge Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1260 +168,0.0,0.34285714285714286,0.9142857142857144,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,1.0474285714285716,Atlas Resources,Germany,Lithium Carbonate,Germany,RES-1218,Petalite,Germany,Germany,Atlas Resources,CNV-1210 +169,0.0,0.0,2.142857142857143,5.714285714285714,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,6.546428571428572,Atlas Resources,Germany,Lithium Carbonate,Germany,RES-1128,Petalite,Germany,Germany,Atlas Resources,CNV-1131 +170,0.0,0.0,0.0,0.0,0.0,0.873990857142857,2.330642285714286,2.6700420685714286,2.6700420685714286,2.6700420685714286,2.6700420685714286,Vantage Metals,Serbia,Lithium Hydroxide,Middle East & Africa,RES-1122,Spodumene,Middle East & Africa,Serbia,Vantage Metals,CNV-1031 +171,0.0,0.0,0.8571428571428571,2.2857142857142856,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,2.6185714285714283,Atlas Industries,Indonesia,Lithium Carbonate,Europe,RES-1149,Petalite,Europe,Indonesia,Atlas Industries,CNV-1143 +172,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.27600857142857144,0.7360228571428573,0.843206185714286,Sierra Metals,Japan,Lithium Carbonate,Middle East & Africa,RES-1012,Hard Rock,Middle East & Africa,Japan,Sierra Metals,CNV-1153 +173,0.0,0.0,0.15085714285714286,0.4022857142857144,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,0.4608685714285715,Stonebridge Energy,Japan,Lithium Hydroxide,Middle East & Africa,RES-1232,Lepidolite,Middle East & Africa,Japan,Stonebridge Energy,CNV-1045 +174,0.0,0.0,0.5245714285714286,1.398857142857143,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,1.6025657142857141,Meridian Corp,Indonesia,Lithium Carbonate,Europe,RES-1080,Petalite,Europe,Indonesia,Meridian Corp,CNV-1119 +175,0.11760626058399218,0.3515179790847958,0.41900933186756617,0.5514867045521104,0.7846439398339685,0.9815163036955064,1.0176881581081223,0.9777989135256503,1.0061500751462316,1.1598854217067025,1.2267758335743582,Blue Horizon Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1186 +176,20.68642857142857,27.561000000000003,34.428942857142864,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,Titan Holdings,Vietnam,Lithium Carbonate,Europe,RES-1191,Petalite,Europe,Vietnam,Titan Holdings,CNV-1046 +177,20.68642857142857,27.561000000000003,34.428942857142864,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,35.92680000000001,Titan Holdings,Vietnam,Lithium Carbonate,Europe,RES-1191,Petalite,Germany,Germany,Titan Holdings,CNV-1046 +178,0.0,0.0,0.0,1.0714285714285714,2.857142857142857,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Titan Holdings,Bolivia,Lithium Hydroxide,Bolivia,RES-1015,Spodumene,Bolivia,Bolivia,Titan Holdings,CNV-1147 +179,0.0,0.0,0.0,0.8860391600902944,2.4278657839884494,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,Falcon Mining,Germany,Lithium Hydroxide,Germany,RES-1101,Spodumene,Bolivia,Bolivia,Crescent Energy,CNV-1005 +180,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Falcon Mining,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1005 +181,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,1.2464400000000002,Summit Corp,Germany,Lithium Carbonate,Germany,RES-1138,Spodumene,Germany,Germany,Summit Corp,CNV-1016 +182,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Summit Corp,Germany,Lithium Carbonate,Germany,RES-1188,Spodumene,Germany,Germany,Summit Corp,CNV-1233 +183,0.0,0.0,0.0,0.19165865992414668,0.5110897597977245,0.5855172060682682,0.5855172060682682,0.5855172060682682,0.5855172060682682,0.5855172060682682,0.5855172060682682,Blue Horizon Resources,Italy,Lithium Hydroxide,South America,RES-1148,Clay,South America,Italy,Blue Horizon Resources,CNV-1173 +184,0.0,0.0,0.0,0.0,0.7039269795161198,1.6730391540264316,1.7346957240479355,1.6667026935096316,1.715028537181076,1.9770774233636974,2.0910951708653833,Granite Resources,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1126 +185,0.0,0.0,0.0,1.0714285714285714,2.857142857142857,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,3.273214285714286,Cobalt Bay Industries,Bolivia,Lithium Hydroxide,Bolivia,RES-1014,Spodumene,Bolivia,Bolivia,Cobalt Bay Industries,CNV-1147 +186,0.0,0.0,0.504,1.3439999999999999,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,1.5397200000000002,Falcon Minerals,Indonesia,Lithium Carbonate,Europe,RES-1055,Petalite,Europe,Indonesia,Falcon Minerals,CNV-1119 +187,0.0,0.013857216115697115,0.0314389401692231,0.0323371676863876,0.032340394545621494,0.05028006327603103,0.050280063276031024,0.050280063276031024,0.050280063276031024,0.050280063276031024,0.050280063276031024,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1074 +188,0.0,0.0,0.0,0.055513744670035496,0.18096799642829708,0.25738893799195167,0.27017154000320664,0.27017154000320664,0.27017154000320664,0.27017154000320664,0.27017154000320664,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1074 +189,0.0,0.0,0.0,0.04550973066201124,0.1072641349888662,0.1072641349888662,0.10726413498886618,0.10726413498886618,0.10726413498886618,0.10726413498886618,0.10726413498886618,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1074 +190,0.21431393024929718,0.2402426138009381,0.28840641323752064,0.2765127553809105,0.2765403480181706,0.2765403480181707,0.2765403480181706,0.2765403480181706,0.2765403480181706,0.2765403480181706,0.2765403480181706,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1074 +191,0.21431393024929718,0.2402426138009381,0.28840641323752064,0.2765127553809105,0.2765403480181706,0.2765403480181707,0.2765403480181706,0.2765403480181706,0.2765403480181706,0.2765403480181706,0.2765403480181706,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1074 +192,0.04675940296348303,0.03949016577487901,0.03359789987857163,0.0301650278597357,0.030168037965618618,0.03016803796561862,0.030168037965618618,0.030168037965618618,0.030168037965618618,0.030168037965618618,0.030168037965618618,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1074 +193,0.15505576377977598,0.2564426461221503,0.15860673008246362,0.17513903626945276,0.20782426154092826,0.20782426154092826,0.20782426154092823,0.20782426154092823,0.20782426154092823,0.20782426154092823,0.20782426154092823,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1074 +194,0.04259082407070187,0.043478762896165625,0.050040671212832497,0.044797359826699294,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1074 +195,0.0,0.08141114467972056,0.1847037734941857,0.18998086015752716,0.18997907602375277,0.29536312397553754,0.2953631239755376,0.2953631239755376,0.2953631239755376,0.2953631239755376,0.2953631239755376,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1214 +196,0.0,0.0,0.0,0.32614324993645855,1.0630709128430327,1.511994930966798,1.5870845194952217,1.5870845194952217,1.5870845194952217,1.5870845194952217,1.5870845194952217,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1214 +197,0.0,0.0,0.0,0.267369667639316,0.63010799781448,0.63010799781448,0.6301079978144802,0.6301079978144802,0.6301079978144802,0.6301079978144802,0.6301079978144802,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1214 +198,0.6626812316919058,1.4114253560805115,1.694387677770434,1.6245124378628493,1.6244971818654563,1.6244971818654566,1.624497181865457,1.624497181865457,1.624497181865457,1.624497181865457,1.624497181865457,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1214 +199,0.6626812316919058,1.4114253560805115,1.694387677770434,1.6245124378628493,1.6244971818654563,1.6244971818654566,1.624497181865457,1.624497181865457,1.624497181865457,1.624497181865457,1.624497181865457,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1214 +200,0.14458499600550676,0.2320047239274142,0.19738766178660838,0.17721953867594722,0.17721787438532255,0.17721787438532255,0.17721787438532258,0.17721787438532258,0.17721787438532258,0.17721787438532258,0.17721787438532258,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1214 +201,0.4794487432664125,1.506600545967633,0.9318145392344739,1.028941838083035,1.2208342457655552,1.2208342457655552,1.2208342457655554,1.2208342457655554,1.2208342457655554,1.2208342457655554,1.2208342457655554,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1214 +202,0.1316953112712492,0.25543773201497305,0.29398894337539094,0.2631844889818583,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1214 +203,0.0,0.035098869766732835,0.0982466880288222,0.10105364901996126,0.10105469160019155,0.15711114101684157,0.1571111410168416,0.1571111410168416,0.1571111410168416,0.1571111410168416,0.1571111410168416,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1106 +204,0.0,0.0,0.0,0.17348045209386093,0.5654743958911307,0.8042684733912437,0.8442105310638287,0.8442105310638287,0.8442105310638287,0.8442105310638287,0.8442105310638287,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1106 +205,0.0,0.0,0.0,0.14221790831878514,0.335170434169262,0.335170434169262,0.33517043416926207,0.33517043416926207,0.33517043416926207,0.33517043416926207,0.33517043416926207,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1106 +206,0.4018386192174322,0.6085092520615867,0.9012700413672521,0.8641023605653455,0.8641112755926287,0.8641112755926288,0.8641112755926289,0.8641112755926289,0.8641112755926289,0.8641112755926289,0.8641112755926289,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1106 +207,0.4018386192174322,0.6085092520615867,0.9012700413672521,0.8641023605653455,0.8641112755926287,0.8641112755926288,0.8641112755926289,0.8641112755926289,0.8641112755926289,0.8641112755926289,0.8641112755926289,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1106 +208,0.08767388055653068,0.10002443304821329,0.10499343712053635,0.09426571206167407,0.09426668461010494,0.09426668461010497,0.09426668461010497,0.09426668461010497,0.09426668461010497,0.09426668461010497,0.09426668461010497,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1106 +209,0.2907295570870799,0.649542228664657,0.4956460315076988,0.54730948834204,0.6493927162029453,0.6493927162029453,0.6493927162029454,0.6493927162029454,0.6493927162029454,0.6493927162029454,0.6493927162029454,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1106 +210,0.079857795132566,0.11012712970410374,0.15637709754010157,0.13999174945843532,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1106 +211,0.0,0.12350243863115055,0.2801995542582009,0.2882050070049295,0.28820010063705004,0.4480687233344609,0.4480687233344609,0.4480687233344609,0.4480687233344609,0.4480687233344609,0.4480687233344609,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1004 +212,0.0,0.0,0.0,0.4947662493716914,1.6126888838399067,2.2937109727434333,2.4076226067171693,2.4076226067171693,2.4076226067171693,2.4076226067171693,2.4076226067171693,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1004 +213,0.0,0.0,0.0,0.4056054745251752,0.9558799431135167,0.9558799431135165,0.9558799431135165,0.9558799431135165,0.9558799431135165,0.9558799431135165,0.9558799431135165,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1004 +214,1.9100729033468613,2.141162295500861,2.570422157979403,2.464419932332365,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1004 +215,1.9100729033468613,2.141162295500861,2.570422157979403,2.464419932332365,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,2.464377978339535,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1004 +216,0.4167431789120425,0.3519561024686092,0.29944128266776976,0.26884581079989445,0.2688412340006766,0.2688412340006766,0.26884123400067655,0.26884123400067655,0.26884123400067655,0.26884123400067655,0.26884123400067655,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1004 +217,1.3819344946872534,2.285545083563665,1.413582481859957,1.560926660751498,1.8520173897824386,1.8520173897824386,1.8520173897824386,1.8520173897824386,1.8520173897824386,1.8520173897824386,1.8520173897824386,Frontier Group,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1004 +218,0.3795907195301304,0.3875044743120762,0.44598748218436973,0.39925646945545745,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1004 +219,0.0,0.018187596151852465,0.04126360897210531,0.04244253258838373,0.04244543823011709,0.06599051588497375,0.06599051588497376,0.06599051588497376,0.06599051588497376,0.06599051588497376,0.06599051588497376,Frontier Group,Germany,Lithium Metal,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1146 +220,0.0,0.0,0.0,0.07286178987942159,0.23751305517283142,0.33781239908008276,0.3545890386885922,0.3545890386885922,0.3545890386885922,0.3545890386885922,0.3545890386885922,Frontier Group,Germany,Lithium Metal,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1146 +221,0.0,0.0,0.0,0.05973152149388976,0.14077976722127733,0.14077976722127733,0.14077976722127733,0.14077976722127733,0.14077976722127733,0.14077976722127733,0.14077976722127733,Frontier Group,Germany,Lithium Metal,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1146 +222,0.2812870334522026,0.31531843061373127,0.37853341737424584,0.3629229914374451,0.36294783736735553,0.36294783736735564,0.36294783736735564,0.36294783736735564,0.36294783736735564,0.36294783736735564,0.36294783736735564,Frontier Group,Germany,Lithium Metal,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1146 +223,0.2812870334522026,0.31531843061373127,0.37853341737424584,0.3629229914374451,0.36294783736735553,0.36294783736735564,0.36294783736735564,0.36294783736735564,0.36294783736735564,0.36294783736735564,0.36294783736735564,Frontier Group,Germany,Lithium Metal,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1146 +224,0.06137171638957147,0.0518308425795287,0.04409724359062527,0.0395915990659031,0.03959430953098425,0.03959430953098425,0.03959430953098425,0.03959430953098425,0.03959430953098425,0.03959430953098425,0.03959430953098425,Frontier Group,Germany,Lithium Metal,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1146 +225,0.20351068996095595,0.33658097303532225,0.2081713332332335,0.22986998510365675,0.2727607989912248,0.27276079899122485,0.27276079899122485,0.27276079899122485,0.27276079899122485,0.27276079899122485,0.27276079899122485,Frontier Group,Germany,Lithium Metal,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1146 +226,0.055900456592796195,0.057065876301217386,0.06567838096684266,0.05879653477254282,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Metal,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1146 +227,0.0,0.03464304028924279,0.07859735042305775,0.080842919215969,0.08084460423120036,0.12569023579895613,0.12569023579895613,0.12569023579895613,0.12569023579895613,0.12569023579895613,0.12569023579895613,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1019 +228,0.0,0.0,0.0,0.13878436167508873,0.4523842784020619,0.6434215512149812,0.6753755336930575,0.6753755336930575,0.6753755336930575,0.6753755336930575,0.6753755336930575,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1019 +229,0.0,0.0,0.0,0.11377432665502811,0.2681391697044397,0.2681391697044397,0.26813916970443974,0.26813916970443974,0.26813916970443974,0.26813916970443974,0.26813916970443974,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1019 +230,0.5357848256232429,0.6006065345023452,0.7210160330938017,0.6912818884522763,0.6912962968942586,0.6912962968942586,0.6912962968942588,0.6912962968942588,0.6912962968942588,0.6912962968942588,0.6912962968942588,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1019 +231,0.5357848256232429,0.6006065345023452,0.7210160330938017,0.6912818884522763,0.6912962968942586,0.6912962968942586,0.6912962968942588,0.6912962968942588,0.6912962968942588,0.6912962968942588,0.6912962968942588,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1019 +232,0.11689850740870757,0.09872541443719753,0.08399474969642909,0.07541256964933925,0.07541414147937367,0.07541414147937368,0.07541414147937368,0.07541414147937368,0.07541414147937368,0.07541414147937368,0.07541414147937368,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1019 +233,0.38763940944943986,0.6411066153053758,0.39651682520615905,0.43784759067363194,0.519519641302352,0.519519641302352,0.5195196413023521,0.5195196413023521,0.5195196413023521,0.5195196413023521,0.5195196413023521,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1019 +234,0.10647706017675466,0.10869690724041406,0.12510167803208125,0.11199339956674823,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1019 +235,0.0,0.0,0.10341756634612861,0.20210729803992253,0.20210512844514755,0.3142156671062688,0.31421566710626886,0.31421566710626886,0.31421566710626886,0.31421566710626886,0.31421566710626886,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1115 +236,0.0,0.0,0.0,0.34696090418772185,1.130924983336474,1.6085030842725554,1.6883855179176843,1.6883855179176843,1.6883855179176843,1.6883855179176843,1.6883855179176843,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1075,Spodumene,North America,Netherlands,Frontier Group,CNV-1115 +237,0.0,0.0,0.0,0.2844358166375703,0.6703267564933736,0.6703267564933734,0.6703267564933736,0.6703267564933736,0.6703267564933736,0.6703267564933736,0.6703267564933736,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1238,Spodumene,North America,China,Amber Mining,CNV-1115 +238,0.0,0.0,0.9487053067023705,1.728204721130691,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1048,Spodumene,Bolivia,Bolivia,Frontier Group,CNV-1115 +239,0.0,0.0,0.9487053067023705,1.728204721130691,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,1.7281861690844786,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1039,Spodumene,Bolivia,Bolivia,Redwood Group,CNV-1115 +240,0.0,0.0,0.11051940749530142,0.18853142412334814,0.18852940026376133,0.18852940026376133,0.18852940026376133,0.18852940026376133,0.18852940026376133,0.18852940026376133,0.18852940026376133,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1124,Spodumene,Germany,Germany,Frontier Group,CNV-1115 +241,0.0,0.0,0.5217326647449461,1.09461897668408,1.2987580907059113,1.2987580907059113,1.2987580907059113,1.2987580907059113,1.2987580907059113,1.2987580907059113,1.2987580907059113,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1115 +242,0.0,0.0,0.16460747109484375,0.27998349891687063,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Frontier Group,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1115 +243,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,0.6546428571428571,Frontier Group,Germany,Lithium Carbonate,Germany,RES-1183,Petalite,Germany,Germany,Frontier Group,CNV-1095 +244,0.0,0.0,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Frontier Group,Indonesia,Lithium Carbonate,Europe,RES-1169,Petalite,Europe,Indonesia,Frontier Group,CNV-1088 +245,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,4.570714285714286,5.642142857142858,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,Frontier Group,Indonesia,Lithium Carbonate,Europe,RES-1142,Petalite,Europe,Indonesia,Frontier Group,CNV-1022 +246,0.0,0.0,0.0,0.375,1.0,1.1456250000000001,1.258125,1.445625,1.4893125,1.4893125,1.4893125,Frontier Group,South Africa,Lithium Carbonate,Middle East & Africa,RES-1247,Hard Rock,Middle East & Africa,South Africa,Frontier Group,CNV-1127 +247,0.0,0.0,0.7457142857142857,1.9885714285714287,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,2.2781571428571428,Frontier Group,Indonesia,Lithium Carbonate,Europe,RES-1187,Petalite,Europe,Indonesia,Frontier Group,CNV-1009 +248,0.32606084905097815,0.3295636311866401,0.2395782932440025,0.2946573044075261,0.34961267289433673,0.34961267289433673,0.34961267289433673,0.34961267289433673,0.34961267289433673,0.34961267289433673,0.34961267289433673,Golden Peak Group,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1217 +249,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Golden Peak Group,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1217 +250,0.42857142857142855,1.1428571428571428,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Redwood Holdings,Germany,Lithium Carbonate,Germany,RES-1178,Petalite,Germany,Germany,Redwood Holdings,CNV-1001 +251,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Summit Mining,Germany,Lithium Carbonate,Germany,RES-1108,Spodumene,Germany,Germany,Summit Mining,CNV-1071 +252,0.3006978253567981,0.8987675601599887,1.071330678070481,1.4100512332298278,2.0061918916209422,2.509558731039647,2.602043586071903,2.500054040264447,2.572542805771614,2.965616135045547,3.1366427562980754,Granite Mining,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1184 +253,0.08820469543799413,0.26363848431359665,0.31425699890067443,0.41361502841408276,0.5884829548754763,0.7361372277716297,0.7632661185810915,0.7333491851442376,0.7546125563596734,0.8699140662800271,0.9200818751807686,Granite Mining,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1090 +254,0.126961304039537,0.19972612447999763,0.23807348401566245,0.31334471849551726,0.44582042036020936,0.5576797180088106,0.5782319080159787,0.5555675645032104,0.5716761790603588,0.6590258077878992,0.6970317236217944,Golden Peak Resources,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1134 +255,0.055862973777396276,0.08787949477119895,0.10475233296689147,0.1378716761380276,0.19616098495849213,0.2453790759238766,0.2544220395270306,0.24444972838141257,0.2515375187865579,0.2899713554266756,0.30669395839358954,Golden Peak Resources,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1113 +256,0.0,0.0,0.5513280682467976,1.3787167613802758,1.961609849584921,2.453790759238766,2.5442203952703055,2.4444972838141257,2.5153751878655783,2.8997135542667567,3.0669395839358953,Vantage Mining,Mexico,Lithium Hydroxide,North America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1041 +257,0.0,0.0,0.7542857142857143,2.0114285714285716,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,2.3043428571428572,Titan Mining,Germany,Lithium Hydroxide,Germany,RES-1073,Petalite,Germany,Germany,Titan Mining,CNV-1204 +258,0.0,0.0,0.06,0.16,0.1833,0.1833,0.1833,0.1833,0.1833,0.1833,0.1833,Ironclad Minerals,Ghana,Lithium Hydroxide,North America,RES-1116,Brine,North America,Ghana,Ironclad Minerals,CNV-1198 +259,0.0,0.0,0.26438686909107795,0.6611573560255412,0.9406810869600418,1.17670420499859,1.2200693259137148,1.1722475611017742,1.2062367378173569,1.3905444544324672,1.470736936841987,Sierra Mining,Finland,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1261 +260,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6348614409565035,1.3905444544324672,1.470736936841987,Sierra Mining,Finland,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1252 +261,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6348614409565035,1.3905444544324672,1.470736936841987,Sierra Mining,Finland,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1011 +262,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6348614409565035,1.3905444544324672,1.470736936841987,Sierra Mining,Finland,Lithium Hydroxide,South America,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1070 +263,0.0,0.0,0.0,0.0,0.1791428571428571,0.4777142857142857,0.5472814285714286,0.5472814285714286,0.5472814285714286,0.5472814285714286,0.5472814285714286,Horizon Minerals,Japan,Lithium Carbonate,Middle East & Africa,RES-1259,Salar Brine,Middle East & Africa,Japan,Horizon Minerals,CNV-1244 +264,0.0,0.0,0.0,1.1742857142857142,3.1314285714285717,3.5874428571428574,3.5874428571428574,3.5874428571428574,3.5874428571428574,3.5874428571428574,3.5874428571428574,Pioneer Corp,Japan,Lithium Hydroxide,Middle East & Africa,RES-1200,Hard Rock,Middle East & Africa,Japan,Pioneer Corp,CNV-1023 +265,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,1.3092857142857142,Stonebridge Metals,Germany,Lithium Carbonate,Germany,RES-1237,Petalite,Germany,Germany,Stonebridge Metals,CNV-1013 +266,0.0,0.0,0.0,0.375,1.0,1.1456250000000001,1.183125,1.245625,1.2601875,1.2601875,1.2601875,Horizon Resources,South Africa,Lithium Carbonate,Middle East & Africa,RES-1067,Hard Rock,Middle East & Africa,South Africa,Horizon Resources,CNV-1127 +267,0.0,2.142857142857143,10.0,17.975,19.639285714285716,19.639285714285716,19.639285714285716,19.639285714285716,19.639285714285716,19.639285714285716,19.639285714285716,Meridian Mining,Germany,Lithium Carbonate,Germany,RES-1099,Brine,Germany,Germany,Meridian Mining,CNV-1064 +268,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Meridian Mining,Germany,Lithium Carbonate,Germany,RES-1000,Spodumene,Germany,Germany,Meridian Mining,CNV-1125 +269,0.0,0.0,0.0,0.0,0.15170670037926676,0.4045512010113782,0.46346396965866005,0.46346396965866005,0.46346396965866005,0.46346396965866005,0.46346396965866005,Vantage Minerals,Serbia,Lithium Hydroxide,Middle East & Africa,RES-1097,Salar Brine,Middle East & Africa,Serbia,Vantage Minerals,CNV-1170 +270,0.0,0.0,0.0,0.0,0.6857142857142857,1.8285714285714287,2.0948571428571428,2.0948571428571428,2.0948571428571428,2.0948571428571428,2.0948571428571428,Frontier Energy,Japan,Lithium Carbonate,Middle East & Africa,RES-1042,Lepidolite,Middle East & Africa,Japan,Frontier Energy,CNV-1151 +271,0.0,0.0,0.0,0.0,0.07542857142857143,0.2011428571428572,0.23043428571428579,0.23043428571428579,0.23043428571428579,0.23043428571428579,0.23043428571428579,Atlas Group,South Korea,Lithium Hydroxide,South America,RES-1030,Clay,South America,South Korea,Atlas Group,CNV-1192 +272,1.6497,2.7211285714285713,4.506842857142857,4.922914285714286,4.922914285714286,4.922914285714286,4.922914285714286,4.922914285714286,4.922914285714286,4.922914285714286,4.922914285714286,Silverridge Mining,Indonesia,Lithium Carbonate,Europe,RES-1205,Petalite,Europe,Indonesia,Silverridge Mining,CNV-1068 +273,0.0,0.0,0.6428571428571429,1.7142857142857142,3.2496428571428573,5.3925,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,5.891785714285715,Silverridge Mining,Indonesia,Lithium Carbonate,Europe,RES-1109,Petalite,Europe,Indonesia,Silverridge Mining,CNV-1087 +274,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Stonebridge Minerals,Germany,Lithium Carbonate,Germany,RES-1246,Petalite,Germany,Germany,Stonebridge Minerals,CNV-1053 +275,0.0,0.0,1.7142857142857142,4.571428571428571,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,5.237142857142857,Stonebridge Minerals,Germany,Lithium Carbonate,Germany,RES-1248,Petalite,Germany,Germany,Stonebridge Minerals,CNV-1163 +276,0.0,0.0,1.2857142857142858,3.4285714285714284,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,3.927857142857143,Stonebridge Minerals,Germany,Lithium Carbonate,Germany,RES-1208,Petalite,Germany,Germany,Stonebridge Minerals,CNV-1069 +277,0.9595043928213836,0.9698120849470901,0.7050652473847521,0.8671596345927197,0.7676817813265113,0.6249004512957795,0.6249004512957796,0.6249004512957795,0.6249004512957795,0.6249004512957796,0.6249004512957795,Northstar Holdings,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1236 +278,0.0,0.0,0.04296708309277741,0.019126645984238997,0.05989139939140792,0.13359052342348723,0.13851373962069735,0.13308456331188173,0.13694333418129792,0.1578676788288382,0.16697188331303076,Northstar Holdings,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1236 +279,1.3706587334530091,1.3853833437200873,1.007236067692503,1.2387994779895994,1.096688259037873,0.8927149304225422,0.8927149304225424,0.8927149304225422,0.8927149304225421,0.8927149304225422,0.8927149304225422,Northstar Holdings,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1155 +280,0.0,0.0,0.06138154727539629,0.02732377997748428,0.08555914198772559,0.19084360489069607,0.1978767708867105,0.1901208047312596,0.1956333345447113,0.22552525546976884,0.23853126187575824,Northstar Holdings,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1155 +281,0.00014426468092337748,0.00014581447676245528,0.0,0.0,0.6903363988469982,1.0676870567853605,1.0676870567853605,1.0676870567853605,1.0676870567853605,1.0676870567853605,1.0676870567853605,Northstar Holdings,Germany,Lithium Hydroxide,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1027 +282,0.0,0.0,0.0,0.0,0.05385722832490517,0.2282489514492725,0.23666061798050572,0.2273844824585865,0.2339774681154747,0.26972820554184357,0.28528338920340685,Northstar Holdings,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1027 +283,0.2057214349967362,0.20793144386326118,0.15108541015387544,0.18581992169843992,0.164503238855681,0.13390723956338133,0.13390723956338133,0.13390723956338133,0.1339072395633813,0.13390723956338133,0.1339072395633813,Northstar Holdings,Germany,Lithium Carbonate,Germany,RES-1165,Spodumene,Bolivia,Bolivia,Falcon Holdings,CNV-1029 +284,0.0,0.0,0.009207232091309444,0.004098566996622642,0.012833871298158838,0.028626540733604405,0.029681515633006573,0.028518120709688937,0.02934500018170669,0.033828788320465326,0.03577968928136373,Northstar Holdings,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1029 +285,0.0,0.4498271149304479,1.1995389731478614,1.3742218361125187,1.3742218361125187,0.0,0.0,0.0,0.0,0.0,0.0,Highland Resources,France,Lithium Hydroxide,Middle East & Africa,RES-1213,Spodumene,Bolivia,Bolivia,Cascade Corp,CNV-1239 +286,0.0,0.0,0.0,1.1813855467870593,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,2.91343894078614,Highland Resources,France,Lithium Hydroxide,Middle East & Africa,RES-1101,Spodumene,Bolivia,Bolivia,Crescent Energy,CNV-1239 +287,0.0,0.778503309503093,1.4654179943587633,1.678819489787258,1.678819489787258,1.678819489787258,1.678819489787258,1.678819489787258,1.678819489787258,1.678819489787258,1.678819489787258,Highland Resources,France,Lithium Hydroxide,Middle East & Africa,RES-1250,Spodumene,Middle East & Africa,Serbia,Cascade Materials,CNV-1239 +288,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Highland Resources,France,Lithium Hydroxide,Middle East & Africa,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1239 +289,0.8751666667142858,0.7083095238571427,0.7142857142857143,0.7142857142857143,0.2976190475714286,0.0,0.0,0.0,0.0,0.0,0.0,Horizon Industries,Germany,Lithium Hydroxide,Germany,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1034 +290,0.7736666667142859,4.810142857142857,5.213047618571429,7.46052381,7.147142857142858,7.143142857142856,7.143142857142856,7.143142857142856,7.143142857142856,7.143142857142856,7.143142857142856,Horizon Industries,Bolivia,Lithium Hydroxide,Bolivia,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1026 +291,0.0,0.0,0.0,0.0,3.0813148142857143,5.974409391428572,7.3869206342857145,7.147482142857143,7.143142857142856,7.143142857142856,7.143142857142856,Horizon Industries,Bolivia,Lithium Hydroxide,Bolivia,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1182 +292,8.077142857142857,8.857142857142858,10.285714285714286,11.571428571428571,11.857142857142858,12.714285714285714,12.714285714285714,12.714285714285714,13.428571428571429,14.0,15.428571428571429,Horizon Industries,Vietnam,Lithium Carbonate,Europe,RES-1121,Petalite,Europe,Vietnam,Horizon Industries,CNV-1141 +293,0.0,0.0,0.0,0.0,0.0,0.0,3.7256666671428573,6.368095238571429,6.451238095714286,7.242238095714286,7.147285714285715,Horizon Industries,Ireland,Lithium Hydroxide,South America,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1243 +294,0.0,0.0,0.0,0.0,3.7256666671428573,4.455418367142857,2.288346938571429,3.120918367142857,3.4214659857142853,3.3698469385714285,2.218428571428572,Horizon Industries,Japan,Lithium Hydroxide,Middle East & Africa,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1219 +295,0.0,0.0,0.0,0.0,0.0,3.7755102042857147,7.346938775714285,7.346938775714285,7.346938775714285,7.346938775714285,8.496285714285714,Horizon Industries,Japan,Lithium Hydroxide,Middle East & Africa,RES-1047,Spodumene,Middle East & Africa,Japan,Horizon Industries,CNV-1219 +296,0.0,0.0,1.5546666671428573,5.660571428571429,6.440285714285714,6.965238095714286,7.190047618571429,7.143142857142856,7.143142857142856,7.143142857142856,7.143142857142856,Horizon Industries,Germany,Lithium Hydroxide,Germany,RES-1007,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1156 +297,0.9783333332857141,2.8604047614285717,2.904771428571429,3.273838095714286,6.171114285714286,7.206047618571428,7.167357142857143,7.143142857142856,7.143142857142856,7.143142857142856,7.143142857142856,Horizon Industries,Germany,Lithium Hydroxide,Germany,RES-1007,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1077 +298,0.5627142857142856,0.6642857142857144,0.7124285714285714,1.054142857142857,1.0222857142857145,1.0212857142857144,0.9989999999999999,0.9884285714285713,0.9778571428571429,0.9662857142857142,0.9555714285714286,Horizon Industries,Japan,Lithium Carbonate,Middle East & Africa,RES-1025,Petalite,Middle East & Africa,Japan,Horizon Industries,CNV-1139 +299,1.7666666671428572,2.0380952385714286,1.8142857142857143,2.12247619,0.0,0.37294047614285714,0.0,0.0,0.0,0.0,0.0,Horizon Industries,Germany,Lithium Carbonate,Germany,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1112 +300,0.0,0.0,0.0,1.9262857142857146,2.521008402857143,2.521008402857143,2.521008402857143,2.521008402857143,2.521008402857143,2.521008402857143,2.521008402857143,Horizon Industries,Germany,Lithium Carbonate,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1112 +301,0.0,1.042857142857143,1.042857142857143,0.9657142857142856,1.9549320728571427,4.19257493,4.69372374,4.622134454285714,4.622134454285714,4.622134454285714,4.622134454285714,Horizon Industries,Germany,Lithium Carbonate,Germany,RES-1007,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1112 +302,0.5,1.2339464285714286,1.0,1.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Horizon Industries,Germany,Lithium Hydroxide,Germany,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1220 +303,0.0,5.694625,5.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,Horizon Industries,Germany,Lithium Hydroxide,Germany,RES-1007,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1220 +304,4.994166667142857,4.336547618571428,1.77755102,1.7673469385714287,2.4792516999999994,2.3673469385714285,2.3673469385714285,2.3673469385714285,2.3673469385714285,2.3673469385714285,2.3673469385714285,Horizon Industries,Germany,Lithium Hydroxide,Germany,RES-1085,Spodumene,Bolivia,Bolivia,Horizon Industries,CNV-1072 +305,0.0,0.0,2.5510204085714285,3.0612244900000003,3.0612244900000003,3.0612244900000003,3.0612244900000003,3.0612244900000003,3.0612244900000003,3.0612244900000003,3.0612244900000003,Horizon Industries,Germany,Lithium Hydroxide,Germany,Spot Market Spod,Spodumene,Spot Market Spod,Spot Market Spod,Spot Market Spod,CNV-1072 diff --git a/lithium-supply-chain/pages/__init__.py b/lithium-supply-chain/pages/__init__.py new file mode 100644 index 0000000..380a2a4 --- /dev/null +++ b/lithium-supply-chain/pages/__init__.py @@ -0,0 +1 @@ +from . import supply_sankey diff --git a/lithium-supply-chain/pages/supply_sankey.py b/lithium-supply-chain/pages/supply_sankey.py new file mode 100644 index 0000000..d52b6b5 --- /dev/null +++ b/lithium-supply-chain/pages/supply_sankey.py @@ -0,0 +1,199 @@ +import dash_mantine_components as dmc +from dash import ( + ALL, + MATCH, + Input, + Output, + State, + callback, + ctx, + dash, + dcc, + html, +) + +from constants import DEFAULT_SANKEY_NODES +from utils import chart_utils, data_utils, ui_utils + +DEFAULT_FORECAST_VERSION = data_utils.get_forecast_version_values()[0][ + "value" +] + + +def layout(): + return html.Div( + [ + html.Div( + ui_utils.sidebar_controls_supply_sankey( + data_utils.get_supply_data(DEFAULT_FORECAST_VERSION), + data_utils.supply_filter_values(), + ), + id="controls-filters-sankey", + className="flex-row", + style={ + "flexGrow": "1", + "height": "100%", + "minHeight": "0px", + }, + ), + html.Div( + [ + dmc.Card( + html.Div( + [ + html.Div( + [ + *ui_utils.get_default_nodes(), + ], + id="node-row", + className="node-container flex-row", + style={ + "alignItems": "flex-start", + "minWidth": "0px", + "flex": "1 1 0%", + }, + ), + dmc.Space(w=10), + html.Div( + dmc.Button( + "+ Node", + radius="md", + variant="outline", + id="add-node-btn", + ), + style={ + "margin-left": "auto", + "marginTop": "16px", + "flexShrink": "0", + }, + ), + dmc.Space(w=20), + ], + className="flex-row", + style={ + "height": "inherit", + "alignItems": "flex-start", + "minWidth": "0px", + }, + ), + shadow="sm", + radius="md", + withBorder=True, + style={ + "marginBottom": "20px", + "minWidth": "0px", + "overflow": "visible", + "position": "relative", + "zIndex": 2, + }, + ), + dmc.Card( + dcc.Graph( + id="sankey-diagram-div", + config={ + "displaylogo": False, + "responsive": True, + }, + style={"flexGrow": "1", "width": "100%"}, + ), + shadow="sm", + radius="md", + withBorder=True, + style={ + "flexGrow": "1", + "display": "flex", + "flexDirection": "column", + "minWidth": "0px", + }, + ), + ], + className="flex-column", + style={ + "width": "calc(100vw - 300px)", + "height": "100%", + "minHeight": "0px", + "minWidth": "0px", + }, + ), + ], + className="page-div flex-row", + style={"height": "calc(100vh - 68px)"}, + ) + + +@callback( + Output("node-row", "children"), + Output("add-node-btn", "disabled"), + Input("add-node-btn", "n_clicks"), + Input({"type": "delete-single-node", "index": ALL}, "n_clicks"), + State("node-row", "children"), + prevent_initial_call=True, +) +def add_remove_node_selector_cards(add_node, delete_single_node, node_div): + if ctx.triggered_id == "add-node-btn": + node_div.append( + # get id number of last node in the node_div to make the next node with that id + 1 + ui_utils.get_node_card( + int(node_div[-1]["props"]["id"]["index"]) + 1, None + ) + ) + if len(node_div) == 8: + return node_div, True + return node_div, False + if ctx.triggered_id["type"] == "delete-single-node": + # Adding a node registers a new delete button matching this ALL + # pattern, which re-fires this callback with that button's n_clicks + # still None (nobody clicked it) - ignore that phantom trigger + # instead of treating it as a real delete. + if not ctx.triggered[0]["value"]: + return dash.no_update, dash.no_update + node_to_remove = str(ctx.triggered_id["index"]) + current_nodes = [ + node_div[i]["props"]["id"]["index"] + for i in range(0, len(node_div)) + ] + # get index of node to delete and remove it from node_div + node_div.pop(current_nodes.index(node_to_remove)) + return node_div, False + return dash.no_update, False + + +@callback( + Output("sankey-diagram-div", "figure"), + Input({"type": "node-selector", "index": ALL}, "value"), + Input({"type": "global-filters", "index": ALL}, "value"), + Input("year-filter-selection", "value"), + Input("view-top-data", "value"), +) +def update_sankey_diagram(nodes, filters, year, view_top): + df = data_utils.get_supply_data(DEFAULT_FORECAST_VERSION) + spot_df = data_utils.get_spot_data(DEFAULT_FORECAST_VERSION) + # case: same node selected twice + if len(set(nodes)) != len(nodes): + return dash.no_update + # case: a node has been added, but no selection has been made yet + if not all(nodes): + nodes = [node for node in nodes if node] + for column, filter in zip( + data_utils.supply_filter_values().values(), filters + ): + if not filter: + # no filter selected means use all the data + continue + df = df[df[column].isin(filter)] + df = df[[str(year)] + nodes] + if view_top != "view_all": + view_top = int(view_top) + return chart_utils.generate_sankey(nodes, df, year, spot_df, view_top) + + +@callback( + Output({"type": "node-selector", "index": MATCH}, "error"), + Input({"type": "node-selector", "index": MATCH}, "value"), + State({"type": "node-selector", "index": ALL}, "value"), +) +def select_value(new_node, nodes): + node_already_selected = new_node is not None and nodes.count(new_node) >= 2 + return ( + "This node has already been selected!" if node_already_selected else "" + ) diff --git a/lithium-supply-chain/requirements.txt b/lithium-supply-chain/requirements.txt new file mode 100644 index 0000000..c48a276 --- /dev/null +++ b/lithium-supply-chain/requirements.txt @@ -0,0 +1,10 @@ +dash_mantine_components==2.8.0 +dash==4.4.1 +gunicorn==26.2.0 +pandas==1.4.0 +werkzeug==3.1.8 +psycopg2-binary==2.9.12 +pytest==7.2.2 +dash_iconify==0.1.2 +dash-ag-grid==35.3.0 +numpy<2.0.0 diff --git a/lithium-supply-chain/runtime.txt b/lithium-supply-chain/runtime.txt new file mode 100644 index 0000000..f24fc1b --- /dev/null +++ b/lithium-supply-chain/runtime.txt @@ -0,0 +1 @@ +python-3.8.3 \ No newline at end of file diff --git a/lithium-supply-chain/tests/__init__.py b/lithium-supply-chain/tests/__init__.py new file mode 100644 index 0000000..8f2a5a1 --- /dev/null +++ b/lithium-supply-chain/tests/__init__.py @@ -0,0 +1 @@ +from . import test_chart_utils, test_data_utils, test_ui_utils, mock_data diff --git a/lithium-supply-chain/tests/mock_data.py b/lithium-supply-chain/tests/mock_data.py new file mode 100644 index 0000000..64f7274 --- /dev/null +++ b/lithium-supply-chain/tests/mock_data.py @@ -0,0 +1,43 @@ +import pandas as pd + +supply_df = pd.DataFrame( + [ + [1, "Resource ID_0", "P1"], + [3, "Spot Market Lep", "P2"], + [5, "Resource ID_2", "P1"], + [7, "Resource ID_3", "P3"], + [4, "Spot Market Spod", "P1"], + [3, "Spot Market Lep", "P2"], + [5, "Resource ID_2", "P3"], + [4, "Spot Market Spod", "P3"], + ], + columns=["2023", "Resource 1", "Product"], +) + +spod_df = pd.DataFrame( + [ + [3, "Resource ID_4", "Spot Market Spod"], + [2, "Resource ID_5", "Spot Market Spod"], + [1, "Resource ID_5", "Spot Market Spod"], + [2, "Resource ID_2", "Spot Market Spod"], + [1, "Resource ID_3", "Spot Market Lep"], + [5, "Resource ID_0", "Spot Market Lep"], + ], + columns=["2023", "Resource 1", "Offtake Owner"], +) + + +test_links = [ + ((0, 7), 1), + ((1, 8), 6), + ((2, 7), 5), + ((3, 9), 7), + ((4, 7), 4), + ((2, 9), 5), + ((4, 9), 4), + ((5, 4), 3), + ((6, 4), 3), + ((2, 4), 2), + ((3, 1), 1), + ((0, 1), 5), +] diff --git a/lithium-supply-chain/tests/test_chart_utils.py b/lithium-supply-chain/tests/test_chart_utils.py new file mode 100644 index 0000000..0ac590c --- /dev/null +++ b/lithium-supply-chain/tests/test_chart_utils.py @@ -0,0 +1,46 @@ +import pytest + +from utils import chart_utils +from .mock_data import spod_df, supply_df, test_links + + +@pytest.fixture +def get_supply_df(): + return supply_df + + +@pytest.fixture +def get_spod_df(): + return spod_df + + +@pytest.fixture +def get_links(): + return test_links + + +def test_generate_sankey_data(get_supply_df, get_spod_df, get_links): + columns = ["Resource 1", "Product"] + year = "2023" + view_top = "view_all" + ( + labels, + sources, + targets, + values, + link_colors, + node_colors, + ) = chart_utils.generate_sankey_data( + columns, get_supply_df, year, get_spod_df, view_top + ) + fn_links = [(a, b) for a, b in zip(sources, targets)] + test_links = [link[0] for link in get_links] + nb_test_links = len(test_links) + assert len(labels) == len(node_colors) + assert len(sources) == nb_test_links + assert len(targets) == nb_test_links + assert len(values) == nb_test_links + assert sorted(sources) == sorted([val[0][0] for val in get_links]) + assert fn_links.sort() == test_links.sort() + assert sum(values) == sum([val[1] for val in get_links]) + assert len(link_colors) == nb_test_links diff --git a/lithium-supply-chain/tests/test_data_utils.py b/lithium-supply-chain/tests/test_data_utils.py new file mode 100644 index 0000000..e3b88d4 --- /dev/null +++ b/lithium-supply-chain/tests/test_data_utils.py @@ -0,0 +1,9 @@ +import pandas as pd +import pytest + +from utils import chart_utils, data_utils + + +def test_get_supply_data(): + df = data_utils.get_supply_data("forecast_version_1") + assert type(df) == pd.DataFrame diff --git a/lithium-supply-chain/tests/test_ui_utils.py b/lithium-supply-chain/tests/test_ui_utils.py new file mode 100644 index 0000000..386752e --- /dev/null +++ b/lithium-supply-chain/tests/test_ui_utils.py @@ -0,0 +1,3 @@ +import pytest + +from utils import chart_utils, data_utils, ui_utils diff --git a/lithium-supply-chain/utils/__init__.py b/lithium-supply-chain/utils/__init__.py new file mode 100644 index 0000000..5cd96a3 --- /dev/null +++ b/lithium-supply-chain/utils/__init__.py @@ -0,0 +1 @@ +from . import chart_utils, data_utils, ui_utils diff --git a/lithium-supply-chain/utils/chart_utils.py b/lithium-supply-chain/utils/chart_utils.py new file mode 100644 index 0000000..c963177 --- /dev/null +++ b/lithium-supply-chain/utils/chart_utils.py @@ -0,0 +1,300 @@ +import pandas as pd +import plotly.graph_objects as go +import plotly.io as pio + +from utils import data_utils +from typing import Tuple + +pio.templates["app_theme"] = go.layout.Template( + layout=go.Layout( + font=dict(family="Poppins, sans-serif", color="#514338"), + paper_bgcolor="rgba(0, 0, 0, 0)", + plot_bgcolor="rgba(0, 0, 0, 0)", + margin=dict(t=40, l=20, r=20, b=20), + ) +) +pio.templates.default = "app_theme" + + +def add_spot_market_links_for_node( + spot_market_node: str, + link_mappings: dict, + col: str, + spod_data: pd.DataFrame, + year: str, + links: list, +): + """ + This function is a helper function to add_spot_market_links. This loops through the + spot data (either Spod or Lep data) to create each link. + """ + color_dict = data_utils.get_color_dict() + # check in case spod market is not a value in the currently selected nodes/filters + if spot_market_node in link_mappings[col].keys(): + # looping through the spod-df + for node_value, link_weight in zip(spod_data[col], spod_data[year]): + # getting link color + if not node_value in link_mappings[col].keys(): + link_color = color_dict.get("Other") + else: + link_color = color_dict.get(node_value) + links.append( + ( + ( + link_mappings[col].get( + node_value, link_mappings[col].get("Other") + ), + link_mappings[col][spot_market_node], + ), + link_weight, + link_color, + ) + ) + return links + + +def add_spot_market_links( + links: list, + link_mappings: dict, + columns: list, + spot_df: pd.DataFrame, + year: str, +): + """ + This function handles the Spot Market links. It aggregates the data in the spot market df + (seperating spod nodes from lep nodes) and creates a link from this aggregation to + the appropriate Spot Node. + """ + spod_str = "Spot Market Spod" + lep_str = "Spot Market Lep" + for col in columns: + if col.startswith("Resource"): + if "Offtake Owner" in spot_df.columns: + spod_data = spot_df.loc[spot_df["Offtake Owner"] == spod_str] + lep_data = spot_df.loc[spot_df["Offtake Owner"] == lep_str] + # creating 2 dfs: one with spod data and one with lep data, grouped by each node type + # to link to the spot market node + spod_data = spod_data.groupby([col], as_index=False).sum() + lep_data = lep_data.groupby([col], as_index=False).sum() + + add_spot_market_links_for_node( + spod_str, + link_mappings, + col, + spod_data, + year, + links, + ) + add_spot_market_links_for_node( + lep_str, + link_mappings, + col, + lep_data, + year, + links, + ) + + +def get_top_values( + columns: list, + df: pd.DataFrame, + year: str, + spot_df: pd.DataFrame, + view_top, +) -> list: + """ + This function keeps the top_x nodes of each columns in the sankey diagram. + The top_x value is selected from the dropdown in the app. + The nodes not in the top_x are aggregated into one "Other" category. + Params: + columns: list of selected "nodes" in the app, they actally represent columns in the dataframe + df: the supply dataframe + year: the selected year from the year dropdown (as a string) + spot_df: the the spot market dataframe + view_top: number of nodes to be shown per columns (5,10, 15 or all) + Returns: + column_values: a list of lists, each of these is a list of nodes for each selected column + """ + column_values = [] + spot_market_nodes = ["Spot Market Spod", "Spot Market Lep"] + if view_top == "view_all": + view_top = df.shape[0] + for col in columns: + # We need to add the resource cols from spod-market-df to the supply-df so we can create + # the links (this is because some nodes from spot-market-df are not in the supply-df) + if col.startswith("Resource"): + # get all Resource nodes from the supply and spod dataframe + all_resource_nodes = df[[col, year]].append(spot_df[[col, year]]) + # group by year and sort in descending order + grouped_resource_nodes = ( + all_resource_nodes.groupby([col], as_index=False) + .sum() + .sort_values(by=year, ascending=False) + ) + # remove spot market nodes from the dataframe so they don't get removed if they don't + # appear in the top_x (as these should always be present) + grouped_resource_nodes = grouped_resource_nodes[ + ~grouped_resource_nodes[col].isin(spot_market_nodes) + ] + # keep top_x values only and add back the spot market nodes + top_x_resource_nodes = ( + list(grouped_resource_nodes.head(view_top)[col]) + + spot_market_nodes + ) + # replacing all nodes NOT in the top_x with the "Other" keyword + all_resource_nodes.loc[ + ~all_resource_nodes[col].isin(top_x_resource_nodes), col + ] = "Other" + column_values.append(all_resource_nodes[col]) + else: + # Same logic as above but without the spod market nodes + all_nodes = df[[col, year]] + grouped_nodes = ( + all_nodes.groupby([col], as_index=False) + .sum() + .sort_values(by=year, ascending=False) + ) + top_x_nodes = list(grouped_nodes.head(view_top)[col]) + all_nodes.loc[~all_nodes[col].isin(top_x_nodes), col] = "Other" + column_values.append(all_nodes[col]) + return column_values + + +def generate_sankey_data( + columns: list, + df: pd.DataFrame, + year: int, + spot_df: pd.DataFrame, + view_top, +) -> Tuple[list, list, list, list, list]: + """ + This function creates the data required to generate the sankey diragram. + Params: + columns: list of selected "nodes" in the app, they actally represent columns in the dataframe + df: the supply dataframe + year: the selected year from the year dropdown + spot_df: the the spot market dataframe + + Returns: + labels: labels that get assigned to each node + sources: a list of nubmers, each number represents a node in the sankey. + targets: a list of nubmers, same as above. The link is created between the source and target by using the numbers placed as the same index in the list. + values: the weight of each link. + colors: a list of the color to be used for each link + """ + color_dict = data_utils.get_color_dict() + df = df.fillna("(No Value)") + year = str(year) + # list of dfs that contain a list of nodes for each selected column + + column_values = get_top_values(columns, df, year, spot_df, view_top) + + # list of all unique nodes in all of the columns + labels = sum( + [list(node_values.unique()) for node_values in column_values], [] + ) + # list of empty dicts (one per column) to create a numerical mapping + link_mappings = {} + for col in columns: + link_mappings[col] = {} + + # assigning a number to each unique node, repeating for each column. Numbers must be + # continuous from column to column + i = 0 + for col, nodes in zip(columns, column_values): + for node in nodes.unique(): + link_mappings[col][node] = i + i = i + 1 + + source_nodes = column_values[: len(columns) - 1] + target_nodes = column_values[1:] + source_cols = columns[: len(columns) - 1] + target_cols = columns[1:] + links = [] + # Create links (tuples) between source and target nodes, and their respective weight and color, by using the list of mappings + # Note: resource columns will be longer than other columns becasue spot nodes were added. By default, the loop + # will operate on the shortest column. This is what we want since the extra nodes from the resource colums come from the + # spot-df and those links will be added afterwards. + for source, target, source_col, target_col in zip( + source_nodes, target_nodes, source_cols, target_cols + ): + for val1, val2, link_weight in zip(source, target, df[year]): + links.append( + ( + ( + link_mappings[source_col][val1], + link_mappings[target_col][val2], + ), + link_weight, + color_dict.get(val1), + ) + ) + # adding spot market links to current links + add_spot_market_links(links, link_mappings, columns, spot_df, year) + df_links = pd.DataFrame(links, columns=["link", "weight", "color"]) + df_links = df_links.groupby(by=["link"], as_index=False).agg( + {"weight": sum, "color": "first"} + ) + sources = [val[0] for val in df_links["link"]] + targets = [val[1] for val in df_links["link"]] + values = df_links["weight"].tolist() + link_hex_colors = df_links["color"] + link_colors = [data_utils.hex2rgb(color) for color in link_hex_colors] + node_colors = [color_dict.get(color, "#afa28e") for color in labels] + return labels, sources, targets, values, link_colors, node_colors + + +def generate_sankey(nodes, df, year, spot_df, view_top): + ( + labels, + sources, + targets, + values, + link_colors, + node_colors, + ) = generate_sankey_data(nodes, df, year, spot_df, view_top) + fig = go.Figure( + data=[ + go.Sankey( + node=dict( + pad=15, + thickness=20, + line=dict(width=0), + label=labels if len(labels) < 50 else [], + customdata=labels, + hovertemplate="%{customdata}", + color=node_colors, + ), + link=dict( + source=sources, + target=targets, + value=values, + hovertemplate="%{source.customdata} to %{target.customdata}", + color=link_colors, + ), + ) + ], + ) + # Add annotations for each node name + for i, node in enumerate(nodes): + if i == 0: + xanchor = "left" + elif i == len(nodes) - 1: + xanchor = "right" + else: + xanchor = "center" + + fig.add_annotation( + text=node, + xref="paper", + yref="paper", + xanchor=xanchor, + x=i / (len(nodes) - 1), + y=1.1, + font=dict(size=14), + showarrow=False, + ) + # Create space at top for annotations + fig.update_layout(margin=dict(t=50, l=20, r=20)) + return fig + diff --git a/lithium-supply-chain/utils/data_utils.py b/lithium-supply-chain/utils/data_utils.py new file mode 100644 index 0000000..253bdb1 --- /dev/null +++ b/lithium-supply-chain/utils/data_utils.py @@ -0,0 +1,91 @@ +import os + +import pandas as pd + + +def get_spot_data(forecast_version): + path = f"data/forecast_version/{forecast_version}/dummy_spot_data.csv" + df = pd.read_csv(path) + return df + + +def get_supply_data(forecast_version): + path = f"data/forecast_version/{forecast_version}/dummy_supply_data.csv" + df = pd.read_csv(path) + return df + + +def get_color_dict(): + path = "data/colors.csv" + df = pd.read_csv(path) + color_dict = dict(zip(df.name, df.color)) + return color_dict + + +def supply_filter_values(): + columns = [ + "Conversion Country", + "Product", + "Conversion Region", + "Conversion Resource SubType", + "Resource Region", + "Resource Company", + ] + return {key: value for key, value in zip(columns, columns)} + + +def get_year_dropdown_vals(df): + columns = df.columns + years = [col for col in columns if col.isnumeric()] + return years + + +def get_node_dropdown_vals(first_node): + resource_columns = [ + "Resource Region", + "Resource Country", + "Resource Company", + "Resource ID", + ] + columns = [ + "Conversion Company", + "Conversion Country", + "Product", + "Conversion Region", + "Conversion Resource SubType", + "Conversion ID", + ] + if first_node: + columns = resource_columns + columns + data = [{"value": value, "label": value} for value in columns] + return data + + +def get_filter_dropdown_vals(df, col): + filters = df[col].unique() + data = [{"value": filter, "label": filter} for filter in filters] + return data + + +def get_top_x_values(): + options = [ + {"label": f"Top {val}", "value": str(val)} for val in range(5, 20, 5) + ] + [{"label": "View All", "value": "view_all"}] + return options + + +def get_forecast_version_values(): + forecast_versions = os.listdir("data/forecast_version") + forecast_versions = [ + fv for fv in forecast_versions if not fv.startswith(".") + ] + dropdown_items = [{"label": fv, "value": fv} for fv in forecast_versions] + return dropdown_items + + +def hex2rgb(hex_value): + h = hex_value.strip("#") + rgb = tuple(int(h[i : i + 2], 16) for i in (0, 2, 4)) + transparency_level = (0.2,) + rgb_transparent = rgb + transparency_level + return f"rgba{rgb_transparent}" diff --git a/lithium-supply-chain/utils/ui_utils.py b/lithium-supply-chain/utils/ui_utils.py new file mode 100644 index 0000000..c2e821f --- /dev/null +++ b/lithium-supply-chain/utils/ui_utils.py @@ -0,0 +1,192 @@ +import dash_mantine_components as dmc +from dash import ALL, Input, Output, State, callback, ctx, html +from dash_iconify import DashIconify + +from constants import DEFAULT_SANKEY_NODES, NAVY +from utils import data_utils + + +def panel_header(title): + return dmc.CardSection( + dmc.Text(title, c="white", fw=600, size="sm", ta="center"), + style={ + "backgroundColor": NAVY, + "padding": "10px 14px", + }, + ) + + +def sidebar_controls_supply_sankey(df, filter_values): + years = data_utils.get_year_dropdown_vals(df) + return dmc.Card( + [ + panel_header("Basic Controls & Filters"), + html.Div( + [ + dmc.Space(h=10), + html.Div( + [ + dmc.Select( + label="Year", + value=years[0], + data=[ + {"value": year, "label": year} + for year in years + ], + radius="md", + id="year-filter-selection", + ), + dmc.Space(h=10), + dmc.Select( + label="View Top", + placeholder="Select...", + value=data_utils.get_top_x_values()[0][ + "value" + ], + data=data_utils.get_top_x_values(), + radius="md", + id="view-top-data", + ), + ], + style={"padding": "0px 12px"}, + ), + dmc.Space(h=10), + dmc.Divider(variant="dashed", mx=12), + dmc.Space(h=8), + html.Div( + generate_filter_controls(df, filter_values), + style={"padding": "0px 12px"}, + ), + dmc.Space(h=8), + html.Div( + dmc.Button( + "Clear Filters", + radius="md", + variant="outline", + id="clear-node-filters-btn", + ), + className="flex-row justify-center", + style={"padding": "0px 12px 12px 12px"}, + ), + ], + style={ + "flexGrow": "1", + "overflowY": "auto", + "minHeight": "0px", + }, + ), + ], + shadow="sm", + radius="md", + withBorder=True, + style={ + "width": "280px", + "height": "100%", + "display": "flex", + "flexDirection": "column", + }, + ) + + +def generate_filter_controls(df, filter_values): + controls = [] + for label, column in filter_values.items(): + controls.extend( + [ + dmc.MultiSelect( + label=label, + placeholder="Select value(s)...", + data=data_utils.get_filter_dropdown_vals(df, column), + searchable=True, + clearable=True, + id={"type": "global-filters", "index": column}, + ), + dmc.Space(h=8), + ] + ) + return controls + + +def get_node_card(node_nb, value): + # Cant delete first 2 nodes, only add "X" on third node and up. + delete_icon = ( + [] + if node_nb == 1 or node_nb == 2 + else [ + dmc.ActionIcon( + DashIconify(icon="humbleicons:times", width=16, color="white"), + variant="transparent", + size="sm", + id={ + "type": "delete-single-node", + "index": f"{node_nb}", + }, + ) + ] + ) + # Wrapped in a plain html.Div (rather than putting id/className directly + # on the dmc.Card) because Dash's Card wrapper doesn't accept a `key` + # prop, and html.Div does. Without a stable `key` here, React reconciles + # this list by position instead of identity: deleting a middle card then + # recycles a DOM node (and any stuck focus/CSS state) onto the wrong + # card instead of actually removing it. + return html.Div( + dmc.Card( + [ + dmc.CardSection( + dmc.Group( + [dmc.Text("Node", c="white", fw=600, size="sm")] + + delete_icon, + justify="space-between", + style={"height": "100%"}, + ), + style={ + "backgroundColor": NAVY, + "padding": "0px 14px", + "height": "44px", + }, + ), + dmc.CardSection( + dmc.Select( + placeholder="Select Node...", + data=data_utils.get_node_dropdown_vals(node_nb == 1), + value=value, + radius="md", + comboboxProps={"position": "bottom", "zIndex": 1000}, + maxDropdownHeight=160, + id={ + "type": "node-selector", + "index": f"{node_nb}", + }, + ), + style={"padding": "12px"}, + ), + ], + shadow="sm", + radius="md", + withBorder=True, + ), + className="node-card", + key=f"node-card-{node_nb}", + id={ + "type": "node-card", + "index": f"{node_nb}", + }, + ) + + +def get_default_nodes(): + return [ + get_node_card(i + 1, value) + for i, value in enumerate(DEFAULT_SANKEY_NODES) + ] + + +@callback( + Output({"type": "global-filters", "index": ALL}, "value"), + Input("clear-node-filters-btn", "n_clicks"), + State({"type": "global-filters", "index": ALL}, "value"), + prevent_initial_call=True, +) +def clear_node_and_filter_selctions(n_clicks_filter, filters): + return [[]] * len(ctx.args_grouping[1]) From 547fdf65209e581a366dfdc78e832be49c3a7065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9a=20Aumont?= <56569375+cleaaum@users.noreply.github.com> Date: Tue, 15 Sep 2026 14:30:02 -0400 Subject: [PATCH 2/4] Fix latitude calculation in xy_to_lonlat function Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- energy-leaflet-cytoscape-visualizer/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/energy-leaflet-cytoscape-visualizer/app.py b/energy-leaflet-cytoscape-visualizer/app.py index 833fad6..ed15488 100644 --- a/energy-leaflet-cytoscape-visualizer/app.py +++ b/energy-leaflet-cytoscape-visualizer/app.py @@ -71,7 +71,7 @@ def xy_to_lonlat(x, y): lon = x * 180.0 / CONVERSION_FACTOR - lat = math.atan(math.exp(-y * math.pi / CONVERSION_FACTOR)) * 360.0 / math.pi - 90.0 + lat = 90.0 - math.atan(math.exp(-y * math.pi / CONVERSION_FACTOR)) * 360.0 / math.pi return lon, lat From efa9ac866f8e13fa6df6b3b891f058503d0bffd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9a=20Aumont?= <56569375+cleaaum@users.noreply.github.com> Date: Tue, 15 Sep 2026 14:31:30 -0400 Subject: [PATCH 3/4] Modify return type of function in chart_utils.py Updated function signature to include an additional list in the return type. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- lithium-supply-chain/utils/chart_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lithium-supply-chain/utils/chart_utils.py b/lithium-supply-chain/utils/chart_utils.py index c963177..4e21d64 100644 --- a/lithium-supply-chain/utils/chart_utils.py +++ b/lithium-supply-chain/utils/chart_utils.py @@ -166,7 +166,7 @@ def generate_sankey_data( year: int, spot_df: pd.DataFrame, view_top, -) -> Tuple[list, list, list, list, list]: +) -> Tuple[list, list, list, list, list, list]: """ This function creates the data required to generate the sankey diragram. Params: From 1dca64b38a49d2a40b87056e4124a0418630e286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9a=20Aumont?= <56569375+cleaaum@users.noreply.github.com> Date: Tue, 15 Sep 2026 14:31:55 -0400 Subject: [PATCH 4/4] Fix typo in clear_node_and_filter_selections function Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- lithium-supply-chain/utils/ui_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lithium-supply-chain/utils/ui_utils.py b/lithium-supply-chain/utils/ui_utils.py index c2e821f..37610b9 100644 --- a/lithium-supply-chain/utils/ui_utils.py +++ b/lithium-supply-chain/utils/ui_utils.py @@ -188,5 +188,5 @@ def get_default_nodes(): State({"type": "global-filters", "index": ALL}, "value"), prevent_initial_call=True, ) -def clear_node_and_filter_selctions(n_clicks_filter, filters): +def clear_node_and_filter_selections(n_clicks_filter, filters): return [[]] * len(ctx.args_grouping[1])