#
# This file is autogenerated by pip-compile with python 3.10
# To update, run:
#
#    pip-compile --output-file=constraints.txt requirements.txt
#
anytree==2.8.0
    # via -r requirements.txt
appdirs==1.4.4
    # via
    #   -r requirements.txt
    #   mbed-os-tools
    #   virtualenv
appnope==0.1.2
    # via -r requirements.txt
attrs==21.2.0
    # via
    #   jsonschema
    #   pytest
backcall==0.2.0
    # via ipython
beautifulsoup4==4.11.1
    # via mbed-os-tools
bitstring==3.1.7
    # via -r requirements.esp32.txt
brotli==1.0.9
    # via flask-compress
cbor==1.0.0
    # via -r requirements.txt
cbor2==5.4.3
    # via -r requirements.txt
certifi==2021.5.30
    # via requests
cffi==1.15.1
    # via cryptography
chardet==4.0.0
    # via requests
click==8.1.3
    # via
    #   -r requirements.esp32.txt
    #   -r requirements.txt
    #   flask
    #   idf-component-manager
    #   mbed-tools
    #   pip-tools
colorama==0.4.4
    # via
    #   -r requirements.txt
    #   idf-component-manager
    #   mbed-os-tools
    #   west
coloredlogs==15.0.1
    # via -r requirements.txt
construct==2.10.54
    # via -r requirements.esp32.txt
contextlib2==21.6.0
    # via
    #   idf-component-manager
    #   schema
cryptography==3.4.7
    # via
    #   -c constraints.esp32.txt
    #   -r requirements.txt
cxxfilt==0.2.2
    # via -r requirements.txt
dbus-python==1.2.18 ; sys_platform == "linux"
    # via -r requirements.txt
decorator==5.0.9
    # via ipython
distlib==0.3.2
    # via virtualenv
docopt==0.6.2
    # via pykwalify
ecdsa==0.17.0
    # via -r requirements.esp32.txt
fastcore==1.3.26
    # via ghapi
fasteners==0.17.3
    # via mbed-os-tools
filelock==3.0.12
    # via virtualenv
flask==0.12.5
    # via
    #   flask-compress
    #   flask-socketio
    #   gdbgui
flask-compress==1.10.0
    # via gdbgui
flask-socketio==2.9.6
    # via gdbgui
future==0.18.2
    # via
    #   -r requirements.esp32.txt
    #   idf-component-manager
    #   mbed-os-tools
    #   mobly
gdbgui==0.13.2.0
    # via -r requirements.esp32.txt
gevent==1.5.0
    # via gdbgui
ghapi==0.1.19
    # via -r requirements.txt
gitdb==4.0.9
    # via gitpython
gitpython==3.1.27 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via
    #   -r requirements.mbed.txt
    #   mbed-tools
greenlet==1.1.0
    # via gevent
humanfriendly==9.2
    # via coloredlogs
idf-component-manager==1.1.4
    # via -r requirements.esp32.txt
idna==2.10
    # via requests
iniconfig==1.1.1
    # via pytest
intelhex==2.3.0
    # via
    #   -r requirements.txt
    #   mbed-os-tools
ipython==7.24.1
    # via -r requirements.txt
ipython-genutils==0.2.0
    # via traitlets
itsdangerous==2.0.1
    # via flask
jedi==0.18.0
    # via ipython
jinja2==3.0.1
    # via
    #   flask
    #   mbed-tools
jsonschema==4.4.0
    # via -r requirements.txt
junit-xml==1.9
    # via mbed-os-tools
kconfiglib==13.7.1
    # via -r requirements.esp32.txt
lark==1.1.2
    # via -r requirements.txt
lockfile==0.12.2
    # via
    #   -r requirements.txt
    #   mbed-os-tools
mako==1.2.1
    # via pdoc3
markdown==3.3.7
    # via pdoc3
markupsafe==2.0.1
    # via
    #   jinja2
    #   mako
matplotlib-inline==0.1.2
    # via ipython
mbed-ls==1.8.11 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via -r requirements.mbed.txt
mbed-os-tools==1.8.13
    # via mbed-ls
mbed-tools==7.55.1.dev1 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via -r requirements.mbed.txt
mobly==1.11.1
    # via -r requirements.txt
numpy==1.23.0
    # via pandas
packaging==20.9
    # via
    #   fastcore
    #   ghapi
    #   pytest
    #   west
