codecov[bot]: # [Codecov](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=h1) Report
> Merging [#363](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=desc) into [master](https://codecov.io/gh/OpenSourceEconomics/respy/commit/4813ed80a07a4f6b304670ee6ba8226fab5cdafd&el=desc) will **decrease** coverage by `14.90%`.
> The diff coverage is `6.00%`.

[![Impacted file tree graph](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/graphs/tree.svg?width=650&height=150&src=pr&token=lefIFygbXJ)](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=tree)

```diff
@@             Coverage Diff             @@
##           master     #363       +/-   ##
===========================================
- Coverage   84.61%   69.70%   -14.91%     
===========================================
  Files          45       45               
  Lines        2957     3004       +47     
===========================================
- Hits         2502     2094      -408     
- Misses        455      910      +455     
```

| Flag | Coverage Δ | |
|---|---|---|
| #end_to_end_edge_case | `?` | |
| #end_to_end_precise | `?` | |
| #end_to_end_rest | `?` | |
| #integration_edge_case | `?` | |
| #integration_precise | `?` | |
| #integration_rest | `?` | |
| #unit_precise | `69.70% <6.00%> (-1.59%)` | :arrow_down: |
| #unit_rest | `?` | |

| [Impacted Files](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [respy/method\_of\_simulated\_moments.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvbWV0aG9kX29mX3NpbXVsYXRlZF9tb21lbnRzLnB5) | `12.39% <6.00%> (-67.34%)` | :arrow_down: |
| [respy/data.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvZGF0YS5weQ==) | `28.00% <0.00%> (-72.00%)` | :arrow_down: |
| [respy/tests/test\_simulate.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvdGVzdHMvdGVzdF9zaW11bGF0ZS5weQ==) | `30.76% <0.00%> (-69.24%)` | :arrow_down: |
| [respy/interpolate.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvaW50ZXJwb2xhdGUucHk=) | `24.63% <0.00%> (-68.12%)` | :arrow_down: |
| [respy/tests/test\_method\_of\_simulated\_moments.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvdGVzdHMvdGVzdF9tZXRob2Rfb2Zfc2ltdWxhdGVkX21vbWVudHMucHk=) | `34.04% <0.00%> (-65.96%)` | :arrow_down: |
| [respy/tests/test\_likelihood.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvdGVzdHMvdGVzdF9saWtlbGlob29kLnB5) | `34.48% <0.00%> (-65.52%)` | :arrow_down: |
| [respy/tests/test\_randomness.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvdGVzdHMvdGVzdF9yYW5kb21uZXNzLnB5) | `36.00% <0.00%> (-64.00%)` | :arrow_down: |
| [respy/tests/test\_integration.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvdGVzdHMvdGVzdF9pbnRlZ3JhdGlvbi5weQ==) | `36.84% <0.00%> (-63.16%)` | :arrow_down: |
| [respy/tests/test\_interpolate.py](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree#diff-cmVzcHkvdGVzdHMvdGVzdF9pbnRlcnBvbGF0ZS5weQ==) | `57.14% <0.00%> (-42.86%)` | :arrow_down: |
| ... and [13 more](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=footer). Last update [4813ed8...0418dee](https://codecov.io/gh/OpenSourceEconomics/respy/pull/363?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

amageh: Update on the second point. After feedback from @tobiasraabe, the comparison plot data now looks like this: 

2.  Comparison Plot Data: This feature is implemented through the argument `return_comparison_plot_data` which is boolean and returns a DataFrame in tidy data format. The returned DataFrame will have the following columns:

- **moment_column**: Contains the column names of the moment DataFrames/ Series names.
- **moment_index**: Contains the index of the moment DataFrames/Series (usually Periods).
- **value**: Contains the moment values.
- **moment_set**: Indicator for each set of moments, will use keys if `empirical_moments` is specified in a dict and will just be numbered otherwise.
- **kind**: Indicates whether moments are empirical or simulated.

I am still figuring out how to make this generally compatible with MultiIndex Series and DataFrames as moment containers. A two level Series would be very easy to allow for but introducing more index levels or columns on MultiIndex objects complicates things since those don't fit into the **moment_column**/**moment_index** structure anymore without joining the index or something.

@mo2561057 @tobiasraabe Let me know if you have any ideas/opinions about this, I will think about it some more. 

tobiasraabe: Fantastic job 👍 🎉 
diff --git a/docs/how_to_guides/msm.ipynb b/docs/how_to_guides/msm.ipynb
index f448ac74..a95e86fb 100644
--- a/docs/how_to_guides/msm.ipynb
+++ b/docs/how_to_guides/msm.ipynb
@@ -46,6 +46,8 @@
     "* weighting_matrix (numpy.ndarray)\n",
     "* n_simulation_periods (int, default None)\n",
     "* return_scalar (bool, default True)\n",
+    "* return_simulated_moments (bool, default False)\n",
+    "* return_comparison_plot_data (bool, default False)\n",
     "\n",
     "\n",
     "`get_msm_func` returns a function where all arguments except *params* are held fixed. The returned function can then easily be passed on to an optimizer for estimation."
@@ -1109,6 +1111,24 @@
     "The *return_scalar* argument allows us to return the moment errors in vector form. `get_msm_func` will return the moment error vector if *return_scalar* is set to **False** and will return the value of the weighted square product of the moment errors if *return_scalar* is set to **True** which is also the default."
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### The *return_simulated_moments* Argument\n",
+    "\n",
+    "If *return_simulated_moments* is set to **True**, the msm function will return the simulated in addition to the function value or moment error vector. This can be useful for visualization purposes and to compare simulated moments to empirical moments for a given parameterization. Its default value is **False**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### The *return_comparison_plot_data* Argument\n",
+    "\n",
+    "Similarly to *return_simulated_moments*, the *return_comparison_plot_data* argument can be used to return the empirical and simulated moments with other function output. Instead of lists, the data will be saved to one pandas.DataFrame that is designed to compliment the visualization capabilities of [estimagic](https://github.com/OpenSourceEconomics/estimagic). It is **False** by default and acts as a substitute for *return_simulated_moments*, meaning only one can be set to **True** at the same time."
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
diff --git a/docs/release_notes.rst b/docs/release_notes.rst
index 57e299da..bb1e9123 100644
--- a/docs/release_notes.rst
+++ b/docs/release_notes.rst
@@ -85,7 +85,8 @@ releases are available on `Anaconda.org
   pre-defined models.
 - :gh:`361` adds standard deviations of parameters for example models
   (:ghuser:`timmens`).
-
+- :gh:`363` enables msm function to return simulated moments or comparison plot data for 
+  use with `estimagic <https://github.com/OpenSourceEconomics/estimagic>`_ (:ghuser:`amageh`).
 
 *Releases prior to the second version were published on PyPI, but later deleted. You can
 still checkout the following releases using the corresponding tags in the repository.*
diff --git a/respy/method_of_simulated_moments.py b/respy/method_of_simulated_moments.py
index 127acb3d..b79a798b 100644
--- a/respy/method_of_simulated_moments.py
+++ b/respy/method_of_simulated_moments.py
@@ -34,8 +34,10 @@ def get_msm_func(
     weighting_matrix,
     n_simulation_periods=None,
     return_scalar=True,
+    return_simulated_moments=False,
+    return_comparison_plot_data=False,
 ):
-    """Get the msm function.
+    """Get the MSM function.
 
     Parameters
     ----------
@@ -68,8 +70,23 @@ def get_msm_func(
         number of periods for which decision rules are computed.
     return_scalar : bool, default True
         Indicates whether to return moment error vector (False) or weighted
-        square product of moment error vector (True).
-
+        square product of moment error vectors (True).
+    return_simulated_moments: bool, default False
+        Indicates whether simulated moments should be returned with other output.
+        If True will return simulated moments of the same type as empirical_moments.
+    return_comparison_plot_data: bool, default False
+        Indicator for whether a :class:`pandas.DataFrame` with empirical and simulated
+        moments for the visualization with estimagic should be returned. Data contains
+        the following columns:
+        - moment_column: Contains the column names of the moment DataFrames/Series
+        names.
+        - moment_index: Contains the index of the moment DataFrames/Series. MultiIndex
+        indices will be joined to one string.
+        - value: Contains moment values.
+        - moment_set: Indicator for each set of moments, will use keys if
+        empirical_moments are specified in a dict. Moments input as lists will
+        be numbered according to position.
+        - kind: Indicates whether moments are empirical or simulated.
     Returns
     -------
     msm_func: callable
@@ -78,6 +95,14 @@ def get_msm_func(
     """
     empirical_moments = copy.deepcopy(empirical_moments)
 
+    # Save keys of dictionary for comparison plot if applicable.
+    return_comparison_plot_data = [return_comparison_plot_data]
+    if isinstance(empirical_moments, dict):
+        moment_keys = sorted(empirical_moments)
+        return_comparison_plot_data.append(moment_keys)
+    else:
+        return_comparison_plot_data.append(None)
+
     simulate = get_simulate_func(
         params=params, options=options, n_simulation_periods=n_simulation_periods
     )
@@ -111,6 +136,11 @@ def get_msm_func(
             "the number of sets of empirical moments."
         )
 
+    if return_simulated_moments and return_comparison_plot_data[0]:
+        raise ValueError(
+            "Can only return either simulated moments or comparison plot data, not both."
+        )
+
     msm_func = functools.partial(
         msm,
         simulate=simulate,
@@ -119,6 +149,8 @@ def get_msm_func(
         empirical_moments=empirical_moments,
         weighting_matrix=weighting_matrix,
         return_scalar=return_scalar,
+        return_simulated_moments=return_simulated_moments,
+        return_comparison_plot_data=return_comparison_plot_data,
     )
 
     return msm_func
@@ -132,15 +164,17 @@ def msm(
     empirical_moments,
     weighting_matrix,
     return_scalar,
+    return_simulated_moments,
+    return_comparison_plot_data,
 ):
-    """Loss function for msm estimation.
+    """Loss function for MSM estimation.
 
     Parameters
     ----------
     params : pandas.DataFrame or pandas.Series
         Contains model parameters.
     simulate : callable
-        Function used to simulate data for msm estimation.
+        Function used to simulate data for MSM estimation.
     calc_moments : list
         List of function(s) used to calculate simulated moments. Must match length of
         empirical_moments i.e. calc_moments contains a moments function for each item in
@@ -159,11 +193,22 @@ def msm(
     return_scalar : bool
         Indicates whether to return moment error vector (False) or weighted square
         product of moment error vector (True).
+    return_simulated_moments: bool
+        Indicates whether simulated moments should be returned with other output.
+        If True will return simulated moments of the same type as empirical_moments.
+    return_comparison_plot_data: list
+        Will output moments in a tidy data format if True. Expects a list as input where
+        the first element is a boolean indicating whether to return the comparison plot
+        data. The second element in the list can be a list of keys used to identify sets
+        of moments which otherwise will be numbered.
 
     Returns
     -------
-    out : pandas.Series or float
-        Scalar or moment error vector depending on value of return_scalar.
+    out : pandas.Series or float or tuple
+        Scalar or moment error vector depending on value of return_scalar. Will be a
+        tuple containing simulated moments of same type as empirical_moments or a tidy
+        pandas.DataFrame if either return_simulated_moments or the first element in
+        return_comparison_plot_data is True.
 
     """
     empirical_moments = copy.deepcopy(empirical_moments)
@@ -193,6 +238,21 @@ def msm(
     else:
         out = moment_errors
 
+    if return_simulated_moments:
+        simulated_moments = _reconstruct_inputs(
+            simulated_moments, return_comparison_plot_data[1]
+        )
+        out = (out, simulated_moments)
+
+    elif return_comparison_plot_data[0]:
+        tidy_moments = _create_comparison_plot_data_msm(
+            empirical_moments, simulated_moments, return_comparison_plot_data[1]
+        )
+        out = (out, tidy_moments)
+
+    else:
+        pass
+
     return out
 
 
@@ -231,7 +291,7 @@ def get_diag_weighting_matrix(empirical_moments, weights=None):
         weights = _harmonize_input(weights)
 
         # Reindex weights to ensure they are assigned to the correct moments in
-        # the msm function.
+        # the MSM function.
         weights = [
             weight.reindex_like(emp_mom)
             for emp_mom, weight in zip(empirical_moments, weights)
@@ -275,7 +335,8 @@ def _harmonize_input(data):
       the dictionary entries.
 
     """
-    # Convert single DataFrames, Series or function into list containing one item.
+    # Convert single pandas.DataFrames, pandas.Series or function into list containing
+    # one item.
     if isinstance(data, (pd.DataFrame, pd.Series)) or callable(data):
         data = [data]
 
@@ -297,15 +358,18 @@ def _harmonize_input(data):
 
 def _flatten_index(data):
     """Flatten the index as a combination of the former index and the columns."""
+    data = copy.deepcopy(data)
     data_flat = []
     counter = itertools.count()
 
     for series_or_df in data:
         series_or_df.index = series_or_df.index.map(str)
-        # Unstack DataFrames and Series to add columns/Series name to index.
+        # Unstack pandas.DataFrames and pandas.Series to add
+        # columns/name to index.
         if isinstance(series_or_df, pd.DataFrame):
             df = series_or_df.rename(columns=str)
-        # Series without a name are named using a counter to avoid duplicate indexes.
+        # pandas.Series without a name are named using a counter to avoid duplicate
+        # indexes.
         elif isinstance(series_or_df, pd.Series) and series_or_df.name is None:
             df = series_or_df.to_frame(name=str(next(counter)))
         else:
@@ -317,3 +381,61 @@ def _flatten_index(data):
         data_flat.append(df)
 
     return pd.concat(data_flat)
+
+
+def _create_comparison_plot_data_msm(
+    empirical_moments, simulated_moments, moment_set_labels
+):
+    """Create pandas.DataFrame for estimagic's comparison plot."""
+    if moment_set_labels is None:
+        moment_set_labels = list(range(0, len(empirical_moments)))
+
+    tidy_empirical_moments = _create_tidy_data(empirical_moments, moment_set_labels)
+    tidy_simulated_moments = _create_tidy_data(simulated_moments, moment_set_labels)
+
+    tidy_simulated_moments["kind"] = "simulated"
+    tidy_empirical_moments["kind"] = "empirical"
+
+    return pd.concat(
+        [tidy_empirical_moments, tidy_simulated_moments], ignore_index=True
+    )
+
+
+def _create_tidy_data(data, moment_set_labels):
+    """Create tidy data from list of pandas.DataFrames."""
+    counter = itertools.count()
+    tidy_data = []
+    for series_or_df, label in zip(data, moment_set_labels):
+        # Join index levels for MultiIndex objects.
+        if isinstance(series_or_df.index, pd.MultiIndex):
+            series_or_df = series_or_df.rename(index=str)
+            series_or_df.index = series_or_df.index.to_flat_index().str.join("_")
+        # If moments are a pandas.Series, convert into pandas.DataFrame.
+        if isinstance(series_or_df, pd.Series):
+            # Unnamed pandas.Series receive a name based on a counter.
+            if series_or_df.name is None:
+                series_or_df = series_or_df.to_frame(name=next(counter))
+            else:
+                series_or_df = series_or_df.to_frame()
+
+        # Create pandas.DataFrame in tidy format.
+        tidy_df = series_or_df.unstack()
+        tidy_df.index.names = ("moment_column", "moment_index")
+        tidy_df.rename("value", inplace=True)
+        tidy_df = tidy_df.reset_index()
+        tidy_df["moment_set"] = label
+        tidy_data.append(tidy_df)
+
+    return pd.concat(tidy_data, ignore_index=True)
+
+
+def _reconstruct_inputs(inputs, dict_keys=None):
+    """Reconstruct inputs from lists back to a dictionary or single object."""
+    if dict_keys is not None:
+        output = dict(zip(dict_keys, inputs))
+    elif len(inputs) == 1:
+        output = inputs[0]
+    else:
+        output = inputs
+
+    return output

Add comparison_plot_data to msm().
* respy version used, if any: any
* Python version, if any: any
* Operating System: any

### Is your feature request related to a problem? Please describe.

estimagic allows the criterion function to have two returns.

1. A criterion value or array which is passed to the optimizer.
2. A DataFrame containing additional information which can be visualized with the [comparison plot](https://estimagic.readthedocs.io/en/latest/visualization/comparison_plot_demo.html). #313 implements the same for the estimation via ML and allows to visualize the distribution of various contributions.

This issue tackles the second point. Passing data to the comparison plot would allow us to see how the model fit in terms of moments develops over the course of the optimization.

One could directly see which moments can be reproduced by the model and which ones not by comparing the value of the moments side-by-side or observing the difference between the two.

### Describe the solution you'd like

Something very similar #313 where the data adheres to the tidy data format.

The main point of discussion is what do we want to visualize. Some suggestions:

- The comparison plot data might have some key called ``kind`` which is either simulated or empirical.
- Do we want to visualize both, the simulated and empirical moment, or just the difference between the two.
- The moments can be grouped by which ``calc_moments`` produced them. In case, the functions are passed as dictionaries, we could re-use the dictionary keys. Otherwise, we have to use positions. This will allow us to group choice probabilities and wages, etc..
diff --git a/respy/tests/test_method_of_simulated_moments.py b/respy/tests/test_method_of_simulated_moments.py
index 427df713..c6d8b00f 100644
--- a/respy/tests/test_method_of_simulated_moments.py
+++ b/respy/tests/test_method_of_simulated_moments.py
@@ -1,4 +1,5 @@
 """Test the msm interface of respy."""
+import pandas as pd
 import pytest
 
 from respy.interface import get_example_model
@@ -93,6 +94,35 @@ def test_randomness_msm(model_or_seed):
     assert msm(params) == 0
 
 
+@pytest.mark.integration
+def test_return_simulated_moments_for_msm(inputs):
+    """Return_simulated_moments."""
+    msm = get_msm_func(*inputs, return_simulated_moments=True)
+    fval, simulated_moments = msm(inputs[0])
+
+    assert isinstance(fval, float)
+    assert isinstance(simulated_moments, (dict, list, pd.DataFrame, pd.Series))
+
+
+@pytest.mark.integration
+def test_return_comparison_plot_data_for_msm(inputs):
+    """Return_comparison_plot_data."""
+    msm = get_msm_func(*inputs, return_scalar=False, return_comparison_plot_data=True)
+    moment_errors, df = msm(inputs[0])
+
+    assert isinstance(moment_errors, pd.Series)
+    assert isinstance(df, pd.DataFrame)
+
+
+@pytest.mark.integration
+def test_multiple_returns_msm(inputs):
+    """Raise error if moments and comparison plot data is requested."""
+    with pytest.raises(ValueError, match="Can only return either"):
+        get_msm_func(
+            *inputs, return_simulated_moments=True, return_comparison_plot_data=True
+        )
+
+
 def _calc_choice_freq(df):
     return df.groupby("Period").Choice.value_counts(normalize=True).unstack()
 

environment.yml
pip install -e .[dev]
parse_log_pytest
environment.yml
bottleneck numexpr
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
accessible-pygments @ file:///home/conda/feedstock_root/build_artifacts/accessible-pygments_1679583834850/work
aiofiles @ file:///home/conda/feedstock_root/build_artifacts/aiofiles_1664378549280/work
aiosqlite @ file:///home/conda/feedstock_root/build_artifacts/aiosqlite_1715928379913/work
alabaster @ file:///home/conda/feedstock_root/build_artifacts/alabaster_1673645646525/work
anaconda-client @ file:///home/conda/feedstock_root/build_artifacts/anaconda-client_1686190150814/work
anaconda-project @ file:///home/conda/feedstock_root/build_artifacts/anaconda-project_1660066847501/work
anyio @ file:///home/conda/feedstock_root/build_artifacts/anyio_1688651106312/work/dist
apprise==1.9.3
argon2-cffi @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi_1692818318753/work
argon2-cffi-bindings @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi-bindings_1649500320262/work
arrow @ file:///home/conda/feedstock_root/build_artifacts/arrow_1662382474514/work
attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1722977137225/work
Babel @ file:///home/conda/feedstock_root/build_artifacts/babel_1702422572539/work
backcall @ file:///home/conda/feedstock_root/build_artifacts/backcall_1592338393461/work
backports.functools-lru-cache @ file:///home/conda/feedstock_root/build_artifacts/backports.functools_lru_cache_1702571698061/work
beautifulsoup4 @ file:///home/conda/feedstock_root/build_artifacts/beautifulsoup4_1705564648255/work
bleach @ file:///home/conda/feedstock_root/build_artifacts/bleach_1696630167146/work
bokeh @ file:///home/conda/feedstock_root/build_artifacts/bokeh_1660586590972/work
Bottleneck @ file:///home/conda/feedstock_root/build_artifacts/bottleneck_1656803757560/work
Brotli @ file:///home/conda/feedstock_root/build_artifacts/brotli-split_1648883617327/work
bump2version==1.0.1
cached-property @ file:///home/conda/feedstock_root/build_artifacts/cached_property_1615209429212/work
certifi @ file:///home/conda/feedstock_root/build_artifacts/certifi_1725278078093/work/certifi
cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1666183775483/work
cfgv @ file:///home/conda/feedstock_root/build_artifacts/cfgv_1629909281805/work
chaospy @ file:///home/conda/feedstock_root/build_artifacts/chaospy_1741616009179/work
chardet @ file:///home/conda/feedstock_root/build_artifacts/chardet_1656142026456/work
charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1728479282467/work
click @ file:///home/conda/feedstock_root/build_artifacts/click_1651215140632/work
cloudpickle @ file:///home/conda/feedstock_root/build_artifacts/cloudpickle_1674202310934/work
clyent==1.2.2
codecov @ file:///home/conda/feedstock_root/build_artifacts/codecov_1681778020913/work
colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1666700638685/work
conda==22.9.0
conda-build==3.22.0
conda-pack @ file:///home/conda/feedstock_root/build_artifacts/conda-pack_1719323969738/work
conda-package-handling @ file:///home/conda/feedstock_root/build_artifacts/conda-package-handling_1691048088238/work
conda-verify @ file:///home/conda/feedstock_root/build_artifacts/conda-verify_1635878735070/work
conda_package_streaming @ file:///home/conda/feedstock_root/build_artifacts/conda-package-streaming_1729004031731/work
coverage @ file:///home/conda/feedstock_root/build_artifacts/coverage_1664603898546/work
cryptography @ file:///home/conda/feedstock_root/build_artifacts/cryptography_1666563371538/work
cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1635519461629/work
debugpy @ file:///home/conda/feedstock_root/build_artifacts/debugpy_1660619049122/work
decorator @ file:///home/conda/feedstock_root/build_artifacts/decorator_1641555617451/work
defusedxml @ file:///home/conda/feedstock_root/build_artifacts/defusedxml_1615232257335/work
dill @ file:///home/conda/feedstock_root/build_artifacts/dill_1706434688412/work
distlib @ file:///home/conda/feedstock_root/build_artifacts/distlib_1728557174656/work
doc8 @ file:///home/conda/feedstock_root/build_artifacts/doc8_1658965310756/work
docutils @ file:///home/conda/feedstock_root/build_artifacts/docutils_1657104278180/work
entrypoints @ file:///home/conda/feedstock_root/build_artifacts/entrypoints_1643888246732/work
estimagic==0.1.3
exceptiongroup @ file:///home/conda/feedstock_root/build_artifacts/exceptiongroup_1720869315914/work
execnet @ file:///home/conda/feedstock_root/build_artifacts/execnet_1688933357483/work
fancycompleter @ file:///home/conda/feedstock_root/build_artifacts/fancycompleter_1658341099637/work
fastjsonschema @ file:///home/conda/feedstock_root/build_artifacts/python-fastjsonschema_1718477020893/work/dist
filelock @ file:///home/conda/feedstock_root/build_artifacts/filelock_1726613473834/work
fonttools @ file:///home/conda/feedstock_root/build_artifacts/fonttools_1666389892786/work
fqdn @ file:///home/conda/feedstock_root/build_artifacts/fqdn_1638810296540/work/dist
future @ file:///home/conda/feedstock_root/build_artifacts/future_1649010143709/work
fuzzywuzzy @ file:///home/conda/feedstock_root/build_artifacts/fuzzywuzzy_1605704184142/work
glob2==0.7
greenlet @ file:///home/conda/feedstock_root/build_artifacts/greenlet_1661444174803/work
identify @ file:///home/conda/feedstock_root/build_artifacts/identify_1732589372185/work
idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1726459485162/work
imagesize @ file:///home/conda/feedstock_root/build_artifacts/imagesize_1656939531508/work
importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1653252814274/work
importlib-resources @ file:///home/conda/feedstock_root/build_artifacts/importlib_resources_1688813467203/work
iniconfig @ file:///home/conda/feedstock_root/build_artifacts/iniconfig_1673103042956/work
ipykernel @ file:///home/conda/feedstock_root/build_artifacts/ipykernel_1666723258080/work
ipython @ file:///home/conda/feedstock_root/build_artifacts/ipython_1651240553635/work
ipython_genutils @ file:///home/conda/feedstock_root/build_artifacts/ipython_genutils_1716278396992/work
isoduration @ file:///home/conda/feedstock_root/build_artifacts/isoduration_1638811571363/work/dist
jarowinkler @ file:///home/conda/feedstock_root/build_artifacts/jarowinkler_1664348144785/work
jedi @ file:///home/conda/feedstock_root/build_artifacts/jedi_1696326070614/work
Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1715127149914/work
joblib @ file:///home/conda/feedstock_root/build_artifacts/joblib_1691577114857/work
json5 @ file:///home/conda/feedstock_root/build_artifacts/json5_1712986206667/work
jsonpointer==2.0
jsonschema @ file:///home/conda/feedstock_root/build_artifacts/jsonschema-meta_1669810440410/work
jupyter-events @ file:///home/conda/feedstock_root/build_artifacts/jupyter_events_1690301630599/work
jupyter-server @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_1671591499479/work
jupyter-ydoc @ file:///home/conda/feedstock_root/build_artifacts/jupyter_ydoc_1685535850115/work/dist
jupyter_client @ file:///home/conda/feedstock_root/build_artifacts/jupyter_client_1673615989977/work
jupyter_core @ file:///home/conda/feedstock_root/build_artifacts/jupyter_core_1658332345782/work
jupyter_server_fileid @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_fileid_1714390608391/work
jupyter_server_ydoc @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_ydoc_1678043727957/work
jupyterlab @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_1724937868967/work
jupyterlab_pygments @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_pygments_1700744013163/work
jupyterlab_server @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_server_1690205927615/work
kiwisolver @ file:///home/conda/feedstock_root/build_artifacts/kiwisolver_1657953088445/work
Levenshtein @ file:///home/conda/feedstock_root/build_artifacts/levenshtein_1666055676762/work
libarchive-c @ file:///home/conda/feedstock_root/build_artifacts/python-libarchive-c_1649436020286/work
line-profiler @ file:///home/conda/feedstock_root/build_artifacts/line_profiler_1647944786597/work
livereload @ file:///home/conda/feedstock_root/build_artifacts/livereload_1719215171442/work
llvmlite==0.39.1
Markdown==3.4.4
MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1648737551960/work
matplotlib @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-suite_1661439848456/work
matplotlib-inline @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-inline_1713250518406/work
mistune @ file:///home/conda/feedstock_root/build_artifacts/mistune_1698947099619/work
munkres==1.1.4
nbclassic @ file:///home/conda/feedstock_root/build_artifacts/nbclassic_1716838762700/work
nbclient @ file:///home/conda/feedstock_root/build_artifacts/nbclient_1665125402713/work
nbconvert @ file:///home/conda/feedstock_root/build_artifacts/nbconvert-meta_1687202153002/work
nbformat @ file:///home/conda/feedstock_root/build_artifacts/nbformat_1679336765223/work
nbsphinx==0.4.2
nest_asyncio @ file:///home/conda/feedstock_root/build_artifacts/nest-asyncio_1705850609492/work
nodeenv @ file:///home/conda/feedstock_root/build_artifacts/nodeenv_1717585263558/work
notebook @ file:///home/conda/feedstock_root/build_artifacts/notebook_1715848908871/work
notebook_shim @ file:///home/conda/feedstock_root/build_artifacts/notebook-shim_1707957777232/work
numba @ file:///home/conda/feedstock_root/build_artifacts/numba_1665771418417/work
numexpr @ file:///home/conda/feedstock_root/build_artifacts/numexpr_1658076415990/work
numpoly @ file:///home/conda/feedstock_root/build_artifacts/numpoly_1728350953194/work
numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1649806299270/work
numpydoc @ file:///home/conda/feedstock_root/build_artifacts/numpydoc_1702057563287/work
oauthlib==3.2.2
olefile @ file:///home/conda/feedstock_root/build_artifacts/olefile_1701735466804/work
packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1696202382185/work
pandas==1.3.5
pandocfilters @ file:///home/conda/feedstock_root/build_artifacts/pandocfilters_1631603243851/work
parso @ file:///home/conda/feedstock_root/build_artifacts/parso_1712320355065/work
patsy @ file:///home/conda/feedstock_root/build_artifacts/patsy_1704469236901/work
pbr @ file:///home/conda/feedstock_root/build_artifacts/pbr_1724777609752/work
pdbpp @ file:///home/conda/feedstock_root/build_artifacts/pdbpp_1626016722541/work
pexpect @ file:///home/conda/feedstock_root/build_artifacts/pexpect_1706113125309/work
pickleshare @ file:///home/conda/feedstock_root/build_artifacts/pickleshare_1602536217715/work
Pillow @ file:///home/conda/feedstock_root/build_artifacts/pillow_1636558793805/work
pkginfo @ file:///home/conda/feedstock_root/build_artifacts/pkginfo_1709561090460/work
pkgutil_resolve_name @ file:///home/conda/feedstock_root/build_artifacts/pkgutil-resolve-name_1694617248815/work
platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1696272223550/work
pluggy @ file:///home/conda/feedstock_root/build_artifacts/pluggy_1648772594554/work
pre-commit @ file:///home/conda/feedstock_root/build_artifacts/pre-commit_1657541073402/work
prometheus-client @ file:///home/conda/feedstock_root/build_artifacts/prometheus_client_1689032443210/work
prompt_toolkit @ file:///home/conda/feedstock_root/build_artifacts/prompt-toolkit_1727341649933/work
psutil @ file:///home/conda/feedstock_root/build_artifacts/psutil_1666155398032/work
ptyprocess @ file:///home/conda/feedstock_root/build_artifacts/ptyprocess_1609419310487/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl
py @ file:///home/conda/feedstock_root/build_artifacts/py_1636301881863/work
pycosat @ file:///home/conda/feedstock_root/build_artifacts/pycosat_1666656960991/work
pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1636257122734/work
pydata-sphinx-theme==0.13.3
Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1700607939962/work
pyOpenSSL @ file:///home/conda/feedstock_root/build_artifacts/pyopenssl_1685514481738/work
pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1724616129934/work
PyQt5==5.15.4
PyQt5-sip==12.9.0
pyrepl @ file:///home/conda/feedstock_root/build_artifacts/pyrepl_1650705796309/work
pyrsistent @ file:///home/conda/feedstock_root/build_artifacts/pyrsistent_1649013358450/work
PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1648857264451/work
pytest @ file:///home/conda/feedstock_root/build_artifacts/pytest_1704035161844/work
pytest-cov @ file:///home/conda/feedstock_root/build_artifacts/pytest-cov_1684964868191/work
pytest-forked @ file:///home/conda/feedstock_root/build_artifacts/pytest-forked_1676286250869/work
pytest-randomly==3.12.0
pytest-xdist==1.29.0
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1709299778482/work
python-json-logger @ file:///home/conda/feedstock_root/build_artifacts/python-json-logger_1677079630776/work
python-Levenshtein @ file:///home/conda/feedstock_root/build_artifacts/python-levenshtein_1666056930008/work
pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1726055524169/work
PyYAML @ file:///home/conda/feedstock_root/build_artifacts/pyyaml_1648757092905/work
pyzmq @ file:///home/conda/feedstock_root/build_artifacts/pyzmq_1663830492333/work
rapidfuzz @ file:///home/conda/feedstock_root/build_artifacts/rapidfuzz_1666686645258/work
requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1716354486713/work
requests-oauthlib==2.0.0
requests-toolbelt @ file:///home/conda/feedstock_root/build_artifacts/requests-toolbelt_1682953341151/work
-e git+https://github.com/OpenSourceEconomics/respy.git@81f12633ee43ce93801fa62c0038493aeff22aea#egg=respy
restructuredtext-lint @ file:///home/conda/feedstock_root/build_artifacts/restructuredtext_lint_1645724685739/work
rfc3339-validator @ file:///home/conda/feedstock_root/build_artifacts/rfc3339-validator_1638811747357/work
rfc3986-validator @ file:///home/conda/feedstock_root/build_artifacts/rfc3986-validator_1598024191506/work
ruamel-yaml-conda @ file:///home/conda/feedstock_root/build_artifacts/ruamel_yaml_1653464404698/work
ruamel.yaml @ file:///home/conda/feedstock_root/build_artifacts/ruamel.yaml_1649033206568/work
ruamel.yaml.clib @ file:///home/conda/feedstock_root/build_artifacts/ruamel.yaml.clib_1649013068865/work
scikit-learn @ file:///home/conda/feedstock_root/build_artifacts/scikit-learn_1640464152916/work
scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy_1637806658031/work
seaborn @ file:///home/conda/feedstock_root/build_artifacts/seaborn-split_1672497695270/work
Send2Trash @ file:///home/conda/feedstock_root/build_artifacts/send2trash_1712584999685/work
sip @ file:///home/conda/feedstock_root/build_artifacts/sip_1646101199960/work
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
snakeviz @ file:///home/conda/feedstock_root/build_artifacts/snakeviz_1731339636406/work
sniffio @ file:///home/conda/feedstock_root/build_artifacts/sniffio_1708952932303/work
snowballstemmer @ file:///home/conda/feedstock_root/build_artifacts/snowballstemmer_1637143057757/work
soupsieve @ file:///home/conda/feedstock_root/build_artifacts/soupsieve_1658207591808/work
Sphinx @ file:///home/conda/feedstock_root/build_artifacts/sphinx_1665915552897/work
sphinx-autobuild @ file:///home/conda/feedstock_root/build_artifacts/sphinx-autobuild_1615741904625/work
sphinxcontrib-applehelp @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-applehelp_1674487779667/work
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-htmlhelp_1675256494457/work
sphinxcontrib-jsmath @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-jsmath_1691604704163/work
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml @ file:///home/conda/feedstock_root/build_artifacts/sphinxcontrib-serializinghtml_1649380998999/work
SQLAlchemy @ file:///home/conda/feedstock_root/build_artifacts/sqlalchemy_1665944338818/work
statsmodels @ file:///home/conda/feedstock_root/build_artifacts/statsmodels_1654787101575/work
stevedore @ file:///home/conda/feedstock_root/build_artifacts/stevedore_1649932734304/work
tabulate @ file:///home/conda/feedstock_root/build_artifacts/tabulate_1665138452165/work
terminado @ file:///home/conda/feedstock_root/build_artifacts/terminado_1670253674810/work
threadpoolctl @ file:///home/conda/feedstock_root/build_artifacts/threadpoolctl_1643647933166/work
tinycss2 @ file:///home/conda/feedstock_root/build_artifacts/tinycss2_1729802851396/work
toml @ file:///home/conda/feedstock_root/build_artifacts/toml_1604308577558/work
tomli @ file:///home/conda/feedstock_root/build_artifacts/tomli_1727974628237/work
toolz @ file:///home/conda/feedstock_root/build_artifacts/toolz_1706112571092/work
tornado @ file:///home/conda/feedstock_root/build_artifacts/tornado_1656937818679/work
tox @ file:///home/conda/feedstock_root/build_artifacts/tox_1668431778215/work
tox-conda @ file:///home/conda/feedstock_root/build_artifacts/tox-conda_1676327090528/work
tqdm @ file:///home/conda/feedstock_root/build_artifacts/tqdm_1732497199771/work
traitlets @ file:///home/conda/feedstock_root/build_artifacts/traitlets_1675110562325/work
typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1688315532570/work
ukkonen @ file:///home/conda/feedstock_root/build_artifacts/ukkonen_1649407025308/work
unicodedata2 @ file:///home/conda/feedstock_root/build_artifacts/unicodedata2_1649111917568/work
uri-template @ file:///home/conda/feedstock_root/build_artifacts/uri-template_1688655812972/work/dist
urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1718728347128/work
virtualenv @ file:///home/conda/feedstock_root/build_artifacts/virtualenv_1681949329741/work
wcwidth @ file:///home/conda/feedstock_root/build_artifacts/wcwidth_1699959196938/work
webcolors @ file:///home/conda/feedstock_root/build_artifacts/webcolors_1723294704277/work
webencodings @ file:///home/conda/feedstock_root/build_artifacts/webencodings_1694681268211/work
websocket-client @ file:///home/conda/feedstock_root/build_artifacts/websocket-client_1687789148259/work
wmctrl @ file:///home/conda/feedstock_root/build_artifacts/wmctrl_1717855826423/work
y-py @ file:///home/conda/feedstock_root/build_artifacts/y-py_1658953063597/work
ypy-websocket @ file:///home/conda/feedstock_root/build_artifacts/ypy-websocket_1670333059911/work
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1677313463193/work
zstandard @ file:///home/conda/feedstock_root/build_artifacts/zstandard_1655887611100/work

name: respy
channels:
  - opensourceeconomics
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _openmp_mutex=4.5=3_kmp_llvm
  - accessible-pygments=0.0.4=pyhd8ed1ab_0
  - aiofiles=22.1.0=pyhd8ed1ab_0
  - aiosqlite=0.20.0=pyhd8ed1ab_0
  - alabaster=0.7.13=pyhd8ed1ab_0
  - anaconda-client=1.11.3=pyhd8ed1ab_0
  - anaconda-project=0.11.1=pyhd8ed1ab_0
  - anyio=3.7.1=pyhd8ed1ab_0
  - argon2-cffi=23.1.0=pyhd8ed1ab_0
  - argon2-cffi-bindings=21.2.0=py37h540881e_2
  - arrow=1.2.3=pyhd8ed1ab_0
  - attrs=24.2.0=pyh71513ae_0
  - babel=2.14.0=pyhd8ed1ab_0
  - backcall=0.2.0=pyh9f0ad1d_0
  - backports=1.0=pyhd8ed1ab_4
  - backports.functools_lru_cache=2.0.0=pyhd8ed1ab_0
  - beautifulsoup4=4.12.3=pyha770c72_0
  - blas=2.120=openblas
  - blas-devel=3.9.0=20_linux64_openblas
  - bleach=6.1.0=pyhd8ed1ab_0
  - bokeh=2.4.3=pyhd8ed1ab_3
  - bottleneck=1.3.5=py37hda87dfa_0
  - brotli=1.1.0=hb9d3cd8_2
  - brotli-bin=1.1.0=hb9d3cd8_2
  - brotli-python=1.0.9=py37hd23a5d3_7
  - bzip2=1.0.8=h4bc722e_7
  - c-ares=1.34.4=hb9d3cd8_0
  - ca-certificates=2025.1.31=hbcca054_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - certifi=2024.8.30=pyhd8ed1ab_0
  - cffi=1.15.1=py37h43b0acd_1
  - cfgv=3.3.1=pyhd8ed1ab_0
  - chaospy=4.3.19=pyhd8ed1ab_0
  - chardet=5.0.0=py37h89c1867_0
  - charset-normalizer=3.4.0=pyhd8ed1ab_0
  - click=8.1.3=py37h89c1867_0
  - cloudpickle=2.2.1=pyhd8ed1ab_0
  - clyent=1.2.2=py_1
  - codecov=2.1.13=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - conda=22.9.0=py37h89c1867_1
  - conda-build=3.22.0=py37h89c1867_2
  - conda-pack=0.8.0=pyhd8ed1ab_0
  - conda-package-handling=2.2.0=pyh38be061_0
  - conda-package-streaming=0.11.0=pyhd8ed1ab_0
  - conda-verify=3.1.1=py37h89c1867_1004
  - coverage=6.5.0=py37h540881e_0
  - cryptography=38.0.2=py37h5994e8b_1
  - cycler=0.11.0=pyhd8ed1ab_0
  - cyrus-sasl=2.1.27=h9033bb2_6
  - dbus=1.13.18=hb2f20db_0
  - debugpy=1.6.3=py37hd23a5d3_0
  - decorator=5.1.1=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - dill=0.3.8=pyhd8ed1ab_0
  - distlib=0.3.9=pyhd8ed1ab_0
  - doc8=1.0.0=pyhd8ed1ab_0
  - docutils=0.19=py37h89c1867_0
  - entrypoints=0.4=pyhd8ed1ab_0
  - estimagic=0.1.3=py_0
  - exceptiongroup=1.2.2=pyhd8ed1ab_0
  - execnet=2.0.2=pyhd8ed1ab_0
  - expat=2.7.0=h5888daf_0
  - fancycompleter=0.9.1=py37h89c1867_1003
  - filelock=3.16.1=pyhd8ed1ab_0
  - fontconfig=2.14.2=h14ed4e7_0
  - fonttools=4.38.0=py37h540881e_0
  - fqdn=1.5.1=pyhd8ed1ab_0
  - freetype=2.12.1=h267a509_2
  - future=0.18.2=py37h89c1867_5
  - fuzzywuzzy=0.18.0=pyhd8ed1ab_0
  - glib=2.80.2=hf974151_0
  - glib-tools=2.80.2=hb6ce0ca_0
  - glob2=0.7=py_0
  - greenlet=1.1.3=py37hd23a5d3_0
  - gst-plugins-base=1.14.1=h6a678d5_1
  - gstreamer=1.14.1=h5eee18b_1
  - icu=73.2=h59595ed_0
  - identify=2.6.3=pyhd8ed1ab_0
  - idna=3.10=pyhd8ed1ab_0
  - imagesize=1.4.1=pyhd8ed1ab_0
  - importlib-metadata=4.11.4=py37h89c1867_0
  - importlib_metadata=4.11.4=hd8ed1ab_0
  - importlib_resources=6.0.0=pyhd8ed1ab_0
  - iniconfig=2.0.0=pyhd8ed1ab_0
  - ipykernel=6.16.2=pyh210e3f2_0
  - ipython=7.33.0=py37h89c1867_0
  - ipython_genutils=0.2.0=pyhd8ed1ab_1
  - isoduration=20.11.0=pyhd8ed1ab_0
  - jarowinkler=1.2.3=py37hd23a5d3_0
  - jedi=0.19.1=pyhd8ed1ab_0
  - jinja2=3.1.4=pyhd8ed1ab_0
  - joblib=1.3.2=pyhd8ed1ab_0
  - jpeg=9e=h0b41bf4_3
  - json5=0.9.25=pyhd8ed1ab_0
  - jsonpointer=2.0=py_0
  - jsonschema=4.17.3=pyhd8ed1ab_0
  - jsonschema-with-format-nongpl=4.17.3=pyhd8ed1ab_0
  - jupyter_client=7.4.9=pyhd8ed1ab_0
  - jupyter_core=4.11.1=py37h89c1867_0
  - jupyter_events=0.6.3=pyhd8ed1ab_1
  - jupyter_server=1.23.4=pyhd8ed1ab_0
  - jupyter_server_fileid=0.9.2=pyhd8ed1ab_0
  - jupyter_server_ydoc=0.8.0=pyhd8ed1ab_0
  - jupyter_ydoc=0.2.4=pyhd8ed1ab_0
  - jupyterlab=3.6.8=pyhd8ed1ab_0
  - jupyterlab_pygments=0.3.0=pyhd8ed1ab_0
  - jupyterlab_server=2.24.0=pyhd8ed1ab_0
  - keyutils=1.6.1=h166bdaf_0
  - kiwisolver=1.4.4=py37h7cecad7_0
  - krb5=1.20.1=h81ceb04_0
  - lcms2=2.12=hddcbb42_0
  - ld_impl_linux-64=2.43=h712a8e2_4
  - lerc=3.0=h9c3ff4c_0
  - levenshtein=0.20.7=py37hd23a5d3_0
  - libabseil=20250127.0=cxx17_hbbce691_0
  - libarchive=3.7.4=hfca40fe_0
  - libblas=3.9.0=20_linux64_openblas
  - libbrotlicommon=1.1.0=hb9d3cd8_2
  - libbrotlidec=1.1.0=hb9d3cd8_2
  - libbrotlienc=1.1.0=hb9d3cd8_2
  - libcblas=3.9.0=20_linux64_openblas
  - libclang=14.0.6=default_h7634d5b_1
  - libclang13=14.0.6=default_h9986a30_1
  - libcups=2.3.3=h36d4200_3
  - libcurl=8.12.1=hc9e6f67_0
  - libdeflate=1.10=h7f98852_0
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libev=4.33=hd590300_2
  - libexpat=2.7.0=h5888daf_0
  - libffi=3.4.6=h2dba641_1
  - libgcc=14.2.0=h767d61c_2
  - libgcc-ng=14.2.0=h69a702a_2
  - libgfortran=14.2.0=h69a702a_2
  - libgfortran-ng=14.2.0=h69a702a_2
  - libgfortran5=14.2.0=hf1ad2bd_2
  - libglib=2.80.2=hf974151_0
  - libhwloc=2.11.2=default_h0d58e46_1001
  - libiconv=1.18=h4ce23a2_1
  - liblapack=3.9.0=20_linux64_openblas
  - liblapacke=3.9.0=20_linux64_openblas
  - liblief=0.12.2=h27087fc_0
  - libllvm11=11.1.0=he0ac6c6_5
  - libllvm14=14.0.6=hcd5def8_4
  - liblzma=5.6.4=hb9d3cd8_0
  - liblzma-devel=5.6.4=hb9d3cd8_0
  - libnghttp2=1.58.0=h47da74e_1
  - libnsl=2.0.1=hd590300_0
  - libntlm=1.8=hb9d3cd8_0
  - libopenblas=0.3.25=pthreads_h413a1c8_0
  - libpng=1.6.43=h2797004_0
  - libpq=17.4=hdbd6064_0
  - libprotobuf=5.29.3=hc99497a_0
  - libsodium=1.0.18=h36c2ea0_1
  - libsqlite=3.46.0=hde9e2c9_0
  - libssh2=1.11.1=h251f7ec_0
  - libstdcxx=14.2.0=h8f9b012_2
  - libstdcxx-ng=14.2.0=h4852527_2
  - libtiff=4.3.0=h0fcbabc_4
  - libuuid=2.38.1=h0b41bf4_0
  - libwebp-base=1.5.0=h851e524_0
  - libxcb=1.17.0=h8a09558_0
  - libxkbcommon=1.8.0=hc4a0caf_0
  - libxml2=2.13.5=hfdd30dd_0
  - libzlib=1.2.13=h4ab18f5_6
  - line_profiler=3.4.0=py37h7cecad7_1
  - livereload=2.7.0=pyhd8ed1ab_0
  - llvm-openmp=20.1.1=h024ca30_1
  - llvmlite=0.39.1=py37h0761922_0
  - lz4-c=1.9.4=hcb278e6_0
  - lzo=2.10=hd590300_1001
  - markupsafe=2.1.1=py37h540881e_1
  - matplotlib=3.5.3=py37h89c1867_2
  - matplotlib-base=3.5.3=py37hf395dca_2
  - matplotlib-inline=0.1.7=pyhd8ed1ab_0
  - mistune=3.0.2=pyhd8ed1ab_0
  - mkl=2024.2.2=ha957f24_16
  - munkres=1.1.4=pyh9f0ad1d_0
  - mysql=8.4.0=h721767e_2
  - nbclassic=1.1.0=pyhd8ed1ab_0
  - nbclient=0.7.0=pyhd8ed1ab_0
  - nbconvert=7.6.0=pyhd8ed1ab_0
  - nbconvert-core=7.6.0=pyhd8ed1ab_0
  - nbconvert-pandoc=7.6.0=pyhd8ed1ab_0
  - nbformat=5.8.0=pyhd8ed1ab_0
  - nbsphinx=0.4.2=py_0
  - ncurses=6.5=h2d0b736_3
  - nest-asyncio=1.6.0=pyhd8ed1ab_0
  - nodeenv=1.9.1=pyhd8ed1ab_0
  - nomkl=3.0=0
  - notebook=6.5.7=pyha770c72_0
  - notebook-shim=0.2.4=pyhd8ed1ab_0
  - numba=0.56.3=py37hf081915_0
  - numexpr=2.8.3=py37h85a3170_100
  - numpoly=1.2.14=pyhd8ed1ab_0
  - numpy=1.21.6=py37h976b520_0
  - numpydoc=1.6.0=pyhd8ed1ab_0
  - olefile=0.47=pyhd8ed1ab_0
  - openblas=0.3.25=pthreads_h7a3da1a_0
  - openjpeg=2.5.0=h7d73246_0
  - openldap=2.6.5=h389dcaa_0
  - openssl=3.4.1=h7b32b05_0
  - packaging=23.2=pyhd8ed1ab_0
  - pandas=1.3.5=py37he8f5f7f_0
  - pandoc=3.6.4=ha770c72_0
  - pandocfilters=1.5.0=pyhd8ed1ab_0
  - parso=0.8.4=pyhd8ed1ab_0
  - patch=2.7.6=h7f98852_1002
  - patchelf=0.17.2=h58526e2_0
  - patsy=0.5.6=pyhd8ed1ab_0
  - pbr=6.1.0=pyhd8ed1ab_0
  - pcre2=10.43=hcad00b1_0
  - pdbpp=0.10.3=pyhd8ed1ab_0
  - pexpect=4.9.0=pyhd8ed1ab_0
  - pickleshare=0.7.5=py_1003
  - pillow=8.4.0=py37h0f21c89_0
  - pip=24.0=pyhd8ed1ab_0
  - pkginfo=1.10.0=pyhd8ed1ab_0
  - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
  - platformdirs=3.11.0=pyhd8ed1ab_0
  - pluggy=1.0.0=py37h89c1867_3
  - pre-commit=2.20.0=py37h89c1867_0
  - prometheus_client=0.17.1=pyhd8ed1ab_0
  - prompt-toolkit=3.0.48=pyha770c72_0
  - psutil=5.9.3=py37h540881e_0
  - pthread-stubs=0.4=hb9d3cd8_1002
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - py=1.11.0=pyh6c4a22f_0
  - py-lief=0.12.2=py37hd23a5d3_0
  - pycosat=0.6.4=py37h540881e_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pydata-sphinx-theme=0.13.3=pyhd8ed1ab_0
  - pygments=2.17.2=pyhd8ed1ab_0
  - pyopenssl=23.2.0=pyhd8ed1ab_1
  - pyparsing=3.1.4=pyhd8ed1ab_0
  - pyqt=5.15.4=py37hd23a5d3_0
  - pyqt5-sip=12.9.0=py37hd23a5d3_0
  - pyrepl=0.9.0=py37h540881e_5
  - pyrsistent=0.18.1=py37h540881e_1
  - pysocks=1.7.1=py37h89c1867_5
  - pytest=7.4.4=pyhd8ed1ab_0
  - pytest-cov=4.1.0=pyhd8ed1ab_0
  - pytest-forked=1.6.0=pyhd8ed1ab_0
  - pytest-xdist=1.29.0=py_0
  - python=3.7.12=hf930737_100_cpython
  - python-dateutil=2.9.0=pyhd8ed1ab_0
  - python-fastjsonschema=2.20.0=pyhd8ed1ab_0
  - python-json-logger=2.0.7=pyhd8ed1ab_0
  - python-levenshtein=0.20.7=pyhd8ed1ab_0
  - python-libarchive-c=4.0=py37h89c1867_1
  - python_abi=3.7=4_cp37m
  - pytz=2024.2=pyhd8ed1ab_0
  - pyyaml=6.0=py37h540881e_4
  - pyzmq=24.0.1=py37h0c0c2a8_0
  - qt-main=5.15.2=hb6262e9_12
  - rapidfuzz=2.12.0=py37hd23a5d3_0
  - readline=8.2=h8c095d6_2
  - requests=2.32.2=pyhd8ed1ab_0
  - requests-toolbelt=1.0.0=pyhd8ed1ab_0
  - restructuredtext_lint=1.4.0=pyhd8ed1ab_0
  - rfc3339-validator=0.1.4=pyhd8ed1ab_0
  - rfc3986-validator=0.1.1=pyh9f0ad1d_0
  - ripgrep=14.1.1=h8fae777_0
  - ruamel.yaml=0.17.21=py37h540881e_1
  - ruamel.yaml.clib=0.2.6=py37h540881e_1
  - ruamel_yaml=0.15.80=py37h540881e_1007
  - scikit-learn=1.0.2=py37hf9e9bfc_0
  - scipy=1.7.3=py37hf2a6cf1_0
  - seaborn=0.12.2=hd8ed1ab_0
  - seaborn-base=0.12.2=pyhd8ed1ab_0
  - send2trash=1.8.3=pyh0d859eb_0
  - setuptools=59.8.0=py37h89c1867_1
  - sip=6.5.1=py37hcd2ae1e_2
  - six=1.16.0=pyh6c4a22f_0
  - snakeviz=2.2.2=pyhd8ed1ab_0
  - sniffio=1.3.1=pyhd8ed1ab_0
  - snowballstemmer=2.2.0=pyhd8ed1ab_0
  - soupsieve=2.3.2.post1=pyhd8ed1ab_0
  - sphinx=5.3.0=pyhd8ed1ab_0
  - sphinx-autobuild=2021.3.14=pyhd8ed1ab_0
  - sphinxcontrib-applehelp=1.0.4=pyhd8ed1ab_0
  - sphinxcontrib-devhelp=1.0.2=py_0
  - sphinxcontrib-htmlhelp=2.0.1=pyhd8ed1ab_0
  - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
  - sphinxcontrib-qthelp=1.0.3=py_0
  - sphinxcontrib-serializinghtml=1.1.5=pyhd8ed1ab_2
  - sqlalchemy=1.4.42=py37h540881e_0
  - sqlite=3.46.0=h6d4b2fc_0
  - statsmodels=0.13.2=py37hda87dfa_0
  - stevedore=3.5.0=py37h89c1867_3
  - tabulate=0.9.0=pyhd8ed1ab_1
  - tbb=2021.13.0=hceb3a55_1
  - terminado=0.17.1=pyh41d4057_0
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - tinycss2=1.4.0=pyhd8ed1ab_0
  - tk=8.6.13=noxft_h4845f30_101
  - toml=0.10.2=pyhd8ed1ab_0
  - tomli=2.0.2=pyhd8ed1ab_0
  - toolz=0.12.1=pyhd8ed1ab_0
  - tornado=6.2=py37h540881e_0
  - tox=3.27.1=pyhd8ed1ab_0
  - tox-conda=0.10.2=pyhd8ed1ab_0
  - tqdm=4.67.1=pyhd8ed1ab_0
  - traitlets=5.9.0=pyhd8ed1ab_0
  - typing-extensions=4.7.1=hd8ed1ab_0
  - typing_extensions=4.7.1=pyha770c72_0
  - ukkonen=1.0.1=py37h7cecad7_2
  - unicodedata2=14.0.0=py37h540881e_1
  - uri-template=1.3.0=pyhd8ed1ab_0
  - urllib3=1.26.19=pyhd8ed1ab_0
  - virtualenv=20.21.1=pyhd8ed1ab_0
  - wcwidth=0.2.10=pyhd8ed1ab_0
  - webcolors=24.8.0=pyhd8ed1ab_0
  - webencodings=0.5.1=pyhd8ed1ab_2
  - websocket-client=1.6.1=pyhd8ed1ab_0
  - wheel=0.42.0=pyhd8ed1ab_0
  - wmctrl=0.5=pyh707e725_1
  - wmctrl-cli=1.07=h1357fb4_1
  - xkeyboard-config=2.43=hb9d3cd8_0
  - xorg-libice=1.1.2=hb9d3cd8_0
  - xorg-libsm=1.2.6=he73a12e_0
  - xorg-libx11=1.8.12=h4f16b4b_0
  - xorg-libxau=1.0.12=hb9d3cd8_0
  - xorg-libxdmcp=1.1.5=hb9d3cd8_0
  - xorg-libxext=1.3.6=hb9d3cd8_0
  - xorg-libxmu=1.2.1=hb9d3cd8_1
  - xorg-libxt=1.3.1=hb9d3cd8_0
  - xz=5.6.4=hbcc6ac9_0
  - xz-gpl-tools=5.6.4=hbcc6ac9_0
  - xz-tools=5.6.4=hb9d3cd8_0
  - y-py=0.5.4=py37hbd0741f_0
  - yaml=0.2.5=h7f98852_2
  - ypy-websocket=0.8.2=pyhd8ed1ab_0
  - zeromq=4.3.5=h59595ed_1
  - zipp=3.15.0=pyhd8ed1ab_0
  - zlib=1.2.13=h4ab18f5_6
  - zstandard=0.18.0=py37h540881e_0
  - zstd=1.5.6=ha6fb4c9_0
  - pip:
      - apprise==1.9.3
      - bump2version==1.0.1
      - markdown==3.4.4
      - oauthlib==3.2.2
      - pytest-randomly==3.12.0
      - requests-oauthlib==2.0.0
prefix: /opt/conda/envs/respy

respy/tests/test_method_of_simulated_moments.py::test_return_comparison_plot_data_for_msm respy/tests/test_method_of_simulated_moments.py::test_multiple_returns_msm respy/tests/test_method_of_simulated_moments.py::test_return_simulated_moments_for_msm
respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[74589947] respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[74589946] respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[74589948] respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[74589944] respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[74589945]
respy/tests/test_method_of_simulated_moments.py::test_msm_zero respy/tests/test_method_of_simulated_moments.py::test_msm_nonzero respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[kw_97_basic] respy/tests/test_method_of_simulated_moments.py::test_randomness_msm[kw_94_one]
docs/release_notes.rst docs/how_to_guides/msm.ipynb respy/method_of_simulated_moments.py
docs/release_notes.rst docs/how_to_guides/msm.ipynb respy/method_of_simulated_moments.py