Skip to content

Commit ed9b4f9

Browse files
committed
Save all indices to CSV and update deps
1 parent c6ade75 commit ed9b4f9

File tree

4 files changed

+44
-19
lines changed

4 files changed

+44
-19
lines changed

.github/workflows/release.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ jobs:
1515
steps:
1616
- uses: actions/checkout@v3
1717

18-
- name: Setup Python 3.10
18+
- name: Setup Python 3.13
1919
uses: actions/setup-python@v4
2020
with:
21-
python-version: '3.10'
21+
python-version: '3.13'
2222
architecture: 'x64'
2323

2424
- name: Install hatch

.github/workflows/test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
runs-on: ubuntu-latest
1616
strategy:
1717
matrix:
18-
python-version: ['3.10', '3.12']
18+
python-version: ['3.11', '3.13']
1919
defaults:
2020
run:
2121
shell: bash -l {0}
@@ -59,13 +59,13 @@ jobs:
5959
pip install .[test]
6060
6161
- name: Test
62-
if: matrix.python-version != '3.12'
62+
if: matrix.python-version != '3.13'
6363
run: |
6464
conda activate simdec
6565
pytest
6666
6767
- name: Test with coverage
68-
if: matrix.python-version == '3.12'
68+
if: matrix.python-version == '3.13'
6969
run: |
7070
conda activate simdec
7171
pytest --cov simdec --cov-report term-missing

panel/simdec_app.py

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import seaborn as sns
1313

1414
import simdec as sd
15+
from simdec.sensitivity_indices import SensitivityAnalysisResult
1516
from simdec.visualization import sequential_cmaps, single_color_to_colormap
1617

1718

@@ -74,12 +75,17 @@ def filtered_data(data, output_name):
7475

7576

7677
@pn.cache
77-
def sensitivity_indices(inputs, output):
78-
sensitivity_indices = sd.sensitivity_indices(inputs=inputs, output=output)
79-
if 0.01 < sum(sensitivity_indices.si) < 2.0:
80-
indices = sensitivity_indices.si
78+
def sensitivity_indices_full(inputs, output):
79+
sensitivity_indices_ = sd.sensitivity_indices(inputs=inputs, output=output)
80+
return sensitivity_indices_
81+
82+
83+
@pn.cache
84+
def sensitivity_indices(sensitivity_indices_):
85+
if 0.01 < sum(sensitivity_indices_.si) < 2.0:
86+
indices = sensitivity_indices_.si
8187
else:
82-
indices = sensitivity_indices.first_order
88+
indices = sensitivity_indices_.first_order
8389
return indices
8490

8591

@@ -311,13 +317,25 @@ def tableau_states(res, states):
311317

312318

313319
def csv_data(
314-
sensitivity_indices: pn.widgets.Tabulator, scenario: Styler, states: Styler
320+
sensitivity_indices: SensitivityAnalysisResult,
321+
inputs: pd.DataFrame,
322+
scenario: Styler,
323+
states: Styler,
315324
) -> io.StringIO:
316325
sio = io.StringIO()
317326

318-
si_table = sensitivity_indices.value[["Inputs", ""]]
319-
si_table.rename(columns={"": "Indices"}, inplace=True)
320-
si_table.to_csv(sio, index=False)
327+
si = pd.DataFrame(sensitivity_indices.si.reshape(1, -1), columns=inputs.columns)
328+
first_order = pd.DataFrame(
329+
sensitivity_indices.first_order.reshape(1, -1), columns=inputs.columns
330+
)
331+
second_order = pd.DataFrame(
332+
sensitivity_indices.second_order, columns=inputs.columns
333+
)
334+
335+
si.to_csv(sio, index=False)
336+
first_order.to_csv(sio, index=False)
337+
second_order.to_csv(sio, index=False)
338+
321339
scenario.data.to_csv(sio)
322340
states.data.to_csv(sio)
323341

@@ -346,8 +364,11 @@ def csv_data(
346364
filtered_data, interactive_file, selector_inputs_sensitivity
347365
)
348366

367+
interactive_sensitivity_indices_full = pn.bind(
368+
sensitivity_indices_full, interactive_inputs, interactive_output
369+
)
349370
interactive_sensitivity_indices = pn.bind(
350-
sensitivity_indices, interactive_inputs, interactive_output
371+
sensitivity_indices, interactive_sensitivity_indices_full
351372
)
352373
interactive_explained_variance = pn.bind(
353374
explained_variance, interactive_sensitivity_indices
@@ -408,8 +429,11 @@ def csv_data(
408429
)
409430
interactive_2_output = pn.bind(filtered_data, interactive_file, selector_2_output)
410431

432+
interactive_sensitivity_indices_full_2 = pn.bind(
433+
sensitivity_indices_full, interactive_inputs, interactive_2_output
434+
)
411435
interactive_sensitivity_indices_2 = pn.bind(
412-
sensitivity_indices, interactive_inputs, interactive_2_output
436+
sensitivity_indices, interactive_sensitivity_indices_full_2
413437
)
414438
interactive_explained_variance_2 = pn.bind(
415439
explained_variance, interactive_sensitivity_indices_2
@@ -585,7 +609,8 @@ def callback_ylim(start, end):
585609
download_file_button = pn.widgets.FileDownload(
586610
callback=pn.bind(
587611
csv_data,
588-
interactive_sensitivity_indices_table,
612+
interactive_sensitivity_indices_full,
613+
interactive_inputs,
589614
interactive_tableau,
590615
interactive_tableau_states,
591616
),

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "simdec"
7-
version = "1.3.0"
7+
version = "1.4.0"
88
description = "Sensitivity analysis using simulation decomposition"
99
readme = "README.md"
1010
requires-python = ">=3.10"
@@ -23,9 +23,9 @@ classifiers = [
2323
"Operating System :: OS Independent",
2424
"Programming Language :: Python",
2525
"Programming Language :: Python :: 3",
26-
"Programming Language :: Python :: 3.10",
2726
"Programming Language :: Python :: 3.11",
2827
"Programming Language :: Python :: 3.12",
28+
"Programming Language :: Python :: 3.13",
2929
]
3030

3131
dependencies = [

0 commit comments

Comments
 (0)