# This file was autogenerated by uv via the following command:
#    uv export --format requirements-txt --no-dev --no-hashes -o requirements.txt
-e .
beautifulsoup4==4.15.0
    # via yfinance
certifi==2026.7.22
    # via
    #   curl-cffi
    #   requests
cffi==2.1.0
    # via curl-cffi
charset-normalizer==3.4.9
    # via requests
colorama==0.4.6 ; sys_platform == 'win32'
    # via tqdm
contourpy==1.3.3
    # via matplotlib
curl-cffi==0.15.0
    # via yfinance
cvxopt==1.3.3
    # via universal-portfolios
cycler==0.12.1
    # via matplotlib
fonttools==4.63.0
    # via matplotlib
idna==3.18
    # via requests
joblib==1.5.3
    # via scikit-learn
kiwisolver==1.5.0
    # via matplotlib
lxml==6.1.1
    # via pandas-datareader
markdown-it-py==4.2.0
    # via rich
matplotlib==3.11.1
    # via
    #   seaborn
    #   universal-portfolios
mdurl==0.1.2
    # via markdown-it-py
multitasking==0.0.13
    # via yfinance
narwhals==2.24.0
    # via
    #   plotly
    #   scikit-learn
numpy==2.4.6 ; python_full_version < '3.12'
    # via
    #   contourpy
    #   matplotlib
    #   pandas
    #   patsy
    #   scikit-learn
    #   scipy
    #   seaborn
    #   statsmodels
    #   universal-portfolios
    #   yfinance
numpy==2.5.1 ; python_full_version >= '3.12'
    # via
    #   contourpy
    #   matplotlib
    #   pandas
    #   patsy
    #   scikit-learn
    #   scipy
    #   seaborn
    #   statsmodels
    #   universal-portfolios
    #   yfinance
packaging==26.2
    # via
    #   matplotlib
    #   plotly
    #   statsmodels
pandas==2.3.3
    # via
    #   pandas-datareader
    #   seaborn
    #   statsmodels
    #   universal-portfolios
    #   yfinance
pandas-datareader==0.11.1
    # via universal-portfolios
patsy==1.0.2
    # via statsmodels
peewee==4.2.6
    # via yfinance
pillow==12.3.0
    # via
    #   matplotlib
    #   universal-portfolios
platformdirs==4.11.0
    # via yfinance
plotly==6.9.0
    # via universal-portfolios
protobuf==7.35.1
    # via yfinance
pycparser==3.0 ; implementation_name != 'PyPy'
    # via cffi
pygments==2.20.0
    # via rich
pyparsing==3.3.2
    # via matplotlib
python-dateutil==2.9.0.post0
    # via
    #   matplotlib
    #   pandas
pytz==2026.3.post1
    # via
    #   pandas
    #   yfinance
requests==2.34.2
    # via
    #   pandas-datareader
    #   universal-portfolios
    #   yfinance
rich==15.0.0
    # via curl-cffi
scikit-learn==1.9.0
    # via universal-portfolios
scipy==1.17.1 ; python_full_version < '3.12'
    # via
    #   scikit-learn
    #   statsmodels
    #   universal-portfolios
scipy==1.18.0 ; python_full_version >= '3.12'
    # via
    #   scikit-learn
    #   statsmodels
    #   universal-portfolios
seaborn==0.13.2
    # via universal-portfolios
setuptools==83.0.0
    # via pandas-datareader
six==1.17.0
    # via python-dateutil
soupsieve==2.9.1
    # via beautifulsoup4
statsmodels==0.14.6
    # via universal-portfolios
threadpoolctl==3.6.0
    # via scikit-learn
tqdm==4.69.1
    # via universal-portfolios
typing-extensions==4.16.0
    # via beautifulsoup4
tzdata==2026.3
    # via pandas
urllib3==2.7.0
    # via
    #   requests
    #   universal-portfolios
websockets==16.1.1
    # via yfinance
yfinance==1.5.2
    # via universal-portfolios
