2023-09-17T02:43:43,416 Created temporary directory: /tmp/pip-build-tracker-evxhh2zk 2023-09-17T02:43:43,418 Initialized build tracking at /tmp/pip-build-tracker-evxhh2zk 2023-09-17T02:43:43,418 Created build tracker: /tmp/pip-build-tracker-evxhh2zk 2023-09-17T02:43:43,419 Entered build tracker: /tmp/pip-build-tracker-evxhh2zk 2023-09-17T02:43:43,420 Created temporary directory: /tmp/pip-wheel-5dfxu2kl 2023-09-17T02:43:43,423 Created temporary directory: /tmp/pip-ephem-wheel-cache-75agbzfq 2023-09-17T02:43:43,449 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-09-17T02:43:43,452 2 location(s) to search for versions of mdreg: 2023-09-17T02:43:43,452 * https://pypi.org/simple/mdreg/ 2023-09-17T02:43:43,452 * https://www.piwheels.org/simple/mdreg/ 2023-09-17T02:43:43,453 Fetching project page and analyzing links: https://pypi.org/simple/mdreg/ 2023-09-17T02:43:43,454 Getting page https://pypi.org/simple/mdreg/ 2023-09-17T02:43:43,456 Found index url https://pypi.org/simple/ 2023-09-17T02:43:43,603 Fetched page https://pypi.org/simple/mdreg/ as application/vnd.pypi.simple.v1+json 2023-09-17T02:43:43,607 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/bc/10/c83070f17306c03d644c7c76d8859872032edc1fc0df2a97380d4e93d708/mdreg-0.3.0-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4) 2023-09-17T02:43:43,609 Found link https://files.pythonhosted.org/packages/78/c8/ba73412c97b1eedd387919d54687fb19b22173a3ba98a9a77136320259eb/mdreg-0.3.0.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4), version: 0.3.0 2023-09-17T02:43:43,609 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/6b/67/cd996be7b682acd1e126cc4e01f6f267fbfff5a7e5fca5c51e065c7b4497/mdreg-0.3.1-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4) 2023-09-17T02:43:43,610 Found link https://files.pythonhosted.org/packages/eb/8b/0358e3454beda70f4259a4d86932f6e072225039955f5a20d39144173ede/mdreg-0.3.1.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4), version: 0.3.1 2023-09-17T02:43:43,611 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/fc/9b/9783352214c7a6c6b4ca4821d04b43431d151dde90c965ca654c5da8ecc8/mdreg-0.3.2-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4) 2023-09-17T02:43:43,612 Found link https://files.pythonhosted.org/packages/b3/e6/46b6e3e7ea02fa0e9e2e574282003059b2e1a9eff7a6a8190ee5257219ce/mdreg-0.3.2.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4), version: 0.3.2 2023-09-17T02:43:43,613 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/eb/cc/009dc7b646f1d2d04050ae64541b6824c05389aa7bda945cb15e4e09ee6d/mdreg-0.3.3-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4) 2023-09-17T02:43:43,614 Found link https://files.pythonhosted.org/packages/18/62/38a61e16f5e992005b50e2b953f90fe3eb11bae5ab211a6960a9d57c77f2/mdreg-0.3.3.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6, <4), version: 0.3.3 2023-09-17T02:43:43,615 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/7d/ce/c978beca9650814b8edcddba5a7ff5573543307070f960c0eb7feec17957/mdreg-0.3.4-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,615 Found link https://files.pythonhosted.org/packages/53/8e/89bb979b810b86482df67a4ae8393cd66c7b43f73bcdf463d8647de0e74d/mdreg-0.3.4.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6), version: 0.3.4 2023-09-17T02:43:43,616 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/f7/c0/15afa6ef8924d5643277b9fef0b79c5560fea1146a2b2b65e85741b6ee56/mdreg-0.3.5-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,617 Found link https://files.pythonhosted.org/packages/f8/0c/c82e36fb517a1b0ff55867faac4f244742451a7dfa8ccd1be29a433cb8a9/mdreg-0.3.5.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6), version: 0.3.5 2023-09-17T02:43:43,618 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/54/40/aa8baa682552a94319ea93b241cf2ecf998a1bf0aebe66de4c9399c54999/mdreg-0.3.6-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,619 Found link https://files.pythonhosted.org/packages/79/85/bdbf14dfd10b079138f5e5f0885f60206318e3468760d23f23c22c4f6b13/mdreg-0.3.6.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6), version: 0.3.6 2023-09-17T02:43:43,620 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/a5/1b/48db59c55e4238cdbd68747bf6365e2864dd195f8c57fb8e8ddb4768e137/mdreg-0.3.7-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,620 Found link https://files.pythonhosted.org/packages/e6/5b/16528b763bb003eb9d0332ce47dbcf446fd1367790d17757ec5831082303/mdreg-0.3.7.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6), version: 0.3.7 2023-09-17T02:43:43,621 Skipping link: No binaries permitted for mdreg: https://files.pythonhosted.org/packages/b6/bb/c78bb87dfac20455065ec083b5330fdc2012591d4d7522ac88f6a10bdd3e/mdreg-0.3.8-py3-none-any.whl (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,622 Found link https://files.pythonhosted.org/packages/4f/f7/47321f6137507e7ff9532409f40a205430712a4e79b44d5336052a923dc3/mdreg-0.3.8.tar.gz (from https://pypi.org/simple/mdreg/) (requires-python:>=3.6), version: 0.3.8 2023-09-17T02:43:43,622 Fetching project page and analyzing links: https://www.piwheels.org/simple/mdreg/ 2023-09-17T02:43:43,623 Getting page https://www.piwheels.org/simple/mdreg/ 2023-09-17T02:43:43,624 Found index url https://www.piwheels.org/simple/ 2023-09-17T02:43:43,877 Fetched page https://www.piwheels.org/simple/mdreg/ as text/html 2023-09-17T02:43:43,879 Skipping link: No binaries permitted for mdreg: https://www.piwheels.org/simple/mdreg/mdreg-0.3.8-py3-none-any.whl#sha256=26b03dd2f8b3f000a166951fed6805880fe8decffe550f2327ba0f859e106cc6 (from https://www.piwheels.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,880 Skipping link: No binaries permitted for mdreg: https://www.piwheels.org/simple/mdreg/mdreg-0.3.7-py3-none-any.whl#sha256=445b61f0185645af57288306a89f23a1c441aedd57726661eef30f4a23484ba3 (from https://www.piwheels.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,880 Skipping link: No binaries permitted for mdreg: https://www.piwheels.org/simple/mdreg/mdreg-0.3.6-py3-none-any.whl#sha256=7230f82660b1ffde739a93ab083cc79516d665df5c6adbdc4c5a408cb41407f4 (from https://www.piwheels.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,881 Skipping link: No binaries permitted for mdreg: https://www.piwheels.org/simple/mdreg/mdreg-0.3.5-py3-none-any.whl#sha256=bf741071ce63495726a43fcb272985baefdfd15c582b6723803977118d8fc37e (from https://www.piwheels.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,882 Skipping link: No binaries permitted for mdreg: https://www.piwheels.org/simple/mdreg/mdreg-0.3.4-py3-none-any.whl#sha256=d360bb8491484762fab111a00dd3ba9152592ee1fe5e1ee940f3f2261ed9db1d (from https://www.piwheels.org/simple/mdreg/) (requires-python:>=3.6) 2023-09-17T02:43:43,882 Skipping link: not a file: https://www.piwheels.org/simple/mdreg/ 2023-09-17T02:43:43,883 Skipping link: not a file: https://pypi.org/simple/mdreg/ 2023-09-17T02:43:43,902 Given no hashes to check 1 links for project 'mdreg': discarding no candidates 2023-09-17T02:43:43,919 Collecting mdreg==0.3.2 2023-09-17T02:43:43,922 Created temporary directory: /tmp/pip-unpack-yhsiav3o 2023-09-17T02:43:44,136 Downloading mdreg-0.3.2.tar.gz (21 kB) 2023-09-17T02:43:44,193 Added mdreg==0.3.2 from https://files.pythonhosted.org/packages/b3/e6/46b6e3e7ea02fa0e9e2e574282003059b2e1a9eff7a6a8190ee5257219ce/mdreg-0.3.2.tar.gz to build tracker '/tmp/pip-build-tracker-evxhh2zk' 2023-09-17T02:43:44,194 Running setup.py (path:/tmp/pip-wheel-5dfxu2kl/mdreg_2eb6f82daee74b2eaf516fb3dee5802e/setup.py) egg_info for package mdreg 2023-09-17T02:43:44,196 Created temporary directory: /tmp/pip-pip-egg-info-rtojgqsj 2023-09-17T02:43:44,196 Preparing metadata (setup.py): started 2023-09-17T02:43:44,197 Running command python setup.py egg_info 2023-09-17T02:43:44,669 Traceback (most recent call last): 2023-09-17T02:43:44,669 File "", line 2, in 2023-09-17T02:43:44,670 File "", line 34, in 2023-09-17T02:43:44,671 File "/tmp/pip-wheel-5dfxu2kl/mdreg_2eb6f82daee74b2eaf516fb3dee5802e/setup.py", line 13, in 2023-09-17T02:43:44,672 with open('requirements.txt', encoding='utf-8') as f: 2023-09-17T02:43:44,672 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,673 FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt' 2023-09-17T02:43:44,674 # Description 2023-09-17T02:43:44,675 Python implementation of model-based image coregistration 2023-09-17T02:43:44,675 for quantitative medical imaging applications. 2023-09-17T02:43:44,677 The distribution comes with a number of common signal models and uses [ITK-Elastix](https://github.com/InsightSoftwareConsortium/ITKElastix) for deformable image registration. 2023-09-17T02:43:44,679 ## Installation 2023-09-17T02:43:44,679 Run `pip install mdreg`. 2023-09-17T02:43:44,681 ## Example data 2023-09-17T02:43:44,682 Example data in [DICOM format](https://shorturl.at/rwCUV) are provided for testing the setup. 2023-09-17T02:43:44,683 ## How to use 2023-09-17T02:43:44,684 Input data must be image arrays in numpy format, with dimensions `(x,y,z,t)` or `(x,y,t)`. 2023-09-17T02:43:44,685 To perform MDR on an image array `im` with default settings do: 2023-09-17T02:43:44,687 ```python 2023-09-17T02:43:44,688 from mdreg import MDReg 2023-09-17T02:43:44,690 mdr = MDReg() 2023-09-17T02:43:44,691 mdr.set_array(im) 2023-09-17T02:43:44,692 mdr.fit() 2023-09-17T02:43:44,693 ``` 2023-09-17T02:43:44,695 When fitting is complete the motion-corrected data are in `mdr.coreg` in the same dimensions 2023-09-17T02:43:44,696 as the original `im`. The calculated deformation fields in format `(x,y,d,t)` or `(x,y,z,d,t)` 2023-09-17T02:43:44,697 can be found as `mdr.deformation`. The dimension `d` holds `x`, `y` components 2023-09-17T02:43:44,698 of the deformation field, and a third `z` component if the input array is 3D. 2023-09-17T02:43:44,700 The default settings will apply a linear signal model and coregistration 2023-09-17T02:43:44,701 as defined in the elastix parameter file `Bsplines.txt`. 2023-09-17T02:43:44,703 # Customization 2023-09-17T02:43:44,704 MDR can be configured to apply different signal models and elastix coregistration settings. 2023-09-17T02:43:44,705 A number of example models and alternative elastix parameter files are included 2023-09-17T02:43:44,706 in the distribution as templates. 2023-09-17T02:43:44,707 The following example fits a mono-exponential decay, uses a mask `im_mask` for co-registration and applies an elastix parameter file `par_file` optimized for a previous DTI-MRI study: 2023-09-17T02:43:44,709 ```python 2023-09-17T02:43:44,710 from mdreg import MDReg 2023-09-17T02:43:44,710 from mdreg.models import exponential_decay 2023-09-17T02:43:44,712 mdr = MDReg() 2023-09-17T02:43:44,713 mdr.set_array(im) 2023-09-17T02:43:44,714 mdr.set_mask(im_mask) 2023-09-17T02:43:44,715 mdr.signal_model = exponential_decay 2023-09-17T02:43:44,716 mdr.read_elastix(par_file) 2023-09-17T02:43:44,717 mdr.fit() 2023-09-17T02:43:44,718 ``` 2023-09-17T02:43:44,719 `im_mask` must be a binary (0s and 1s) or boolean (Trues and Falses) image array in numpy format with the same dimensions as `im`. 2023-09-17T02:43:44,721 The signal model often depends on fixed constants and signal parameters 2023-09-17T02:43:44,722 such as sequence parameters in MRI, or patient-specific constants. These 2023-09-17T02:43:44,723 should all be grouped in a list and set before running the signal model. 2023-09-17T02:43:44,725 Equally elastix parameters can be fine tuned, either by importing a 2023-09-17T02:43:44,726 dedicated elastix file, or by modifying the settings. 2023-09-17T02:43:44,727 You may also choose if you wish to run the process in multiple cores (`parallel`) and to print the co-registration progress to the terminal plus a text file (`log`) or not. 2023-09-17T02:43:44,729 Then, a number of parameters are available to optimize MDR such as 2023-09-17T02:43:44,729 the precision (stopping criterion) and maximum number of iterations. 2023-09-17T02:43:44,731 Some examples: 2023-09-17T02:43:44,732 ```python 2023-09-17T02:43:44,733 from mdreg import MDReg 2023-09-17T02:43:44,733 from mdreg.models import exponential_decay 2023-09-17T02:43:44,734 t = [0.0, 1.25, 2.50, 3.75] # time points for exponential in sec 2023-09-17T02:43:44,736 mdr = MDReg() 2023-09-17T02:43:44,736 mdr.set_array(im) 2023-09-17T02:43:44,737 mdr.signal_parameters = t 2023-09-17T02:43:44,737 mdr.signal_model = exponential_decay 2023-09-17T02:43:44,738 mdr.set_elastix(MaximumNumberOfIterations = 256) # change defaults 2023-09-17T02:43:44,738 mdr.precision = 0.5 # default = 1 2023-09-17T02:43:44,739 mdr.max_iterations = 3 # default = 5 2023-09-17T02:43:44,739 mdr.parallel = False # default = True 2023-09-17T02:43:44,740 mdr.log = True # default = False 2023-09-17T02:43:44,740 mdr.fit() 2023-09-17T02:43:44,741 ``` 2023-09-17T02:43:44,742 `mdreg` comes with a number of options to 2023-09-17T02:43:44,743 export results and diagnostics: 2023-09-17T02:43:44,744 ```python 2023-09-17T02:43:44,745 mdr.export_unregistered = True # export parameters and fit without registration 2023-09-17T02:43:44,746 mdr.export_path = filepath # default is a results folder in the current working directory 2023-09-17T02:43:44,746 mdr.export() # export results after calling fit. 2023-09-17T02:43:44,747 ``` 2023-09-17T02:43:44,749 This export creates movies of original images, motion corrected images, 2023-09-17T02:43:44,749 modelfits, and maps of the fitted parameters. 2023-09-17T02:43:44,751 # Model fitting without motion correction 2023-09-17T02:43:44,752 `MDReg` also can be used to perform model fitting 2023-09-17T02:43:44,753 without correcting the motion. The following script 2023-09-17T02:43:44,754 fits a linearised exponential model to each pixel and exports data 2023-09-17T02:43:44,754 of model and fit: 2023-09-17T02:43:44,756 ```python 2023-09-17T02:43:44,757 from mdreg import MDReg 2023-09-17T02:43:44,758 from mdreg.models import exponential_decay 2023-09-17T02:43:44,759 mdr = MDReg() 2023-09-17T02:43:44,760 mdr.set_array(im) 2023-09-17T02:43:44,760 mdr.signal_model = linear_exponential_decay 2023-09-17T02:43:44,761 mdr.fit_signal() 2023-09-17T02:43:44,762 mdr.export_data() 2023-09-17T02:43:44,762 mdr.export_fit() 2023-09-17T02:43:44,763 ``` 2023-09-17T02:43:44,764 # Defining new MDR models 2023-09-17T02:43:44,766 A model must be defined as a separate module or class with two required functions `main()` and `pars()`. 2023-09-17T02:43:44,767 `pars()` must return a list of strings specifying the names of the model parameters. 2023-09-17T02:43:44,768 `main(im, const)` performs the pixel based model fitting and has two required arguments. 2023-09-17T02:43:44,768 `im` is a numpy ndarray with dimensions `(x,y,z,t)`, `(x,y,t)` or `(x,t)`. `const` is a list 2023-09-17T02:43:44,769 of any constant model parameters. 2023-09-17T02:43:44,770 The function must return the fit to the model as an numpy ndarray with the same dimensions 2023-09-17T02:43:44,771 as `im`, and an ndarray `pars` with dimensions `(x,y,z,p)`, `(x,y,p)` or `(x,p)`. Here `p` enumerates 2023-09-17T02:43:44,771 the model parameters. 2023-09-17T02:43:44,772 ## Context 2023-09-17T02:43:44,774 `mdreg` was first developed for use in quantitative renal MRI in the iBEAt study, 2023-09-17T02:43:44,774 and validated against group-wise model-free registration 2023-09-17T02:43:44,774 (Tagkalakis F, et al. Model-based motion correction outperforms a model-free method in quantitative renal MRI. Abstract-1383, ISMRM 2021). 2023-09-17T02:43:44,775 ## Acknowledgement 2023-09-17T02:43:44,776 The iBEAt study is part of the BEAt-DKD project. The BEAt-DKD project has received funding from the Innovative Medicines Initiative 2 Joint Undertaking under grant agreement No 115974. This Joint Undertaking receives support from the European Union’s Horizon 2020 research and innovation programme and EFPIA with JDRF. For a full list of BEAt-DKD partners, see www.beat-dkd.eu. 2023-09-17T02:43:44,776 ## Authors 2023-09-17T02:43:44,777 Kanishka Sharma, Joao Almeida e Sousa, Steven Sourbron 2023-09-17T02:43:44,778 ERROR: [present-rich] python setup.py egg_info exited with 1 2023-09-17T02:43:44,791 [bold magenta]full command[/]: [blue]/usr/bin/python3 -c ' 2023-09-17T02:43:44,791 exec(compile('"'"''"'"''"'"' 2023-09-17T02:43:44,791 # This is -- a caller that pip uses to run setup.py 2023-09-17T02:43:44,791 # 2023-09-17T02:43:44,791 # - It imports setuptools before invoking setup.py, to enable projects that directly 2023-09-17T02:43:44,791 # import from `distutils.core` to work with newer packaging standards. 2023-09-17T02:43:44,791 # - It provides a clear error message when setuptools is not installed. 2023-09-17T02:43:44,791 # - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so 2023-09-17T02:43:44,791 # setuptools doesn'"'"'t think the script is `-c`. This avoids the following warning: 2023-09-17T02:43:44,791 # manifest_maker: standard file '"'"'-c'"'"' not found". 2023-09-17T02:43:44,791 # - It generates a shim setup.py, for handling setup.cfg-only projects. 2023-09-17T02:43:44,791 import os, sys, tokenize 2023-09-17T02:43:44,791 2023-09-17T02:43:44,791 try: 2023-09-17T02:43:44,791 import setuptools 2023-09-17T02:43:44,791 except ImportError as error: 2023-09-17T02:43:44,791 print( 2023-09-17T02:43:44,791 "ERROR: Can not execute `setup.py` since setuptools is not available in " 2023-09-17T02:43:44,791 "the build environment.", 2023-09-17T02:43:44,791 file=sys.stderr, 2023-09-17T02:43:44,791 ) 2023-09-17T02:43:44,791 sys.exit(1) 2023-09-17T02:43:44,791 2023-09-17T02:43:44,791 __file__ = %r 2023-09-17T02:43:44,791 sys.argv[0] = __file__ 2023-09-17T02:43:44,791 2023-09-17T02:43:44,791 if os.path.exists(__file__): 2023-09-17T02:43:44,791 filename = __file__ 2023-09-17T02:43:44,791 with tokenize.open(__file__) as f: 2023-09-17T02:43:44,791 setup_py_code = f.read() 2023-09-17T02:43:44,791 else: 2023-09-17T02:43:44,791 filename = "" 2023-09-17T02:43:44,791 setup_py_code = "from setuptools import setup; setup()" 2023-09-17T02:43:44,791 2023-09-17T02:43:44,791 exec(compile(setup_py_code, filename, "exec")) 2023-09-17T02:43:44,791 '"'"''"'"''"'"' % ('"'"'/tmp/pip-wheel-5dfxu2kl/mdreg_2eb6f82daee74b2eaf516fb3dee5802e/setup.py'"'"',), "", "exec"))' egg_info --egg-base /tmp/pip-pip-egg-info-rtojgqsj[/] 2023-09-17T02:43:44,792 [bold magenta]cwd[/]: /tmp/pip-wheel-5dfxu2kl/mdreg_2eb6f82daee74b2eaf516fb3dee5802e/ 2023-09-17T02:43:44,793 Preparing metadata (setup.py): finished with status 'error' 2023-09-17T02:43:44,794 ERROR: [present-rich] metadata generation failed 2023-09-17T02:43:44,800 Exception information: 2023-09-17T02:43:44,800 Traceback (most recent call last): 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/operations/build/metadata_legacy.py", line 64, in generate_metadata 2023-09-17T02:43:44,800 call_subprocess( 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/utils/subprocess.py", line 224, in call_subprocess 2023-09-17T02:43:44,800 raise error 2023-09-17T02:43:44,800 pip._internal.exceptions.InstallationSubprocessError: python setup.py egg_info exited with 1 2023-09-17T02:43:44,800 2023-09-17T02:43:44,800 The above exception was the direct cause of the following exception: 2023-09-17T02:43:44,800 2023-09-17T02:43:44,800 Traceback (most recent call last): 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/cli/base_command.py", line 180, in exc_logging_wrapper 2023-09-17T02:43:44,800 status = run_func(*args) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/cli/req_command.py", line 248, in wrapper 2023-09-17T02:43:44,800 return func(self, options, args) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/commands/wheel.py", line 147, in run 2023-09-17T02:43:44,800 requirement_set = resolver.resolve(reqs, check_supported_wheels=True) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/resolver.py", line 92, in resolve 2023-09-17T02:43:44,800 result = self._result = resolver.resolve( 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve 2023-09-17T02:43:44,800 state = resolution.resolve(requirements, max_rounds=max_rounds) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/resolvelib/resolvers.py", line 397, in resolve 2023-09-17T02:43:44,800 self._add_to_criteria(self.state.criteria, r, parent=None) 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria 2023-09-17T02:43:44,800 if not criterion.candidates: 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/resolvelib/structs.py", line 156, in __bool__ 2023-09-17T02:43:44,800 return bool(self._sequence) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__ 2023-09-17T02:43:44,800 return any(self) 2023-09-17T02:43:44,800 ^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in 2023-09-17T02:43:44,800 return (c for c in iterator if id(c) not in self._incompatible_ids) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 47, in _iter_built 2023-09-17T02:43:44,800 candidate = func() 2023-09-17T02:43:44,800 ^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/factory.py", line 206, in _make_candidate_from_link 2023-09-17T02:43:44,800 self._link_candidate_cache[link] = LinkCandidate( 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 293, in __init__ 2023-09-17T02:43:44,800 super().__init__( 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 156, in __init__ 2023-09-17T02:43:44,800 self.dist = self._prepare() 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 225, in _prepare 2023-09-17T02:43:44,800 dist = self._prepare_distribution() 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 304, in _prepare_distribution 2023-09-17T02:43:44,800 return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/operations/prepare.py", line 538, in prepare_linked_requirement 2023-09-17T02:43:44,800 return self._prepare_linked_requirement(req, parallel_builds) 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/operations/prepare.py", line 653, in _prepare_linked_requirement 2023-09-17T02:43:44,800 dist = _get_prepared_distribution( 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/operations/prepare.py", line 69, in _get_prepared_distribution 2023-09-17T02:43:44,800 abstract_dist.prepare_distribution_metadata( 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/distributions/sdist.py", line 61, in prepare_distribution_metadata 2023-09-17T02:43:44,800 self.req.prepare_metadata() 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/req/req_install.py", line 568, in prepare_metadata 2023-09-17T02:43:44,800 self.metadata_directory = generate_metadata_legacy( 2023-09-17T02:43:44,800 ^^^^^^^^^^^^^^^^^^^^^^^^^ 2023-09-17T02:43:44,800 File "/usr/local/lib/python3.11/dist-packages/pip/_internal/operations/build/metadata_legacy.py", line 71, in generate_metadata 2023-09-17T02:43:44,800 raise MetadataGenerationFailed(package_details=details) from error 2023-09-17T02:43:44,800 pip._internal.exceptions.MetadataGenerationFailed: metadata generation failed 2023-09-17T02:43:44,812 Removed mdreg==0.3.2 from https://files.pythonhosted.org/packages/b3/e6/46b6e3e7ea02fa0e9e2e574282003059b2e1a9eff7a6a8190ee5257219ce/mdreg-0.3.2.tar.gz from build tracker '/tmp/pip-build-tracker-evxhh2zk' 2023-09-17T02:43:44,813 Removed build tracker: '/tmp/pip-build-tracker-evxhh2zk'