# -*- coding: utf-8 -*-
from setuptools import setup

packages = \
['xeofs', 'xeofs.models', 'xeofs.pandas', 'xeofs.utils', 'xeofs.xarray']

package_data = \
{'': ['*']}

install_requires = \
['numpy>=1.19.2,<2.0.0',
 'pandas>=1.4.1,<2.0.0',
 'pooch>=1.6.0,<2.0.0',
 'scikit-learn>=1.0.2,<2.0.0',
 'tqdm>=4.64.0,<5.0.0',
 'xarray>=0.21.1,<0.22.0']

setup_kwargs = {
    'name': 'xeofs',
    'version': '0.7.0',
    'description': 'Collection of EOF analysis and related techniques for climate science',
    'long_description': '.. image:: examples/1eof/rotated_eof.jpg\n  :align: center\n  :width: 800\n  :alt: Comparison of standard, Varimax-rotated and Proxmax-rotated EOF analysis for temperature field over North America.\n\nExample_ showing sea surface temperature decomposed via EOF analysis, Varimax rotation and Promax rotation.\n\n.. _Example: https://xeofs.readthedocs.io/en/stable/auto_examples/1eof/plot_rotated_eof.html#sphx-glr-auto-examples-1eof-plot-rotated-eof-py\n\n==================================================\nxeofs: Multi-dimensional EOF analysis and variants\n==================================================\n\n|badge_build_status| |badge_docs_status| |badge_version_pypi| |badge_conda_version| |badge_downloads| |badge_coverage| |badge_license| |badge_zenodo|\n\n.. |badge_version_pypi| image:: https://img.shields.io/pypi/v/xeofs\n   :alt: PyPI\n.. |badge_build_status| image:: https://img.shields.io/github/workflow/status/nicrie/xeofs/CI\n   :alt: GitHub Workflow Status (event)\n.. |badge_docs_status| image:: https://readthedocs.org/projects/xeofs/badge/?version=latest\n   :target: https://xeofs.readthedocs.io/en/latest/?badge=latest\n   :alt: Documentation Status\n.. |badge_downloads_pypi| image:: https://img.shields.io/pypi/dm/xeofs\n    :alt: PyPI - Downloads\n.. |badge_coverage| image:: https://codecov.io/gh/nicrie/xeofs/branch/main/graph/badge.svg?token=8040ZDH6U7\n    :target: https://codecov.io/gh/nicrie/xeofs\n.. |badge_zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.6323012.svg\n   :target: https://doi.org/10.5281/zenodo.6323012\n   :alt: DOI - Zenodo\n.. |badge_license| image:: https://img.shields.io/pypi/l/xeofs\n  :alt: License\n.. |badge_conda_version| image:: https://img.shields.io/conda/vn/conda-forge/xeofs\n   :alt: Conda (channel only)\n.. |badge_downloads_conda| image:: https://img.shields.io/conda/dn/conda-forge/xeofs\n   :alt: Conda downloads\n.. |badge_downloads| image:: https://static.pepy.tech/personalized-badge/xeofs?period=total&units=international_system&left_color=grey&right_color=orange&left_text=Downloads\n   :target: https://pepy.tech/project/xeofs\n   :alt: Total downloads\n\nEmpirical orthogonal function (EOF) analysis, more commonly known as\nprincipal component analysis (PCA), is one of the most popular methods\nfor dimension reduction and structure identification in Earth system sciences.\nDue to this popularity, a number of different EOF variants have been developed\nover the last few years, either to mitigate some pitfalls of ordinary EOF\nanalysis (e.g. orthogonality, interpretability, linearity) or to broaden its\nscope (e.g. multivariate variants).\n\nCurrently, there are several implementations of EOF analysis on GitHub that\nfacilitate the acceptance and application of this method by the broader\nscientific community. Each of these implementations has its own strengths,\nwhich need to be highlighted (please `let me know`_, if I forgot any):\n\n\nAvailable Models\n----------------\n\n=====================  ==========  ==========  ==========  ==========  ==========  ==========\nPackage                 **xeofs**   eofs_       pyEOF_      xeof_       xMCA_       xmca2_\n=====================  ==========  ==========  ==========  ==========  ==========  ==========\nEOF analysis           ✅           ✅           ✅           ✅           ✅            ✅\nRotated EOF analysis   ✅           ❌           ✅           ❌           ❌            ✅\nComplex EOF analysis   ❌           ❌           ❌           ❌           ❌            ✅\n`ROCK-PCA`_            ✅           ❌           ❌           ❌           ❌            ❌\nMultivariate EOF       ✅           ✅           ❌           ❌           ❌            ❌\nMCA                    ✅           ❌           ❌           ❌           ✅            ✅\nRotated MCA            ✅           ❌           ❌           ❌           ❌            ✅\nComplex MCA            ❌           ❌           ❌           ❌           ❌            ✅\nMultivariate MCA       ✅           ❌           ❌           ❌           ❌            ❌\n=====================  ==========  ==========  ==========  ==========  ==========  ==========\n\n.. _ROCK-PCA: https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8989964&casa_token=3zKG0dtp-ewAAAAA:FM1CrVISSSqhWEAwPGpQqCgDYccfLG4N-67xNNDzUBQmMvtIOHuC7T6X-TVQgbDg3aDOpKBksg&tag=1\n\n\nAdditional features\n----------------------\n\n=====================  ==========  ==========  ==========  ==========  ==========  ==========\nPackage                 **xeofs**  eofs_       pyEOF_      xeof_       xMCA_       xmca2_\n=====================  ==========  ==========  ==========  ==========  ==========  ==========\n``numpy`` interface    ✅           ✅           ❌           ❌           ❌           ✅\n``pandas`` interface   ✅           ❌           ❌           ❌           ❌           ❌\n``xarray`` interface   ✅           ?           ✅           ✅           ✅           ✅\nFast algorithm         ✅           ❌           ✅           ❌           ❌           ❌\nDask support           ❌           ✅           ❌           ✅           ❌           ❌\nMulti-dimensional      ✅           ❌           ❌           ❌           ❌           ❌\nSignificance analysis  ✅           ❌           ❌           ❌           ❌           ❌\n=====================  ==========  ==========  ==========  ==========  ==========  ==========\n\n\n.. _eofs: https://github.com/ajdawson/eofs\n.. _xeof: https://github.com/dougiesquire/xeof\n.. _xMCA: https://github.com/Yefee/xMCA\n.. _pyEOF: https://github.com/zzheng93/pyEOF\n.. _xmca2: https://github.com/nicrie/xmca\n\n.. _let me know: niclasrieger@gmail.com\n\n\nWhy ``xeofs``?\n----------------------\n\nThe goal of ``xeofs`` is to merge these different implementations and to simplify the integration of other existing and future variants of EOF analysis thanks to its modular code structure.\nThe official name is deliberately chosen to be similar to the other implementations to make it clear that ``xeofs`` is nothing revolutionary new in itself. The point is not to distinguish this implementation from the others, but rather to unify (+ extend) already existing implementations.\n\nThis project is intended to be a collaborative project of the scientific community and the contribution of EOF variants in the form of pull requests is explicitly encouraged.\nIf you are interested, just `contact me`_ or open an `Issue`_.\n\n.. _contact me: niclasrieger@gmail.com\n.. _Issue: https://github.com/nicrie/xeofs/issues\n\n\n\nInstallation\n----------------------\n\nIf you are using ``conda``, it is recommend to install via:\n\n.. code-block:: ini\n\n  conda install -c conda-forge xeofs\n\nAlternatively, you can install the package through ``pip``:\n\n.. code-block:: ini\n\n  pip install xeofs\n\n\nHow to use it?\n----------------------\nDocumentation_ is work in progress. Meanwhile check out some examples_ to get started:\n\n+ EOF analysis (S-mode_)\n+ EOF analysis (T-mode_)\n+ Rotated_ EOF analysis (Varimax, Promax)\n+ Weighted_ EOF analysis\n+ Multivariate_ EOF analysis\n+ Significance analysis via bootstrapping\n+ Maximum Covariance Analysis\n\n.. _T-mode: https://xeofs.readthedocs.io/en/latest/auto_examples/1eof/plot_eof-tmode.html#sphx-glr-auto-examples-1eof-plot-eof-tmode-py\n.. _S-mode: https://xeofs.readthedocs.io/en/latest/auto_examples/1eof/plot_eof-smode.html#sphx-glr-auto-examples-1eof-plot-eof-smode-py\n.. _Weighted: https://xeofs.readthedocs.io/en/latest/auto_examples/1eof/plot_weighted_eof.html#sphx-glr-auto-examples-1eof-plot-weighted-eof-py\n.. _Rotated: https://xeofs.readthedocs.io/en/latest/auto_examples/1eof/plot_rotated_eof.html#sphx-glr-auto-examples-1eof-plot-rotated-eof-py\n.. _Multivariate: https://xeofs.readthedocs.io/en/latest/auto_examples/1eof/plot_multivariate-eof-analysis.html#sphx-glr-auto-examples-1eof-plot-multivariate-eof-analysis-py\n.. _Documentation: https://xeofs.readthedocs.io/en/latest/\n.. _examples: https://xeofs.readthedocs.io/en/latest/auto_examples/index.html\n\n\n\nCredits\n----------------------\n\n- to Andrew Dawson_ for the first and fundamental Python package for EOF analysis\n- to Yefee_ from which I took some inspiration to implement MCA\n- to James Chapman_ who created a great Python package for Canonical Correlation Analysis\n- to Diego Bueso_ for his open-source ROCK-PCA implementation in Matlab\n- to yngvem_ for how to organize the project folder structure\n- to all the developers of NumPy_, pandas_ \\& xarray_ for their invaluable contributions to science\n\n\n.. _NumPy: https://www.numpy.org\n.. _pandas: https://pandas.pydata.org\n.. _xarray: https://xarray.pydata.org\n.. _yngvem: https://github.com/yngvem/python-project-structure\n.. _pooch: https://github.com/fatiando/pooch\n.. _Chapman: https://github.com/jameschapman19/cca_zoo\n.. _Bueso: https://github.com/DiegoBueso/ROCK-PCA\n.. _Dawson: https://github.com/ajdawson/eofs\n.. _Yefee: https://github.com/Yefee/xMCA\n\n\nHow to cite?\n----------------------\nPlease make sure that when using ``xeofs`` you always cite the **original source** of the method used. Additionally, if you find ``xeofs`` useful for your research, you may cite it as follows::\n\n   @software{rieger_xeofs_2022,\n     title = {xeofs: Multi-dimensional {EOF} analysis and variants in xarray},\n     url = {https://github.com/nicrie/xeofs}\n     version = {0.6.0},\n     author = {Rieger, Niclas},\n     date = {2022},\n     doi = {10.5281/zenodo.6323011}\n   }\n',
    'author': 'Niclas Rieger',
    'author_email': 'niclasrieger@gmail.com',
    'maintainer': None,
    'maintainer_email': None,
    'url': 'https://github.com/nicrie/xeofs',
    'packages': packages,
    'package_data': package_data,
    'install_requires': install_requires,
    'python_requires': '>=3.8,<4.0',
}


setup(**setup_kwargs)
