sdsstools>=0.4
sdss-tree>=3.1.0
sdss-access>=2.0
marvin-brain>=0.3
marvin-sqlalchemy-boolean-search>=0.2
marvin-wtforms-alchemy>=0.18.0
astropy>=5.1
fuzzywuzzy>=0.15.0
python-Levenshtein>=0.12.0
raven<7.0,>=5.32.0
packaging<21.0,>=20.1
yamlordereddictloader>=0.2.2
numpy<2.0,>1.20
scipy>=0.18.1
photutils>=0.7
pandas>=1.0
matplotlib>=1.5.3
webargs<6.0,>=1.5.2
werkzeug>=2.0
numpyencoder>=0.3
dogpile.cache<1.1,>=0.6.2

[db]
pgpasslib>=1.1.0
psycopg2>=2.6.2
Flask-Login>=0.4.1
sqlalchemy<2.0,>=1.3

[dev]
Sphinx>=3.1.0
sphinx_bootstrap_theme>=0.4.12
sphinxcontrib-httpdomain>=1.5.0
sphinx_issues>=1.0.0
sphinx-rtd-theme>=0.4.2
nbsphinx>=0.3.5
photutils>=0.7
mpl-scatter-density>=0.4
jupyter_client>=5.2.3
ipykernel>5.0
ipython>=7.9.0
matplotlib>=3.1.1
flake8>=3.7.9
doc8>=0.8.0
pytest>=7.2.2
pytest-cov>=2.8.1
pytest-sugar<1.0.0
pytest-remotedata>=0.3.2
pytest-flask>=0.10.0
pytest-xdist>=1.18.1
pytest-timeout>=1.2.0
pytest-mock>=1.13.0
pytest-split>=0.8
isort>=4.3.21
coveralls>=3.0
codecov>=2.0.15
coverage[toml]>=5.0
ipdb>=0.12.3
invoke>=1.3.0
twine>=3.1.1
wheel>=0.33.6
psycopg2<3.0,>=2.6.2
selenium>=3.3.1
page_objects>=1.1.0
decorator>=4.1.2
pympler>=0.5
msgpack>=0.5.4
msgpack-numpy>=0.4.2
Flask-Testing>=0.6.1

[docs]
Sphinx>=3.1.0
sphinx_bootstrap_theme>=0.4.12
sphinxcontrib-httpdomain>=1.5.0
sphinx_issues>=1.0.0
sphinx-rtd-theme>=0.4.2
nbsphinx>=0.3.5
photutils>=0.7
mpl-scatter-density>=0.4
jupyter_client>=5.2.3
ipykernel>5.0

[extra]

[web]
blinker>=1.4
Flask>=2
werkzeug>=2
Flask-FeatureFlags>=0.6
Flask-Compress>=1.4
Flask-Limiter>=0.9.4
flask-profiler>=1.0.1
Flask-Caching>=1.4.0
Flask-Login>=0.4.1
Flask-Cors>=3.0.8
Flask-Session>=0.3.1
redis>=3.3
validators>=0.10.3
intervals>=0.8.0