pandas==1.4.3 ; platform_machine != "aarch64" and platform_machine != "arm64"
    # via -r requirements.txt
parso==0.8.2
    # via jedi
pdoc3==0.10.0 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via -r requirements.mbed.txt
pep517==0.10.0
    # via pip-tools
pexpect==4.8.0
    # via ipython
pgi==0.0.11.2 ; sys_platform == "linux"
    # via -r requirements.txt
pickleshare==0.7.5
    # via ipython
pip-tools==6.1.0
    # via -r requirements.txt
pluggy==1.0.0
    # via pytest
portpicker==1.4.0
    # via
    #   -r requirements.txt
    #   mobly
prettytable==2.5.0
    # via
    #   mbed-ls
    #   mbed-os-tools
prompt-toolkit==3.0.26
    # via ipython
protobuf==3.17.3
    # via -r requirements.txt
psutil==5.9.1
    # via
    #   -r requirements.txt
    #   mobly
    #   mbed-tools
ptyprocess==0.7.0
    # via pexpect
py==1.11.0
    # via pytest
pycparser==2.20
    # via cffi
pygdbmi==0.9.0.2
    # via
    #   -r requirements.esp32.txt
    #   gdbgui
pygments==2.9.0
    # via
    #   gdbgui
    #   ipython
pykwalify==1.8.0
    # via west
pyparsing==2.3.1
    # via
    #   -r requirements.esp32.txt
    #   packaging
pyrsistent==0.18.1
    # via jsonschema
pyserial==3.5
    # via
    #   -c constraints.esp32.txt
    #   mbed-os-tools
    #   mbed-tools
    #   mobly
pytest==6.2.5 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via
    #   -r requirements.mbed.txt
    #   pytest-json-report
    #   pytest-metadata
pytest-json-report==1.5.0
    # via -r requirements.openiotsdk.txt
pytest-metadata==2.0.2
    # via pytest-json-report
python-dateutil==2.8.1
    # via
    #   pandas
    #   pykwalify
python-dotenv==0.20.0 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via
    #   -r requirements.mbed.txt
    #   mbed-tools
python-engineio==3.14.2
    # via python-socketio
python-socketio==4.6.1
    # via
    #   -r requirements.esp32.txt
    #   flask-socketio
pytz==2021.1
    # via pandas
pyudev==0.23.2 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via
    #   -r requirements.mbed.txt
    #   mbed-tools
pyyaml==6.0
    # via
    #   idf-component-manager
    #   mobly
    #   west
reedsolo==1.5.4
    # via -r requirements.esp32.txt
requests==2.25.1
    # via
    #   -r requirements.txt
    #   idf-component-manager
    #   mbed-os-tools
    #   mbed-tools
    #   requests-toolbelt
requests-toolbelt==0.9.1
    # via idf-component-manager
ruamel-yaml==0.17.9
    # via pykwalify
schema==0.7.5
    # via idf-component-manager
six==1.16.0
    # via
    #   anytree
    #   ecdsa
    #   idf-component-manager
    #   junit-xml
    #   mbed-os-tools
    #   protobuf
    #   python-dateutil
    #   python-engineio
    #   python-socketio
    #   pyudev
    #   virtualenv
smmap==5.0.0
    # via gitdb
soupsieve==2.3.2.post1
    # via beautifulsoup4
stringcase==1.2.0
    # via -r requirements.txt
tabulate==0.8.10
    # via
    #   -r requirements.txt
    #   mbed-tools
timeout-decorator==0.5.0
    # via mobly
toml==0.10.2
    # via
    #   pep517
    #   pytest
tornado==6.1
    # via -r requirements.txt
tqdm==4.61.1
    # via
    #   idf-component-manager
    #   mbed-tools
traitlets==5.0.5
    # via
    #   ipython
    #   matplotlib-inline
typing-extensions==4.3.0 ; platform_machine != "aarch64" and sys_platform == "linux"
    # via
    #   -r requirements.mbed.txt
    #   mbed-tools
urllib3==1.26.5
    # via requests
virtualenv==20.4.7
    # via -r requirements.txt
watchdog==2.1.2
    # via -r requirements.txt
wcwidth==0.2.5
    # via
    #   prettytable
    #   prompt-toolkit
werkzeug==0.16.1
    # via flask
west==0.12.0
    # via -r requirements.txt
wheel==0.36.2
    # via -r requirements.txt

# The following packages are considered to be unsafe in a requirements file:
# pip
# setuptools
