diff --git a/.gitignore b/.gitignore index b1317f0..4122350 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,9 @@ __pycache__ # environments .pyenv -.env \ No newline at end of file +.env + +# data +src/load_data/saved_data/ +src/fetch_articles/saved_data/downloaded_pmcids.json +src/fetch_articles/saved_data/articles/ \ No newline at end of file diff --git a/README.MD b/README.MD index 1787f4d..c3bc5c9 100644 --- a/README.MD +++ b/README.MD @@ -10,4 +10,15 @@ ## Description -This repository contains Python scripts for running and building a Pharmacogenomic Agentic system to annotate and label genetic variants based on their phenotypical associations from journal articles. \ No newline at end of file +This repository contains Python scripts for running and building a Pharmacogenomic Agentic system to annotate and label genetic variants based on their phenotypical associations from journal articles. + + +## Progress Tracker +| Task | Status | +| --- | --- | +| Download the zip of variants from pharmgkb | ✅ | +| Get a PMID list from the variants tsv (column PMID) | ✅ | +| Convert the PMID to PMCID | ✅ | +| Update to use non-official pmid to pmcid | | +| Fetch the content from the PMCID | | +| Create pairing of annotations to article | | \ No newline at end of file diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..a9aa5a1 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,1782 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.9.0-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/biopython-1.85-py313h90d716c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-25.1.0-py313h8f79df9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.2-py313h0ebd0e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.14-py313h928ef07_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.57.0-py313ha9b7d5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh57ce528_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jiter-0.9.0-py313hdde674f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.7-py313hf9c7212_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-hd64df32_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.4-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-h5773f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.0-h286801f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.13.3-h1d14073_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.47-h3783ad8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.49.1-h3f77e49_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.3-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/loguru-0.7.2-py313h8f79df9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.1-py313haaf02c0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.13.0-h02a13b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.5-py313h41a2e72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/openai-1.76.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py313h668b085_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py313hb37fac4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/playwright-1.52.0-h3339cab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.51-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py313h90d716c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.1-py313hb5fa170_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.3-h81fe080_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.1.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.4.0-py313he6960b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.15.2-py313h9a24e0a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.4-py313h93df234_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py313h90d716c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py313h90d716c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + md5: 2934f256a8acfe48f6ebb4fce6cde29c + depends: + - python >=3.9 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + size: 18074 + timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.9.0-pyh29332c3_0.conda + sha256: b28e0f78bb0c7962630001e63af25a89224ff504e135a02e50d4d80b6155d386 + md5: 9749a2c77a7c40d432ea0927662d7e52 + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.5 + - python + constrains: + - trio >=0.26.1 + - uvloop >=0.21 + license: MIT + license_family: MIT + size: 126346 + timestamp: 1742243108743 +- conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + sha256: 8f032b140ea4159806e4969a68b4a3c0a7cab1ad936eb958a2b5ffe5335e19bf + md5: 54898d0f524c9dee622d44bbb081a8ab + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + size: 10076 + timestamp: 1733332433806 +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593 + md5: 8f587de4bcf981e26228f268df374a9b + depends: + - python >=3.9 + constrains: + - astroid >=2,<4 + license: Apache-2.0 + license_family: Apache + size: 28206 + timestamp: 1733250564754 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/biopython-1.85-py313h90d716c_1.conda + sha256: d403f32ee3211ce079985ab4b6446fbd44c315ca310985b6407fc7563db1c3fb + md5: 97a048b1d8ddc97ebe4d0446cb00bc48 + depends: + - __osx >=11.0 + - numpy + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: LicenseRef-Biopython + size: 3482482 + timestamp: 1737241952569 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-25.1.0-py313h8f79df9_0.conda + sha256: ef2f742f6abefc32506038a4c64bf0c086c8e13234c1fe80c8675c7f92589cc2 + md5: 698e6c77b39a4f3d82c8e2e7d82b81c8 + depends: + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9 + - platformdirs >=2 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 400095 + timestamp: 1738616517582 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hd74edd7_2.conda + sha256: a086f36ff68d6e30da625e910547f6211385246fb2474b144ac8c47c32254576 + md5: 215e3dc8f2f837906d066e7f01aa77c0 + depends: + - __osx >=11.0 + - brotli-bin 1.1.0 hd74edd7_2 + - libbrotlidec 1.1.0 hd74edd7_2 + - libbrotlienc 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 19588 + timestamp: 1725268044856 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hd74edd7_2.conda + sha256: 28f1af63b49fddf58084fb94e5512ad46e9c453eb4be1d97449c67059e5b0680 + md5: b8512db2145dc3ae8d86cdc21a8d421e + depends: + - __osx >=11.0 + - libbrotlidec 1.1.0 hd74edd7_2 + - libbrotlienc 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 16772 + timestamp: 1725268026061 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda + sha256: b0a66572f44570ee7cc960e223ca8600d26bb20cfb76f16b95adf13ec4ee3362 + md5: f3bee63c7b5d041d841aff05785c28b7 + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 339067 + timestamp: 1725268603536 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.4.26-hbd8a1cb_0.conda + sha256: 2a70ed95ace8a3f8a29e6cd1476a943df294a7111dfb3e152e3478c4c889b7ac + md5: 95db94f75ba080a22eb623590993167b + depends: + - __unix + license: ISC + size: 152283 + timestamp: 1745653616541 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.1.31-pyhd8ed1ab_0.conda + sha256: 42a78446da06a2568cb13e69be3355169fbd0ea424b00fc80b7d840f5baaacf3 + md5: c207fa5ac7ea99b149344385a9c0880d + depends: + - python >=3.9 + license: ISC + size: 162721 + timestamp: 1739515973129 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda + sha256: 50650dfa70ccf12b9c4a117d7ef0b41895815bb7328d830d667a6ba3525b60e8 + md5: 6d24d5587a8615db33c961a4ca0a8034 + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 282115 + timestamp: 1725560759157 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b + md5: e83a31202d1c0a000fce3e9cf3825875 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 47438 + timestamp: 1735929811779 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab + md5: f22f4d4970e09d68a10b922cbb0408d3 + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 84705 + timestamp: 1734858922844 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda + sha256: 7e87ef7c91574d9fac19faedaaee328a70f718c9b4ddadfdc0ba9ac021bd64af + md5: 74673132601ec2b7fc592755605f4c1b + depends: + - python >=3.9 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 12103 + timestamp: 1733503053903 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/contourpy-1.3.2-py313h0ebd0e5_0.conda + sha256: 77f98527cc01d0560f5b49115d8f7322acf67107e746f7d233e9af189ae0444f + md5: e8839c4b3d19a8137e2ab480765e874b + depends: + - __osx >=11.0 + - libcxx >=18 + - numpy >=1.23 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 247420 + timestamp: 1744743362236 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c + md5: 44600c4667a319d67dbe0681fc0bc833 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 13399 + timestamp: 1733332563512 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.14-py313h928ef07_0.conda + sha256: e1fef24f7d220dd77522f06598d2c8c5b6ca68123f06515436c57a8777871481 + md5: 6521542d1c40d124657586810f220571 + depends: + - __osx >=11.0 + - libcxx >=18 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 2534826 + timestamp: 1744321649930 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 + md5: 9ce473d1d1be1cc3810856a48b3fab32 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + size: 14129 + timestamp: 1740385067843 +- conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda + sha256: 5603c7d0321963bb9b4030eadabc3fd7ca6103a38475b4e0ed13ed6d97c86f4e + md5: 0a2014fd9860f8b1eaa0b1f3d3771a08 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 41773 + timestamp: 1734729953882 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + md5: a16662747cdeb9abbac74d0057cc976e + depends: + - python >=3.9 + license: MIT and PSF-2.0 + size: 20486 + timestamp: 1733208916977 +- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.0-pyhd8ed1ab_0.conda + sha256: 7510dd93b9848c6257c43fdf9ad22adf62e7aa6da5f12a6a757aed83bcfedf05 + md5: 81d30c08f9a3e556e8ca9e124b044d14 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 29652 + timestamp: 1745502200340 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.57.0-py313ha9b7d5b_0.conda + sha256: 4cf84b94c810e3802ae27e40f7e7166ff8ff428507e9f44a245609e654692a4c + md5: 789f1322ec25f3ebc370e0d18bc12668 + depends: + - __osx >=11.0 + - brotli + - munkres + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 2802226 + timestamp: 1743732535385 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.13.3-hce30654_1.conda + sha256: 6b63c72ea51a41d41964841404564c0729fdddd3e952e2715839fd759b7cfdfc + md5: e684de4644067f1956a580097502bf03 + depends: + - libfreetype 2.13.3 hce30654_1 + - libfreetype6 2.13.3 h1d14073_1 + license: GPL-2.0-only OR FTL + size: 172220 + timestamp: 1745370149658 +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda + sha256: f64b68148c478c3bfc8f8d519541de7d2616bf59d44485a5271041d40c061887 + md5: 4b69232755285701bc86a5afe4d9933a + depends: + - python >=3.9 + - typing_extensions + license: MIT + license_family: MIT + size: 37697 + timestamp: 1745526482242 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.2.0-pyhd8ed1ab_0.conda + sha256: 0aa1cdc67a9fe75ea95b5644b734a756200d6ec9d0dff66530aec3d1c1e9df75 + md5: b4754fb1bdcb70c8fd54f918301582c6 + depends: + - hpack >=4.1,<5 + - hyperframe >=6.1,<7 + - python >=3.9 + license: MIT + license_family: MIT + size: 53888 + timestamp: 1738578623567 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 30731 + timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b + md5: 4f14640d58e2cc0aa0819d9d8ba125bb + depends: + - python >=3.9 + - h11 >=0.16 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=4.0,<5.0 + - certifi + - python + license: BSD-3-Clause + license_family: BSD + size: 49483 + timestamp: 1745602916758 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 63082 + timestamp: 1733663449209 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 17397 + timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 + md5: 39a4f67be3286c86d696df570b1201b7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 49765 + timestamp: 1733211921194 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.6.1-pyha770c72_0.conda + sha256: 598951ebdb23e25e4cec4bbff0ae369cec65ead80b50bc08b441d8e54de5cf03 + md5: f4b39bf00c69f56ac01e020ebfac066c + depends: + - python >=3.9 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 29141 + timestamp: 1737420302391 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh57ce528_0.conda + sha256: 072534d4d379225b2c3a4e38bc7730b65ae171ac7f0c2d401141043336e97980 + md5: 9eb15d654daa0ef5a98802f586bb4ffc + depends: + - __osx + - appnope + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - matplotlib-inline >=0.1 + - nest-asyncio + - packaging + - psutil + - python >=3.8 + - pyzmq >=24 + - tornado >=6.1 + - traitlets >=5.4.0 + license: BSD-3-Clause + license_family: BSD + size: 119568 + timestamp: 1719845667420 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.2.0-pyhfb0248b_0.conda + sha256: 539d003c379c22a71df1eb76cd4167a3e2d59f45e6dbc3416c45619f4c1381fb + md5: 7330ee1244209cfebfb23d828dd9aae5 + depends: + - __unix + - pexpect >4.3 + - decorator + - exceptiongroup + - ipython_pygments_lexers + - jedi >=0.16 + - matplotlib-inline + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.4.0 + - python >=3.11 + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 + - python + license: BSD-3-Clause + license_family: BSD + size: 620691 + timestamp: 1745672166398 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 + depends: + - pygments + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 13993 + timestamp: 1737123723464 +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.9 + license: Apache-2.0 AND MIT + size: 843646 + timestamp: 1733300981994 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/jiter-0.9.0-py313hdde674f_0.conda + sha256: 443359306f17dd94b6d78438cf864999bfbaabe3f6ba8374309dafd372e45571 + md5: dcdacfc1a200c74dd2f64266782c4130 + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 272313 + timestamp: 1741655618913 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + md5: 4ebae00eae9705b0c3d6d1018a81d047 + depends: + - importlib-metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.9 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 106342 + timestamp: 1733441040958 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: 0a2980dada0dd7fd0998f0342308b1b1 + depends: + - __unix + - platformdirs >=2.5 + - python >=3.8 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 57671 + timestamp: 1727163547058 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/kiwisolver-1.4.7-py313hf9c7212_0.conda + sha256: 14a53c1dbe9eef23cd65956753de8f6c5beb282808b7780d79af0a286ba3eee9 + md5: 830d9777f1c5f26ebb4286775f95658a + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 61424 + timestamp: 1725459552592 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 + depends: + - __osx >=11.0 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 1155530 + timestamp: 1719463474401 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.17-h7eeda09_0.conda + sha256: 310a62c2f074ebd5aa43b3cd4b00d46385ce680fa2132ecee255a200e2d2f15f + md5: 92a61fd30b19ebd5c1621a5bfe6d8b5f + depends: + - __osx >=11.0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + license: MIT + license_family: MIT + size: 212125 + timestamp: 1739161108467 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-hd64df32_1.conda + sha256: 12361697f8ffc9968907d1a7b5830e34c670e4a59b638117a2cdfed8f63a38f8 + md5: a74332d9b60b62905e3d30709df08bf1 + depends: + - __osx >=11.0 + - libcxx >=18 + license: Apache-2.0 + license_family: Apache + size: 188306 + timestamp: 1745264362794 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-31_h10e41b3_openblas.conda + build_number: 31 + sha256: 369586e7688b59b4f92c709b99d847d66d4d095425db327dd32ee5e6ab74697f + md5: 39b053da5e7035c6592102280aa7612a + depends: + - libopenblas >=0.3.29,<0.3.30.0a0 + - libopenblas >=0.3.29,<1.0a0 + constrains: + - liblapacke =3.9.0=31*_openblas + - libcblas =3.9.0=31*_openblas + - blas =2.131=openblas + - mkl <2025 + - liblapack =3.9.0=31*_openblas + license: BSD-3-Clause + license_family: BSD + size: 17123 + timestamp: 1740088119350 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + sha256: 839dacb741bdbb25e58f42088a2001b649f4f12195aeb700b5ddfca3267749e5 + md5: d0bf1dff146b799b319ea0434b93f779 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 68426 + timestamp: 1725267943211 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + sha256: 6c6862eb274f21a7c0b60e5345467a12e6dda8b9af4438c66d496a2c1a538264 + md5: 55e66e68ce55523a6811633dd1ac74e2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 28378 + timestamp: 1725267980316 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + sha256: eeb1eb0d58b9d02bc1b98dc0a058f104ab168eb2f7d1c7bfa0570a12cfcdb7b7 + md5: 4f3a434504c67b2c42565c0b85c1885c + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 279644 + timestamp: 1725268003553 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-31_hb3479ef_openblas.conda + build_number: 31 + sha256: f237486cc9118d09d0f3ff8820280de34365f98ee7b7dc5ab923b04c7cbf25a5 + md5: 7353c2bf0e90834cb70545671996d871 + depends: + - libblas 3.9.0 31_h10e41b3_openblas + constrains: + - liblapacke =3.9.0=31*_openblas + - blas =2.131=openblas + - liblapack =3.9.0=31*_openblas + license: BSD-3-Clause + license_family: BSD + size: 17032 + timestamp: 1740088127097 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.4-ha82da77_0.conda + sha256: 1837e2c65f8fc8cfd8b240cfe89406d0ce83112ac63f98c9fb3c9a15b4f2d4e1 + md5: 10c809af502fcdab799082d338170994 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 565811 + timestamp: 1745991653948 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-h5773f1b_0.conda + sha256: ebc06154e9a2085e8c9edf81f8f5196b73a1698e18ac6386c9b43fb426103327 + md5: 4dc332b504166d7f89e4b3b18ab5e6ea + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 54685 + timestamp: 1745260666631 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.0-h286801f_0.conda + sha256: ee550e44765a7bbcb2a0216c063dcd53ac914a7be5386dd0554bd06e6be61840 + md5: 6934bbb74380e045741eb8637641a65b + depends: + - __osx >=11.0 + constrains: + - expat 2.7.0.* + license: MIT + license_family: MIT + size: 65714 + timestamp: 1743431789879 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60 + md5: c215a60c2935b517dcda8cad4705734d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 39839 + timestamp: 1743434670405 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.13.3-hce30654_1.conda + sha256: 1f8c16703fe333cdc2639f7cdaf677ac2120843453222944a7c6c85ec342903c + md5: d06282e08e55b752627a707d58779b8f + depends: + - libfreetype6 >=2.13.3 + license: GPL-2.0-only OR FTL + size: 7813 + timestamp: 1745370144506 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.13.3-h1d14073_1.conda + sha256: c278df049b1a071841aa0aca140a338d087ea594e07dcf8a871d2cfe0e330e75 + md5: b163d446c55872ef60530231879908b9 + depends: + - __osx >=11.0 + - libpng >=1.6.47,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - freetype >=2.13.3 + license: GPL-2.0-only OR FTL + size: 333529 + timestamp: 1745370142848 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-14_2_0_h6c33f7e_103.conda + sha256: 8628746a8ecd311f1c0d14bb4f527c18686251538f7164982ccbe3b772de58b5 + md5: 044a210bc1d5b8367857755665157413 + depends: + - libgfortran5 14.2.0 h6c33f7e_103 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 156291 + timestamp: 1743863532821 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-14.2.0-h6c33f7e_103.conda + sha256: 8599453990bd3a449013f5fa3d72302f1c68f0680622d419c3f751ff49f01f17 + md5: 69806c1e957069f1d515830dcc9f6cbb + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 5.0.0 14_2_0_*_103 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 806566 + timestamp: 1743863491726 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.0-h5505292_0.conda + sha256: 78df2574fa6aa5b6f5fc367c03192f8ddf8e27dc23641468d54e031ff560b9d4 + md5: 01caa4fbcaf0e6b08b3aef1151e91745 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + size: 553624 + timestamp: 1745268405713 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-31_hc9a63f6_openblas.conda + build_number: 31 + sha256: fe55b9aaf82c6c0192c3d1fcc9b8e884f97492dda9a8de5dae29334b3135fab5 + md5: ff57a55a2cbce171ef5707fb463caf19 + depends: + - libblas 3.9.0 31_h10e41b3_openblas + constrains: + - liblapacke =3.9.0=31*_openblas + - libcblas =3.9.0=31*_openblas + - blas =2.131=openblas + license: BSD-3-Clause + license_family: BSD + size: 17033 + timestamp: 1740088134988 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_0.conda + sha256: 4291dde55ebe9868491dc29716b84ac3de21b8084cbd4d05c9eea79d206b8ab7 + md5: ba24e6f25225fea3d5b6912e2ac562f8 + depends: + - __osx >=11.0 + license: 0BSD + size: 92295 + timestamp: 1743771392206 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda + sha256: f7917de9117d3a5fe12a39e185c7ce424f8d5010a6f97b4333e8a1dcb2889d16 + md5: 7476305c35dd9acef48da8f754eedb40 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + size: 69263 + timestamp: 1723817629767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.29-openmp_hf332438_0.conda + sha256: 8989d9e01ec8c9b2d48dbb5efbe70b356fcd15990fb53b64fcb84798982c0343 + md5: 0cd1148c68f09027ee0b0f0179f77c30 + depends: + - __osx >=11.0 + - libgfortran 5.* + - libgfortran5 >=13.2.0 + - llvm-openmp >=18.1.8 + constrains: + - openblas >=0.3.29,<0.3.30.0a0 + license: BSD-3-Clause + license_family: BSD + size: 4168442 + timestamp: 1739825514918 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.47-h3783ad8_0.conda + sha256: dc93cc30f59b28e7812c6f14d2c2e590b509c38092cce7ababe6b23541b7ed8f + md5: 3550e05e3af94a3fa9cef2694417ccdf + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 259332 + timestamp: 1739953032676 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 + md5: a7ce36e284c5faaf93c220dfc39e3abd + depends: + - __osx >=11.0 + license: ISC + size: 164972 + timestamp: 1716828607917 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.49.1-h3f77e49_2.conda + sha256: 907a95f73623c343fc14785cbfefcb7a6b4f2bcf9294fcb295c121611c3a590d + md5: 3b1e330d775170ac46dff9a94c253bd0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 900188 + timestamp: 1742083865246 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_4.conda + sha256: 5d3f7a71b70f0d88470eda8e7b6afe3095d66708a70fb912e79d56fc30b35429 + md5: 717e02c4cca2a760438384d48b7cd1b9 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=18 + - libdeflate >=1.23,<1.24.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + size: 370898 + timestamp: 1745372834516 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 418890 + timestamp: 1737016751326 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a + md5: 569466afeb84f90d5bb88c11cc23d746 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.5.0 + license: BSD-3-Clause + license_family: BSD + size: 290013 + timestamp: 1734777593617 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 323658 + timestamp: 1727278733917 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-20.1.3-hdb05f8b_0.conda + sha256: daddebd6ebf2960bb3bae945230ed07b254f430642c739c00ebfb4a8c747a033 + md5: 9f2cc154dd184ff808c2c6afd21cb12c + depends: + - __osx >=11.0 + constrains: + - openmp 20.1.3|20.1.3.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 282301 + timestamp: 1744934108744 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/loguru-0.7.2-py313h8f79df9_2.conda + sha256: 0a8d95f516a041d8ee365f8c196ac1a017d80e5405a75be323cdffcfac7cf0fe + md5: d52009653b377e5f2b64d3bea2677822 + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 127794 + timestamp: 1725349988436 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.1-py313haaf02c0_0.conda + sha256: 0bb77afd6d7b2ce64ce57507cb19e1a88120cc94aed5d113b12121d562281bac + md5: e49b9e81d6d840d16910d2a08dd884bc + depends: + - __osx >=11.0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype >=2.12.1,<3.0a0 + - kiwisolver >=1.3.1 + - libcxx >=18 + - numpy >=1.21,<3 + - numpy >=1.23 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python-dateutil >=2.7 + - python_abi 3.13.* *_cp313 + - qhull >=2020.2,<2020.3.0a0 + license: PSF-2.0 + license_family: PSF + size: 8124099 + timestamp: 1740781310959 +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6 + md5: af6ab708897df59bd6e7283ceab1b56b + depends: + - python >=3.9 + - traitlets + license: BSD-3-Clause + license_family: BSD + size: 14467 + timestamp: 1733417051523 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 + md5: 2ba8498c1018c1e9c61eb99b973dfe19 + depends: + - python + license: Apache-2.0 + license_family: Apache + size: 12452 + timestamp: 1600387789153 +- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 + md5: e9c622e0d00fa24a6292279af3ab6d06 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 11766 + timestamp: 1745776666688 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 797030 + timestamp: 1738196177597 +- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 + md5: 598fd7d4d0de2455fb74f56063969a97 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + size: 11543 + timestamp: 1733325673691 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.13.0-h02a13b7_0.conda + sha256: d390651526630468e385a74474bb3f17849861182257c161bbca8fca7734d578 + md5: 93cd91b998422ebf2dace6c13c1842ce + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=18 + - libuv >=1.50.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 15490642 + timestamp: 1737401388520 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.5-py313h41a2e72_0.conda + sha256: ef86c22868df8ce165ea17932d11232f76d06524f6fd1e35f1c307413afd9e48 + md5: 40517bbc5a052593ba752750550819a4 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + size: 6608028 + timestamp: 1745119668840 +- conda: https://conda.anaconda.org/conda-forge/noarch/openai-1.76.2-pyhd8ed1ab_0.conda + sha256: 570be647b8d5e8561d12d199bda92999a652ae447f7155784ea4979340e2df56 + md5: 5ba89ea2c7285d5e38f130d429842ae1 + depends: + - anyio >=3.5.0,<5 + - distro >=1.7.0,<2 + - httpx >=0.23.0,<1 + - jiter >=0.4.0,<1 + - pydantic >=1.9.0,<3 + - python >=3.9 + - sniffio + - tqdm >4 + - typing-extensions >=4.11,<5 + - typing_extensions >=4.11,<5 + license: MIT + license_family: MIT + size: 272230 + timestamp: 1745968500831 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + sha256: 1d59bc72ca7faac06d349c1a280f5cfb8a57ee5896f1e24225a997189d7418c7 + md5: 4b71d78648dbcf68ce8bf22bb07ff838 + depends: + - __osx >=11.0 + - libcxx >=18 + - libpng >=1.6.44,<1.7.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + size: 319362 + timestamp: 1733816781741 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.0-h81ee809_0.conda + sha256: 53f825acb8d3e13bdad5c869f6dc7df931941450eea7f6473b955b0aaea1a399 + md5: 3d2936da7e240d24c656138e07fa2502 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 3067649 + timestamp: 1744132084304 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 + md5: 58335b26c38bf4a20f399384c33cbcf9 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + size: 62477 + timestamp: 1745345660407 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py313h668b085_3.conda + sha256: f15b39a3e38113e60eaec255c5588a81c637df1affb3c80176d3248f68bda90a + md5: d632aa5a481e9577865ea5af125f881c + depends: + - __osx >=11.0 + - libcxx >=18 + - numpy >=1.21,<3 + - numpy >=1.22.4 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.13.* *_cp313 + - pytz >=2020.1 + constrains: + - beautifulsoup4 >=4.11.2 + - gcsfs >=2022.11.0 + - odfpy >=1.4.1 + - numexpr >=2.8.4 + - pyarrow >=10.0.1 + - python-calamine >=0.1.7 + - numba >=0.56.4 + - xlrd >=2.0.1 + - qtpy >=2.3.0 + - pyxlsb >=1.0.10 + - pyqt5 >=5.15.9 + - s3fs >=2022.11.0 + - scipy >=1.10.0 + - pytables >=3.8.0 + - xarray >=2022.12.0 + - sqlalchemy >=2.0.0 + - html5lib >=1.1 + - pyreadstat >=1.2.0 + - bottleneck >=1.3.6 + - tabulate >=0.9.0 + - blosc >=1.21.3 + - matplotlib >=3.6.3 + - zstandard >=0.19.0 + - fastparquet >=2022.12.0 + - lxml >=4.9.2 + - tzdata >=2022.7 + - psycopg2 >=2.9.6 + - openpyxl >=3.1.0 + - xlsxwriter >=3.0.5 + - pandas-gbq >=0.19.0 + - fsspec >=2022.11.0 + license: BSD-3-Clause + license_family: BSD + size: 14408557 + timestamp: 1744431000416 +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc + md5: 5c092057b6badd30f75b06244ecd01c9 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 75295 + timestamp: 1733271352153 +- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee + md5: 617f15191456cc6a13db418a275435e5 + depends: + - python >=3.9 + license: MPL-2.0 + license_family: MOZILLA + size: 41075 + timestamp: 1733233471940 +- conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhd8ed1ab_1.conda + sha256: ab52916f056b435757d46d4ce0a93fd73af47df9c11fd72b74cc4b7e1caca563 + md5: ee23fabfd0a8c6b8d6f3729b47b2859d + depends: + - numpy >=1.4.0 + - python >=3.9 + license: BSD-2-Clause AND PSF-2.0 + license_family: BSD + size: 186594 + timestamp: 1733792482894 +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea + depends: + - ptyprocess >=0.5 + - python >=3.9 + license: ISC + size: 53561 + timestamp: 1733302019362 +- conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b + md5: 11a9d1d09a3615fc07c3faf79bc0b943 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 11748 + timestamp: 1733327448200 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py313hb37fac4_0.conda + sha256: 207bf61d21164ea8922a306734e602354b8b8e516460dc22c18add1e7594793b + md5: 50dbf6e817535229c820af0a8f4529b5 + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - tk >=8.6.13,<8.7.0a0 + license: HPND + size: 42025320 + timestamp: 1735929984606 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.7-pyh29332c3_0.conda + sha256: ae7d3e58224d53d6b59e1f5ac5809803bb1972f0ac4fb10cd9b8c87d4122d3e0 + md5: e57da6fe54bb3a5556cf36d199ff07d8 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + size: 23291 + timestamp: 1742485085457 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/playwright-1.52.0-h3339cab_0.conda + sha256: 6ce375b9068c6cd73c2610efb89b9a1960b1b757272764b72e67945ffd476af8 + md5: 0e3edba2319c96771acccdfb26150124 + depends: + - nodejs >=22.13.0,<23.0a0 + license: Apache-2.0 + license_family: APACHE + size: 1946422 + timestamp: 1745045559145 +- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.51-pyha770c72_0.conda + sha256: ebc1bb62ac612af6d40667da266ff723662394c0ca78935340a5b5c14831227b + md5: d17ae9db4dc594267181bd199bf9a551 + depends: + - python >=3.9 + - wcwidth + constrains: + - prompt_toolkit 3.0.51 + license: BSD-3-Clause + license_family: BSD + size: 271841 + timestamp: 1744724188108 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.0.0-py313h90d716c_0.conda + sha256: a3d8376cf24ee336f63d3e6639485b68c592cf5ed3e1501ac430081be055acf9 + md5: 21105780750e89c761d1c72dc5304930 + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 484139 + timestamp: 1740663381126 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 8381 + timestamp: 1726802424786 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + depends: + - python >=3.9 + license: ISC + size: 19457 + timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 16668 + timestamp: 1733569518868 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + md5: 12c566707c80111f9799308d9e265aef + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + size: 110100 + timestamp: 1733195786147 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.3-pyh3cfb1c2_0.conda + sha256: 89183785b09ebe9f9e65710057d7c41e9d21d4a9ad05e068850e18669655d5a8 + md5: 3c6f7f8ae9b9c177ad91ccc187912756 + depends: + - annotated-types >=0.6.0 + - pydantic-core 2.33.1 + - python >=3.9 + - typing-extensions >=4.6.1 + - typing-inspection >=0.4.0 + - typing_extensions >=4.12.2 + license: MIT + license_family: MIT + size: 306616 + timestamp: 1744192311966 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.33.1-py313hb5fa170_0.conda + sha256: 75b26de3944e6776c840bd57fc47dee97bb044f939f7be94ea83f4793565f836 + md5: 1eda9d26ca9989463540c1512a819706 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - __osx >=11.0 + - python 3.13.* *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 1734077 + timestamp: 1743607648527 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b + md5: 232fb4577b6687b2d503ef8e254270c9 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + size: 888600 + timestamp: 1736243563082 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhd8ed1ab_1.conda + sha256: b92afb79b52fcf395fd220b29e0dd3297610f2059afac45298d44e00fcbf23b6 + md5: 513d3c262ee49b54a8fec85c5bc99764 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 95988 + timestamp: 1743089832359 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 21085 + timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.3-h81fe080_101_cp313.conda + build_number: 101 + sha256: f96468ab1e6f27bda92157bfc7f272d1fbf2ba2f85697bdc5bb106bccba1befb + md5: b3240ae8c42a3230e0b7f831e1c72e9f + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.0,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.49.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + size: 12136505 + timestamp: 1744663807953 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 + md5: 5ba79d7c71f03c678c8ead841f347d6e + depends: + - python >=3.9 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + size: 222505 + timestamp: 1733215763718 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.1.0-pyh29332c3_1.conda + sha256: 7d927317003544049c97e7108e8ca5f2be5ff0ea954f5c84c8bbeb243b663fc8 + md5: 27d816c6981a8d50090537b761de80f4 + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + size: 25557 + timestamp: 1742948348635 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda + sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0 + md5: 88476ae6ebd24f39261e0854ac244f33 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 144160 + timestamp: 1742745254292 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-7_cp313.conda + build_number: 7 + sha256: 0595134584589064f56e67d3de1d8fcbb673a972946bce25fb593fb092fdcd97 + md5: e84b44e6300f1703cb25d29120c5b1d8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 6988 + timestamp: 1745258852285 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 + md5: bc8e3267d44011051f2eb14d22fb0960 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 189015 + timestamp: 1742920947249 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.4.0-py313he6960b1_0.conda + sha256: 0e0ee756e1fb46456ff398ef77dce595411043836bc47a92d30c9240c9fcef87 + md5: 7f355f62656985be979c4c0003723d0a + depends: + - __osx >=11.0 + - libcxx >=18 + - libsodium >=1.0.20,<1.0.21.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 369287 + timestamp: 1743831518822 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/qhull-2020.2-h420ef59_5.conda + sha256: 873ac689484262a51fd79bc6103c1a1bedbf524924d7f0088fb80703042805e4 + md5: 6483b1f59526e05d7d894e466b5b6924 + depends: + - __osx >=11.0 + - libcxx >=16 + license: LicenseRef-Qhull + size: 516376 + timestamp: 1720814307311 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34 + md5: 63ef3f6e6d6d5c589e64f11263dc5676 + depends: + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 252359 + timestamp: 1740379663071 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: a9b9368f3701a417eac9edbcae7cb737 + depends: + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - python >=3.9 + - urllib3 >=1.21.1,<3 + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + size: 58723 + timestamp: 1733217126197 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.15.2-py313h9a24e0a_0.conda + sha256: 2cce94fba335df6ea1c7ce5554ba8f0ef8ec0cf1a7e6918bfc2d8b2abf880794 + md5: 45e6244d4265a576a299c0a1d8b09ad9 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - libgfortran 5.* + - libgfortran5 >=13.2.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.5 + - numpy >=1.21,<3 + - numpy >=1.23.5 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 14548640 + timestamp: 1739792791585 +- conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda + noarch: python + sha256: ea29a69b14dd6be5cdeeaa551bf50d78cafeaf0351e271e358f9b820fcab4cb0 + md5: 62afb877ca2c2b4b6f9ecb37320085b6 + depends: + - seaborn-base 0.13.2 pyhd8ed1ab_3 + - statsmodels >=0.12 + license: BSD-3-Clause + license_family: BSD + size: 6876 + timestamp: 1733730113224 +- conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda + sha256: f209c9c18187570b85ec06283c72d64b8738f825b1b82178f194f4866877f8aa + md5: fd96da444e81f9e6fcaac38590f3dd42 + depends: + - matplotlib-base >=3.4,!=3.6.1 + - numpy >=1.20,!=1.24.0 + - pandas >=1.2 + - python >=3.9 + - scipy >=1.7 + constrains: + - seaborn =0.13.2=*_3 + license: BSD-3-Clause + license_family: BSD + size: 227843 + timestamp: 1733730112409 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db + md5: a451d576819089b0d672f18768be0f65 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 16385 + timestamp: 1733381032766 +- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012 + md5: bf7a226e58dfb8346c70df36065d86c9 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 15019 + timestamp: 1733244175724 +- conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + md5: b1b505328da7a6b246787df4b5a49fbc + depends: + - asttokens + - executing + - pure_eval + - python >=3.9 + license: MIT + license_family: MIT + size: 26988 + timestamp: 1733569565672 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.4-py313h93df234_0.conda + sha256: bd04f71d376946f21729e5b920c5722138cb12e01098ce8a3ff67e6c7bdb880c + md5: 5cfb535304bfc73990e5d50184b63f0a + depends: + - __osx >=11.0 + - numpy <3,>=1.22.3 + - numpy >=1.21,<3 + - packaging >=21.3 + - pandas !=2.1.0,>=1.4 + - patsy >=0.5.6 + - python >=3.13.0rc2,<3.14.0a0 + - python >=3.13.0rc2,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - scipy !=1.9.2,>=1.8 + license: BSD-3-Clause + license_family: BSD + size: 11901433 + timestamp: 1727987142433 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py313h90d716c_0.conda + sha256: 33ef243265af82d7763c248fedd9196523210cc295b2caa512128202eda5e9e8 + md5: 6790d50f184874a9ea298be6bcbc7710 + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + size: 863363 + timestamp: 1732616174714 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 + md5: 9efbfdc37242619130ea42b1cc4ed861 + depends: + - colorama + - python >=3.9 + license: MPL-2.0 or MIT + size: 89498 + timestamp: 1735661472632 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 110051 + timestamp: 1733367480074 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.13.2-h0e9735f_0.conda + sha256: 4865fce0897d3cb0ffc8998219157a8325f6011c136e6fd740a9a6b169419296 + md5: 568ed1300869dca0ba09fb750cda5dbb + depends: + - typing_extensions ==4.13.2 pyh29332c3_0 + license: PSF-2.0 + license_family: PSF + size: 89900 + timestamp: 1744302253997 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.0-pyhd8ed1ab_0.conda + sha256: 172f971d70e1dbb978f6061d3f72be463d0f629155338603450d8ffe87cbf89d + md5: c5c76894b6b7bacc888ba25753bc8677 + depends: + - python >=3.9 + - typing_extensions >=4.12.0 + license: MIT + license_family: MIT + size: 18070 + timestamp: 1741438157162 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.13.2-pyh29332c3_0.conda + sha256: a8aaf351e6461de0d5d47e4911257e25eec2fa409d71f3b643bb2f748bde1c08 + md5: 83fc6ae00127671e301c9f44254c31b8 + depends: + - python >=3.9 + - python + license: PSF-2.0 + license_family: PSF + size: 52189 + timestamp: 1744302253997 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + size: 122968 + timestamp: 1742727099393 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.4.0-pyhd8ed1ab_0.conda + sha256: a25403b76f7f03ca1a906e1ef0f88521edded991b9897e7fed56a3e334b3db8c + md5: c1e349028e0052c4eea844e94f773065 + depends: + - brotli-python >=1.0.9 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.9 + - zstandard >=0.18.0 + license: MIT + license_family: MIT + size: 100791 + timestamp: 1744323705540 +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5 + md5: b68980f2495d096e71c7fd9d7ccf63e6 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 32581 + timestamp: 1733231433877 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + sha256: f33e6f013fc36ebc200f09ddead83468544cb5c353a3b50499b07b8c34e28a8d + md5: 50901e0764b7701d8ed7343496f4f301 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 13593 + timestamp: 1734229104321 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 18487 + timestamp: 1727795205022 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda + sha256: 9e585569fe2e7d3bea71972cd4b9f06b1a7ab8fa7c5139f92a31cbceecf25a8a + md5: f7e6b65943cb73bce0143737fded08f1 + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libcxx >=18 + - libsodium >=1.0.20,<1.0.21.0a0 + license: MPL-2.0 + license_family: MOZILLA + size: 281565 + timestamp: 1731585108039 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 0c3cc595284c5e8f0f9900a9b228a332 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 21809 + timestamp: 1732827613585 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + size: 77606 + timestamp: 1727963209370 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py313h90d716c_2.conda + sha256: 70ed0c931f9cfad3e3a75a1faf557c5fc5bf638675c6afa2fb8673e4f88fb2c5 + md5: 1f465c71f83bd92cfe9df941437dcd7c + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 536612 + timestamp: 1745870248616 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + sha256: 0d02046f57f7a1a3feae3e9d1aa2113788311f3cf37a3244c71e61a93177ba67 + md5: e6f69c7bcccdefa417f056fa593b40f0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 399979 + timestamp: 1742433432699 diff --git a/pixi.toml b/pixi.toml index 11d286a..e6d800e 100644 --- a/pixi.toml +++ b/pixi.toml @@ -12,5 +12,18 @@ platforms = ["osx-arm64"] version = "0.1.0" [tasks] +update-downloaded-pmcids = "python -c 'from src.fetch_articles.article_downloader import update_downloaded_pmcids; update_downloaded_pmcids()'" [dependencies] +seaborn = ">=0.13.2,<0.14" +tqdm = ">=4.67.1,<5" +requests = ">=2.32.3,<3" +biopython = ">=1.85,<2" +ipykernel = ">=6.29.5,<7" +pandas = ">=2.2.3,<3" +numpy = ">=2.2.5,<3" +openai = ">=1.76.2,<2" +playwright = ">=1.52.0,<2" +loguru = ">=0.7.2,<0.8" +python-dotenv = ">=1.1.0,<2" +black = ">=25.1.0,<26" diff --git a/src/fetch_articles/README.md b/src/fetch_articles/README.md new file mode 100644 index 0000000..eed6e26 --- /dev/null +++ b/src/fetch_articles/README.md @@ -0,0 +1,13 @@ +# PubMed Document Fetching +## Goal +Given a PMID, fetch the paper from PubMed. Ignore papers where there are paywall issues + +## Process Overview +1. Download the zip of variants from pharmgkb (handled in load_data module) +2. Get a PMID list from the variants tsv (column PMID) (handled in load_data module) +3. Convert the PMID to PMCID +4. Fetch the content from the PMCID + +## Saved Data +pmcid_mapping.json: Maps the PMID to the PMCID {"PMID": "PMCID" or Null, ..} +unique_pmcids.json: List of all the unique PMCIDs from pmcid_mapping.json (["PMCID1", "PMCID2", ...]) \ No newline at end of file diff --git a/src/fetch_articles/__init__.py b/src/fetch_articles/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/fetch_articles/article_downloader.py b/src/fetch_articles/article_downloader.py new file mode 100644 index 0000000..13c5cf1 --- /dev/null +++ b/src/fetch_articles/article_downloader.py @@ -0,0 +1,101 @@ +from loguru import logger +from src.fetch_articles.pmcid_converter import get_unique_pmcids +from Bio import Entrez +import os +import json +from tqdm import tqdm + + +def fetch_pmc_content(pmcid): + try: + handle = Entrez.efetch(db="pmc", id=pmcid, rettype="full", retmode="xml") + record = handle.read() + handle.close() + return record + except Exception as e: + print(f"An error occurred while fetching content for PMCID {pmcid}: {e}") + return None + + +def update_downloaded_pmcids() -> None: + """ + Update the downloaded_pmcids.json file with PMCIDs found in the saved_data/articles directory. + """ + base_dir = os.path.dirname(os.path.abspath(__file__)) + downloaded_pmcids_path = os.path.join( + base_dir, "saved_data", "downloaded_pmcids.json" + ) + # Check for all the filenames in the saved_data/articles directory + articles_dir = os.path.join(base_dir, "saved_data", "articles") + article_pmcids = [f.split(".")[0] for f in os.listdir(articles_dir)] + article_pmcids_mapping = {pmcid: f"{pmcid}.xml" for pmcid in article_pmcids} + + logger.info(f"Found {len(article_pmcids)} existing XML files in {articles_dir}") + # Add the new PMCIDs to the json file + if os.path.exists(downloaded_pmcids_path): + with open(downloaded_pmcids_path, "r") as f: + try: + downloaded_pmcids = json.load(f) + except json.JSONDecodeError: + logger.error( + f"Error loading {downloaded_pmcids_path}. Creating new json file." + ) + downloaded_pmcids = {} + else: + downloaded_pmcids = {} + downloaded_pmcids.update(article_pmcids_mapping) + with open(downloaded_pmcids_path, "w") as f: + json.dump(downloaded_pmcids, f) + logger.info( + f"Updated {downloaded_pmcids_path} with {len(article_pmcids)} new PMCIDs" + ) + + +def download_articles(pmcids: list[str]): + """ + Download articles from PubMed Central using PMCIDs. + Keeps track of the PMCIDs that have been downloaded and skips them. + Saves the downloaded articles to the saved_data/articles directory. + + Args: + pmcids (list[str]): List of PMCIDs to download. + """ + base_dir = os.path.dirname(os.path.abspath(__file__)) + saved_dir = os.path.join(base_dir, "saved_data", "articles") + os.makedirs(saved_dir, exist_ok=True) + + # Load the downloaded PMCIDs from the json file + downloaded_pmcids_path = os.path.join( + base_dir, "saved_data", "downloaded_pmcids.json" + ) + if os.path.exists(downloaded_pmcids_path): + with open(downloaded_pmcids_path, "r") as f: + downloaded_pmcids = json.load(f) + else: + downloaded_pmcids = {} + + new_pmcids = [pmcid for pmcid in pmcids if pmcid not in downloaded_pmcids] + logger.warning(f"{len(downloaded_pmcids)} existing articles found") + logger.info(f"{len(new_pmcids)} new articles to download") + + # Download the articles + for pmcid in tqdm(new_pmcids): + record = fetch_pmc_content(pmcid) + if record: + with open(os.path.join(saved_dir, f"{pmcid}.xml"), "w") as f: + f.write(record.decode("utf-8")) + downloaded_pmcids[pmcid] = f"{pmcid}.xml" + else: + downloaded_pmcids[pmcid] = None + logger.warning(f"No record found for PMCID {pmcid}") + logger.info(f"Downloaded {len(downloaded_pmcids)} articles") + + # Save the downloaded PMCIDs to a json file + with open(os.path.join(base_dir, "saved_data", "downloaded_pmcids.json"), "w") as f: + json.dump(downloaded_pmcids, f) + + +if __name__ == "__main__": + update_downloaded_pmcids() + pmcids = get_unique_pmcids() + download_articles(pmcids) diff --git a/src/fetch_articles/pmcid_converter.py b/src/fetch_articles/pmcid_converter.py new file mode 100644 index 0000000..dc5a57c --- /dev/null +++ b/src/fetch_articles/pmcid_converter.py @@ -0,0 +1,165 @@ +import time +import random +import pandas as pd +from Bio import Entrez +from tqdm import tqdm +from dotenv import load_dotenv +import os +from src.load_data import get_pmid_list +import json + +load_dotenv() +# Email for NCBI +Entrez.email = os.getenv("NCBI_EMAIL") + +# Step 1: Function to get PMCID from PMID +import requests +from loguru import logger + +import requests +import time +from loguru import logger +from typing import List, Set, Dict, Optional + + +def load_saved_pmcid_mapping() -> Dict[str, Optional[str]]: + """ + Load the saved PMCID mapping from the json file. + """ + base_dir = os.path.dirname(os.path.abspath(__file__)) + results_path = os.path.join(base_dir, "pmcid_mapping.json") + if os.path.exists(results_path): + with open(results_path, "r") as f: + existing_results = json.load(f) + logger.info( + f"Loaded {len(existing_results)} existing PMCID mappings from {results_path}" + ) + else: + logger.info( + f"No PMCID mapping found at {results_path}. Creating empty mapping." + ) + existing_results = {} + return existing_results + + +def batch_pmid_to_pmcid( + pmids: List[str], email: str, batch_size: int = 100, delay: float = 0.4 +) -> Dict[str, Optional[str]]: + """ + Convert a list of PMIDs to PMCIDs using NCBI's ID Converter API. + + Args: + pmids: List of PMIDs (as strings). + email: Your email address for NCBI tool identification. + batch_size: Number of PMIDs to send per request (max: 200). + delay: Seconds to wait between requests (default 0.4 to respect NCBI). + + Returns: + Dict mapping each PMID to a PMCID (or None if not available). + """ + url = "https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/" + results = {} + existing_results = load_saved_pmcid_mapping() + + # Check for existing results + existing_pmids = set(existing_results.keys()) + + # Remove existing results from pmids + filtered_pmids = [x for x in pmids if str(x) not in existing_pmids] + + logger.info(f"Remaining PMIDs to process: {len(filtered_pmids)}") + if len(filtered_pmids) == 0: + logger.warning("No PMIDs to process. Exiting.") + return existing_results + + # Process remaining PMIDs + for i in range(0, len(filtered_pmids), batch_size): + batch = filtered_pmids[i : i + batch_size] + batch_str = [str(pmid) for pmid in batch] + ids_str = ",".join(batch_str) + logger.info(f"Processing PMIDs {i + 1} to {i + len(batch)}...") + + params = { + "tool": "pmid2pmcid_tool", + "email": email, + "ids": ids_str, + "format": "json", + } + + try: + response = requests.get(url, params=params) + response.raise_for_status() + data = response.json() + records = data.get("records", []) + for record in records: + pmid = record.get("pmid") + pmcid = record.get("pmcid") + results[pmid] = pmcid if pmcid else None + if pmcid: + logger.info(f"PMID {pmid} → PMCID {pmcid}") + else: + logger.warning(f"PMID {pmid} has no PMCID available.") + except Exception as e: + logger.error(f"Failed batch starting at index {i}: {e}") + for pmid in batch: + results[pmid] = None + + time.sleep(delay) + + # Merge existing results with new results + existing_results.update(results) + + # Save updated results + base_dir = os.path.dirname(os.path.abspath(__file__)) + results_path = os.path.join(base_dir, "pmcid_mapping.json") + with open(results_path, "w") as f: + json.dump(existing_results, f) + logger.info(f"Updated PMCID mappings saved to {results_path}") + + return existing_results + + +def get_unique_pmcids() -> List[str]: + """ + Get a list of unique PMCIDs from the PMCID mapping (pmcid_mapping.json) + NOTE: Could add functionality to check for new PMCIDs in mapping and update the unique_pmcids.json file + Currently function returns the pre-existing unique PMCIDs if they exist or regenerates the list from the mapping. + """ + # Load the unique PMCIDs if they've already been saved + base_dir = os.path.dirname(os.path.abspath(__file__)) + unique_pmcids_path = os.path.join(base_dir, "saved_data", "unique_pmcids.json") + if os.path.exists(unique_pmcids_path): + with open(unique_pmcids_path, "r") as f: + try: + pmcids = json.load(f) + except json.JSONDecodeError as e: + logger.error( + f"Error loading unique PMCIDs from {unique_pmcids_path}: {e}" + ) + raise e + logger.warning( + f"Loaded {len(pmcids)} pre-existing unique PMCIDs from {unique_pmcids_path}" + ) + return pmcids + + # Load from pmcid_mapping.json if unique pmcids haven't been saved + results_path = os.path.join(base_dir, "saved_data", "pmcid_mapping.json") + with open(results_path, "r") as f: + existing_results = json.load(f) + # get the unique pmcids + pmcids = list(set(existing_results.values())) + + # Save the unique pmcids to a json file + unique_pmcids_path = os.path.join(base_dir, "saved_data", "unique_pmcids.json") + with open(unique_pmcids_path, "w") as f: + json.dump(pmcids, f) + logger.info(f"Unique PMCIDs saved to {unique_pmcids_path}") + return pmcids + + +if __name__ == "__main__": + # pmid_list = get_pmid_list() + # results = batch_pmid_to_pmcid(pmid_list, os.getenv("NCBI_EMAIL")) + # logger.info(f"PMCID mapping complete. {len(results)} PMIDs mapped to PMCIDs.") + pmcids = get_unique_pmcids() + logger.info(f"Number of unique PMCIDs: {len(pmcids)}") diff --git a/src/fetch_articles/saved_data/pmcid_mapping.json b/src/fetch_articles/saved_data/pmcid_mapping.json new file mode 100644 index 0000000..bcf22b1 --- /dev/null +++ b/src/fetch_articles/saved_data/pmcid_mapping.json @@ -0,0 +1 @@ +{"12895196": "PMC1884285", "17872605": "PMC1952551", "18594531": "PMC2480976", "19133059": "PMC2668081", "19371317": "PMC2679107", "19846789": "PMC2773991", "21589866": "PMC3093392", "21602569": "PMC3137047", "22217949": "PMC3597465", "22328925": "PMC3273458", "22942289": "PMC3481266", "25285015": "PMC4181635", "26075078": "PMC4448076", "26137539": "PMC4484512", "26968770": "PMC4896103", "27282261": "PMC5087931", "28367249": "PMC5370513", "28435225": "PMC5391214", "30038671": "PMC6054772", "30700996": "PMC6347826", "31806881": "PMC7260086", "31869433": "PMC7217737", "32815870": "PMC7655626", "34096894": "PMC8185249", "36110554": "PMC9468644", "39792745": "PMC11730665", "40098302": "PMC11913886", "40114953": "PMC11921366", "40135234": "PMC11933031", "40137409": "PMC11943653", "16920476": null, "22920394": null, "35079845": null, "21047202": null, "33586456": null, "16495778": null, "26075959": null, "25096692": null, "27334259": null, "24152157": null, "40071563": null, "40152645": null, "33127459": null, "40054571": null, "18806696": null, "16911680": null, "26926096": null, "19088262": null, "22170007": null, "22676194": null, "33165168": null, "23559402": null, "31055022": null, "20833658": null, "27488389": null, "31940240": null, "19755414": null, "23651021": null, "23567787": null, "26122019": null, "32498119": null, "17148966": null, "19692698": null, "12191703": null, "16874005": null, "27523435": null, "22293084": null, "16763825": null, "32564268": null, "33350885": null, "18300238": null, "16636344": null, "38310750": null, "21273624": null, "12848631": null, "28325531": null, "20831535": null, "31022310": null, "24615047": null, "28470111": null, "15634941": null, "24322329": null, "17502774": null, "25560051": null, "11990381": null, "24968714": null, "16433808": null, "27116457": null, "26809022": null, "15906019": null, "15007088": null, "20643254": null, "35394133": null, "16849011": null, "12421483": null, "15122075": null, "17667796": null, "26847964": null, "21632579": null, "36528349": null, "16160068": "PMC1237155", "17522595": "PMC2921956", "17537913": "PMC1887589", "19802360": "PMC2756088", "21395648": "PMC3080643", "24330000": "PMC4168390", "24367041": "PMC4017364", "25310192": "PMC4195667", "25441457": "PMC4737107", "26521259": "PMC4713720", "26637161": "PMC6357964", "26710337": "PMC4692529", "26774055": "PMC4876172", "26823971": "PMC4730664", "27121899": "PMC6375065", "27528039": "PMC5074472", "28512430": "PMC5411458", "28673279": "PMC5496345", "28769582": "PMC5533497", "29024493": "PMC5744175", "29210323": "PMC5753622", "29720126": "PMC5932771", "31969823": "PMC6960206", "32438452": "PMC7497238", "34656068": "PMC9297921", "35426132": "PMC9322346", "36134646": "PMC10091789", "28181923": "PMC5382092", "29920880": null, "16402128": null, "24238261": null, "22277678": null, "19343327": null, "28606620": null, "17989110": null, "24438215": null, "7298112": null, "27488176": null, "21494765": null, "318493": null, "18982321": null, "20421126": null, "30094551": null, "29441922": null, "26635230": null, "28622951": null, "29683944": null, "2231320": null, "29539600": null, "29126871": null, "16543980": null, "16319918": null, "1136859": null, "19794411": null, "29279557": null, "28605053": null, "36162369": null, "27056297": null, "28834922": null, "22763757": null, "28429387": null, "15526248": null, "19259652": null, "29733390": null, "30528195": null, "29048184": null, "22075549": null, "29691732": null, "29731062": null, "39564784": null, "11779172": null, "22676192": null, "27266721": null, "27511999": null, "32361904": null, "14553962": null, "15094935": null, "12656699": null, "22549502": null, "23666583": null, "23588314": null, "24089074": null, "15179405": null, "8451774": null, "21981797": null, "25312789": null, "27717793": null, "24365989": null, "15812265": null, "28146264": null, "26915847": null, "21128989": null, "26227094": null, "22594507": null, "15447734": null, "23981149": null, "19274593": null, "7550367": null, "30051214": null, "17112811": null, "8018461": "PMC1364741", "15089809": "PMC1884506", "16020596": "PMC1769026", "17610534": "PMC2048549", "19659438": "PMC2754599", "19916993": "PMC2791975", "20128861": "PMC4441275", "22048466": "PMC3260990", "22094953": "PMC3237821", "22130800": "PMC3384479", "22428615": "PMC3448899", "23476897": "PMC3584248", "25834322": "PMC4375579", "25981758": "PMC4764353", "26138512": "PMC4594719", "26164721": "PMC4503374", "26745506": "PMC4706412", "26878724": "PMC5029084", "27253829": "PMC4949007", "27333947": "PMC5065384", "27419077": "PMC4932617", "27805836": "PMC5440888", "27898234": "PMC5461999", "28044353": "PMC5427244", "28079798": "PMC5266160", "28181117": "PMC5500390", "29121268": "PMC5833535", "29637588": "PMC6046506", "29735966": "PMC6248022", "29967377": "PMC6289816", "30653146": "PMC6370172", "33410778": "PMC7968507", "36303140": "PMC9608913", "39578425": "PMC11584383", "17934830": null, "9726242": null, "15470328": null, "18407954": null, "24663076": null, "20921968": null, "29393157": null, "19299322": null, "24444408": null, "24205831": null, "1655344": null, "26615857": null, "24474498": null, "18781852": null, "24322170": null, "19286758": null, "23974086": null, "22390861": null, "24329187": null, "29855074": null, "27878474": null, "29327948": null, "17941052": null, "29878980": null, "29229354": null, "26862009": null, "11926893": null, "33205280": null, "10639689": null, "29451946": null, "26254792": null, "17235330": null, "15788353": null, "14624186": null, "23332809": null, "18570163": null, "18467186": null, "27995989": null, "23602689": null, "15592323": null, "15710002": null, "15932363": null, "26189776": null, "25825958": null, "11543734": null, "28135763": null, "28723731": null, "16415111": null, "9857976": null, "26775563": null, "30251062": null, "27187662": null, "30260084": null, "27348249": null, "15963082": null, "15903128": null, "26147768": null, "15714076": null, "17725248": null, "16863547": null, "26153084": null, "28099407": null, "18836275": null, "17215846": null, "23007012": null, "17185998": null, "12832683": "PMC1746721", "12919180": "PMC1884346", "17387222": "PMC1975838", "18070221": "PMC2291379", "18794726": "PMC2757009", "19841156": "PMC3571021", "21689142": "PMC3248259", "21896912": "PMC3195031", "22911785": "PMC3401172", "23029095": "PMC3454425", "23305195": "PMC3769669", "23588952": "PMC3673300", "24868171": "PMC4012347", "25084200": "PMC4155516", "27007499": "PMC4805204", "27549341": "PMC5323433", "27763679": "PMC5346875", "28229376": "PMC5427048", "28930490": "PMC5768901", "29196725": "PMC5711795", "29206869": "PMC5716599", "30704156": "PMC6505090", "31087723": "PMC6591035", "31490856": "PMC6855320", "31549442": "PMC7028104", "31959879": "PMC7375952", "33750887": "PMC8295171", "34369424": "PMC8578190", "36581799": "PMC9801627", "39314259": "PMC11418302", "39555806": "PMC11703419", "29469606": null, "18823430": null, "26898617": null, "10208643": null, "17667795": null, "28664816": null, "24723432": null, "24019055": null, "20562211": null, "17554244": null, "18234403": null, "29723426": null, "25089947": null, "24891132": null, "30207196": null, "21404110": null, "19364831": null, "25868121": null, "11954942": null, "19468717": null, "18687376": null, "22047493": null, "14687173": null, "7438695": null, "15205367": null, "7408395": null, "33378980": null, "8941024": null, "16906016": null, "15592325": null, "17178266": null, "11007831": null, "10022751": null, "16182270": null, "27804107": null, "23557865": null, "32483200": null, "28181240": null, "11240980": null, "20932673": null, "10471063": null, "36580432": null, "21075428": null, "27320564": null, "18698229": null, "33812699": null, "18317231": null, "17001296": null, "21319286": null, "23399569": null, "19031075": null, "17577039": null, "15764711": null, "16044105": null, "25554506": null, "26518946": null, "33799050": null, "16951398": null, "16501005": null, "23609392": null, "27432796": null, "24442125": null, "20376628": null, "12185559": null, "26122864": null, "9352580": null, "25989350": null, "19683391": null, "27661060": null, "15606441": "PMC1884959", "20530282": "PMC2903324", "21931540": "PMC3172251", "22147369": "PMC3246196", "22436571": "PMC6987567", "22457278": "PMC3415853", "22625877": "PMC3555061", "22925276": "PMC3521860", "24096969": "PMC3944214", "25049040": "PMC4270923", "25406899": "PMC4298011", "25785276": "PMC4345081", "25919528": "PMC4928097", "26261165": "PMC4557249", "26891871": "PMC5306247", "27453700": "PMC4956330", "28940478": "PMC6033076", "29436156": "PMC5944577", "29738412": "PMC6092108", "32302325": "PMC7164646", "32848803": "PMC7431691", "33805706": "PMC7999651", "34100292": "PMC8238023", "34234136": "PMC8263746", "34512354": "PMC8429954", "34568359": "PMC8458697", "35668575": "PMC9468554", "36266537": "PMC9584256", "36333412": "PMC9925376", "36817149": "PMC9934922", "36836506": "PMC9961245", "36873097": "PMC9974434", "38629502": "PMC11022290", "34575187": "PMC8472669", "32612964": "PMC7308427", "20038957": "PMC6631360", "19129086": "PMC3525178", "36818341": "PMC9931738", "36350097": "PMC10099095", "26514968": null, "31773688": null, "34719653": null, "23521149": null, "24394199": null, "33759177": null, "30604050": null, "29926893": null, "25976223": null, "23426382": null, "15121303": null, "23831869": null, "36851891": null, "21734714": null, "34489188": null, "28833329": null, "22074251": null, "25042870": null, "28444425": null, "29935043": null, "19784640": null, "23557867": null, "23313934": null, "21840870": null, "29136336": null, "34583027": null, "21223952": null, "28627804": null, "16513443": null, "31594719": null, "20040338": null, "11756990": null, "16847664": null, "18781850": null, "30562214": null, "33649523": null, "23360626": null, "20833980": null, "17568401": null, "17914325": null, "29327975": null, "15570193": null, "15784872": null, "21635144": null, "29601950": null, "12107620": null, "23996211": null, "27082504": null, "15603879": null, "11910301": null, "15057902": null, "18408565": null, "16917677": null, "36877088": null, "34752647": null, "21387541": null, "17047488": null, "28316087": null, "36789833": null, "23797529": null, "27020477": null, "19010874": "PMC2586993", "19365400": "PMC2922203", "21597399": "PMC3116045", "21975350": "PMC3667657", "24858363": "PMC4032230", "25710119": "PMC4445755", "26766959": "PMC4701680", "28659275": "PMC5606007", "30578947": "PMC6501809", "31721892": "PMC7115450", "31961981": "PMC7340566", "32373204": "PMC7193447", "33277605": "PMC7718230", "33452682": "PMC8359222", "33967795": "PMC8100460", "34476898": "PMC8742641", "34599645": "PMC9298338", "35538637": "PMC10908252", "37042388": "PMC11016593", "37109042": "PMC10145266", "37248698": "PMC10463210", "37272562": "PMC10244018", "37337448": "PMC10529681", "37340713": "PMC10582663", "35279143": "PMC8917764", "35115810": "PMC8800862", "32723321": "PMC7388522", "29073750": "PMC5678480", "23562852": "PMC3786570", "19279561": "PMC3698861", "39338398": "PMC11435314", "16580902": null, "23556337": null, "31058543": null, "32112986": null, "34246203": null, "20664233": null, "19582440": null, "30100615": null, "27932669": null, "15265511": null, "37458773": null, "22941809": null, "16702979": null, "25295552": null, "37097441": null, "27520898": null, "32011683": null, "35110472": null, "17123473": null, "16952495": null, "16299241": null, "23580071": null, "9322235": null, "30520759": null, "15052272": null, "15337646": null, "16198652": null, "37458772": null, "23459029": null, "12042667": null, "22260295": null, "32365274": null, "19387424": null, "31066578": null, "29043387": null, "27035272": null, "32920985": null, "17220563": null, "26228923": null, "21688171": null, "10448083": null, "28068779": null, "5026380": null, "34480108": null, "27023264": null, "33047329": null, "445966": null, "34320604": null, "23959274": null, "20385995": null, "24858822": null, "17621383": null, "22907732": null, "20110084": null, "12202670": null, "24189425": null, "21263010": null, "24014145": null, "38172377": null, "17460607": null, "10544257": null, "17503984": null, "17112802": null, "24117666": null, "22026923": null, "32073889": null, "33131142": null, "21513075": null, "19268736": null, "3335642": "PMC442471", "7259927": "PMC1401654", "7640151": "PMC1365132", "15280927": "PMC2364770", "17563839": "PMC3476140", "18241283": "PMC2432487", "19357842": "PMC3775655", "19663669": "PMC2737687", "20223877": "PMC2879959", "20375999": "PMC2858245", "20665488": "PMC2966859", "20669013": "PMC2957581", "21519338": "PMC3100476", "21654688": "PMC3137420", "22418828": "PMC3419350", "24522145": "PMC3944116", "24526611": "PMC4012056", "24528196": "PMC4137828", "24551111": "PMC3925114", "24759732": "PMC3997354", "26491254": "PMC4598210", "26543771": "PMC4628029", "26655325": "PMC4892230", "26770526": "PMC4694426", "27226358": "PMC4943390", "27385990": "PMC4930967", "28603840": "PMC5651327", "29026840": "PMC5632935", "29547545": "PMC5877743", "29615122": "PMC5883590", "29967027": "PMC6125540", "30821933": "PMC6510382", "36297437": "PMC9610285", "27035618": "PMC4947669", "18574025": "PMC2630264", "32606912": "PMC7305826", "16236141": null, "16960700": null, "22428763": null, "20133509": null, "20339978": null, "25953735": null, "25084205": null, "19567893": null, "29611886": null, "26856709": null, "17828532": null, "36681895": null, "15349717": null, "8195181": null, "8988068": null, "21038076": null, "23651023": null, "18204343": null, "22045970": null, "11929404": null, "25948472": null, "21658141": null, "26882121": null, "29603629": null, "17851566": null, "27785604": null, "12121503": null, "10509530": null, "17667959": null, "25995169": null, "24827774": null, "19451862": null, "17111199": null, "8747407": null, "20386359": null, "26580670": null, "28050888": null, "24656015": null, "28614176": null, "19794412": null, "9408809": null, "23510446": null, "29555325": null, "12386647": null, "7969038": null, "23099353": null, "26265346": null, "28244604": null, "19997080": null, "12544691": null, "11380317": null, "19785625": null, "22486182": null, "28094348": null, "28245187": null, "24655974": null, "29550576": null, "15233837": null, "19414633": null, "38614858": null, "15743363": null, "29621122": null, "26739304": null, "25495411": null, "12477776": "PMC1773505", "18797458": "PMC2570505", "19074728": "PMC2673121", "20038727": "PMC4872310", "21739267": "PMC3249179", "22947444": "PMC3513646", "23254426": "PMC3553682", "23481074": "PMC3657889", "23623526": "PMC7274090", "23712427": "PMC3674704", "23859569": "PMC4116670", "23922954": "PMC3726442", "23990957": "PMC3753327", "25051018": "PMC4160394", "25846845": "PMC4594699", "26067485": "PMC4527535", "26232141": "PMC4522133", "26445541": "PMC4590670", "26524713": "PMC5798599", "26961113": "PMC5098919", "27035242": "PMC4892970", "28306618": "PMC5391994", "28440343": "PMC5656562", "28923870": "PMC5700347", "29326107": "PMC5829963", "30520341": "PMC6562943", "30870275": "PMC6448146", "31649299": "PMC6969041", "31932420": "PMC6995013", "24497997": "PMC3909010", "27653228": null, "16778723": null, "23104259": null, "20165956": null, "22183771": null, "26894931": null, "27577869": null, "24554646": null, "22111603": null, "11452243": null, "33203301": null, "9797795": null, "25869250": null, "28290770": null, "15533655": null, "25564374": null, "24530212": null, "22076562": null, "22010099": null, "28736028": null, "26847054": null, "19661214": null, "32893731": null, "25542807": null, "10653220": null, "21947681": null, "25588704": null, "17803873": null, "21599570": null, "27233747": null, "15274037": null, "15197523": null, "31628422": null, "22331680": null, "21590444": null, "25188725": null, "29325448": null, "14515060": null, "11593098": null, "26177012": null, "20383212": null, "11208681": null, "19159907": null, "31653973": null, "28380657": null, "11027924": null, "9562213": null, "27287786": null, "29469964": null, "14520122": null, "17918089": null, "18664620": null, "25510856": null, "16133961": null, "26176181": null, "8093319": null, "30300922": null, "21083596": null, "12012142": null, "21383338": null, "23444281": null, "18641553": null, "27377607": null, "25894154": null, "18183038": null, "32475982": null, "19166419": null, "26556524": null, "28540692": null, "26830411": null, "17517247": "PMC1978168", "20559522": "PMC2886925", "21110013": "PMC3291838", "21930396": "PMC3640375", "23646118": "PMC3639978", "23990505": "PMC3787223", "24601977": "PMC4043918", "25329996": "PMC4199712", "26313268": "PMC6361127", "26392323": "PMC4693577", "27527610": "PMC5061780", "28604474": "PMC5538305", "29198060": "PMC5808057", "30197492": "PMC6128165", "30487649": "PMC6786370", "33676726": "PMC8132880", "26114223": "PMC4574839", "23071495": "PMC3468617", "22111602": "PMC3292264", "21614669": "PMC3550197", "29256966": null, "27045425": null, "21528942": null, "24589909": null, "26634478": null, "23473641": null, "12507820": null, "23949431": null, "27636246": null, "27885697": null, "26792652": null, "12010835": null, "18629445": null, "20633187": null, "11595402": null, "17968817": null, "25427841": null, "29210320": null, "26450467": null, "29285995": null, "28676933": null, "24973281": null, "25060201": null, "24033383": null, "19033450": null, "27937048": null, "25994031": null, "15083067": null, "25461249": null, "23588332": null, "22339449": null, "27001118": null, "10579481": null, "24504666": null, "16719544": null, "23837477": null, "16815316": null, "29791011": null, "16024198": null, "20531370": null, "24402637": null, "25966085": null, "28732143": null, "20041908": null, "11849656": null, "19177029": null, "28209466": null, "25008027": null, "21819368": null, "24224579": null, "14521618": null, "19545678": null, "21361732": null, "26526111": null, "23423913": null, "15742978": null, "19289993": null, "11557918": null, "15952098": null, "15590749": null, "28389049": null, "18538445": null, "25075423": null, "25817604": null, "24383873": null, "16580768": null, "27217051": null, "30281924": null, "27809336": null, "29196917": null, "11672906": null, "29748862": null, "29520080": null, "19273465": null, "27271184": null, "11186138": null, "12123234": null, "26239729": null, "14638340": null, "24513691": null, "12695469": "PMC1767618", "20124171": "PMC4872305", "21225912": "PMC3020258", "21480951": "PMC3093079", "23435876": "PMC3637851", "23682072": "PMC4057281", "24167597": "PMC3805522", "24748394": "PMC3991683", "25372290": "PMC4220988", "25588294": "PMC4480925", "26024874": "PMC4513254", "26239045": "PMC5057355", "26426352": "PMC4833149", "26799162": "PMC4876188", "28135054": "PMC5862636", "29681852": "PMC5898372", "29986700": "PMC6038204", "30799432": "PMC6400024", "30906561": "PMC6411694", "31513279": "PMC6980920", "31738228": "PMC7039325", "12065557": null, "8823231": null, "19225451": null, "19148563": null, "20962433": null, "17265061": null, "29998574": null, "17015052": null, "18021343": null, "20877298": null, "12746736": null, "31957548": null, "22422348": null, "23835420": null, "22660440": null, "17018806": null, "12873589": null, "28135009": null, "24088113": null, "21512411": null, "23688605": null, "22349464": null, "19395173": null, "28786228": null, "20952418": null, "25287072": null, "20031235": null, "17948872": null, "25778465": null, "23726091": null, "20386493": null, "19277427": null, "21118735": null, "25162219": null, "25712182": null, "31134657": null, "10334805": null, "21054464": null, "17721180": null, "18452396": null, "26967570": null, "20452607": null, "16515395": null, "30652301": null, "20118554": null, "26556583": null, "30815856": null, "31769341": null, "24508947": null, "27353638": null, "22252093": null, "30786012": null, "17178267": null, "21596874": null, "18322994": null, "9510461": null, "17955230": null, "8648264": null, "9014204": null, "23208322": null, "16007002": null, "9272410": null, "27143031": null, "9316174": null, "24996381": null, "28834135": null, "18214456": null, "10636265": null, "8681489": null, "24329186": null, "37212851": null, "17761971": null, "12728290": null, "23787247": null, "17496726": null, "20584552": null, "12360109": null, "28933337": null, "26071277": null, "11741249": "PMC2751283", "15805193": "PMC556232", "18662264": "PMC2920450", "18769620": "PMC2518836", "21288825": "PMC3071070", "21320153": "PMC3175513", "23148286": "PMC3537445", "23840296": "PMC3686783", "23963147": "PMC3776990", "24033696": "PMC3946972", "24433464": "PMC4168388", "24710841": "PMC4113831", "25054547": "PMC4108472", "25187485": "PMC4201132", "25372392": "PMC4221105", "25548683": "PMC4274707", "25614061": "PMC4500328", "25712185": "PMC7347085", "26622455": "PMC4533232", "26667830": "PMC4909584", "26924289": "PMC4820801", "27415606": "PMC5534241", "27981573": "PMC5485718", "28187506": "PMC5546927", "28445187": "PMC5510236", "28482130": "PMC5421731", "29352482": "PMC5903234", "29653637": "PMC5903579", "29992026": "PMC6034060", "30371861": "PMC6939828", "30848065": "PMC6518412", "30989645": "PMC6767327", "32331352": "PMC7235792", "33124053": "PMC8081740", "28689179": "PMC5749368", "23846872": "PMC3834132", "31190621": "PMC6891932", "15618746": null, "28986606": null, "23394389": null, "30870237": null, "26232156": null, "29524157": null, "123467": null, "19480553": null, "26032235": null, "24128861": null, "22534826": null, "26071279": null, "38637968": null, "29389842": null, "17267622": null, "16202677": null, "20175817": null, "15993850": null, "21449672": null, "29914286": null, "31482508": null, "28342282": null, "18987660": null, "26729200": null, "11823760": null, "10022755": null, "15632378": null, "30363031": null, "9585799": null, "14652237": null, "27864660": null, "16283274": null, "22441531": null, "10824636": null, "23323945": null, "23799451": null, "9867757": null, "16270629": null, "9797796": null, "31043678": null, "12082589": null, "17392730": null, "15918040": null, "20339191": null, "15149890": null, "15118073": null, "11470994": null, "29135906": null, "23090703": null, "26615671": null, "26714287": null, "11913730": null, "19037197": null, "11682257": null, "15536456": null, "9918137": null, "21590310": null, "12960748": null, "12065207": null, "20585834": null, "16815318": null, "28945481": null, "26367500": null, "8971426": "PMC2042718", "10583026": "PMC2014382", "11560558": "PMC2014539", "16940139": "PMC1563530", "18429967": "PMC2492917", "19034904": "PMC2794198", "19552744": "PMC2686066", "19855097": "PMC2812115", "20002085": "PMC2810802", "21326246": "PMC3049596", "21666065": "PMC3164274", "22307138": "PMC6432766", "23073208": "PMC4038024", "23712614": "PMC3760990", "24475354": "PMC3902809", "25232828": "PMC4169411", "25545243": "PMC4278770", "25702819": "PMC4541975", "26729753": "PMC4752391", "26888075": "PMC4757974", "27417511": "PMC5233579", "27966227": "PMC5346878", "28283692": "PMC5423974", "28376280": "PMC5483245", "28493308": "PMC5589489", "28750151": "PMC5763318", "29375701": "PMC5763654", "29377228": "PMC5903239", "30088221": "PMC6373376", "30987408": "PMC6523194", "31461080": "PMC6989102", "12142782": null, "21934637": null, "22855348": null, "9630826": null, "29441875": null, "25042728": null, "11474773": null, "22960998": null, "16822601": null, "20153897": null, "21209234": null, "23774941": null, "17203168": null, "19259653": null, "9858029": null, "17164591": null, "25712887": null, "27800629": null, "18466100": null, "25998968": null, "7935325": null, "15180166": null, "23061746": null, "25323806": null, "8538349": null, "22990331": null, "9551410": null, "26990259": null, "12451290": null, "27236640": null, "20818295": null, "15861035": null, "17164697": null, "1396201": null, "24717838": null, "24950369": null, "23215888": null, "21830868": null, "27110018": null, "21507170": null, "9869506": null, "12152006": null, "22798433": null, "12496751": null, "12844137": null, "23666564": null, "15483195": null, "31599092": null, "21919605": null, "23263737": null, "20665215": null, "8287064": null, "29479633": null, "29161757": null, "27262302": null, "14729419": null, "16302021": null, "31444512": null, "14653957": null, "23057546": null, "18637061": null, "14652703": null, "9069453": null, "18794724": null, "27439447": null, "28401703": null, "26360837": null, "17194903": null, "27767389": null, "11966680": "PMC1874262", "16937451": "PMC4087845", "17183730": "PMC1762324", "19710077": "PMC2760462", "20565970": "PMC2910688", "21205745": "PMC3068061", "22274142": "PMC3378722", "22371894": "PMC3370715", "24142869": "PMC4412845", "24956244": "PMC4151614", "25120580": "PMC4130425", "25451051": "PMC4335884", "25805645": "PMC5963414", "25999707": "PMC4437521", "26186989": "PMC4615534", "26313485": "PMC4591203", "26389554": "PMC4667947", "26633805": "PMC4669157", "26660002": "PMC4862932", "26773420": "PMC4778608", "27179628": "PMC4868001", "27182616": "PMC5324942", "28296334": "PMC5355968", "28302415": "PMC5377478", "28324194": "PMC5438821", "29333880": "PMC5940523", "30061570": null, "21781652": null, "12422998": null, "26020121": null, "28030534": null, "21811894": null, "18212800": null, "31849280": null, "9103550": null, "10340921": null, "19018719": null, "22854539": null, "22040439": null, "7471604": null, "21962566": null, "10206083": null, "25239277": null, "21326313": null, "16890574": null, "22885912": null, "15731591": null, "25893704": null, "2211621": null, "18004205": null, "26780783": null, "27286724": null, "26861072": null, "25002132": null, "25286744": null, "18460585": null, "10511062": null, "22571356": null, "25567217": null, "17761710": null, "26803611": null, "15729081": null, "20332423": null, "21782804": null, "22406652": null, "26952092": null, "24088130": null, "17223085": null, "16912869": null, "24898899": null, "22947179": null, "15457444": null, "11817517": null, "20403483": null, "23183958": null, "23640958": null, "27023460": null, "26984978": null, "23159639": null, "20814331": null, "15715938": null, "25558073": null, "26944100": null, "20838991": null, "18971529": null, "28430710": null, "27599351": null, "25241292": null, "23095326": null, "21167658": null, "25645282": null, "26072396": null, "24214410": null, "21753138": null, "24251363": null, "7964939": null, "27335128": null, "11791895": null, "8823236": null, "26343256": null, "7640149": "PMC1365130", "9431830": "PMC2042888", "12445030": "PMC1874463", "16758348": "PMC3454958", "18380793": "PMC11158323", "18831695": "PMC3672984", "20653676": "PMC2911553", "20823282": "PMC2976128", "21107318": "PMC3034442", "21576462": "PMC3107291", "21915484": "PMC3161212", "21989330": "PMC3360546", "22271297": "PMC3352974", "23149928": "PMC3729209", "24658827": "PMC4025175", "25381393": "PMC4271081", "25393304": "PMC4231027", "25752914": "PMC4541974", "26739746": "PMC4702374", "26877068": "PMC4803610", "27418594": "PMC4982759", "27859023": "PMC5425333", "28453780": "PMC5546852", "28481785": "PMC5524513", "29018343": "PMC5614982", "29099333": "PMC6472479", "29756345": "PMC6927671", "37372371": "PMC10298263", "24404132": "PMC3880259", "22450926": "PMC5604731", "20479755": "PMC2925052", "15855489": "PMC1087660", "11069321": null, "20585342": null, "22455762": null, "17295875": null, "12784098": null, "17725594": null, "15475735": null, "30983536": null, "14499311": null, "27426203": null, "19238117": null, "38640718": null, "18167504": null, "27377818": null, "23107770": null, "31124417": null, "24256307": null, "26244421": null, "25155930": null, "30983501": null, "20830509": null, "15128048": null, "37273173": null, "22006347": null, "19933691": null, "12414349": null, "23733030": null, "20376629": null, "29177570": null, "15883587": null, "25565674": null, "17112810": null, "27500822": null, "15289789": null, "26781925": null, "14653835": null, "26083990": null, "23252946": null, "27138785": null, "37270865": null, "22394315": null, "15467211": null, "35144161": null, "10710136": null, "25519826": null, "11875364": null, "10901705": null, "16508157": null, "11240974": null, "38579568": null, "36309848": null, "18528690": null, "26777610": null, "21903774": null, "29162334": null, "31854268": null, "9732415": null, "22909202": null, "20020283": null, "18797858": null, "21543662": null, "31395958": null, "21831685": null, "12152005": null, "17698328": null, "29099344": null, "11046127": null, "27356304": null, "7903454": "PMC48077", "8148222": "PMC1364713", "12814461": "PMC1884261", "19669737": "PMC2901912", "21692828": "PMC3248257", "22527101": "PMC3727245", "22629463": "PMC3358293", "23691226": "PMC3656883", "24019752": "PMC3760447", "25001883": "PMC4209173", "28121959": "PMC5287983", "28960269": "PMC5871545", "36145690": "PMC9501307", "36305091": "PMC9701885", "21521021": null, "19921195": null, "23175667": null, "22123356": null, "10683861": null, "18654768": null, "16034444": null, "19000940": null, "27992285": null, "11791898": null, "15565299": null, "11785712": null, "24382596": null, "21479500": null, "15499191": null, "23097010": null, "19455410": null, "16815313": null, "23001453": null, "15976989": null, "16338280": null, "22324425": null, "15900015": null, "22842957": null, "24624914": null, "19280158": null, "19934793": null, "20089352": null, "12374640": null, "22955794": null, "17460029": null, "11041319": null, "11446878": null, "11802100": null, "17715206": null, "34529603": null, "16911688": null, "16595916": null, "21262916": null, "17329852": null, "17559344": null, "26332308": null, "22706620": null, "19902562": null, "15980104": null, "24345815": null, "16699986": null, "10096261": null, "14676821": null, "18368069": null, "21174619": null, "19606452": null, "22735459": null, "17986163": null, "12809821": null, "18834373": null, "15260906": null, "12476327": null, "23428009": null, "24026091": null, "24019397": null, "12325023": null, "16182272": null, "11318841": null, "19825907": null, "22281720": null, "15790782": null, "22105431": null, "22075505": null, "18641915": null, "9435198": null, "22528326": null, "10942177": null, "20881953": null, "15722458": null, "15650881": null, "22926595": null, "15128047": null, "26216193": null, "12662378": null, "27409003": null, "20040334": null, "23381968": null, "14624403": null, "15001971": null, "7284051": null, "18466099": "PMC2757655", "24403552": "PMC4038142", "24910925": "PMC4243881", "24958824": "PMC4105486", "25361850": "PMC4226857", "25774163": "PMC4343187", "26325438": "PMC4716887", "26670100": "PMC4682920", "26892777": "PMC4867099", "26996562": "PMC4800352", "27217047": "PMC4921119", "27298017": "PMC6612264", "27507617": "PMC6777349", "28340122": "PMC5492788", "29298995": "PMC6462825", "33236485": "PMC8106923", "37449247": "PMC10337687", "37511720": "PMC10381361", "37596839": "PMC10583240", "37615099": "PMC10565537", "37688505": "PMC10666731", "37695751": "PMC10495004", "37709837": "PMC10502099", "37755681": "PMC11003701", "37765034": "PMC10537526", "37810546": "PMC10557961", "37850738": "PMC10648962", "37882999": "PMC10684410", "38140040": "PMC10747255", "38140786": "PMC10787143", "38174147": "PMC10758687", "38200532": "PMC10782740", "38203360": "PMC10778798", "37564175": "PMC10409991", "23734829": "PMC3680019", "23252947": "PMC3570048", "37920361": "PMC10618485", "38004558": "PMC10675244", "36988399": null, "37656138": null, "25673014": null, "21916909": null, "38192190": null, "37772804": null, "37728834": null, "24378577": null, "17324110": null, "25081908": null, "38041757": null, "27348478": null, "25794200": null, "38059315": null, "21636598": null, "17105675": null, "27225724": null, "26362473": null, "38124280": null, "16003289": null, "37864290": null, "22886152": null, "36662574": null, "26873108": null, "37702085": null, "29536505": null, "26219158": null, "19027114": null, "17339868": null, "23327575": null, "19205682": null, "19373123": null, "20837591": null, "29393850": null, "21725053": null, "20595278": null, "23146479": null, "26184414": null, "29938344": null, "25597548": null, "24120259": null, "33247397": null, "25322286": null, "24052064": null, "26151596": null, "37947089": null, "24521109": null, "24956252": null, "30730287": null, "26469104": null, "38050720": null, "37976989": null, "38158593": null, "10223777": null, "9511177": null, "11278503": null, "37803948": null, "29947950": null, "10880412": null, "29894392": null, "37551646": null, "27503662": null, "9578184": "PMC1873971", "19429918": "PMC2709885", "21558457": "PMC3182303", "21781277": "PMC3461952", "21995462": "PMC3376437", "22106207": "PMC3264276", "22484315": "PMC3774043", "24383060": "PMC3871508", "24766668": "PMC4257570", "25907378": "PMC4631184", "25999694": "PMC4435089", "26335396": "PMC4630174", "30192390": "PMC6586010", "31257615": "PMC6813860", "33851947": "PMC8373649", "34531744": "PMC8438567", "35280252": "PMC8915292", "37042314": "PMC10478012", "37454203": "PMC10349800", "37880658": "PMC10599059", "37894954": "PMC10607223", "38293439": "PMC10827494", "38311638": "PMC10876746", "38321419": "PMC10848431", "38341456": "PMC10858860", "38377518": "PMC10880264", "38467432": "PMC11023817", "38778126": "PMC11111788", "37266339": "PMC10230242", "26049585": "PMC4498982", "23150149": "PMC3641305", "38357508": "PMC10864595", "16676068": null, "26192892": null, "25192553": null, "26856397": null, "8181196": null, "24702251": null, "16797284": null, "38262522": null, "32519344": null, "21958076": null, "7965806": null, "2293406": null, "26129906": null, "24346747": null, "24269714": null, "17011540": null, "8530011": null, "24257813": null, "22981363": null, "8101460": null, "24747667": null, "24533708": null, "11936707": null, "8563771": null, "27918244": null, "16531626": null, "21288052": null, "25529343": null, "7845481": null, "37460671": null, "19560446": null, "27484880": null, "38289893": null, "24444407": null, "29843110": null, "29474345": null, "8835703": null, "19142106": null, "32986886": null, "21451508": null, "17234366": null, "10340923": null, "11823761": null, "25258374": null, "25154506": null, "38372728": null, "26930544": null, "24643635": null, "29723928": null, "26990694": null, "4082245": null, "1988236": null, "33404848": null, "38284409": null, "38445694": null, "38360955": null, "28117133": null, "33203295": null, "10411572": null, "34081644": null, "24685597": null, "16819548": null, "38377520": null, "18544910": null, "25621429": null, "32538291": null, "22585284": null, "28704257": null, "7654478": "PMC1365072", "8554938": "PMC1365155", "18433502": "PMC2386778", "19205754": "PMC2726911", "20590587": "PMC2935997", "20670920": "PMC2913479", "21430657": "PMC3081375", "21615537": "PMC3164277", "21768473": "PMC3158597", "22122271": "PMC3394147", "23400848": "PMC3594083", "23674605": "PMC3749354", "24300978": "PMC3899768", "24906949": "PMC4119242", "25091503": "PMC4308646", "25395315": "PMC4413900", "26730167": "PMC4690185", "27694910": "PMC5220536", "28244808": "PMC5558529", "29852030": "PMC6142943", "30706508": "PMC6475679", "30907440": "PMC6595468", "31090079": "PMC6773496", "31744222": "PMC6920759", "32459054": "PMC7375060", "34423496": "PMC8571740", "34491372": "PMC8724172", "34520119": "PMC8604252", "34721043": "PMC8553963", "36278195": "PMC9582748", "36806969": "PMC10038974", "37098852": "PMC10154044", "37626805": "PMC10452379", "38584604": "PMC10995391", "7648764": null, "28836054": null, "12811367": null, "11207001": null, "18334103": null, "12485958": null, "24709712": null, "8612387": null, "7159207": null, "16123753": null, "24673480": null, "9049581": null, "8807669": null, "10774635": null, "17175164": null, "31107373": null, "38009933": null, "8689810": null, "22733128": null, "10434486": null, "18204346": null, "29935595": null, "21716274": null, "26195225": null, "24029542": null, "25185591": null, "34986431": null, "18520597": null, "8675169": null, "24232129": null, "8655150": null, "1531950": null, "20441720": null, "19514130": null, "11552922": null, "31616047": null, "15726636": null, "27388292": null, "19523031": null, "14646691": null, "24469018": null, "16129989": null, "25047911": null, "8946471": null, "35703273": null, "25967538": null, "23773341": null, "35508605": null, "3356084": null, "11270921": null, "19404631": null, "6111662": null, "7693389": null, "20473659": null, "12544511": null, "34231053": null, "9014200": null, "10850391": null, "1451721": null, "30135031": null, "35947050": null, "9357098": null, "37101315": null, "9241659": null, "22948856": null, "18474679": null, "8806248": "PMC2352037", "10671908": "PMC2014902", "17764479": "PMC2291274", "18535201": "PMC2515139", "18690117": "PMC2743299", "19240053": "PMC2732914", "20141248": "PMC3703617", "22574741": "PMC3555056", "24305170": "PMC3931261", "25714002": "PMC4356640", "25802725": "PMC4364852", "26456622": "PMC4833150", "26461463": "PMC5564514", "27500523": "PMC5007158", "27858848": "PMC5591096", "28877533": "PMC5659294", "31141989": "PMC6631257", "31320226": "PMC7089776", "32733111": "PMC7377539", "33454797": "PMC7870766", "34877660": "PMC8940650", "36118414": "PMC9481373", "36152308": "PMC9841299", "37306344": "PMC10309098", "38504095": "PMC10951231", "38519421": "PMC11102648", "38540209": "PMC10967865", "38610733": "PMC11012255", "38647526": "PMC11208962", "38685044": "PMC11059713", "38776596": "PMC11141156", "38791422": "PMC11120965", "39407134": "PMC11481807", "28609430": "PMC5645220", "38576571": "PMC10990950", "23394390": null, "16871470": null, "9284848": null, "18483375": null, "38654529": null, "3571939": null, "37061107": null, "10471060": null, "22006095": null, "26211952": null, "7586928": null, "24062210": null, "20231857": null, "15564883": null, "10626755": null, "15179414": null, "38637522": null, "18781853": null, "38479169": null, "19926050": null, "19859084": null, "19496924": null, "20488759": null, "17645482": null, "37451178": null, "1505152": null, "9357389": null, "38572689": null, "18751689": null, "25652102": null, "17324111": null, "24525658": null, "38720595": null, "37438870": null, "10999835": null, "9476037": null, "17909004": null, "38517706": null, "25677447": null, "31870219": null, "3769385": null, "31350855": null, "15289788": null, "12439227": null, "25944848": null, "24351870": null, "22718623": null, "27611887": null, "28480819": null, "9164419": null, "20072124": null, "24352002": null, "26024717": null, "23733010": null, "18600531": null, "14659971": null, "23059146": null, "24820765": null, "15282200": null, "24828442": null, "16833023": null, "38493369": null, "17687269": null, "16021435": null, "38747453": null, "9517369": "PMC1873375", "18322281": "PMC3894627", "20200517": "PMC2928561", "20226083": "PMC2855513", "21186350": "PMC3030919", "22453232": "PMC3369131", "23559864": "PMC3611944", "23665868": "PMC3818912", "27010727": "PMC4806848", "29478026": "PMC5866313", "29607533": "PMC6005582", "34025422": "PMC8137991", "34683865": "PMC8540141", "35135554": "PMC8822703", "38474016": "PMC10931982", "38514707": "PMC10957942", "38598106": "PMC11088557", "38693155": "PMC11063049", "38765788": "PMC11102100", "38773528": "PMC11106956", "38809387": "PMC11315837", "38927668": "PMC11203291", "38934229": "PMC7616417", "38963454": "PMC11393095", "38994198": "PMC11236688", "39014868": "PMC11252221", "39024362": "PMC11257390", "39025838": "PMC11258238", "39055374": "PMC11269678", "39071983": "PMC11271148", "39081053": "PMC11605493", "39115847": "PMC11310823", "39131200": "PMC11314417", "39204422": "PMC11359404", "39240338": "PMC11458732", "39344086": "PMC11528939", "39380207": "PMC11773121", "39390741": "PMC11862786", "39774699": "PMC11825576", "34523245": "PMC8441053", "20028383": "PMC11159193", "10190648": "PMC2014166", "39382000": "PMC11492722", "8986921": null, "39139076": null, "16355344": null, "38381330": null, "25056761": null, "19395426": null, "9951426": null, "22462746": null, "34504302": null, "38993001": null, "39237024": null, "9829356": null, "17965519": null, "23898114": null, "20368718": null, "24628014": null, "22249355": null, "27288795": null, "11668219": null, "39147616": null, "38421437": null, "24566734": null, "39152554": null, "35853541": null, "38994750": null, "22535333": null, "27403931": null, "21192313": null, "39182670": null, "17439512": null, "1960624": null, "19745563": null, "39041443": null, "38925553": null, "37906625": null, "39212958": null, "26265231": null, "25986028": null, "39356102": null, "27673605": null, "12844136": null, "24598718": null, "39038621": null, "9661139": null, "31907389": null, "12955294": null, "39084859": null, "39171589": null, "16580900": null, "14695703": null, "32208328": null, "38896022": null, "29325225": null, "18727922": null, "32173978": null, "19940985": null, "8946657": null, "8257179": "PMC1029622", "12919186": "PMC1884342", "18424454": "PMC2599947", "20078613": "PMC2830598", "21390311": "PMC3044738", "21642471": "PMC3786668", "21709633": "PMC3539557", "22875663": "PMC4039203", "23371292": "PMC3617060", "23384627": "PMC3624039", "23417334": "PMC3675749", "23543259": "PMC3608305", "24024018": "PMC3766937", "24448396": "PMC3985268", "25722197": "PMC4542662", "25991289": "PMC5051541", "26244574": "PMC4526634", "28160554": "PMC5392306", "29488276": "PMC6003833", "29925376": "PMC6011347", "31901240": "PMC6942309", "37569738": "PMC10418744", "39410605": "PMC11475898", "39441506": "PMC11573879", "39468580": "PMC11520374", "39488825": "PMC11652804", "39492848": "PMC11531276", "39539273": "PMC11555502", "39611166": "PMC11603417", "39612420": "PMC11608742", "39688234": "PMC11995662", "39738991": "PMC11685162", "39771563": "PMC11677811", "39796117": "PMC11720188", "39858006": "PMC11763628", "39960813": "PMC12043259", "39995492": "PMC11850035", "40005966": "PMC11860030", "40048458": "PMC11884701", "40050768": "PMC11887348", "40055599": "PMC11887086", "40066084": "PMC11891766", "39974498": "PMC11758033", "39720462": "PMC11667419", "31033190": "PMC6742943", "23052413": "PMC3621996", "11127854": null, "40029062": null, "27396837": null, "23263738": null, "39717930": null, "17242628": null, "39025933": null, "39658609": null, "29535109": null, "18597649": null, "34406845": null, "39432161": null, "25921178": null, "27099220": null, "39704240": null, "39643544": null, "39667604": null, "34529545": null, "9433390": null, "22083166": null, "26214065": null, "21803659": null, "11434512": null, "38491961": null, "28430711": null, "33850298": null, "22594510": null, "39730940": null, "26293616": null, "39542691": null, "39901718": null, "22686296": null, "26616742": null, "40001258": null, "39490424": null, "39011815": null, "23942539": null, "39617342": null, "40080971": null, "39711059": null, "20125119": null, "15565110": null, "28535629": null, "39940086": null, "10831022": null, "39492517": null, "39580648": null, "39752799": null, "19545554": null, "27249660": null, "16249913": null, "39718059": null, "27416873": null, "22188362": null, "15453913": "PMC524175", "17588543": "PMC2194758", "18325643": "PMC2292110", "18408560": "PMC3208318", "19228618": "PMC2722908", "19414708": "PMC4272010", "19842931": "PMC2820245", "20662624": "PMC2919241", "21127708": "PMC2992873", "21956618": "PMC3329222", "22920393": "PMC3518380", "23198157": "PMC3505921", "23992748": "PMC3938989", "24386571": "PMC3872414", "24492364": "PMC4023787", "24729586": "PMC4100708", "26915813": "PMC4865408", "28686080": "PMC5619051", "28932176": "PMC5598801", "29113387": "PMC5655282", "29682213": "PMC5908314", "29695967": "PMC5904201", "30425908": "PMC6231319", "30886581": "PMC6409308", "31206155": "PMC7963143", "32256718": "PMC7086280", "33230203": "PMC8141066", "34231218": "PMC8672325", "35852913": "PMC7613628", "37141338": "PMC10159199", "38221808": "PMC10898793", "38232251": "PMC10769478", "38380703": "PMC10880038", "39069949": "PMC11404698", "39928707": "PMC11809887", "35431360": "PMC8973308", "34302046": "PMC8455325", "31192912": "PMC6587626", "28992563": "PMC7497848", "28435308": "PMC5386607", "27158673": "PMC4855508", "27110128": "PMC4835128", "22641026": "PMC3434304", "21803869": "PMC3213989", "21332319": null, "29427770": null, "24751813": null, "35081606": null, "12920202": null, "18443790": null, "22292851": null, "22230405": null, "19302829": null, "29540324": null, "18981587": null, "21593757": null, "27624150": null, "17978999": null, "18855532": null, "25271728": null, "26407542": null, "19692684": null, "16413245": null, "16909270": null, "8952600": null, "25025989": null, "23652803": null, "20079160": null, "27422302": null, "18408563": null, "16604300": null, "31806882": null, "18221820": null, "27816260": null, "20300048": null, "27160388": null, "35434830": null, "23510058": null, "29748863": null, "37269349": null, "18245543": null, "24809448": null, "23706899": null, "27406852": null, "23996099": null, "22838950": null, "20029384": null, "14534525": null, "35971863": null, "27485537": null, "29134491": null, "35968761": null, "22584460": null, "16890579": null, "26213157": null, "37146669": null, "23126384": null, "32134726": null, "21057703": null, "20235788": null, "19094200": "PMC2644687", "19387461": "PMC2810514", "19846067": "PMC2794921", "20091113": "PMC4454285", "20176026": "PMC2883666", "20194480": "PMC2896457", "20305679": "PMC2860533", "20389235": "PMC4892373", "20592455": "PMC3833422", "20694283": "PMC2949522", "20724655": "PMC2952572", "21107309": "PMC3055694", "22440088": "PMC3320544", "22871975": "PMC3461592", "23147557": "PMC4011617", "23240711": "PMC3548029", "23241943": "PMC3922978", "23353631": "PMC3756535", "23571513": "PMC3712827", "23834376": "PMC3952719", "25290263": "PMC4350512", "26927285": "PMC5009007", "27812499": "PMC5079351", "29450233": "PMC5800559", "31562781": "PMC10810687", "32020635": "PMC8758337", "33953123": "PMC8108700", "34173968": "PMC8599229", "36278153": "PMC9585281", "36292717": "PMC9601332", "37456358": "PMC10349379", "38385986": "PMC10883345", "38765922": "PMC11082567", "39093709": "PMC11544447", "39319218": "PMC11421434", "22331829": null, "24036429": null, "36373739": null, "34523354": null, "18687167": null, "37460702": null, "22795047": null, "32090339": null, "19290789": null, "21652606": null, "19898263": null, "19636336": null, "18600527": null, "19893579": null, "20016225": null, "29432897": null, "17361120": null, "22926616": null, "38369687": null, "19875892": null, "35880564": null, "27670765": null, "38381003": null, "16432637": null, "33622083": null, "19065121": null, "26316040": null, "19926672": null, "20709156": null, "28719598": null, "20195290": null, "20196918": null, "27773592": null, "18303965": null, "15692831": null, "21280081": null, "22256867": null, "32371615": null, "23570466": null, "35878676": null, "24061445": null, "26174719": null, "19236730": null, "17467803": null, "19361869": null, "26951882": null, "28745577": null, "17602083": null, "35316848": null, "39214396": null, "17092969": null, "20580759": null, "15073101": null, "19345712": null, "14765194": null, "23859570": null, "18981009": null, "24703092": null, "12844134": null, "20472929": null, "23863317": null, "25201288": null, "20054294": null, "23894093": null, "22329723": null, "16433869": "PMC1885008", "18250251": "PMC2666924", "19907160": "PMC2853591", "21505315": "PMC4892378", "22566498": "PMC3530397", "22630058": "PMC6493375", "23335901": "PMC3544007", "24123600": "PMC3858547", "25079360": "PMC4183989", "26191232": "PMC4503103", "27021566": "PMC4943245", "27799217": "PMC5192124", "27802415": "PMC5145728", "28525903": "PMC5514947", "28673292": "PMC5496343", "29624706": "PMC6046471", "29791014": "PMC6089815", "30289819": "PMC6262886", "30544975": "PMC6313513", "31728800": "PMC7197488", "33476460": "PMC8182957", "33675323": "PMC8184575", "34512362": "PMC8426351", "35335877": "PMC8954661", "35335997": "PMC8953705", "36210801": "PMC9537548", "38312123": "PMC10838100", "38485815": "PMC10917709", "39456782": "PMC11507373", "39523378": "PMC11552228", "36246675": "PMC9532634", "34541364": "PMC8445626", "23173844": "PMC3523080", "22648373": "PMC3433845", "20523342": "PMC4002970", "19740397": "PMC2766479", "39563600": "PMC11703455", "19581389": null, "24667440": null, "19946932": null, "28639493": null, "38636352": null, "27490376": null, "36718958": null, "30920410": null, "19444285": null, "19005160": null, "21606533": null, "22821704": null, "22057858": null, "31099054": null, "25658497": null, "25049054": null, "17064846": null, "26071206": null, "28639471": null, "17704420": null, "23494984": null, "26282453": null, "16610939": null, "22840423": null, "22414228": null, "16765146": null, "21110192": null, "25698453": null, "29407288": null, "21561445": null, "25989180": null, "39426598": null, "29342288": null, "34320607": null, "22379997": null, "19143748": null, "21121772": null, "14586389": null, "27546373": null, "27092952": null, "19891553": null, "17541557": null, "11907712": null, "36250837": null, "12419790": null, "21332314": null, "25963335": null, "22722500": null, "21311897": null, "25896535": null, "18195729": null, "17337040": null, "31002879": null, "23131881": null, "15116053": null, "24407380": null, "17015050": null, "15687340": null, "25930089": null, "32731218": null, "19818381": null, "12356937": null, "39048464": null, "10716719": "PMC16264", "19193698": "PMC2681284", "19752777": "PMC3330749", "21747589": "PMC3125052", "21779873": "PMC3444290", "23158458": "PMC3582836", "23166513": "PMC3499361", "23940523": "PMC3734199", "24038027": "PMC3912955", "25611810": "PMC4500334", "25955730": "PMC4425504", "26039043": "PMC4454552", "26441325": "PMC4595504", "27139004": "PMC4854407", "27758888": "PMC5135610", "28165634": "PMC6171340", "29341237": "PMC5903228", "29382897": "PMC5789875", "30237584": "PMC6426691", "30745309": "PMC6423619", "30992538": "PMC6800829", "34412101": "PMC8702453", "36938952": "PMC10214567", "37420302": "PMC10327396", "38156857": "PMC10909096", "39201627": "PMC11354576", "17404720": "PMC1963422", "12436350": "PMC2896566", "19500084": null, "14583680": null, "30967597": null, "37734262": null, "25026456": null, "24350812": null, "23842101": null, "26745768": null, "17325736": null, "37824400": null, "19770842": null, "16462575": null, "16267764": null, "17519421": null, "39054222": null, "15614026": null, "19365399": null, "17431185": null, "19327620": null, "12189368": null, "22495427": null, "19095219": null, "17178264": null, "18347005": null, "15773232": null, "27096233": null, "12969965": null, "28379874": null, "21109570": null, "25935875": null, "17261659": null, "24704000": null, "11222464": null, "18025780": null, "19387626": null, "17473847": null, "20625352": null, "14747421": null, "21449681": null, "18594050": null, "21739446": null, "18542936": null, "10961881": null, "23007311": null, "19827168": null, "35697190": null, "17111267": null, "21503910": null, "16979018": null, "12811365": null, "17030231": null, "36229649": null, "16463153": null, "38171911": null, "12042669": null, "20441246": null, "16401468": null, "22490566": null, "24361227": null, "21741447": null, "15694263": null, "8728305": null, "36773010": null, "29095108": null, "12891229": null, "30971809": null, "19733552": null, "28777242": null, "22471336": null, "19207029": null, "24192302": null, "17178265": null, "18542840": "PMC3836273", "19193628": "PMC2664151", "20931559": "PMC3653303", "21048934": "PMC2966433", "21321200": "PMC3048137", "23092981": "PMC3565812", "23555300": "PMC3610685", "23856854": "PMC4034115", "24217698": "PMC3910846", "24422887": "PMC6493124", "25348609": "PMC4505931", "25411163": "PMC4323272", "25461247": "PMC4387236", "26070913": "PMC4641035", "26334898": "PMC4616511", "26339796": "PMC4560372", "27045730": "PMC5558527", "27897268": "PMC9536193", "28663312": "PMC5562097", "28743242": "PMC5526237", "28871191": "PMC5583388", "28914344": "PMC5684285", "28947469": "PMC5700353", "28951782": "PMC5611711", "30762755": "PMC6408006", "30840592": "PMC6411020", "31857620": "PMC6923423", "32736537": "PMC7393710", "33829662": "PMC8222836", "34965002": "PMC9306465", "36766510": "PMC9914414", "38315168": "PMC11134291", "32106141": "PMC7398416", "29706892": "PMC5908896", "29317847": "PMC5743122", "21441248": "PMC3092713", "19057464": "PMC2733171", "14534524": null, "23816762": null, "21145801": null, "37858371": null, "20829635": null, "23959273": null, "20622033": null, "20872712": null, "20220551": null, "12921807": null, "21239504": null, "28763744": null, "27168100": null, "23299853": null, "31250727": null, "25303300": null, "20804372": null, "20863575": null, "24567120": null, "23809733": null, "18851956": null, "25649181": null, "16084854": null, "28833323": null, "38126330": null, "19350112": null, "25143324": null, "26216687": null, "21747412": null, "27142945": null, "27883323": null, "29374517": null, "21173786": null, "37845416": null, "14625131": null, "17283289": null, "28941036": null, "16947783": null, "15888487": null, "21195460": null, "30908574": null, "37851084": null, "32128760": null, "25515945": null, "20812847": null, "24061601": null, "24446315": null, "19542315": null, "25303299": null, "21111021": null, "27702941": null, "38713940": null, "23609393": null, "21447862": null, "39300676": null, "21254157": null, "21635147": null, "37574850": null, "30713339": null, "24369049": null, "23505228": null, "35608144": null, "29442027": null, "18305455": "PMC2683977", "18580877": "PMC2885152", "19119263": "PMC2715837", "20673984": "PMC2943151", "20682687": "PMC3279522", "20886236": "PMC3016221", "23567489": "PMC3959225", "24836205": "PMC4154311", "24927344": "PMC4078496", "24951635": "PMC10852661", "25665511": "PMC4762902", "26306225": "PMC4525256", "26407342": "PMC4583245", "26437921": "PMC4672523", "27482244": "PMC4965653", "29743634": "PMC5943457", "29950617": "PMC6461793", "30518301": "PMC6479273", "30723321": "PMC6752321", "31114289": "PMC6489578", "32994732": "PMC7499297", "33030089": "PMC8163522", "37108150": "PMC10139129", "29650774": "PMC6014560", "29568565": "PMC5859345", "29230023": "PMC7039663", "29160300": "PMC8513493", "28775293": "PMC5543069", "22024001": "PMC3225067", "40004467": "PMC11855146", "29882324": null, "24776844": null, "18722008": null, "22172097": null, "32787509": null, "21103886": null, "21233271": null, "33190395": null, "24637499": null, "37611146": null, "24192531": null, "24461666": null, "32893730": null, "22192158": null, "21057378": null, "29054760": null, "28485375": null, "29575099": null, "28791698": null, "20157310": null, "33094665": null, "23686330": null, "17186005": null, "25229170": null, "35272420": null, "21733227": null, "24035255": null, "20833655": null, "29369421": null, "22851411": null, "38706338": null, "35259926": null, "18200436": null, "27541716": null, "26659468": null, "28745555": null, "28696414": null, "16580898": null, "22153130": null, "19374892": null, "38886107": null, "24752311": null, "20116071": null, "38327217": null, "30767719": null, "24763183": null, "12893985": null, "16153401": null, "31649263": null, "39884809": null, "22486528": null, "23313410": null, "24815731": null, "19738376": null, "19865079": null, "18182069": null, "26902643": null, "24706503": null, "32838647": null, "19150055": null, "21535061": null, "21550019": null, "19635985": null, "28382498": null, "26324139": null, "30024814": null, "21625751": null, "23142150": null, "24192117": null, "22266406": null, "17156920": "PMC1995596", "18657677": "PMC2547143", "19300499": "PMC2652833", "20203262": "PMC2865873", "22538805": "PMC3381232", "22949529": "PMC3462355", "23651024": "PMC3867202", "25155932": "PMC4190075", "25860945": "PMC4425056", "26109805": "PMC4476880", "27248474": "PMC5342450", "27386433": "PMC4916778", "27747906": "PMC5306492", "27911795": "PMC5167198", "28112181": "PMC5342670", "28184434": "PMC5412025", "28212683": "PMC5316146", "23337555": "PMC3633658", "23087401": "PMC3529147", "22907730": "PMC3941038", "28383427": "PMC5411211", "28973620": "PMC5818817", "30506689": "PMC6542461", "31014225": "PMC6734474", "38612496": "PMC11011338", "38752093": "PMC11095822", "39539630": "PMC11558073", "39789135": "PMC11717999", "39896937": "PMC11787782", "39920787": "PMC11803932", "25069034": null, "24732178": null, "21769110": null, "16788380": null, "10594793": null, "27567841": null, "31846553": null, "29790402": null, "23069858": null, "39522115": null, "3816019": null, "23142377": null, "39535282": null, "23375287": null, "24034787": null, "27001119": null, "24712521": null, "29580174": null, "21940774": null, "12966368": null, "31866536": null, "26158282": null, "17356468": null, "9918131": null, "22986918": null, "15830237": null, "33731885": null, "27190009": null, "28409297": null, "3621781": null, "23900887": null, "23859573": null, "24192121": null, "16707601": null, "29080719": null, "31201901": null, "22960943": null, "10073515": null, "33887993": null, "26975227": null, "37114884": null, "36408735": null, "25537528": null, "27338075": null, "21188787": null, "35303539": null, "25155934": null, "22893251": null, "28383355": null, "26829596": null, "25339146": null, "28346059": null, "25327507": null, "28624668": null, "29517409": null, "31324945": null, "15203796": null, "29790415": null, "31124411": null, "21498394": null, "28726812": null, "29589488": null, "19258929": null, "22725663": null, "29975559": null, "22426923": null, "22120873": null, "17512587": null, "21892778": null, "24192118": null, "15604153": "PMC539815", "18617639": "PMC2556451", "18618621": "PMC2660379", "19016697": "PMC2680291", "19890249": "PMC2884029", "21228733": "PMC3038469", "22541248": "PMC3992925", "23886675": "PMC3845218", "25210463": "PMC4154892", "25303296": "PMC4208722", "25493567": "PMC4292894", "26162609": "PMC4551162", "27846195": "PMC5152628", "28222112": "PMC5319785", "28331852": "PMC5346382", "28346387": "PMC5412267", "29250329": "PMC5727754", "31058715": "PMC6613715", "35214132": "PMC8880478", "36015253": "PMC9413960", "36253887": "PMC9819208", "36613935": "PMC9820795", "36624463": "PMC9830790", "38589850": "PMC11000398", "35102242": "PMC8975736", "28611364": "PMC5469860", "27825374": "PMC5101708", "23738951": "PMC3895354", "21698374": "PMC3214266", "21206424": "PMC3579501", "16201835": "PMC1251635", "22310591": null, "15608561": null, "16815314": null, "15564877": null, "28367681": null, "15864128": null, "15148588": null, "29502154": null, "27900402": null, "36951964": null, "18256692": null, "20615525": null, "23371894": null, "28350522": null, "32308125": null, "15226090": null, "11311507": null, "12844135": null, "23944300": null, "28330783": null, "39898620": null, "23364483": null, "23757359": null, "28322941": null, "23556445": null, "11933204": null, "22285300": null, "28343093": null, "19749757": null, "11697464": null, "30983549": null, "15630486": null, "25939711": null, "26490356": null, "15249972": null, "38133857": null, "33858192": null, "28358597": null, "19272758": null, "15930419": null, "28332719": null, "23422377": null, "22704849": null, "15554460": null, "22369694": null, "21241071": null, "31796940": null, "21922127": null, "29061086": null, "28373444": null, "27193222": null, "12563174": null, "16572443": null, "36622792": null, "25379722": null, "25356900": null, "18926547": null, "25365528": null, "28685643": null, "23965986": null, "25991051": null, "22304537": null, "29178257": null, "20818834": null, "36256705": null, "24192120": null, "20417680": null, "25673568": null, "12893983": null, "16611750": "PMC2564574", "18285551": "PMC4615595", "18425130": "PMC2596476", "20716240": "PMC2949912", "25350695": "PMC4220464", "25385345": "PMC4338734", "25456329": "PMC4254688", "25793413": "PMC4368615", "25872459": "PMC4631197", "25920679": "PMC4468641", "26086825": "PMC4490522", "26098993": "PMC4618180", "26348712": "PMC4575538", "26426212": "PMC4890827", "26466344": "PMC5138058", "26902539": "PMC4995153", "26903268": "PMC5003027", "27793583": "PMC5264271", "27938396": "PMC5148898", "28178031": "PMC5346034", "28992386": "PMC5711571", "29457840": "PMC5980466", "30106255": "PMC7292331", "30106258": "PMC7292295", "30648747": "PMC6612579", "37706370": "PMC10645035", "38450253": "PMC10914946", "38756645": "PMC11094496", "29265379": "PMC6086578", "29201113": "PMC5610780", "26030142": "PMC4452656", "25834819": "PMC4365300", "25096017": "PMC4282597", "23183491": "PMC3873034", "21392617": "PMC3061841", "19684603": "PMC2762391", "19679631": "PMC3131846", "18292785": "PMC5531276", "26257249": null, "17049586": null, "25311995": null, "25846690": null, "26004431": null, "37817654": null, "10975602": null, "20171873": null, "24236484": null, "30922102": null, "25412950": null, "26513304": null, "31401678": null, "38470454": null, "15358623": null, "21837673": null, "25266159": null, "26003758": null, "29061081": null, "17585213": null, "29243113": null, "28262345": null, "30457672": null, "18484082": null, "32481444": null, "26524290": null, "9409631": null, "10190398": null, "25769643": null, "29279204": null, "26705892": null, "26426211": null, "25306451": null, "28711222": null, "27967318": null, "9827545": null, "26521987": null, "18050121": null, "28084894": null, "24316028": null, "28976264": null, "39012380": null, "17652833": null, "29087970": null, "12663600": null, "29502940": null, "28820077": null, "15284534": null, "18417193": null, "23281610": null, "20352314": null, "27095468": null, "17192506": null, "29099735": null, "23172109": null, "28025020": null, "25240575": null, "25682022": null, "23909491": null, "24980946": null, "30779340": null, "16607077": null, "18728241": "PMC2679896", "20346718": "PMC3598593", "20442691": "PMC3098751", "23372834": "PMC3555879", "23599738": "PMC3628804", "24154666": "PMC3988537", "25473543": "PMC4184528", "25624441": "PMC4375304", "25676789": "PMC4479153", "25801567": "PMC4432150", "25932441": "PMC4390701", "26135562": "PMC4702321", "26474553": "PMC4609097", "27738808": "PMC7115946", "28002447": "PMC5176308", "28045923": "PMC5207665", "28049362": "PMC6714673", "28107378": "PMC5249113", "28115488": "PMC5298887", "28207573": "PMC5346037", "28358908": "PMC5373543", "28419121": "PMC5395152", "28562428": "PMC6298606", "28620303": "PMC5449482", "28886044": "PMC5590735", "29315502": "PMC6037621", "29497164": "PMC5983535", "29621993": "PMC5887212", "30304062": "PMC6179259", "32082176": "PMC7005197", "32344532": "PMC7215378", "33512723": "PMC11240873", "36742186": "PMC9891445", "37203300": "PMC10196221", "37342387": "PMC10278212", "37353859": "PMC10499425", "37555408": "PMC10501538", "38826804": "PMC11140026", "25918834": "PMC4511425", "23100282": "PMC3612775", "20140004": "PMC4002408", "19331489": "PMC3682424", "19056598": "PMC2647710", "39484171": "PMC11524821", "26568242": null, "8004131": null, "22950382": null, "15864131": null, "28611235": null, "26556041": null, "24279852": null, "26784512": null, "26876050": null, "32295690": null, "20003118": null, "25943212": null, "38443268": null, "28314991": null, "22417933": null, "28418010": null, "25141893": null, "35705023": null, "30031856": null, "26194361": null, "16002074": null, "25084201": null, "28289864": null, "26866747": null, "29454235": null, "38287840": null, "25950190": null, "25755212": null, "18347182": null, "25171465": null, "20207952": null, "29873816": null, "16769602": null, "23302985": null, "31607718": null, "25403995": null, "18810246": null, "25080450": null, "36193736": null, "16581111": null, "28947035": null, "18713756": null, "26595166": null, "28289867": null, "25145599": null, "21644011": null, "20348464": null, "26799664": null, "33608663": null, "24059494": null, "22383676": null, "15548849": null, "19578179": null, "24668570": null, "21398039": null, "25532715": null, "12759288": "PMC1754569", "17699831": "PMC2168111", "19628476": "PMC2748889", "20859243": "PMC2976715", "21270790": "PMC3625373", "22951632": "PMC3940150", "23204795": "PMC3506814", "23272163": "PMC3525665", "23612435": "PMC3746708", "24300566": "PMC3901533", "24521642": "PMC3978988", "25171759": "PMC4206345", "25563748": "PMC4915265", "25897834": "PMC4462610", "26010901": "PMC4444267", "26334272": "PMC4613221", "26405151": "PMC4697903", "26806518": "PMC4814312", "23753411": "PMC3780966", "22761669": "PMC3383686", "19694741": "PMC2767285", "26857559": "PMC4746878", "27695358": "PMC5028170", "28256933": "PMC5521342", "28358842": "PMC5373545", "28437488": "PMC5402961", "28488026": "PMC6387687", "28696411": "PMC5538123", "31557306": "PMC6851426", "34482033": "PMC8767566", "34488071": "PMC9328121", "34680127": "PMC8533258", "36172660": "PMC9810307", "36741090": "PMC9890192", "36764694": "PMC10085626", "37202871": "PMC10527451", "38540428": "PMC10970167", "38980270": "PMC11244643", "39030549": "PMC11264771", "39846525": "PMC11755583", "23628510": null, "25823783": null, "37962984": null, "16321621": null, "31611591": null, "25823782": null, "28639487": null, "27977511": null, "29252193": null, "36739459": null, "26590936": null, "26242222": null, "27195527": null, "19604081": null, "37820941": null, "19183167": null, "16158080": null, "23970434": null, "18797399": null, "16906017": null, "24240480": null, "24253594": null, "25823785": null, "12190096": null, "15694942": null, "28816644": null, "26445138": null, "37331863": null, "24597986": null, "26033531": null, "28858994": null, "26744986": null, "28624888": null, "27566695": null, "39375343": null, "34843922": null, "26433837": null, "24293076": null, "23837476": null, "24048425": null, "29039339": null, "25348619": null, "23469684": null, "19590397": null, "25311255": null, "18435918": null, "17180579": null, "16115483": null, "26076924": null, "39626927": null, "31402421": null, "24090479": null, "18430057": null, "34689504": null, "26100253": null, "25346426": null, "27284701": null, "16103896": null, "33501733": null, "26313487": null, "15834068": "PMC1755496", "19151602": "PMC2641037", "19297519": "PMC2684883", "19369910": "PMC2857717", "20338069": "PMC2859392", "22471906": "PMC3522814", "22480177": "PMC3396003", "22590580": "PMC3348126", "23077486": "PMC3471928", "23358500": "PMC3778124", "23431434": "PMC3575609", "24024897": "PMC3860742", "24729984": "PMC3983993", "24853734": "PMC4171106", "25039301": "PMC4300289", "25367448": "PMC4224698", "25405601": "PMC4236071", "26788534": "PMC4707035", "26833182": "PMC4735517", "27445478": "PMC4938133", "27566582": "PMC5354739", "27845419": "PMC5432414", "28171547": "PMC5886039", "28290528": "PMC5599305", "29234073": "PMC5727167", "30016335": "PMC6049926", "34585840": "PMC8841435", "34910759": "PMC8673616", "36614097": "PMC9820603", "38837984": "PMC11152251", "39107874": "PMC11773116", "24997317": null, "16871067": null, "28796378": null, "36627267": null, "24595507": null, "24102823": null, "22480748": null, "22129793": null, "26107754": null, "21359536": null, "24907224": null, "18438841": null, "21946898": null, "14570538": null, "19481584": null, "23127338": null, "25408262": null, "39159789": null, "23697249": null, "26373210": null, "21642870": null, "28692418": null, "26790665": null, "25560469": null, "21084764": null, "23127916": null, "23230131": null, "32559398": null, "25881752": null, "24583629": null, "22695756": null, "34983973": null, "26804652": null, "15695296": null, "24768758": null, "12847678": null, "10101295": null, "17343250": null, "26503813": null, "25274942": null, "29306656": null, "16720636": null, "26196596": null, "39179559": null, "31932875": null, "28145050": null, "33589792": null, "18050183": null, "18496129": null, "25974723": null, "21391884": null, "12732846": null, "24602923": null, "33548906": null, "26846104": null, "29160302": null, "21273734": null, "30672383": null, "16123758": null, "27992301": null, "26086348": null, "16879459": null, "26371285": null, "19207028": null, "28470127": null, "24024898": null, "37098851": null, "19218571": null, "21576632": null, "10233211": "PMC2014233", "16642436": "PMC1474035", "18377430": "PMC11158672", "19077664": "PMC2896826", "21174568": "PMC3006662", "21358750": "PMC3130093", "21358751": "PMC3310336", "21790905": "PMC3735354", "22792082": "PMC3390407", "23860526": "PMC3749570", "24073221": "PMC3779247", "24280104": "PMC3943570", "24338217": "PMC3890033", "24724887": "PMC4600600", "24727911": "PMC3984266", "25156213": "PMC4342329", "25616159": "PMC4461653", "25638254": "PMC4345005", "25916517": "PMC4719145", "26083242": "PMC4470685", "27091191": "PMC4969350", "27622933": "PMC5048209", "27729204": "PMC5203947", "29318894": "PMC6021962", "29525816": "PMC5875353", "30071039": "PMC6071997", "30075559": "PMC6081148", "30368523": "PMC6486881", "30924126": "PMC6941886", "31160146": "PMC6760244", "36569923": "PMC9768477", "39891427": "PMC11786019", "27096250": "PMC4972156", "25422735": "PMC4240933", "24279416": "PMC6493076", "23119086": "PMC3485381", "18615156": "PMC2276142", "18509327": "PMC4612590", "38001504": "PMC10668502", "23007924": null, "31269327": null, "25098908": null, "25245580": null, "20559687": null, "22838949": null, "21449848": null, "20637204": null, "31755291": null, "21392722": null, "25239468": null, "21572301": null, "33731884": null, "29911750": null, "12057029": null, "22189199": null, "36169235": null, "12545140": null, "28006928": null, "26825765": null, "23803057": null, "17008591": null, "25209194": null, "26111150": null, "27262824": null, "22301466": null, "19937159": null, "38714384": null, "20860463": null, "38525959": null, "26111149": null, "20143052": null, "20578254": null, "23592691": null, "19129747": null, "25223561": null, "25090458": null, "21931346": null, "33124517": null, "26189437": null, "20399780": null, "22294058": null, "21907615": null, "25108775": null, "30883264": null, "21362365": null, "25179995": null, "24589908": null, "21383771": null, "20064494": null, "28592191": null, "20568049": null, "29207912": null, "34476566": null, "27557342": null, "32209837": null, "28594304": null, "23763943": null, "22901187": null, "24342961": null, "16127283": null, "19858760": "PMC2888980", "20929549": "PMC2959002", "21157362": "PMC3066089", "21987611": "PMC3180021", "22591463": "PMC3508798", "23233654": "PMC4169706", "23233662": "PMC3567337", "23433505": "PMC3622803", "23941071": "PMC3865618", "24081349": "PMC4502741", "24143213": "PMC3797132", "24909733": "PMC4157963", "25266679": "PMC4406866", "25278709": "PMC4177494", "20854418": "PMC3403289", "25582575": "PMC4762905", "25685741": "PMC4297489", "25734178": "PMC4324232", "25778466": "PMC6174029", "26106580": "PMC4473094", "26132489": "PMC4488893", "26180834": "PMC4498287", "26331942": "PMC4731723", "26425837": "PMC4788379", "27073641": "PMC4812555", "28087982": "PMC5465325", "28614221": "PMC5478306", "30088438": "PMC6219441", "30704436": "PMC6357360", "32701512": "PMC7455128", "33124499": "PMC7649675", "35253216": "PMC9314634", "38714580": "PMC11347466", "38852760": "PMC11269006", "39005567": "PMC11246114", "40014467": "PMC11871410", "29343979": "PMC5749387", "26411831": "PMC4585967", "38560574": "PMC10972729", "25602530": null, "25344452": null, "29207898": null, "15825040": null, "30032160": null, "25622064": null, "16611310": null, "28685396": null, "31486735": null, "25239082": null, "30647443": null, "24193570": null, "26932749": null, "22871995": null, "28837897": null, "15136504": null, "30256423": null, "35108398": null, "25752520": null, "23149441": null, "21112660": null, "37553950": null, "21933224": null, "17001291": null, "17596133": null, "40016980": null, "21384511": null, "28627776": null, "18565259": null, "25730298": null, "15322419": null, "30651574": null, "35107877": null, "21360545": null, "27043265": null, "25919112": null, "25492374": null, "24030684": null, "15864112": null, "15668854": null, "38580563": null, "21711429": null, "20964522": null, "22706623": null, "16220110": null, "30653751": null, "33143542": null, "23730840": null, "16041240": null, "21094796": null, "31636356": null, "25403996": null, "19749758": null, "20621700": null, "17329985": null, "29282363": null, "21246582": null, "31393228": null, "25712183": null, "23083021": null, "21844885": null, "16322642": "PMC2662935", "20680652": "PMC3029819", "21072155": "PMC2966981", "23278282": "PMC4116556", "23613831": "PMC3632552", "23633119": "PMC3755037", "24307847": "PMC3846997", "24968986": "PMC4111883", "25499099": "PMC4433569", "25882300": "PMC6542686", "26810133": "PMC4959996", "27091189": "PMC4836090", "27150640": "PMC5018246", "27456824": "PMC5563830", "27617219": "PMC5006145", "29666375": "PMC5904126", "29925895": "PMC6151284", "30318772": "PMC6246957", "30336686": "PMC6714829", "30381583": "PMC6247602", "30455395": "PMC6328871", "31981411": "PMC7214659", "35884569": "PMC9321338", "37993281": "PMC10668244", "38004402": "PMC10675623", "29520081": null, "20415561": null, "25446771": null, "22149470": null, "25493569": null, "21436775": null, "30324302": null, "21047205": null, "27649267": null, "15707415": null, "22481606": null, "25831219": null, "25521355": null, "21052022": null, "25495409": null, "15864113": null, "16082688": null, "21273673": null, "18443548": null, "25150845": null, "24889923": null, "25536375": null, "32308134": null, "20393454": null, "21544031": null, "24299220": null, "17563401": null, "26644205": null, "21537116": null, "25040563": null, "29662106": null, "27115882": null, "16815317": null, "19067682": null, "21480817": null, "27780742": null, "30569848": null, "12576843": null, "16875718": null, "31250045": null, "21094797": null, "22889968": null, "18214865": null, "16857630": null, "17501853": null, "24978393": null, "15502717": null, "27339827": null, "23215884": null, "25712187": null, "25587129": null, "22749033": null, "16906020": null, "18693052": null, "20728570": null, "18703939": null, "30334909": null, "16815679": null, "22462821": null, "21112657": null, "9595868": null, "18839779": null, "32800527": null, "26518936": null, "30345879": null, "17192769": null, "21677300": null, "26810134": null, "22469198": null, "16876132": null, "19474465": null, "26810137": null, "17404734": null, "24929144": null, "8742444": null, "18250228": "PMC2288721", "18261733": "PMC4565152", "18537939": "PMC2950972", "18784455": "PMC2675161", "19124658": "PMC2650539", "19433561": "PMC2704695", "19704172": "PMC3837290", "21671989": "PMC3244642", "22551036": "PMC3414671", "22992768": "PMC3478502", "23580812": "PMC3621246", "23991193": "PMC3753270", "24619498": "PMC4010098", "25461246": "PMC4280295", "28210634": "PMC5298566", "28261502": "PMC5316454", "29650764": "PMC5901893", "32695297": "PMC7351433", "34464454": "PMC8530979", "22368681": "PMC3282030", "35527244": "PMC9080200", "37332933": "PMC10275785", "39714624": "PMC11666798", "39720770": "PMC11668066", "40001447": "PMC11852071", "20648473": null, "16628701": null, "26002049": null, "19451915": null, "15795539": null, "20720517": null, "17047484": null, "16392089": null, "24958282": null, "28952408": null, "17635182": null, "20060832": null, "25115353": null, "20841522": null, "16181985": null, "38453649": null, "23619509": null, "19125240": null, "35852914": null, "15808586": null, "20415563": null, "16146556": null, "16753004": null, "28694205": null, "26704739": null, "21102498": null, "25501988": null, "30325732": null, "31967515": null, "25026457": null, "28139755": null, "23146466": null, "15167702": null, "17913323": null, "17049058": null, "19684573": null, "19365401": null, "22101623": null, "36222113": null, "20434452": null, "22309416": null, "19531981": null, "17032130": null, "16424824": null, "27027462": null, "21466653": null, "16961627": null, "14578760": null, "18057928": null, "24231473": null, "31588879": null, "18511948": null, "12694072": null, "24293093": null, "22562609": null, "24831655": null, "21331500": null, "20125120": null, "17430486": null, "15226679": null, "26387494": null, "17047492": null, "15729180": null, "37340142": null, "16249748": null, "21839244": null, "15919447": null, "21566507": null, "16421475": null, "18589174": null, "18334918": null, "21851254": null, "38071464": null, "26895070": null, "12425480": null, "17391324": "PMC1974827", "17627617": "PMC11159294", "18341670": "PMC2485247", "20309874": "PMC3652476", "21346780": "PMC3114195", "23590265": "PMC3734608", "23849431": "PMC3818518", "24118301": "PMC3852421", "24126707": "PMC3988270", "24148610": "PMC4015881", "25108385": "PMC4999337", "25695618": "PMC4484731", "25919042": "PMC4631185", "26033044": "PMC4631186", "26191294": "PMC4503165", "20031551": "PMC2995295", "16722833": "PMC1885108", "15188945": "PMC6654446", "26271661": "PMC4693492", "26307125": "PMC4636889", "26905411": "PMC4872428", "26977146": "PMC4764723", "27180831": "PMC4996314", "28246425": "PMC5299197", "28628560": "PMC5548439", "28686294": "PMC5651309", "28692529": "PMC5612381", "28921760": "PMC5807179", "29066864": "PMC5604555", "30420869": "PMC6216325", "30829738": "PMC6587209", "30874608": "PMC6745302", "32555152": "PMC7303159", "33944612": "PMC9552901", "34635730": "PMC8505487", "35873555": "PMC9301121", "36186466": "PMC9515473", "36606188": "PMC9809306", "37693312": "PMC10483403", "37829781": "PMC10566653", "38293288": "PMC10825484", "38562167": "PMC10982510", "20809084": null, "33649516": null, "30366640": null, "25458099": null, "25430046": null, "18347181": null, "23438946": null, "25850964": null, "25279974": null, "18836089": null, "17023870": null, "25340733": null, "26916827": null, "37542618": null, "12359989": null, "17178268": null, "21366650": null, "14700505": null, "38287884": null, "16467099": null, "30323313": null, "26902034": null, "18334919": null, "21063236": null, "38852696": null, "28678049": null, "26141406": null, "20168265": null, "28371569": null, "12668920": null, "25618758": null, "23926243": null, "29318930": null, "25303293": null, "25303294": null, "25069475": null, "21911885": null, "17875118": null, "29148033": null, "26762380": null, "39754510": null, "30549267": null, "28134748": null, "16081343": null, "18253134": null, "29953682": null, "18408564": null, "21842338": null, "31624332": null, "19638460": null, "17015051": null, "16094537": null, "16583408": null, "38728170": null, "25376930": null, "25048416": null, "24066763": null, "31624333": null, "16869811": "PMC2000718", "17439540": "PMC2000640", "20959500": "PMC3100585", "23315174": "PMC3658129", "24728385": "PMC3984158", "24967362": "PMC4055378", "25064769": "PMC4115247", "25594941": "PMC4296935", "25852275": "PMC4385537", "25889207": "PMC4405819", "25891233": "PMC4462564", "25911999": "PMC5541380", "26042510": "PMC4469933", "26107645": "PMC4479596", "26142345": "PMC4537319", "26191484": "PMC4503705", "26264253": "PMC4722076", "26664259": "PMC4661296", "26712426": "PMC4797547", "26831894": "PMC4735961", "27052877": "PMC4931885", "27587472": "PMC5309131", "27698403": "PMC5378677", "28727815": "PMC5519037", "29027195": "PMC5899062", "29295555": "PMC5795999", "29509491": "PMC6006403", "29923122": "PMC6132901", "32555608": "PMC7302666", "33915198": "PMC9373641", "35235559": "PMC8890732", "35799642": "PMC9256318", "37159804": "PMC10163902", "37509727": "PMC10377184", "38669362": "PMC11049768", "39011438": "PMC11246689", "39660002": "PMC11628867", "29867468": "PMC5949564", "26463708": "PMC4794377", "23503447": "PMC3603284", "22700043": null, "29781049": null, "38661209": null, "26421491": null, "38859656": null, "21437990": null, "27991849": null, "17724700": null, "22990223": null, "26651826": null, "26653034": null, "26415694": null, "26419450": null, "37940132": null, "18989660": null, "21121774": null, "18821564": null, "25958342": null, "32500578": null, "28696415": null, "23953100": null, "25679126": null, "28244805": null, "27977334": null, "15262185": null, "26696550": null, "23252721": null, "26284539": null, "27336732": null, "30628914": null, "24956253": null, "35311356": null, "27676277": null, "19593168": null, "21987091": null, "30136624": null, "27098059": null, "26453102": null, "27771748": null, "27031121": null, "26010205": null, "18812236": null, "18349392": null, "18780301": null, "22248286": null, "20970119": null, "19274060": null, "30181602": null, "39253879": null, "37149714": null, "19052714": null, "26401715": null, "26666695": null, "31327267": null, "25937240": null, "27314545": null, "23510626": null, "31406237": null, "27676404": null, "27193993": null, "17673491": "PMC2750008", "19016765": "PMC11160041", "20921307": "PMC2981241", "21743379": "PMC3139013", "23116553": "PMC3690108", "23876228": "PMC3808494", "23940630": "PMC3734060", "24145522": "PMC3910794", "24435759": "PMC4000411", "24633560": "PMC4104334", "24643204": "PMC3958404", "25126975": "PMC4134280", "25279405": "PMC4243902", "25472448": "PMC4265416", "25594874": "PMC4307337", "25615449": "PMC4304713", "25748439": "PMC4356257", "26616421": "PMC4976849", "27655857": "PMC5161051", "27707539": "PMC5241185", "28356835": "PMC4922322", "28462920": "PMC7793629", "28718515": "PMC5600689", "29097388": "PMC5721751", "30815689": "PMC8204702", "32022294": "PMC7319006", "32123296": "PMC7674153", "32367114": "PMC7710914", "32401749": "PMC7245057", "34302059": "PMC8505452", "35658244": "PMC9450009", "36708557": "PMC10152845", "36714653": "PMC9875006", "38674283": "PMC11052159", "38958362": "PMC11221861", "39272186": "PMC11401437", "39465171": "PMC11512548", "39668580": "PMC11638344", "37763115": "PMC10532840", "37760947": "PMC10526247", "29875668": "PMC5975540", "29259946": "PMC5734971", "28154789": "PMC5282793", "23729673": "PMC4296254", "26408409": null, "37775332": null, "37493972": null, "19904007": null, "32559325": null, "23645042": null, "26566055": null, "24360851": null, "18308786": null, "38821204": null, "26556688": null, "24274990": null, "27261537": null, "29578580": null, "25836994": null, "32432768": null, "34545025": null, "37855290": null, "27564082": null, "21635146": null, "37318060": null, "21886016": null, "10511065": null, "36484758": null, "25565672": null, "32407152": null, "21178986": null, "18335219": null, "22965830": null, "27660918": null, "32461666": null, "25410894": null, "28753467": null, "37500985": null, "21806385": null, "26502740": null, "25102313": null, "25215437": null, "36394393": null, "24134200": null, "21127421": null, "39462036": null, "32015456": null, "24739669": null, "22158330": null, "26439641": null, "22515274": null, "32448869": null, "25630984": null, "35105285": null, "28947383": null, "38669948": null, "22786571": null, "26222310": null, "27798726": null, "26458301": null, "11953843": "PMC2364178", "17885551": "PMC2792638", "18685564": "PMC2762405", "19440701": "PMC2908290", "20078617": "PMC2830602", "22591328": "PMC6493603", "22751958": "PMC3425006", "23656803": "PMC3692386", "25389973": "PMC4229256", "25622599": "PMC4330076", "26307969": "PMC4581326", "26307985": "PMC4613195", "26774659": "PMC4931969", "27104192": "PMC4828529", "27648687": "PMC5558541", "27779248": "PMC5817388", "27897269": "PMC5817390", "27958381": "PMC5468510", "27987364": "PMC5189722", "28550460": "PMC5508045", "28685716": "PMC5520553", "28740425": "PMC5505550", "29117017": "PMC5726942", "29804290": "PMC6265082", "30367352": "PMC6451710", "31493434": "PMC6801039", "34380996": "PMC8578201", "35453646": "PMC9028965", "35457347": "PMC9031832", "37763120": "PMC10532907", "38543282": "PMC10974048", "38835664": "PMC11148365", "38999967": "PMC11241034", "39135792": "PMC11317398", "39457109": "PMC11508189", "39459499": "PMC11509751", "29755652": "PMC5945500", "28004016": "PMC5142600", "26779253": "PMC4703773", "24223824": "PMC3818406", "23354298": "PMC3604156", "22940027": "PMC3786328", "38674430": "PMC11049954", "17190370": null, "24820767": null, "36029108": null, "24495780": null, "27610747": null, "39453028": null, "17306068": null, "27241063": null, "27958380": null, "21148049": null, "23266789": null, "37307170": null, "23149126": null, "25163792": null, "22760354": null, "27044681": null, "24224851": null, "16386926": null, "23221997": null, "15857428": null, "28719596": null, "19504558": null, "24070809": null, "17467808": null, "24684392": null, "23584701": null, "15861037": null, "33097827": null, "18055561": null, "26771271": null, "34461232": null, "26774523": null, "21902500": null, "27670766": null, "25669165": null, "23073468": null, "28696418": null, "35446233": null, "21887680": null, "24577123": null, "31902949": null, "25224784": null, "39954158": null, "34160285": null, "17503482": null, "22935916": null, "38682317": null, "16753003": null, "24852429": null, "16542858": null, "26780119": null, "27649261": null, "27173875": null, "19605407": null, "24230997": null, "21338649": null, "22354160": null, "18662289": "PMC2561120", "21332310": "PMC7423195", "22765258": "PMC3579261", "22875622": "PMC3561425", "23159934": "PMC3574284", "24420746": "PMC3947488", "25705565": "PMC4332701", "26265036": "PMC4573240", "27046326": "PMC5293674", "27270784": "PMC4982581", "27299708": "PMC4846779", "28088792": "PMC5355121", "28388599": "PMC5509475", "28548579": "PMC4366347", "31423876": "PMC6759913", "32795354": "PMC7427977", "32920647": "PMC7883889", "36361964": "PMC9657232", "37639712": "PMC10834390", "39850575": "PMC11754044", "32457604": "PMC7221122", "28273335": "PMC5404990", "26555147": "PMC4640545", "26262902": "PMC4544820", "25025378": "PMC4099069", "20237460": "PMC3055457", "25487141": null, "21806386": null, "28063968": null, "34747629": null, "21770725": null, "24874929": null, "26757307": null, "24300029": null, "38551694": null, "29173032": null, "30672385": null, "25642918": null, "23383658": null, "39350313": null, "22760475": null, "22186618": null, "32462699": null, "37678026": null, "38996572": null, "39799793": null, "17110455": null, "23223006": null, "26249541": null, "21151198": null, "17693647": null, "38682355": null, "25715171": null, "17931083": null, "38553322": null, "17495880": null, "28418009": null, "32843687": null, "22882994": null, "28049954": null, "26244882": null, "36853844": null, "28591085": null, "25141896": null, "21806387": null, "38990762": null, "25730470": null, "20348146": null, "20390257": null, "34380995": null, "18030307": null, "37610885": null, "19396436": null, "25751398": null, "26049408": null, "27977332": null, "38502357": null, "22510778": null, "39101384": null, "17370067": null, "35698907": null, "37638833": null, "15775779": null, "30969062": null, "39477313": null, "29192552": null, "27937053": null, "25155931": null, "26167726": null, "22462752": null, "37078251": null, "38683649": null, "23807564": null, "26314341": null, "25760804": null, "27893182": null, "30211780": null, "25738571": null, "38071832": null, "23490377": null, "18779360": "PMC2592852", "19628728": "PMC2749505", "20307661": "PMC2906637", "21083385": "PMC3148255", "21393201": "PMC3143437", "21451505": "PMC4519823", "22047557": "PMC3230303", "22192668": "PMC3245828", "22370858": "PMC5875925", "23649425": "PMC4151246", "25177243": "PMC4110085", "25515134": "PMC4301945", "25556837": "PMC4456129", "26125586": "PMC4651007", "26320194": "PMC4601717", "26751406": "PMC4760888", "27564568": "PMC5309133", "31346154": "PMC6647927", "32602170": "PMC7993015", "37176129": "PMC10179231", "38254988": "PMC10815823", "38507115": "PMC11140815", "27740732": null, "21192345": null, "37925536": null, "24908438": null, "17764537": null, "38497347": null, "27885916": null, "31792371": null, "26780210": null, "26223945": null, "23374588": null, "21174621": null, "23658070": null, "20619611": null, "19620853": null, "22064666": null, "23537502": null, "38085693": null, "31337162": null, "24477223": null, "29914345": null, "22044939": null, "22158445": null, "25681132": null, "25701374": null, "33977649": null, "21961650": null, "26558451": null, "21745312": null, "19228205": null, "24927955": null, "24718721": null, "21902502": null, "17108811": null, "27498543": null, "38270743": null, "21860339": null, "38507296": null, "25704243": null, "20393862": null} \ No newline at end of file diff --git a/src/fetch_articles/saved_data/unique_pmcids.json b/src/fetch_articles/saved_data/unique_pmcids.json new file mode 100644 index 0000000..c1a43e7 --- /dev/null +++ b/src/fetch_articles/saved_data/unique_pmcids.json @@ -0,0 +1 @@ +["PMC11850035", "PMC2812115", "PMC2911553", "PMC5583388", "PMC4526634", "PMC6247602", "PMC11758033", "PMC2884029", "PMC3778124", "PMC3044738", "PMC5700353", "PMC1884342", "PMC6289816", "PMC4609097", "PMC1364741", "PMC2857717", "PMC10898793", "PMC4909584", "PMC4630174", "PMC5391214", "PMC10675244", "PMC6647927", "PMC5074472", "PMC11667419", "PMC8185249", "PMC2352037", "PMC4280295", "PMC11512548", "PMC7377539", "PMC11258238", "PMC7499297", "PMC5859345", "PMC11921366", "PMC3872414", "PMC3797132", "PMC5373545", "PMC8455325", "PMC3786328", "PMC3081375", "PMC11825576", "PMC10418744", "PMC1563530", "PMC4032230", "PMC5886039", "PMC3068061", "PMC48077", "PMC4537319", "PMC4730664", "PMC4713720", "PMC3433845", "PMC11241034", "PMC6142943", "PMC7710914", "PMC5496343", "PMC2966433", "PMC6777349", "PMC3310336", "PMC4278770", "PMC5904126", "PMC4342329", "PMC3594083", "PMC6714829", "PMC5496345", "PMC2048549", "PMC3574284", "PMC3454425", "PMC3657889", "PMC3555061", "PMC10618485", "PMC3692386", "PMC3902809", "PMC9468554", "PMC5309131", "PMC2757009", "PMC2592852", "PMC2928561", "PMC2762391", "PMC4583245", "PMC6432766", "PMC7616417", "PMC5749368", "PMC4522133", "PMC3983993", "PMC2920450", "PMC4181635", "PMC3703617", "PMC4702321", "PMC2879959", "PMC4746878", "PMC11871410", "PMC7164646", "PMC5203947", "PMC4867099", "PMC3434304", "PMC6462825", "PMC4435089", "PMC2681284", "PMC1952551", "PMC5866313", "PMC3016221", "PMC3837290", "PMC10848431", "PMC3565812", "PMC3787223", "PMC4226857", "PMC10675623", "PMC9768477", "PMC2485247", "PMC4503374", "PMC4565152", "PMC4206345", "PMC1873971", "PMC2364178", "PMC3230303", "PMC11016593", "PMC3622803", "PMC11666798", "PMC4956330", "PMC5354739", "PMC4307337", "PMC3836273", "PMC2292110", "PMC2630264", "PMC4959996", "PMC11421434", "PMC11787782", "PMC3561425", "PMC2921956", "PMC5538123", "PMC6612579", "PMC3539557", "PMC8553963", "PMC9585281", "PMC3938989", "PMC11552228", "PMC9501307", "PMC11203291", "PMC3786570", "PMC5514947", "PMC10566653", "PMC3944214", "PMC4476880", "PMC2733171", "PMC3164274", "PMC5142600", "PMC7274090", "PMC10537526", "PMC6493603", "PMC3567337", "PMC6587209", "PMC7455128", "PMC5324942", "PMC2666924", "PMC11544447", "PMC3603284", "PMC11786019", "PMC4560372", "PMC3734199", "PMC4525256", "PMC4488893", "PMC3786668", "PMC11803932", "PMC4513254", "PMC6005582", "PMC5940523", "PMC6923423", "PMC2913479", "PMC8429954", "PMC5306247", "PMC3529147", "PMC3358293", "PMC6038204", "PMC5541380", "PMC11717999", "PMC10179231", "PMC2966981", "PMC10995391", "PMC4254688", "PMC8702453", "PMC11257390", "PMC11052159", null, "PMC10858860", "PMC4154892", "PMC4613195", "PMC4387236", "PMC4628029", "PMC1754569", "PMC3381232", "PMC3579501", "PMC4716887", "PMC11855146", "PMC3093392", "PMC10668244", "PMC4437521", "PMC9875006", "PMC10532907", "PMC4890827", "PMC3639978", "PMC4876188", "PMC4868001", "PMC4330076", "PMC8758337", "PMC4533232", "PMC4982581", "PMC2432487", "PMC11160041", "PMC4134280", "PMC11913886", "PMC5558541", "PMC4011617", "PMC7005197", "PMC7674153", "PMC5678480", "PMC2773991", "PMC11492722", "PMC4503103", "PMC11063049", "PMC11082567", "PMC5862636", "PMC3617060", "PMC12043259", "PMC3279522", "PMC8438567", "PMC5871545", "PMC3625373", "PMC2756088", "PMC7260086", "PMC10298263", "PMC4270923", "PMC4390701", "PMC6003833", "PMC3769669", "PMC11049768", "PMC1755496", "PMC2952572", "PMC9536193", "PMC4762905", "PMC1773505", "PMC5386607", "PMC3390407", "PMC9914414", "PMC6357964", "PMC3946972", "PMC4023787", "PMC6523194", "PMC5483245", "PMC2673121", "PMC5903228", "PMC3369131", "PMC11528939", "PMC11159193", "PMC2291274", "PMC4296935", "PMC3158597", "PMC3273458", "PMC6174029", "PMC4490522", "PMC5148898", "PMC6248022", "PMC5468510", "PMC4015881", "PMC2853591", "PMC3396003", "PMC2515139", "PMC3292264", "PMC3632552", "PMC2680291", "PMC4938133", "PMC5614982", "PMC4812555", "PMC2492917", "PMC4616511", "PMC6987567", "PMC9608913", "PMC3555879", "PMC2943151", "PMC4448076", "PMC2766479", "PMC4835128", "PMC3944116", "PMC10931982", "PMC4452656", "PMC10159199", "PMC2561120", "PMC4613221", "PMC10214567", "PMC9801627", "PMC3505921", "PMC7968507", "PMC2966859", "PMC5743122", "PMC4641035", "PMC3760990", "PMC11059713", "PMC4892970", "PMC2722908", "PMC3746708", "PMC4601717", "PMC4462610", "PMC1874463", "PMC11003701", "PMC4591203", "PMC1474035", "PMC3880259", "PMC4892378", "PMC9820603", "PMC3952719", "PMC5564514", "PMC7870766", "PMC5411458", "PMC10827494", "PMC11524821", "PMC8182957", "PMC6265082", "PMC5342670", "PMC3940150", "PMC2810514", "PMC3808494", "PMC2762405", "PMC11638344", "PMC2386778", "PMC4012347", "PMC5207665", "PMC4433569", "PMC4697903", "PMC5427048", "PMC3523080", "PMC6046471", "PMC7993015", "PMC6034060", "PMC10880038", "PMC4199712", "PMC6409308", "PMC5346037", "PMC4594719", "PMC1974827", "PMC5266160", "PMC3729209", "PMC8954661", "PMC5684285", "PMC3845218", "PMC3161212", "PMC5500390", "PMC4631184", "PMC2664151", "PMC3860742", "PMC4099069", "PMC6179259", "PMC10091789", "PMC4160394", "PMC6033076", "PMC7375060", "PMC8578201", "PMC4078496", "PMC3522814", "PMC5563830", "PMC4996314", "PMC11354576", "PMC3291838", "PMC5306492", "PMC3384479", "PMC3899768", "PMC5432414", "PMC3518380", "PMC4432150", "PMC5355121", "PMC3674704", "PMC3378722", "PMC3727245", "PMC3941038", "PMC2751283", "PMC6767327", "PMC3553682", "PMC1029622", "PMC4511425", "PMC3248259", "PMC4385537", "PMC4195667", "PMC4757974", "PMC3330749", "PMC9891445", "PMC2679896", "PMC2810802", "PMC3871508", "PMC4171106", "PMC2820245", "PMC10810687", "PMC8540141", "PMC3997354", "PMC11088557", "PMC4130425", "PMC4615534", "PMC4468641", "PMC3735354", "PMC6734474", "PMC6542686", "PMC5753622", "PMC9931738", "PMC4300289", "PMC5612381", "PMC5543069", "PMC4229256", "PMC2883666", "PMC11603417", "PMC1365155", "PMC6231319", "PMC3682424", "PMC2715837", "PMC5526237", "PMC3621246", "PMC4190075", "PMC5983535", "PMC4519823", "PMC5508045", "PMC5346878", "PMC6328871", "PMC4272010", "PMC7215378", "PMC3890033", "PMC3641305", "PMC8841435", "PMC8137991", "PMC3873034", "PMC4043918", "PMC5619051", "PMC11685162", "PMC11509751", "PMC3130093", "PMC11860030", "PMC3098751", "PMC5519037", "PMC11221861", "PMC4087845", "PMC8238023", "PMC4872310", "PMC9601332", "PMC5798599", "PMC3182303", "PMC3611944", "PMC10967865", "PMC10645035", "PMC3348126", "PMC5316146", "PMC10377184", "PMC2014902", "PMC3264276", "PMC10838100", "PMC10607223", "PMC5469860", "PMC11134291", "PMC6313513", "PMC6927671", "PMC3525178", "PMC9961245", "PMC10864595", "PMC1873375", "PMC8533258", "PMC6562943", "PMC3544007", "PMC4833150", "PMC5645220", "PMC6586010", "PMC8513493", "PMC9314634", "PMC6400024", "PMC10196221", "PMC11887348", "PMC11244643", "PMC9256318", "PMC11703455", "PMC5079351", "PMC11393095", "PMC4915265", "PMC8530979", "PMC7398416", "PMC8822703", "PMC3092713", "PMC4456129", "PMC3780966", "PMC3608305", "PMC4224698", "PMC11481807", "PMC11887086", "PMC10815823", "PMC6448146", "PMC2014166", "PMC10163902", "PMC3749354", "PMC5883590", "PMC8742641", "PMC4965653", "PMC3604156", "PMC4702374", "PMC5505550", "PMC3114195", "PMC4356257", "PMC5727754", "PMC4995153", "PMC2959002", "PMC442471", "PMC4454552", "PMC3030919", "PMC11111788", "PMC4137828", "PMC4916778", "PMC11773121", "PMC8673616", "PMC6347826", "PMC2859392", "PMC3352974", "PMC2288721", "PMC4682920", "PMC4581326", "PMC4365300", "PMC2480976", "PMC4169411", "PMC6613715", "PMC6745302", "PMC8724172", "PMC6262886", "PMC4479596", "PMC2168111", "PMC4636889", "PMC4594699", "PMC5904201", "PMC7089776", "PMC5604555", "PMC6092108", "PMC3749570", "PMC4631197", "PMC6479273", "PMC6942309", "PMC4183989", "PMC4368615", "PMC3525665", "PMC4820801", "PMC9298338", "PMC6472479", "PMC3931261", "PMC4017364", "PMC11152251", "PMC4500334", "PMC4168388", "PMC11677811", "PMC3673300", "PMC10583240", "PMC3214266", "PMC5282793", "PMC3775655", "PMC3818406", "PMC2949522", "PMC524175", "PMC4862932", "PMC3137420", "PMC2830598", "PMC3818912", "PMC4803610", "PMC9582748", "PMC4034115", "PMC3867202", "PMC3690108", "PMC9297921", "PMC9537548", "PMC5589489", "PMC3055694", "PMC4012056", "PMC2903324", "PMC2686066", "PMC10152845", "PMC3667657", "PMC4308646", "PMC6411694", "PMC5009007", "PMC10834390", "PMC3403289", "PMC10909096", "PMC2992873", "PMC8445626", "PMC6969041", "PMC3894627", "PMC6786370", "PMC5833535", "PMC6505090", "PMC11359404", "PMC8672325", "PMC6980920", "PMC10666731", "PMC7963143", "PMC5382092", "PMC4461653", "PMC2860533", "PMC5018246", "PMC4479153", "PMC6451710", "PMC4301945", "PMC4557249", "PMC4157963", "PMC6995013", "PMC11608742", "PMC10668502", "PMC4480925", "PMC11573879", "PMC1975838", "PMC4231027", "PMC5818817", "PMC6037621", "PMC6801039", "PMC4943245", "PMC2014539", "PMC11555502", "PMC2995295", "PMC5006145", "PMC4055378", "PMC4484512", "PMC11418302", "PMC10278212", "PMC4057281", "PMC6219441", "PMC5598801", "PMC11754044", "PMC3984266", "PMC10778798", "PMC4274707", "PMC5651309", "PMC11252221", "PMC4265416", "PMC11475898", "PMC4752391", "PMC3624039", "PMC11401437", "PMC2652833", "PMC3774043", "PMC7431691", "PMC7039325", "PMC6086578", "PMC7655626", "PMC5521342", "PMC3910846", "PMC6851426", "PMC3139013", "PMC11773116", "PMC8458697", "PMC10527451", "PMC5241185", "PMC4151614", "PMC1874262", "PMC3461952", "PMC3818518", "PMC3653303", "PMC5411211", "PMC4356640", "PMC4672523", "PMC3414671", "PMC3485381", "PMC5877743", "PMC3481266", "PMC8295171", "PMC4800352", "PMC4693492", "PMC10501538", "PMC4154311", "PMC10309098", "PMC6813860", "PMC8953705", "PMC4366347", "PMC9925376", "PMC10917709", "PMC1365072", "PMC6014560", "PMC4292894", "PMC8426351", "PMC6612264", "PMC7319006", "PMC10502099", "PMC3726442", "PMC4500328", "PMC5711571", "PMC8940650", "PMC4345005", "PMC8604252", "PMC5319785", "PMC5233579", "PMC3658129", "PMC6493124", "PMC4892373", "PMC3401172", "PMC4527535", "PMC5293674", "PMC9080200", "PMC6591035", "PMC2684883", "PMC4243902", "PMC11652804", "PMC10883345", "PMC2668081", "PMC4324232", "PMC11159294", "PMC10982510", "PMC4737107", "PMC11148365", "PMC6510382", "PMC6216325", "PMC2518836", "PMC2830602", "PMC4694426", "PMC3394147", "PMC4335884", "PMC6486881", "PMC6461793", "PMC5903579", "PMC10349379", "PMC2647710", "PMC10557961", "PMC7115946", "PMC5370513", "PMC10409991", "PMC5298887", "PMC11995662", "PMC4836090", "PMC2791975", "PMC2726911", "PMC3164277", "PMC4111883", "PMC11315837", "PMC3246196", "PMC11531276", "PMC2750008", "PMC11884701", "PMC9830790", "PMC2662935", "PMC6941886", "PMC5887212", "PMC11240873", "PMC10970167", "PMC7793629", "PMC5898372", "PMC4038142", "PMC11208962", "PMC8880478", "PMC5716599", "PMC6298606", "PMC4661296", "PMC2888980", "PMC1884506", "PMC4542662", "PMC3579261", "PMC4872428", "PMC3984158", "PMC2935997", "PMC9810307", "PMC6989102", "PMC5975540", "PMC5299197", "PMC3571021", "PMC3582836", "PMC3376437", "PMC3513646", "PMC1087660", "PMC5065384", "PMC5176308", "PMC11668066", "PMC10990950", "PMC8163522", "PMC4425504", "PMC7883889", "PMC8505487", "PMC4502741", "PMC3555056", "PMC3675749", "PMC7292295", "PMC4184528", "PMC5727167", "PMC3444290", "PMC5562097", "PMC4441275", "PMC5591096", "PMC10684410", "PMC4298011", "PMC7393710", "PMC3584248", "PMC4105486", "PMC5711795", "PMC3753270", "PMC5520553", "PMC2014233", "PMC9301121", "PMC6920759", "PMC1885008", "PMC4116670", "PMC4220988", "PMC4846779", "PMC3329222", "PMC4445755", "PMC6132901", "PMC7193447", "PMC3454958", "PMC2896457", "PMC3628804", "PMC1995596", "PMC3508798", "PMC10972729", "PMC4794377", "PMC4692529", "PMC3922978", "PMC1365132", "PMC2886925", "PMC5138058", "PMC5425333", "PMC7115450", "PMC6654446", "PMC6006403", "PMC4304713", "PMC3006662", "PMC2949912", "PMC5700347", "PMC5461999", "PMC5768901", "PMC6089815", "PMC4762902", "PMC4690185", "PMC5438821", "PMC5189722", "PMC9809306", "PMC2644687", "PMC4631185", "PMC5534241", "PMC5373543", "PMC4100708", "PMC1237155", "PMC8373649", "PMC4693577", "PMC9328121", "PMC2737687", "PMC3249179", "PMC5377478", "PMC5531276", "PMC8890732", "PMC8108700", "PMC6387687", "PMC2683977", "PMC6054772", "PMC3237821", "PMC4345081", "PMC6518412", "PMC7086280", "PMC5440888", "PMC2922203", "PMC3712827", "PMC4612590", "PMC2596476", "PMC6773496", "PMC11246114", "PMC3038469", "PMC4969350", "PMC11763628", "PMC5734971", "PMC4719145", "PMC3208318", "PMC5763654", "PMC4573240", "PMC8184575", "PMC4444267", "PMC4168390", "PMC9584256", "PMC3020258", "PMC2901912", "PMC5135610", "PMC5932771", "PMC4473094", "PMC2896826", "PMC3985268", "PMC7351433", "PMC4760888", "PMC5287983", "PMC2709885", "PMC2364770", "PMC5057355", "PMC3988537", "PMC5817388", "PMC3656883", "PMC11435314", "PMC3448899", "PMC1884346", "PMC5423974", "PMC11102648", "PMC4257570", "PMC2906637", "PMC10381361", "PMC4828529", "PMC9890192", "PMC4503705", "PMC1884285", "PMC6587626", "PMC2641037", "PMC4797547", "PMC3988270", "PMC8505452", "PMC10876746", "PMC6760244", "PMC4425056", "PMC3846997", "PMC4296254", "PMC5449482", "PMC11755583", "PMC5161051", "PMC11049954", "PMC11558073", "PMC4805204", "PMC5789875", "PMC6800829", "PMC10908252", "PMC4551162", "PMC10495004", "PMC4595504", "PMC5943457", "PMC11246689", "PMC5744175", "PMC4618180", "PMC8222836", "PMC5298566", "PMC4541975", "PMC10951231", "PMC3055457", "PMC1978168", "PMC10526247", "PMC6493076", "PMC2650539", "PMC4707035", "PMC4151246", "PMC4413900", "PMC4454285", "PMC4930967", "PMC10787143", "PMC4116556", "PMC2754599", "PMC9306465", "PMC11317398", "PMC3415853", "PMC3852421", "PMC11158672", "PMC3575609", "PMC11891766", "PMC2794921", "PMC5546852", "PMC7221122", "PMC10914946", "PMC2586993", "PMC4574839", "PMC8204702", "PMC4982759", "PMC2950972", "PMC7235792", "PMC3521860", "PMC11730665", "PMC5611711", "PMC9515473", "PMC2291379", "PMC4498287", "PMC3360546", "PMC5945500", "PMC6361127", "PMC3943570", "PMC6426691", "PMC11158323", "PMC5800559", "PMC6151284", "PMC6542461", "PMC5220536", "PMC5610780", "PMC3100585", "PMC4405819", "PMC3912955", "PMC10782740", "PMC5903239", "PMC7302666", "PMC11271148", "PMC9841299", "PMC3195031", "PMC6081148", "PMC3756535", "PMC6357360", "PMC5538305", "PMC4706412", "PMC2865873", "PMC5264271", "PMC4498982", "PMC10483403", "PMC4177494", "PMC2976715", "PMC11011338", "PMC3633658", "PMC2679107", "PMC5465325", "PMC7375952", "PMC2896566", "PMC3652476", "PMC556232", "PMC11106956", "PMC11236688", "PMC8132880", "PMC3282030", "PMC4169706", "PMC2757655", "PMC3909010", "PMC4896103", "PMC4243881", "PMC5392306", "PMC4575538", "PMC8975736", "PMC3419350", "PMC5509475", "PMC2925052", "PMC7497848", "PMC3947488", "PMC2276142", "PMC6373376", "PMC3461592", "PMC6501809", "PMC10154044", "PMC4002970", "PMC5028170", "PMC4208722", "PMC9610285", "PMC2556451", "PMC5029084", "PMC2564574", "PMC5485718", "PMC5003027", "PMC5604731", "PMC2908290", "PMC5901893", "PMC4865408", "PMC8917764", "PMC10349800", "PMC10499425", "PMC11703419", "PMC4236071", "PMC5980466", "PMC6411020", "PMC5101708", "PMC11628867", "PMC11102100", "PMC4731723", "PMC8571740", "PMC7649675", "PMC6595468", "PMC5763318", "PMC4949007", "PMC5323433", "PMC4703773", "PMC1401654", "PMC5875353", "PMC4541974", "PMC8973308", "PMC11933031", "PMC11720188", "PMC4038024", "PMC5808057", "PMC1884959", "PMC6493375", "PMC5145728", "PMC3992925", "PMC5807179", "PMC3499361", "PMC3760447", "PMC4931969", "PMC3049596", "PMC4110085", "PMC5007158", "PMC6475679", "PMC4947669", "PMC5875925", "PMC11310823", "PMC1884261", "PMC3172251", "PMC6171340", "PMC7245057", "PMC7340566", "PMC7388522", "PMC3766937", "PMC10099095", "PMC6125540", "PMC4220464", "PMC11269678", "PMC5346875", "PMC8106923", "PMC4113831", "PMC10244018", "PMC5346034", "PMC3320544", "PMC1963422", "PMC3530397", "PMC6246957", "PMC4590670", "PMC9974434", "PMC3612775", "PMC1885108", "PMC6714673", "PMC5659294", "PMC8578190", "PMC5427244", "PMC3991683", "PMC4115247", "PMC5412025", "PMC10038974", "PMC8915292", "PMC10230242", "PMC11404698", "PMC6742943", "PMC7497238", "PMC8472669", "PMC4855508", "PMC5152628", "PMC5651327", "PMC9028965", "PMC3597465", "PMC5478306", "PMC6631257", "PMC3833422", "PMC4119242", "PMC2792638", "PMC6046506", "PMC3468617", "PMC6489578", "PMC11314417", "PMC11347466", "PMC4470685", "PMC3116045", "PMC11809887", "PMC4833149", "PMC5726942", "PMC2749505", "PMC11852071", "PMC5510236", "PMC4598210", "PMC1251635", "PMC10463210", "PMC4469933", "PMC10747255", "PMC10582663", "PMC10957942", "PMC3570048", "PMC6071997", "PMC4406866", "PMC10275785", "PMC4297489", "PMC10565537", "PMC3865618", "PMC6855320", "PMC11022290", "PMC5749387", "PMC3978988", "PMC9322346", "PMC8599229", "PMC3598593", "PMC3610685", "PMC5599305", "PMC9657232", "PMC5402961", "PMC5524513", "PMC4221105", "PMC2704695", "PMC2910688", "PMC5316454", "PMC5249113", "PMC9934922", "PMC3959225", "PMC4735961", "PMC5533497", "PMC5492788", "PMC4922322", "PMC3805522", "PMC10139129", "PMC5963414", "PMC4854407", "PMC4039203", "PMC3734608", "PMC4343187", "PMC10327396", "PMC8263746", "PMC2748889", "PMC8081740", "PMC4108472", "PMC2042888", "PMC3093079", "PMC5829963", "PMC5949564", "PMC5656562", "PMC4640545", "PMC3071070", "PMC3383686", "PMC8767566", "PMC4999337", "PMC4271081", "PMC5395152", "PMC4872305", "PMC2794198", "PMC3478502", "PMC5558527", "PMC3066089", "PMC4764353", "PMC3471928", "PMC10145266", "PMC10599059", "PMC5899062", "PMC9552901", "PMC3137047", "PMC7305826", "PMC9481373", "PMC4375579", "PMC4010098", "PMC7217737", "PMC1365130", "PMC3476140", "PMC3755037", "PMC2981241", "PMC3834132", "PMC4931885", "PMC3148255", "PMC2767285", "PMC3901533", "PMC3548029", "PMC4651007", "PMC11140026", "PMC9413960", "PMC4282597", "PMC4484731", "PMC9450009", "PMC5903234", "PMC11269006", "PMC5795999", "PMC1769026", "PMC8100460", "PMC4375304", "PMC4332701", "PMC10880264", "PMC8441053", "PMC4701680", "PMC4412845", "PMC2732914", "PMC9701885", "PMC3779247", "PMC5632935", "PMC4364852", "PMC4002408", "PMC2919241", "PMC1762324", "PMC9321338", "PMC2858245", "PMC3245828", "PMC2599947", "PMC5421731", "PMC3260990", "PMC5087931", "PMC3637851", "PMC8359222", "PMC3100476", "PMC9532634", "PMC11508189", "PMC6960206", "PMC5558529", "PMC4000411", "PMC10648962", "PMC10769478", "PMC3131846", "PMC11023817", "PMC3698861", "PMC4667947", "PMC4544820", "PMC2675161", "PMC4025175", "PMC5606007", "PMC7039663", "PMC4921119", "PMC3143437", "PMC5309133", "PMC11458732", "PMC6370172", "PMC5192124", "PMC4788379", "PMC2000640", "PMC10085626", "PMC5061780", "PMC5908896", "PMC4631186", "PMC3248257", "PMC4814312", "PMC4240933", "PMC10478012", "PMC3244642", "PMC6128165", "PMC4209173", "PMC4585967", "PMC11584383", "PMC4503165", "PMC4778608", "PMC11012255", "PMC7613628", "PMC4972156", "PMC9373641", "PMC5391994", "PMC4876172", "PMC7292331", "PMC9820795", "PMC3048137", "PMC2000718", "PMC11507373", "PMC3425006", "PMC4505931", "PMC8800862", "PMC4806848", "PMC5546927", "PMC3672984", "PMC11862786", "PMC5346382", "PMC3061841", "PMC11000398", "PMC11141156", "PMC5655282", "PMC4764723", "PMC7423195", "PMC10452379", "PMC5342450", "PMC7197488", "PMC1364713", "PMC6759913", "PMC3753327", "PMC8141066", "PMC2014382", "PMC3686783", "PMC5048209", "PMC4928097", "PMC4735517", "PMC6021962", "PMC2885152", "PMC10529681", "PMC4892230", "PMC2570505", "PMC4462564", "PMC6939828", "PMC2042718", "PMC10825484", "PMC4338734", "PMC5404990", "PMC6631360", "PMC7028104", "PMC4615595", "PMC1767618", "PMC6891932", "PMC3213989", "PMC3680019", "PMC11094496", "PMC5817390", "PMC5944577", "PMC4943390", "PMC11140815", "PMC11605493", "PMC3462355", "PMC1746721", "PMC3925114", "PMC3895354", "PMC3125052", "PMC4669157", "PMC5098919", "PMC11520374", "PMC3029819", "PMC9031832", "PMC3107291", "PMC5908314", "PMC4600600", "PMC3506814", "PMC6049926", "PMC5412267", "PMC5355968", "PMC539815", "PMC3640375", "PMC6408006", "PMC5051541", "PMC2660379", "PMC4323272", "PMC4104334", "PMC4976849", "PMC3180021", "PMC7303159", "PMC10532840", "PMC2760462", "PMC10337687", "PMC5548439", "PMC11264771", "PMC3550197", "PMC11943653", "PMC7347085", "PMC7214659", "PMC4722076", "PMC4155516", "PMC3958404", "PMC6752321", "PMC7427977", "PMC2957581", "PMC3080643", "PMC9819208", "PMC3225067", "PMC4932617", "PMC6375065", "PMC3175513", "PMC7718230", "PMC3537445", "PMC10758687", "PMC3858547", "PMC3370715", "PMC11095822", "PMC5167198", "PMC2976128", "PMC3734060", "PMC10852661", "PMC4201132", "PMC10974048", "PMC6423619", "PMC3621996", "PMC3910794", "PMC7999651", "PMC11120965", "PMC5378677", "PMC9468644", "PMC5600689", "PMC7308427", "PMC3034442", "PMC16264", "PMC3776990", "PMC1887589", "PMC2855513", "PMC5721751", "PMC2194758", "PMC2547143", "PMC5590735", "PMC2743299", "PMC4350512", "PMC6011347"] \ No newline at end of file diff --git a/src/load_data/README.md b/src/load_data/README.md new file mode 100644 index 0000000..997987a --- /dev/null +++ b/src/load_data/README.md @@ -0,0 +1,28 @@ +# Load Data Module + +This module handles the loading and preprocessing of PharmGKB clinical variants data. + +## Methods + +1. **`download_and_extract_variant_annotations(override: bool = False)`** + - Downloads and extracts the variant annotations ZIP file from PharmGKB + - Saves data to `saved_data/variantAnnotations/` + - Can override existing downloads if needed + +2. **`load_variant_annotations_tsv(override: bool = False)`** + - Loads the variant annotations TSV file into a pandas DataFrame + - Automatically downloads data if not present + - Returns the DataFrame containing variant-drug annotations + +3. **`unique_variants(df: pd.DataFrame)`** + - Helper function that generates a dictionary of unique values for each column + - Used for data analysis and validation + +4. **`get_pmid_list(override: bool = False)`** + - Main function to extract PMIDs from the variant annotations + - Returns a list of unique PMIDs + - Caches results in `saved_data/pmid_list.json` + - Used as input for PMCID conversion + +The module handles all data downloading, extraction, and preprocessing steps needed to get the PMID list for subsequent steps in the pipeline. + diff --git a/src/load_data/__init__.py b/src/load_data/__init__.py new file mode 100644 index 0000000..c2694d6 --- /dev/null +++ b/src/load_data/__init__.py @@ -0,0 +1 @@ +from .load_clinical_variants import load_variant_annotations_tsv, get_pmid_list diff --git a/src/load_data/load_clinical_variants.py b/src/load_data/load_clinical_variants.py new file mode 100644 index 0000000..4176343 --- /dev/null +++ b/src/load_data/load_clinical_variants.py @@ -0,0 +1,145 @@ +import os +import requests +import zipfile +from io import BytesIO +import shutil +from loguru import logger +import pandas as pd +import json + +""" +This file contains functions to load the clinical variants data from the PharmGKB API. +The key function is get_pmid_list(), which loads the PMIDs from the variant annotations tsv file and saves them to a json file. +""" + + +def download_and_extract_variant_annotations(override: bool = False) -> str: + """ + Downloads and extracts the variant annotations zip file. + If the folder already exists, it will be skipped unless override parameter is set to True. + Params: + override (bool): If True, the folder will be deleted and the zip file will be downloaded and extracted again. + Returns: + str: The path to the extracted folder. + """ + url = "https://api.pharmgkb.org/v1/download/file/data/variantAnnotations.zip" + + base_dir = os.path.dirname(os.path.abspath(__file__)) + save_dir = os.path.join(base_dir, "saved_data") + extract_dir = os.path.join(save_dir, "variantAnnotations") + + if os.path.exists(extract_dir): + if not override: + logger.info(f"Folder already exists at {extract_dir}. Skipping download.") + return extract_dir + else: + shutil.rmtree(extract_dir) + + os.makedirs(extract_dir, exist_ok=True) + + logger.info(f"Downloading ZIP from {url}...") + response = requests.get(url) + response.raise_for_status() + + logger.info("Extracting ZIP...") + with zipfile.ZipFile(BytesIO(response.content)) as z: + z.extractall(extract_dir) + + logger.info(f"Files extracted to: {extract_dir}") + return extract_dir + + +def load_variant_annotations_tsv(override: bool = False) -> pd.DataFrame: + """ + Loads the variant annotations tsv file. + If the file does not exist, it will be downloaded and extracted. + Params: + override (bool): If True, the file will be downloaded and extracted again. + Returns: + pd.DataFrame: The loaded variant annotations tsv file. + """ + base_dir = os.path.dirname(os.path.abspath(__file__)) + tsv_path = os.path.join( + base_dir, "saved_data", "variantAnnotations", "var_drug_ann.tsv" + ) + + if not os.path.exists(tsv_path): + logger.info(f"{tsv_path} not found. Downloading data...") + download_and_extract_variant_annotations(override) + + if not os.path.exists(tsv_path): + logger.error(f"File still not found after download attempt: {tsv_path}") + raise FileNotFoundError( + f"File still not found after download attempt: {tsv_path}" + ) + + logger.info(f"Loading TSV from: {tsv_path}") + df = pd.read_csv(tsv_path, sep="\t") + return df + + +def unique_variants(df: pd.DataFrame) -> dict: + """ + Generates a dictionary with unique values for each column of a Pandas DataFrame. + + Args: + df: The input Pandas DataFrame. + + Returns: + A dictionary where keys are column names and values are lists of unique values + for that column. Returns an empty dictionary if the input is invalid. + """ + if not isinstance(df, pd.DataFrame): + logger.error("Input is not a Pandas DataFrame") + return {} + + return {col: df[col].unique().tolist() for col in df.columns} + + +def load_unique_variants(save_results: bool = True) -> dict: + """ + Loads the unique variants from the variant annotations tsv file and saves them to a json file. + If the json file already exists, it will be loaded from the file. + NOTE: Don't think this function is needed anymore. get_pmid_list() is used instead. + """ + base_dir = os.path.dirname(os.path.abspath(__file__)) + unique_variants_path = os.path.join(base_dir, "saved_data", "unique_variants.json") + if os.path.exists(unique_variants_path): + logger.info(f"Loading unique variants from {unique_variants_path}") + with open(unique_variants_path, "r") as f: + unique_values_per_column = json.load(f) + else: + logger.info( + f"Unique variants not found at {unique_variants_path}. Loading from tsv file..." + ) + df = load_variant_annotations_tsv() + unique_values_per_column = unique_variants(df) + if save_results: + logger.info(f"Saving unique variants to {unique_variants_path}") + with open(unique_variants_path, "w") as f: + json.dump(unique_values_per_column, f) + return unique_values_per_column + + +def get_pmid_list(override: bool = False) -> list: + """ + Loads the pmid list from the variant annotations tsv file. + """ + base_dir = os.path.dirname(os.path.abspath(__file__)) + pmid_list_path = os.path.join(base_dir, "saved_data", "pmid_list.json") + if os.path.exists(pmid_list_path): + logger.info(f"Loading PMIDs from {pmid_list_path}") + with open(pmid_list_path, "r") as f: + pmid_list = json.load(f) + else: + df = load_variant_annotations_tsv(override) + pmid_list = df["PMID"].unique().tolist() + logger.info(f"Saving PMIDs to {pmid_list_path}") + with open(pmid_list_path, "w") as f: + json.dump(pmid_list, f) + return pmid_list + + +if __name__ == "__main__": + pmid_list = get_pmid_list() + print(f"Number of unique PMIDs: {len(pmid_list)}")