2022-09-19T13:37:45,990 Created temporary directory: /tmp/pip-ephem-wheel-cache-o0xhipdt 2022-09-19T13:37:45,996 Created temporary directory: /tmp/pip-build-tracker-ykxoqcfi 2022-09-19T13:37:45,996 Initialized build tracking at /tmp/pip-build-tracker-ykxoqcfi 2022-09-19T13:37:45,997 Created build tracker: /tmp/pip-build-tracker-ykxoqcfi 2022-09-19T13:37:45,997 Entered build tracker: /tmp/pip-build-tracker-ykxoqcfi 2022-09-19T13:37:45,998 Created temporary directory: /tmp/pip-wheel-u369pgaw 2022-09-19T13:37:46,068 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2022-09-19T13:37:46,076 2 location(s) to search for versions of cvi: 2022-09-19T13:37:46,076 * https://pypi.org/simple/cvi/ 2022-09-19T13:37:46,076 * https://www.piwheels.org/simple/cvi/ 2022-09-19T13:37:46,077 Fetching project page and analyzing links: https://pypi.org/simple/cvi/ 2022-09-19T13:37:46,079 Getting page https://pypi.org/simple/cvi/ 2022-09-19T13:37:46,083 Found index url https://pypi.org/simple 2022-09-19T13:37:46,274 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/d9/40/a81a72ef45bf5dcd7ee12fd4e521b20050e46f8f95e6cc08ad895e79d35b/cvi-0.1.0a1-py3-none-any.whl#sha256=7e877b129300c82100b1c97ab4e07799a6f6f8f691b9bdd04d569339b082d302 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,276 Found link https://files.pythonhosted.org/packages/15/63/c98fc65fb527bf3c326122ac38adf2f99075db7e65b62e15c1f2e06ae63e/cvi-0.1.0a1.tar.gz#sha256=a5ceb4d5e0aaa6cffb73a85dabf0fafd8e53596c960af96660c8d86dad39d4cf (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.1.0a1 2022-09-19T13:37:46,277 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/a6/26/f61a6400e5756141b96f426c713eab9130857c53b76b13b1b4e1be3563ee/cvi-0.1.0a2-py3-none-any.whl#sha256=414fff40901f34feaf8b41d0518ecdddfce2642a1580efcce0fff4f9abe71123 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,279 Found link https://files.pythonhosted.org/packages/0a/92/7dca8984b7158ac5b286ad7af4379960075bf8434c53e4a1e3a49f0e5cf0/cvi-0.1.0a2.tar.gz#sha256=716a4a99992c8d41c9649831b53d638474d7c1b5fe3ede22440cda817aefaefa (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.1.0a2 2022-09-19T13:37:46,279 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/26/e0/07beb00e46f3d00b2fd106c0884111e445dc15e87bcab4eb7444d8a5be8e/cvi-0.1.0a3-py3-none-any.whl#sha256=c93c63471308195e78b854e3ad1e896a46efcdf44af044eaf21f789c9f3a44bb (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,281 Found link https://files.pythonhosted.org/packages/83/38/17e2d7569d5c565643e0ebd63f62071c43dd1a96cde5719066c6ec4455c9/cvi-0.1.0a3.tar.gz#sha256=2d8f9946ea904ed06b75fba150f6ccdf3663e6a47f7df3e346e6896b0b198dba (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.1.0a3 2022-09-19T13:37:46,281 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/72/42/353ccfab1cfdb5d7e0cda90e5a9cb4d3dd24932a153fd3b466e8891ea793/cvi-0.1.0a4-py3-none-any.whl#sha256=53f03da20832bbdad26e2adc6f65323908ef19b82171e451a0cc677f5ea419ef (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,283 Found link https://files.pythonhosted.org/packages/91/6f/fa2f196409f1c29910f5e3168d25240004b9277ea75f042c60dcf621c99b/cvi-0.1.0a4.tar.gz#sha256=e5c42aba908237e8c6f7b047b3873012cd6f726943f18913e6caad62e7399b8a (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.1.0a4 2022-09-19T13:37:46,283 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/b1/1e/da713461fa1f70355c0ff09eb44a5291b40474c6ca1193987d50e5655a59/cvi-0.1.0-py3-none-any.whl#sha256=9442314eab464e49814789a686ef71ce2016425787e74e2b8b07f9b91644eb94 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,285 Found link https://files.pythonhosted.org/packages/93/9b/07fb46eef201e3c37396b82d75c5280ced222cabebaf527af367cd829f5b/cvi-0.1.0.tar.gz#sha256=535474ca5216d94953dd5d90e0a09a6ca1b9636b05ea9f4b57f349c9010e2756 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.1.0 2022-09-19T13:37:46,286 Fetching project page and analyzing links: https://www.piwheels.org/simple/cvi/ 2022-09-19T13:37:46,286 Getting page https://www.piwheels.org/simple/cvi/ 2022-09-19T13:37:46,288 Found index url https://www.piwheels.org/simple 2022-09-19T13:37:46,497 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.1.0a4-py3-none-any.whl#sha256=ef3ec965a1fc2d155cca6d3fda93d1fe7a2d9e3b78211ab5351752a6c3e3f8dc (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,498 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.1.0a3-py3-none-any.whl#sha256=bb395c30ea5296b3868487281bdbe627dc964ce445bd373fdb2da96cc5f3816f (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,499 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.1.0a2-py3-none-any.whl#sha256=a998d2e799675b32bbeb3f318b8fde028492384f668cebb508490f8301db46d2 (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,499 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.1.0a1-py3-none-any.whl#sha256=39f62718e2c3fcfa9defdf829d0a94f402dee719ea66a6a6f11de8095de1f43f (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-19T13:37:46,500 Skipping link: not a file: https://www.piwheels.org/simple/cvi/ 2022-09-19T13:37:46,500 Skipping link: not a file: https://pypi.org/simple/cvi/ 2022-09-19T13:37:46,535 Given no hashes to check 1 links for project 'cvi': discarding no candidates 2022-09-19T13:37:46,566 Collecting cvi==0.1.0 2022-09-19T13:37:46,571 Created temporary directory: /tmp/pip-unpack-1d725bgk 2022-09-19T13:37:46,803 Downloading cvi-0.1.0.tar.gz (15 kB) 2022-09-19T13:37:46,912 Added cvi==0.1.0 from https://files.pythonhosted.org/packages/93/9b/07fb46eef201e3c37396b82d75c5280ced222cabebaf527af367cd829f5b/cvi-0.1.0.tar.gz#sha256=535474ca5216d94953dd5d90e0a09a6ca1b9636b05ea9f4b57f349c9010e2756 to build tracker '/tmp/pip-build-tracker-ykxoqcfi' 2022-09-19T13:37:46,920 Created temporary directory: /tmp/pip-build-env-41b3qdio 2022-09-19T13:37:46,935 Created temporary directory: /tmp/pip-standalone-pip-7zsek90e 2022-09-19T13:37:49,328 Installing build dependencies: started 2022-09-19T13:37:49,330 Running command pip subprocess to install build dependencies 2022-09-19T13:37:58,903 Using pip 22.1.2 from /tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip (python 3.7) 2022-09-19T13:38:00,808 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2022-09-19T13:38:05,003 Collecting setuptools>=42 2022-09-19T13:38:05,282 Using cached https://www.piwheels.org/simple/setuptools/setuptools-65.3.0-py3-none-any.whl (1.2 MB) 2022-09-19T13:38:16,473 Installing collected packages: setuptools 2022-09-19T13:38:21,393 Successfully installed setuptools-65.3.0 2022-09-19T13:38:21,628 --- Logging error --- 2022-09-19T13:38:21,628 Traceback (most recent call last): 2022-09-19T13:38:21,629 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/utils/logging.py", line 177, in emit 2022-09-19T13:38:21,629 self.console.print(renderable, overflow="ignore", crop=False, style=style) 2022-09-19T13:38:21,629 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_vendor/rich/console.py", line 1752, in print 2022-09-19T13:38:21,630 extend(render(renderable, render_options)) 2022-09-19T13:38:21,630 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_vendor/rich/console.py", line 1390, in render 2022-09-19T13:38:21,630 for render_output in iter_render: 2022-09-19T13:38:21,631 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/utils/logging.py", line 134, in __rich_console__ 2022-09-19T13:38:21,631 for line in lines: 2022-09-19T13:38:21,631 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_vendor/rich/segment.py", line 245, in split_lines 2022-09-19T13:38:21,632 for segment in segments: 2022-09-19T13:38:21,632 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_vendor/rich/console.py", line 1368, in render 2022-09-19T13:38:21,632 renderable = rich_cast(renderable) 2022-09-19T13:38:21,633 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_vendor/rich/protocol.py", line 36, in rich_cast 2022-09-19T13:38:21,633 renderable = cast_method() 2022-09-19T13:38:21,633 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 130, in __rich__ 2022-09-19T13:38:21,634 pip_cmd = get_best_invocation_for_this_pip() 2022-09-19T13:38:21,634 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/utils/entrypoints.py", line 60, in get_best_invocation_for_this_pip 2022-09-19T13:38:21,634 os.path.join(binary_prefix, exe_name), 2022-09-19T13:38:21,635 File "/usr/lib/python3.7/genericpath.py", line 97, in samefile 2022-09-19T13:38:21,635 s2 = os.stat(f2) 2022-09-19T13:38:21,635 FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pip3.7' 2022-09-19T13:38:21,635 Call stack: 2022-09-19T13:38:21,636 File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main 2022-09-19T13:38:21,636 "__main__", mod_spec) 2022-09-19T13:38:21,636 File "/usr/lib/python3.7/runpy.py", line 85, in _run_code 2022-09-19T13:38:21,637 exec(code, run_globals) 2022-09-19T13:38:21,637 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/__main__.py", line 31, in 2022-09-19T13:38:21,637 sys.exit(_main()) 2022-09-19T13:38:21,638 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/cli/main.py", line 70, in main 2022-09-19T13:38:21,638 return command.main(cmd_args) 2022-09-19T13:38:21,638 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/cli/base_command.py", line 101, in main 2022-09-19T13:38:21,639 return self._main(args) 2022-09-19T13:38:21,639 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/cli/base_command.py", line 223, in _main 2022-09-19T13:38:21,639 self.handle_pip_version_check(options) 2022-09-19T13:38:21,639 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/cli/req_command.py", line 148, in handle_pip_version_check 2022-09-19T13:38:21,640 pip_self_version_check(session, options) 2022-09-19T13:38:21,640 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 237, in pip_self_version_check 2022-09-19T13:38:21,640 logger.info("[present-rich] %s", upgrade_prompt) 2022-09-19T13:38:21,641 File "/usr/lib/python3.7/logging/__init__.py", line 1383, in info 2022-09-19T13:38:21,641 self._log(INFO, msg, args, **kwargs) 2022-09-19T13:38:21,641 File "/usr/lib/python3.7/logging/__init__.py", line 1519, in _log 2022-09-19T13:38:21,642 self.handle(record) 2022-09-19T13:38:21,642 File "/usr/lib/python3.7/logging/__init__.py", line 1529, in handle 2022-09-19T13:38:21,642 self.callHandlers(record) 2022-09-19T13:38:21,642 File "/usr/lib/python3.7/logging/__init__.py", line 1591, in callHandlers 2022-09-19T13:38:21,643 hdlr.handle(record) 2022-09-19T13:38:21,643 File "/usr/lib/python3.7/logging/__init__.py", line 905, in handle 2022-09-19T13:38:21,643 self.emit(record) 2022-09-19T13:38:21,644 File "/tmp/pip-standalone-pip-7zsek90e/__env_pip__.zip/pip/_internal/utils/logging.py", line 179, in emit 2022-09-19T13:38:21,644 self.handleError(record) 2022-09-19T13:38:21,644 Message: '[present-rich] %s' 2022-09-19T13:38:21,645 Arguments: (UpgradePrompt(old='22.1.2', new='22.2.2'),) 2022-09-19T13:38:22,117 Installing build dependencies: finished with status 'done' 2022-09-19T13:38:22,145 Getting requirements to build wheel: started 2022-09-19T13:38:22,147 Running command Getting requirements to build wheel 2022-09-19T13:38:26,971 /usr/local/lib/python3.7/dist-packages/setuptools/config/pyprojecttoml.py:102: _ExperimentalProjectMetadata: Support for project metadata in `pyproject.toml` is still experimental and may be removed (or change) in future releases. 2022-09-19T13:38:26,972 warnings.warn(msg, _ExperimentalProjectMetadata) 2022-09-19T13:38:26,973 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:38:26,974 ########################################################################## 2022-09-19T13:38:26,974 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:38:26,974 ########################################################################## 2022-09-19T13:38:26,975 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:38:26,976 `readme = "# cvi\n\nA Python package implementing both batch and incremental cluster validity indices (CVIs).\n\n| **Stable Docs** | **Dev Docs** | **Build Status** | **Coverage** |\n|:----------------:|:------------:|:----------------:|:------------:|\n| [![Stable][docs-stable-img]][docs-stable-url] | [![Dev][docs-dev-img]][docs-dev-url]| [![Build Status][ci-img]][ci-url] | [![Codecov][codecov-img]][codecov-url] |\n| **Version** | **Issues** | **Commits** | **Commits Since Release**\n| [![version][version-img]][version-url] | [![issues][issues-img]][issues-url] | [![commits][commits-img]][commits-url] | [![compare][compare-img]][compare-url] |\n\n| **Zenodo DOI** |\n| :------------: |\n| [![DOI][zenodo-img]][zenodo-url] |\n\n[zenodo-img]: https://zenodo.org/badge/526280198.svg\n[zenodo-url]: https://zenodo.org/badge/latestdoi/526280198\n\n[docs-stable-img]: https://readthedocs.org/projects/cluster-validity-indices/badge/?version=latest\n[docs-stable-url]: https://cluster-validity-indices.readthedocs.io/en/latest/?badge=latest\n\n[docs-dev-img]: https://readthedocs.org/projects/cluster-validity-indices/badge/?version=develop\n[docs-dev-url]: https://cluster-validity-indices.readthedocs.io/en/develop/?badge=develop\n\n[ci-img]: https://github.com/AP6YC/cvi/actions/workflows/Test.yml/badge.svg\n[ci-url]: https://github.com/AP6YC/cvi/actions/workflows/Test.yml\n\n[codecov-img]: https://codecov.io/gh/AP6YC/cvi/branch/main/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/AP6YC/cvi\n\n[version-img]: https://img.shields.io/pypi/v/cvi.svg\n[version-url]: https://pypi.org/project/cvi\n\n[issues-img]: https://img.shields.io/github/issues/AP6YC/cvi?style=flat\n[issues-url]: https://github.com/AP6YC/cvi/issues\n\n[commits-img]: https://img.shields.io/github/commit-activity/m/AP6YC/cvi?style=flat\n[commits-url]: https://github.com/AP6YC/cvi/commits/main\n\n[compare-img]: https://img.shields.io/github/commits-since/AP6YC/cvi/latest/develop\n[compare-url]: https://github.com/AP6YC/cvi/compare/v0.1.0...develop\n\n## Table of Contents\n\n- [cvi](#cvi)\n - [Table of Contents](#table-of-contents)\n - [Cluster Validity Indices](#cluster-validity-indices)\n - [Installation](#installation)\n - [Usage](#usage)\n - [Quickstart](#quickstart)\n - [Detailed Usage](#detailed-usage)\n - [Implemented CVIs](#implemented-cvis)\n - [History](#history)\n - [Acknowledgements](#acknowledgements)\n - [Derivation](#derivation)\n - [Authors](#authors)\n - [Related Projects](#related-projects)\n\n## Cluster Validity Indices\n\nSay you have a clustering algorithm that clusters a set of samples containing features of some kind and some dimensionality.\nGreat!\nThat was a lot of work, and you should feel accomplished.\nBut how do you know that the algorithm performed _well_?\nBy definition, you wouldn't have the _true_ label belonging to each sample (if one could even exist in your context), just the label prescribed by your clustering algorithm.\n\n**Enter Cluster Validity Indices (CVIs)**.\n\nCVIs are metrics of cluster partitioning when true cluster labels are unavailable.\nEach operates on only the information available (i.e., the provided samples of features and the labels prescribed by the clustering algorithm) and produces a _metric_, a number that goes up or down according to how well the CVI believes the clustering algorithm appears to, well, _cluster_.\nClustering well in this context means correctly partitioning (i.e., separating) the data rather than prescribing too many different clusters (over partitioning) or too few (under partitioning)\nEvery CVI itself also behaves differently in terms of the range and scale of their numbers.\n**Furthermore, each CVI has an original batch implementation and incremental implementation that are equivalent**.\n\nThe `cvi` Python package contains a variety of these batch and incremental CVIs.\n\n## Installation\n\nThe `cvi` package is listed on PyPi, so you may install the latest version with\n\n```python\npip install cvi\n```\n\nYou can also specify a version to install in the usual way with\n\n```python\npip install cvi==v0.1.0-alpha.4\n```\n\nAlternatively, you can manually install a release from the [releases page](https://github.com/AP6YC/cvi/releases) on GitHub.\n\n## Usage\n\n### Quickstart\n\nCreate a CVI object and compute the criterion value in batch with `get_cvi`:\n\n```python\n# Import the library\nimport cvi\n# Create a Calinski-Harabasz (CH) CVI object\nmy_cvi = cvi.CH()\n# Load some data from some clustering algorithm\nsamples, labels = load_some_clustering_data()\n# Compute the final criterion value in batch\ncriterion_value = my_cvi.get_cvi(samples, labels)\n```\n\nor do it incrementally, also with `get_cvi`:\n\n```python\n# Datasets are numpy arrays\nimport numpy as np\n# Create a container for criterion values\nn_samples = len(labels)\ncriterion_values = np.zeros(n_samples)\n# Iterate over the data\nfor ix in range(n_samples):\n criterion_values = my_cvi.get_cvi(samples[ix, :], labels[ix])\n```\n\n### Detailed Usage\n\nThe `cvi` package contains a set of implemented CVIs with batch and incremental update methods.\nEach CVI is a standalone stateful object inheriting from a base class `CVI`, and all `CVI` functions are object methods, such as those that update parameters and return the criterion value.\n\nInstantiate a CVI of you choice with the default constructor:\n\n```python\n# Import the package\nimport cvi\n# Import numpy for some data handling\nimport numpy as np\n\n# Instantiate a Calinski-Harabasz (CH) CVI object\nmy_cvi = cvi.CH()\n```\n\nCVIs are instantiated with their acronyms, with a list of all implemented CVIS being found in the [Implemented CVIs](#implemented-cvis) section.\n\nA batch of data is assumed to be a numpy array of samples and a numpy vector of integer labels.\n\n```python\n# Load some data\nsamples, labels = my_clustering_alg(some_data)\n```\n\n**__NOTE__**: the `cvi` package assumes the Numpy **row-major** convention where rows are individual samples and columns are features.\nA batch dataset is then `[n_samples, n_features]` large, and their corresponding labels are '[n_samples]` large.\n\nYou may compute the final criterion value with a batch update all at once with `CVI.get_cvi`\n\n```python\n# Get the final criterion value in batch mode\ncriterion_value = my_cvi.get_cvi(samples, labels)\n```\n\nor you may get them incrementally with the same method, where you pass instead just a single numpy vector of features and a single integer label.\nThe incremental methods are used automatically based upon the dimensions of the data that is passed.\n\n```python\n# Create a container for the criterion value after each sample\nn_samples = len(labels)\ncriterion_values = np.zeros(n_samples)\n\n# Iterate across the data and store the criterion value over time\nfor ix in range(n_samples):\n sample = samples[ix, :]\n label = labels[ix]\n criterion_values[ix] = my_cvi.get_cvi(sample, label)\n```\n\n**__NOTE__**: Currently only using _either_ batch _or_ incremental methods is supported; switching from batch to incremental updates with the same is not yet implemented.\n\n## Implemented CVIs\n\nThe following CVIs have been implemented as of the latest version of `cvi`:\n\n- **CH**: Calinski-Harabasz\n- **cSIL**: Centroid-based Silhouette\n- **DB**: Davies-Bouldin\n\n## History\n\n- 8/18/2022: Initialize project.\n- 9/8/2022: First release on PyPi and initiate GitFlow.\n\n## Acknowledgements\n\n### Derivation\n\nThe incremental and batch CVI implementations in this package are largely derived from the following Julia language implementations:\n\n- [ClusterValidityIndices.jl](https://github.com/AP6YC/ClusterValidityIndices.jl)\n\n### Authors\n\nThe principal authors of the `cvi` pacakge are:\n\n- Sasha Petrenko \n- Nik Melton \n\n### Related Projects\n\nIf this package is missing something that you need, feel free to check out some related Python cluster validity packages:\n\n- [validclust](https://github.com/crew102/validclust)\n- [clusterval](https://github.com/Nuno09/clusterval)\n"` 2022-09-19T13:38:26,977 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:38:26,977 consider this value unless 'readme' is listed as `dynamic`. 2022-09-19T13:38:26,978 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:38:26,978 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:38:26,979 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:38:26,979 follow strictly the standard. 2022-09-19T13:38:26,980 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2022-09-19T13:38:26,980 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:38:26,980 configuration. 2022-09-19T13:38:26,981 !! 2022-09-19T13:38:26,982 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:38:28,526 running egg_info 2022-09-19T13:38:29,160 writing src/cvi.egg-info/PKG-INFO 2022-09-19T13:38:29,761 writing dependency_links to src/cvi.egg-info/dependency_links.txt 2022-09-19T13:38:32,760 writing requirements to src/cvi.egg-info/requires.txt 2022-09-19T13:38:33,355 writing top-level names to src/cvi.egg-info/top_level.txt 2022-09-19T13:38:34,064 reading manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-19T13:38:34,069 adding license file 'LICENSE' 2022-09-19T13:38:34,075 writing manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-19T13:38:34,079 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:38:34,080 ########################################################################## 2022-09-19T13:38:34,081 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:38:34,081 ########################################################################## 2022-09-19T13:38:34,082 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:38:34,082 `requires-python = =3.6')>` 2022-09-19T13:38:34,083 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:38:34,083 consider this value unless 'requires-python' is listed as `dynamic`. 2022-09-19T13:38:34,084 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:38:34,085 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:38:34,085 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:38:34,086 follow strictly the standard. 2022-09-19T13:38:34,086 To prevent this warning, you can list 'requires-python' under `dynamic` or alternatively 2022-09-19T13:38:34,087 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:38:34,087 configuration. 2022-09-19T13:38:34,089 !! 2022-09-19T13:38:34,090 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:38:34,090 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:38:34,091 ########################################################################## 2022-09-19T13:38:34,092 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:38:34,092 ########################################################################## 2022-09-19T13:38:34,093 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:38:34,094 `classifiers = ['Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent']` 2022-09-19T13:38:34,095 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:38:34,096 consider this value unless 'classifiers' is listed as `dynamic`. 2022-09-19T13:38:34,096 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:38:34,097 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:38:34,097 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:38:34,098 follow strictly the standard. 2022-09-19T13:38:34,099 To prevent this warning, you can list 'classifiers' under `dynamic` or alternatively 2022-09-19T13:38:34,099 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:38:34,100 configuration. 2022-09-19T13:38:34,101 !! 2022-09-19T13:38:34,102 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:38:34,102 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:38:34,103 ########################################################################## 2022-09-19T13:38:34,104 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:38:34,104 ########################################################################## 2022-09-19T13:38:34,105 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:38:34,106 `urls = {'Bug Tracker': 'https://github.com/AP6YC/cvi/issues', 'Documentation': 'https://cluster-validity-indices.readthedocs.io/'}` 2022-09-19T13:38:34,106 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:38:34,107 consider this value unless 'urls' is listed as `dynamic`. 2022-09-19T13:38:34,108 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:38:34,109 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:38:34,109 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:38:34,110 follow strictly the standard. 2022-09-19T13:38:34,110 To prevent this warning, you can list 'urls' under `dynamic` or alternatively 2022-09-19T13:38:34,111 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:38:34,111 configuration. 2022-09-19T13:38:34,112 !! 2022-09-19T13:38:34,113 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:38:34,385 Getting requirements to build wheel: finished with status 'done' 2022-09-19T13:38:34,410 Created temporary directory: /tmp/pip-standalone-pip-3cykeq_l 2022-09-19T13:38:36,606 Installing backend dependencies: started 2022-09-19T13:38:36,609 Running command pip subprocess to install backend dependencies 2022-09-19T13:38:46,154 Using pip 22.1.2 from /tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip (python 3.7) 2022-09-19T13:38:48,089 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2022-09-19T13:38:48,943 Collecting wheel 2022-09-19T13:38:48,979 Using cached https://www.piwheels.org/simple/wheel/wheel-0.37.1-py2.py3-none-any.whl (35 kB) 2022-09-19T13:38:59,505 Installing collected packages: wheel 2022-09-19T13:38:59,786 Creating /tmp/pip-build-env-41b3qdio/normal/bin 2022-09-19T13:38:59,790 changing mode of /tmp/pip-build-env-41b3qdio/normal/bin/wheel to 755 2022-09-19T13:38:59,818 Successfully installed wheel-0.37.1 2022-09-19T13:39:00,052 --- Logging error --- 2022-09-19T13:39:00,053 Traceback (most recent call last): 2022-09-19T13:39:00,053 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/utils/logging.py", line 177, in emit 2022-09-19T13:39:00,053 self.console.print(renderable, overflow="ignore", crop=False, style=style) 2022-09-19T13:39:00,054 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_vendor/rich/console.py", line 1752, in print 2022-09-19T13:39:00,054 extend(render(renderable, render_options)) 2022-09-19T13:39:00,054 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_vendor/rich/console.py", line 1390, in render 2022-09-19T13:39:00,055 for render_output in iter_render: 2022-09-19T13:39:00,055 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/utils/logging.py", line 134, in __rich_console__ 2022-09-19T13:39:00,055 for line in lines: 2022-09-19T13:39:00,056 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_vendor/rich/segment.py", line 245, in split_lines 2022-09-19T13:39:00,056 for segment in segments: 2022-09-19T13:39:00,056 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_vendor/rich/console.py", line 1368, in render 2022-09-19T13:39:00,057 renderable = rich_cast(renderable) 2022-09-19T13:39:00,057 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_vendor/rich/protocol.py", line 36, in rich_cast 2022-09-19T13:39:00,057 renderable = cast_method() 2022-09-19T13:39:00,057 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 130, in __rich__ 2022-09-19T13:39:00,058 pip_cmd = get_best_invocation_for_this_pip() 2022-09-19T13:39:00,058 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/utils/entrypoints.py", line 60, in get_best_invocation_for_this_pip 2022-09-19T13:39:00,059 os.path.join(binary_prefix, exe_name), 2022-09-19T13:39:00,059 File "/usr/lib/python3.7/genericpath.py", line 97, in samefile 2022-09-19T13:39:00,059 s2 = os.stat(f2) 2022-09-19T13:39:00,060 FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pip3.7' 2022-09-19T13:39:00,060 Call stack: 2022-09-19T13:39:00,060 File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main 2022-09-19T13:39:00,060 "__main__", mod_spec) 2022-09-19T13:39:00,061 File "/usr/lib/python3.7/runpy.py", line 85, in _run_code 2022-09-19T13:39:00,061 exec(code, run_globals) 2022-09-19T13:39:00,061 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/__main__.py", line 31, in 2022-09-19T13:39:00,062 sys.exit(_main()) 2022-09-19T13:39:00,062 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/cli/main.py", line 70, in main 2022-09-19T13:39:00,062 return command.main(cmd_args) 2022-09-19T13:39:00,063 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/cli/base_command.py", line 101, in main 2022-09-19T13:39:00,063 return self._main(args) 2022-09-19T13:39:00,063 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/cli/base_command.py", line 223, in _main 2022-09-19T13:39:00,064 self.handle_pip_version_check(options) 2022-09-19T13:39:00,064 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/cli/req_command.py", line 148, in handle_pip_version_check 2022-09-19T13:39:00,064 pip_self_version_check(session, options) 2022-09-19T13:39:00,064 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 237, in pip_self_version_check 2022-09-19T13:39:00,065 logger.info("[present-rich] %s", upgrade_prompt) 2022-09-19T13:39:00,065 File "/usr/lib/python3.7/logging/__init__.py", line 1383, in info 2022-09-19T13:39:00,065 self._log(INFO, msg, args, **kwargs) 2022-09-19T13:39:00,066 File "/usr/lib/python3.7/logging/__init__.py", line 1519, in _log 2022-09-19T13:39:00,066 self.handle(record) 2022-09-19T13:39:00,066 File "/usr/lib/python3.7/logging/__init__.py", line 1529, in handle 2022-09-19T13:39:00,067 self.callHandlers(record) 2022-09-19T13:39:00,067 File "/usr/lib/python3.7/logging/__init__.py", line 1591, in callHandlers 2022-09-19T13:39:00,067 hdlr.handle(record) 2022-09-19T13:39:00,068 File "/usr/lib/python3.7/logging/__init__.py", line 905, in handle 2022-09-19T13:39:00,068 self.emit(record) 2022-09-19T13:39:00,068 File "/tmp/pip-standalone-pip-3cykeq_l/__env_pip__.zip/pip/_internal/utils/logging.py", line 179, in emit 2022-09-19T13:39:00,069 self.handleError(record) 2022-09-19T13:39:00,069 Message: '[present-rich] %s' 2022-09-19T13:39:00,069 Arguments: (UpgradePrompt(old='22.1.2', new='22.2.2'),) 2022-09-19T13:39:00,480 Installing backend dependencies: finished with status 'done' 2022-09-19T13:39:00,503 Created temporary directory: /tmp/pip-modern-metadata-qbadmokp 2022-09-19T13:39:00,509 Preparing metadata (pyproject.toml): started 2022-09-19T13:39:00,511 Running command Preparing metadata (pyproject.toml) 2022-09-19T13:39:04,650 /usr/local/lib/python3.7/dist-packages/setuptools/config/pyprojecttoml.py:102: _ExperimentalProjectMetadata: Support for project metadata in `pyproject.toml` is still experimental and may be removed (or change) in future releases. 2022-09-19T13:39:04,651 warnings.warn(msg, _ExperimentalProjectMetadata) 2022-09-19T13:39:04,652 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:04,653 ########################################################################## 2022-09-19T13:39:04,653 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:04,653 ########################################################################## 2022-09-19T13:39:04,654 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:04,655 `readme = "# cvi\n\nA Python package implementing both batch and incremental cluster validity indices (CVIs).\n\n| **Stable Docs** | **Dev Docs** | **Build Status** | **Coverage** |\n|:----------------:|:------------:|:----------------:|:------------:|\n| [![Stable][docs-stable-img]][docs-stable-url] | [![Dev][docs-dev-img]][docs-dev-url]| [![Build Status][ci-img]][ci-url] | [![Codecov][codecov-img]][codecov-url] |\n| **Version** | **Issues** | **Commits** | **Commits Since Release**\n| [![version][version-img]][version-url] | [![issues][issues-img]][issues-url] | [![commits][commits-img]][commits-url] | [![compare][compare-img]][compare-url] |\n\n| **Zenodo DOI** |\n| :------------: |\n| [![DOI][zenodo-img]][zenodo-url] |\n\n[zenodo-img]: https://zenodo.org/badge/526280198.svg\n[zenodo-url]: https://zenodo.org/badge/latestdoi/526280198\n\n[docs-stable-img]: https://readthedocs.org/projects/cluster-validity-indices/badge/?version=latest\n[docs-stable-url]: https://cluster-validity-indices.readthedocs.io/en/latest/?badge=latest\n\n[docs-dev-img]: https://readthedocs.org/projects/cluster-validity-indices/badge/?version=develop\n[docs-dev-url]: https://cluster-validity-indices.readthedocs.io/en/develop/?badge=develop\n\n[ci-img]: https://github.com/AP6YC/cvi/actions/workflows/Test.yml/badge.svg\n[ci-url]: https://github.com/AP6YC/cvi/actions/workflows/Test.yml\n\n[codecov-img]: https://codecov.io/gh/AP6YC/cvi/branch/main/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/AP6YC/cvi\n\n[version-img]: https://img.shields.io/pypi/v/cvi.svg\n[version-url]: https://pypi.org/project/cvi\n\n[issues-img]: https://img.shields.io/github/issues/AP6YC/cvi?style=flat\n[issues-url]: https://github.com/AP6YC/cvi/issues\n\n[commits-img]: https://img.shields.io/github/commit-activity/m/AP6YC/cvi?style=flat\n[commits-url]: https://github.com/AP6YC/cvi/commits/main\n\n[compare-img]: https://img.shields.io/github/commits-since/AP6YC/cvi/latest/develop\n[compare-url]: https://github.com/AP6YC/cvi/compare/v0.1.0...develop\n\n## Table of Contents\n\n- [cvi](#cvi)\n - [Table of Contents](#table-of-contents)\n - [Cluster Validity Indices](#cluster-validity-indices)\n - [Installation](#installation)\n - [Usage](#usage)\n - [Quickstart](#quickstart)\n - [Detailed Usage](#detailed-usage)\n - [Implemented CVIs](#implemented-cvis)\n - [History](#history)\n - [Acknowledgements](#acknowledgements)\n - [Derivation](#derivation)\n - [Authors](#authors)\n - [Related Projects](#related-projects)\n\n## Cluster Validity Indices\n\nSay you have a clustering algorithm that clusters a set of samples containing features of some kind and some dimensionality.\nGreat!\nThat was a lot of work, and you should feel accomplished.\nBut how do you know that the algorithm performed _well_?\nBy definition, you wouldn't have the _true_ label belonging to each sample (if one could even exist in your context), just the label prescribed by your clustering algorithm.\n\n**Enter Cluster Validity Indices (CVIs)**.\n\nCVIs are metrics of cluster partitioning when true cluster labels are unavailable.\nEach operates on only the information available (i.e., the provided samples of features and the labels prescribed by the clustering algorithm) and produces a _metric_, a number that goes up or down according to how well the CVI believes the clustering algorithm appears to, well, _cluster_.\nClustering well in this context means correctly partitioning (i.e., separating) the data rather than prescribing too many different clusters (over partitioning) or too few (under partitioning)\nEvery CVI itself also behaves differently in terms of the range and scale of their numbers.\n**Furthermore, each CVI has an original batch implementation and incremental implementation that are equivalent**.\n\nThe `cvi` Python package contains a variety of these batch and incremental CVIs.\n\n## Installation\n\nThe `cvi` package is listed on PyPi, so you may install the latest version with\n\n```python\npip install cvi\n```\n\nYou can also specify a version to install in the usual way with\n\n```python\npip install cvi==v0.1.0-alpha.4\n```\n\nAlternatively, you can manually install a release from the [releases page](https://github.com/AP6YC/cvi/releases) on GitHub.\n\n## Usage\n\n### Quickstart\n\nCreate a CVI object and compute the criterion value in batch with `get_cvi`:\n\n```python\n# Import the library\nimport cvi\n# Create a Calinski-Harabasz (CH) CVI object\nmy_cvi = cvi.CH()\n# Load some data from some clustering algorithm\nsamples, labels = load_some_clustering_data()\n# Compute the final criterion value in batch\ncriterion_value = my_cvi.get_cvi(samples, labels)\n```\n\nor do it incrementally, also with `get_cvi`:\n\n```python\n# Datasets are numpy arrays\nimport numpy as np\n# Create a container for criterion values\nn_samples = len(labels)\ncriterion_values = np.zeros(n_samples)\n# Iterate over the data\nfor ix in range(n_samples):\n criterion_values = my_cvi.get_cvi(samples[ix, :], labels[ix])\n```\n\n### Detailed Usage\n\nThe `cvi` package contains a set of implemented CVIs with batch and incremental update methods.\nEach CVI is a standalone stateful object inheriting from a base class `CVI`, and all `CVI` functions are object methods, such as those that update parameters and return the criterion value.\n\nInstantiate a CVI of you choice with the default constructor:\n\n```python\n# Import the package\nimport cvi\n# Import numpy for some data handling\nimport numpy as np\n\n# Instantiate a Calinski-Harabasz (CH) CVI object\nmy_cvi = cvi.CH()\n```\n\nCVIs are instantiated with their acronyms, with a list of all implemented CVIS being found in the [Implemented CVIs](#implemented-cvis) section.\n\nA batch of data is assumed to be a numpy array of samples and a numpy vector of integer labels.\n\n```python\n# Load some data\nsamples, labels = my_clustering_alg(some_data)\n```\n\n**__NOTE__**: the `cvi` package assumes the Numpy **row-major** convention where rows are individual samples and columns are features.\nA batch dataset is then `[n_samples, n_features]` large, and their corresponding labels are '[n_samples]` large.\n\nYou may compute the final criterion value with a batch update all at once with `CVI.get_cvi`\n\n```python\n# Get the final criterion value in batch mode\ncriterion_value = my_cvi.get_cvi(samples, labels)\n```\n\nor you may get them incrementally with the same method, where you pass instead just a single numpy vector of features and a single integer label.\nThe incremental methods are used automatically based upon the dimensions of the data that is passed.\n\n```python\n# Create a container for the criterion value after each sample\nn_samples = len(labels)\ncriterion_values = np.zeros(n_samples)\n\n# Iterate across the data and store the criterion value over time\nfor ix in range(n_samples):\n sample = samples[ix, :]\n label = labels[ix]\n criterion_values[ix] = my_cvi.get_cvi(sample, label)\n```\n\n**__NOTE__**: Currently only using _either_ batch _or_ incremental methods is supported; switching from batch to incremental updates with the same is not yet implemented.\n\n## Implemented CVIs\n\nThe following CVIs have been implemented as of the latest version of `cvi`:\n\n- **CH**: Calinski-Harabasz\n- **cSIL**: Centroid-based Silhouette\n- **DB**: Davies-Bouldin\n\n## History\n\n- 8/18/2022: Initialize project.\n- 9/8/2022: First release on PyPi and initiate GitFlow.\n\n## Acknowledgements\n\n### Derivation\n\nThe incremental and batch CVI implementations in this package are largely derived from the following Julia language implementations:\n\n- [ClusterValidityIndices.jl](https://github.com/AP6YC/ClusterValidityIndices.jl)\n\n### Authors\n\nThe principal authors of the `cvi` pacakge are:\n\n- Sasha Petrenko \n- Nik Melton \n\n### Related Projects\n\nIf this package is missing something that you need, feel free to check out some related Python cluster validity packages:\n\n- [validclust](https://github.com/crew102/validclust)\n- [clusterval](https://github.com/Nuno09/clusterval)\n"` 2022-09-19T13:39:04,656 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:04,656 consider this value unless 'readme' is listed as `dynamic`. 2022-09-19T13:39:04,657 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:04,658 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:04,658 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:04,658 follow strictly the standard. 2022-09-19T13:39:04,659 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2022-09-19T13:39:04,659 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:04,660 configuration. 2022-09-19T13:39:04,661 !! 2022-09-19T13:39:04,661 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:06,235 running dist_info 2022-09-19T13:39:06,872 creating /tmp/pip-modern-metadata-qbadmokp/cvi.egg-info 2022-09-19T13:39:07,500 writing /tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/PKG-INFO 2022-09-19T13:39:08,100 writing dependency_links to /tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/dependency_links.txt 2022-09-19T13:39:11,064 writing requirements to /tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/requires.txt 2022-09-19T13:39:11,657 writing top-level names to /tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/top_level.txt 2022-09-19T13:39:11,660 writing manifest file '/tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/SOURCES.txt' 2022-09-19T13:39:12,364 reading manifest file '/tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/SOURCES.txt' 2022-09-19T13:39:12,367 adding license file 'LICENSE' 2022-09-19T13:39:12,372 writing manifest file '/tmp/pip-modern-metadata-qbadmokp/cvi.egg-info/SOURCES.txt' 2022-09-19T13:39:12,375 creating '/tmp/pip-modern-metadata-qbadmokp/cvi-0.1.0.dist-info' 2022-09-19T13:39:12,512 adding license file "LICENSE" (matched pattern "LICEN[CS]E*") 2022-09-19T13:39:12,525 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:12,526 ########################################################################## 2022-09-19T13:39:12,527 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:12,527 ########################################################################## 2022-09-19T13:39:12,529 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:12,529 `requires-python = =3.6')>` 2022-09-19T13:39:12,530 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:12,531 consider this value unless 'requires-python' is listed as `dynamic`. 2022-09-19T13:39:12,532 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:12,532 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:12,533 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:12,533 follow strictly the standard. 2022-09-19T13:39:12,534 To prevent this warning, you can list 'requires-python' under `dynamic` or alternatively 2022-09-19T13:39:12,535 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:12,535 configuration. 2022-09-19T13:39:12,536 !! 2022-09-19T13:39:12,537 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:12,538 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:12,539 ########################################################################## 2022-09-19T13:39:12,539 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:12,540 ########################################################################## 2022-09-19T13:39:12,541 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:12,541 `classifiers = ['Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent']` 2022-09-19T13:39:12,542 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:12,542 consider this value unless 'classifiers' is listed as `dynamic`. 2022-09-19T13:39:12,543 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:12,544 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:12,545 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:12,545 follow strictly the standard. 2022-09-19T13:39:12,546 To prevent this warning, you can list 'classifiers' under `dynamic` or alternatively 2022-09-19T13:39:12,546 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:12,547 configuration. 2022-09-19T13:39:12,548 !! 2022-09-19T13:39:12,549 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:12,549 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:12,551 ########################################################################## 2022-09-19T13:39:12,551 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:12,551 ########################################################################## 2022-09-19T13:39:12,552 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:12,553 `urls = {'Bug Tracker': 'https://github.com/AP6YC/cvi/issues', 'Documentation': 'https://cluster-validity-indices.readthedocs.io/'}` 2022-09-19T13:39:12,554 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:12,554 consider this value unless 'urls' is listed as `dynamic`. 2022-09-19T13:39:12,555 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:12,556 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:12,556 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:12,556 follow strictly the standard. 2022-09-19T13:39:12,557 To prevent this warning, you can list 'urls' under `dynamic` or alternatively 2022-09-19T13:39:12,557 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:12,558 configuration. 2022-09-19T13:39:12,559 !! 2022-09-19T13:39:12,560 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:12,829 Preparing metadata (pyproject.toml): finished with status 'done' 2022-09-19T13:39:12,845 Source in /tmp/pip-wheel-u369pgaw/cvi_0cf8a57e841442c0b568de5a554c9b0f has version 0.1.0, which satisfies requirement cvi==0.1.0 from https://files.pythonhosted.org/packages/93/9b/07fb46eef201e3c37396b82d75c5280ced222cabebaf527af367cd829f5b/cvi-0.1.0.tar.gz#sha256=535474ca5216d94953dd5d90e0a09a6ca1b9636b05ea9f4b57f349c9010e2756 2022-09-19T13:39:12,847 Removed cvi==0.1.0 from https://files.pythonhosted.org/packages/93/9b/07fb46eef201e3c37396b82d75c5280ced222cabebaf527af367cd829f5b/cvi-0.1.0.tar.gz#sha256=535474ca5216d94953dd5d90e0a09a6ca1b9636b05ea9f4b57f349c9010e2756 from build tracker '/tmp/pip-build-tracker-ykxoqcfi' 2022-09-19T13:39:12,861 Created temporary directory: /tmp/pip-unpack-in0rl7z_ 2022-09-19T13:39:12,863 Building wheels for collected packages: cvi 2022-09-19T13:39:12,873 Created temporary directory: /tmp/pip-wheel-2y25o4vw 2022-09-19T13:39:12,873 Destination directory: /tmp/pip-wheel-2y25o4vw 2022-09-19T13:39:12,878 Building wheel for cvi (pyproject.toml): started 2022-09-19T13:39:12,880 Running command Building wheel for cvi (pyproject.toml) 2022-09-19T13:39:17,068 /usr/local/lib/python3.7/dist-packages/setuptools/config/pyprojecttoml.py:102: _ExperimentalProjectMetadata: Support for project metadata in `pyproject.toml` is still experimental and may be removed (or change) in future releases. 2022-09-19T13:39:17,070 warnings.warn(msg, _ExperimentalProjectMetadata) 2022-09-19T13:39:17,070 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:17,071 ########################################################################## 2022-09-19T13:39:17,072 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:17,072 ########################################################################## 2022-09-19T13:39:17,073 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:17,073 `readme = "# cvi\n\nA Python package implementing both batch and incremental cluster validity indices (CVIs).\n\n| **Stable Docs** | **Dev Docs** | **Build Status** | **Coverage** |\n|:----------------:|:------------:|:----------------:|:------------:|\n| [![Stable][docs-stable-img]][docs-stable-url] | [![Dev][docs-dev-img]][docs-dev-url]| [![Build Status][ci-img]][ci-url] | [![Codecov][codecov-img]][codecov-url] |\n| **Version** | **Issues** | **Commits** | **Commits Since Release**\n| [![version][version-img]][version-url] | [![issues][issues-img]][issues-url] | [![commits][commits-img]][commits-url] | [![compare][compare-img]][compare-url] |\n\n| **Zenodo DOI** |\n| :------------: |\n| [![DOI][zenodo-img]][zenodo-url] |\n\n[zenodo-img]: https://zenodo.org/badge/526280198.svg\n[zenodo-url]: https://zenodo.org/badge/latestdoi/526280198\n\n[docs-stable-img]: https://readthedocs.org/projects/cluster-validity-indices/badge/?version=latest\n[docs-stable-url]: https://cluster-validity-indices.readthedocs.io/en/latest/?badge=latest\n\n[docs-dev-img]: https://readthedocs.org/projects/cluster-validity-indices/badge/?version=develop\n[docs-dev-url]: https://cluster-validity-indices.readthedocs.io/en/develop/?badge=develop\n\n[ci-img]: https://github.com/AP6YC/cvi/actions/workflows/Test.yml/badge.svg\n[ci-url]: https://github.com/AP6YC/cvi/actions/workflows/Test.yml\n\n[codecov-img]: https://codecov.io/gh/AP6YC/cvi/branch/main/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/AP6YC/cvi\n\n[version-img]: https://img.shields.io/pypi/v/cvi.svg\n[version-url]: https://pypi.org/project/cvi\n\n[issues-img]: https://img.shields.io/github/issues/AP6YC/cvi?style=flat\n[issues-url]: https://github.com/AP6YC/cvi/issues\n\n[commits-img]: https://img.shields.io/github/commit-activity/m/AP6YC/cvi?style=flat\n[commits-url]: https://github.com/AP6YC/cvi/commits/main\n\n[compare-img]: https://img.shields.io/github/commits-since/AP6YC/cvi/latest/develop\n[compare-url]: https://github.com/AP6YC/cvi/compare/v0.1.0...develop\n\n## Table of Contents\n\n- [cvi](#cvi)\n - [Table of Contents](#table-of-contents)\n - [Cluster Validity Indices](#cluster-validity-indices)\n - [Installation](#installation)\n - [Usage](#usage)\n - [Quickstart](#quickstart)\n - [Detailed Usage](#detailed-usage)\n - [Implemented CVIs](#implemented-cvis)\n - [History](#history)\n - [Acknowledgements](#acknowledgements)\n - [Derivation](#derivation)\n - [Authors](#authors)\n - [Related Projects](#related-projects)\n\n## Cluster Validity Indices\n\nSay you have a clustering algorithm that clusters a set of samples containing features of some kind and some dimensionality.\nGreat!\nThat was a lot of work, and you should feel accomplished.\nBut how do you know that the algorithm performed _well_?\nBy definition, you wouldn't have the _true_ label belonging to each sample (if one could even exist in your context), just the label prescribed by your clustering algorithm.\n\n**Enter Cluster Validity Indices (CVIs)**.\n\nCVIs are metrics of cluster partitioning when true cluster labels are unavailable.\nEach operates on only the information available (i.e., the provided samples of features and the labels prescribed by the clustering algorithm) and produces a _metric_, a number that goes up or down according to how well the CVI believes the clustering algorithm appears to, well, _cluster_.\nClustering well in this context means correctly partitioning (i.e., separating) the data rather than prescribing too many different clusters (over partitioning) or too few (under partitioning)\nEvery CVI itself also behaves differently in terms of the range and scale of their numbers.\n**Furthermore, each CVI has an original batch implementation and incremental implementation that are equivalent**.\n\nThe `cvi` Python package contains a variety of these batch and incremental CVIs.\n\n## Installation\n\nThe `cvi` package is listed on PyPi, so you may install the latest version with\n\n```python\npip install cvi\n```\n\nYou can also specify a version to install in the usual way with\n\n```python\npip install cvi==v0.1.0-alpha.4\n```\n\nAlternatively, you can manually install a release from the [releases page](https://github.com/AP6YC/cvi/releases) on GitHub.\n\n## Usage\n\n### Quickstart\n\nCreate a CVI object and compute the criterion value in batch with `get_cvi`:\n\n```python\n# Import the library\nimport cvi\n# Create a Calinski-Harabasz (CH) CVI object\nmy_cvi = cvi.CH()\n# Load some data from some clustering algorithm\nsamples, labels = load_some_clustering_data()\n# Compute the final criterion value in batch\ncriterion_value = my_cvi.get_cvi(samples, labels)\n```\n\nor do it incrementally, also with `get_cvi`:\n\n```python\n# Datasets are numpy arrays\nimport numpy as np\n# Create a container for criterion values\nn_samples = len(labels)\ncriterion_values = np.zeros(n_samples)\n# Iterate over the data\nfor ix in range(n_samples):\n criterion_values = my_cvi.get_cvi(samples[ix, :], labels[ix])\n```\n\n### Detailed Usage\n\nThe `cvi` package contains a set of implemented CVIs with batch and incremental update methods.\nEach CVI is a standalone stateful object inheriting from a base class `CVI`, and all `CVI` functions are object methods, such as those that update parameters and return the criterion value.\n\nInstantiate a CVI of you choice with the default constructor:\n\n```python\n# Import the package\nimport cvi\n# Import numpy for some data handling\nimport numpy as np\n\n# Instantiate a Calinski-Harabasz (CH) CVI object\nmy_cvi = cvi.CH()\n```\n\nCVIs are instantiated with their acronyms, with a list of all implemented CVIS being found in the [Implemented CVIs](#implemented-cvis) section.\n\nA batch of data is assumed to be a numpy array of samples and a numpy vector of integer labels.\n\n```python\n# Load some data\nsamples, labels = my_clustering_alg(some_data)\n```\n\n**__NOTE__**: the `cvi` package assumes the Numpy **row-major** convention where rows are individual samples and columns are features.\nA batch dataset is then `[n_samples, n_features]` large, and their corresponding labels are '[n_samples]` large.\n\nYou may compute the final criterion value with a batch update all at once with `CVI.get_cvi`\n\n```python\n# Get the final criterion value in batch mode\ncriterion_value = my_cvi.get_cvi(samples, labels)\n```\n\nor you may get them incrementally with the same method, where you pass instead just a single numpy vector of features and a single integer label.\nThe incremental methods are used automatically based upon the dimensions of the data that is passed.\n\n```python\n# Create a container for the criterion value after each sample\nn_samples = len(labels)\ncriterion_values = np.zeros(n_samples)\n\n# Iterate across the data and store the criterion value over time\nfor ix in range(n_samples):\n sample = samples[ix, :]\n label = labels[ix]\n criterion_values[ix] = my_cvi.get_cvi(sample, label)\n```\n\n**__NOTE__**: Currently only using _either_ batch _or_ incremental methods is supported; switching from batch to incremental updates with the same is not yet implemented.\n\n## Implemented CVIs\n\nThe following CVIs have been implemented as of the latest version of `cvi`:\n\n- **CH**: Calinski-Harabasz\n- **cSIL**: Centroid-based Silhouette\n- **DB**: Davies-Bouldin\n\n## History\n\n- 8/18/2022: Initialize project.\n- 9/8/2022: First release on PyPi and initiate GitFlow.\n\n## Acknowledgements\n\n### Derivation\n\nThe incremental and batch CVI implementations in this package are largely derived from the following Julia language implementations:\n\n- [ClusterValidityIndices.jl](https://github.com/AP6YC/ClusterValidityIndices.jl)\n\n### Authors\n\nThe principal authors of the `cvi` pacakge are:\n\n- Sasha Petrenko \n- Nik Melton \n\n### Related Projects\n\nIf this package is missing something that you need, feel free to check out some related Python cluster validity packages:\n\n- [validclust](https://github.com/crew102/validclust)\n- [clusterval](https://github.com/Nuno09/clusterval)\n"` 2022-09-19T13:39:17,074 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:17,075 consider this value unless 'readme' is listed as `dynamic`. 2022-09-19T13:39:17,075 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:17,076 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:17,076 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:17,077 follow strictly the standard. 2022-09-19T13:39:17,077 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2022-09-19T13:39:17,078 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:17,078 configuration. 2022-09-19T13:39:17,079 !! 2022-09-19T13:39:17,080 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:18,044 running bdist_wheel 2022-09-19T13:39:18,844 running build 2022-09-19T13:39:18,844 running build_py 2022-09-19T13:39:19,482 creating build 2022-09-19T13:39:19,483 creating build/lib 2022-09-19T13:39:19,484 creating build/lib/cvi 2022-09-19T13:39:19,486 copying src/cvi/__init__.py -> build/lib/cvi 2022-09-19T13:39:19,491 copying src/cvi/icvi.py -> build/lib/cvi 2022-09-19T13:39:19,497 creating build/lib/cvi/modules 2022-09-19T13:39:19,499 copying src/cvi/modules/__init__.py -> build/lib/cvi/modules 2022-09-19T13:39:19,502 copying src/cvi/modules/cSIL.py -> build/lib/cvi/modules 2022-09-19T13:39:19,507 copying src/cvi/modules/DB.py -> build/lib/cvi/modules 2022-09-19T13:39:19,512 copying src/cvi/modules/_base.py -> build/lib/cvi/modules 2022-09-19T13:39:19,516 copying src/cvi/modules/CH.py -> build/lib/cvi/modules 2022-09-19T13:39:19,520 running egg_info 2022-09-19T13:39:20,789 writing src/cvi.egg-info/PKG-INFO 2022-09-19T13:39:21,390 writing dependency_links to src/cvi.egg-info/dependency_links.txt 2022-09-19T13:39:24,367 writing requirements to src/cvi.egg-info/requires.txt 2022-09-19T13:39:24,965 writing top-level names to src/cvi.egg-info/top_level.txt 2022-09-19T13:39:25,012 reading manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-19T13:39:25,016 adding license file 'LICENSE' 2022-09-19T13:39:25,021 writing manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-19T13:39:26,287 installing to build/bdist.linux-armv7l/wheel 2022-09-19T13:39:26,288 running install 2022-09-19T13:39:26,348 running install_lib 2022-09-19T13:39:26,982 creating build/bdist.linux-armv7l 2022-09-19T13:39:26,982 creating build/bdist.linux-armv7l/wheel 2022-09-19T13:39:26,985 creating build/bdist.linux-armv7l/wheel/cvi 2022-09-19T13:39:26,987 copying build/lib/cvi/__init__.py -> build/bdist.linux-armv7l/wheel/cvi 2022-09-19T13:39:26,992 creating build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-19T13:39:26,993 copying build/lib/cvi/modules/__init__.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-19T13:39:26,997 copying build/lib/cvi/modules/cSIL.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-19T13:39:27,002 copying build/lib/cvi/modules/DB.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-19T13:39:27,006 copying build/lib/cvi/modules/_base.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-19T13:39:27,010 copying build/lib/cvi/modules/CH.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-19T13:39:27,014 copying build/lib/cvi/icvi.py -> build/bdist.linux-armv7l/wheel/cvi 2022-09-19T13:39:27,018 running install_egg_info 2022-09-19T13:39:27,648 Copying src/cvi.egg-info to build/bdist.linux-armv7l/wheel/cvi-0.1.0-py3.7.egg-info 2022-09-19T13:39:27,670 running install_scripts 2022-09-19T13:39:27,705 adding license file "LICENSE" (matched pattern "LICEN[CS]E*") 2022-09-19T13:39:27,715 creating build/bdist.linux-armv7l/wheel/cvi-0.1.0.dist-info/WHEEL 2022-09-19T13:39:27,720 creating '/tmp/pip-wheel-2y25o4vw/tmp4m5up8mc/cvi-0.1.0-py3-none-any.whl' and adding 'build/bdist.linux-armv7l/wheel' to it 2022-09-19T13:39:27,726 adding 'cvi/__init__.py' 2022-09-19T13:39:27,731 adding 'cvi/icvi.py' 2022-09-19T13:39:27,736 adding 'cvi/modules/CH.py' 2022-09-19T13:39:27,740 adding 'cvi/modules/DB.py' 2022-09-19T13:39:27,743 adding 'cvi/modules/__init__.py' 2022-09-19T13:39:27,747 adding 'cvi/modules/_base.py' 2022-09-19T13:39:27,751 adding 'cvi/modules/cSIL.py' 2022-09-19T13:39:27,756 adding 'cvi-0.1.0.dist-info/LICENSE' 2022-09-19T13:39:27,760 adding 'cvi-0.1.0.dist-info/METADATA' 2022-09-19T13:39:27,763 adding 'cvi-0.1.0.dist-info/WHEEL' 2022-09-19T13:39:27,765 adding 'cvi-0.1.0.dist-info/top_level.txt' 2022-09-19T13:39:27,768 adding 'cvi-0.1.0.dist-info/RECORD' 2022-09-19T13:39:27,771 removing build/bdist.linux-armv7l/wheel 2022-09-19T13:39:27,785 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:27,786 ########################################################################## 2022-09-19T13:39:27,786 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:27,787 ########################################################################## 2022-09-19T13:39:27,787 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:27,788 `requires-python = =3.6')>` 2022-09-19T13:39:27,789 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:27,789 consider this value unless 'requires-python' is listed as `dynamic`. 2022-09-19T13:39:27,790 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:27,791 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:27,792 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:27,792 follow strictly the standard. 2022-09-19T13:39:27,793 To prevent this warning, you can list 'requires-python' under `dynamic` or alternatively 2022-09-19T13:39:27,793 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:27,794 configuration. 2022-09-19T13:39:27,795 !! 2022-09-19T13:39:27,796 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:27,796 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:27,798 ########################################################################## 2022-09-19T13:39:27,799 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:27,799 ########################################################################## 2022-09-19T13:39:27,800 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:27,801 `classifiers = ['Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent']` 2022-09-19T13:39:27,801 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:27,802 consider this value unless 'classifiers' is listed as `dynamic`. 2022-09-19T13:39:27,803 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:27,804 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:27,804 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:27,804 follow strictly the standard. 2022-09-19T13:39:27,805 To prevent this warning, you can list 'classifiers' under `dynamic` or alternatively 2022-09-19T13:39:27,806 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:27,806 configuration. 2022-09-19T13:39:27,807 !! 2022-09-19T13:39:27,808 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:27,809 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-19T13:39:27,810 ########################################################################## 2022-09-19T13:39:27,810 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-19T13:39:27,810 ########################################################################## 2022-09-19T13:39:27,811 The following seems to be defined outside of `pyproject.toml`: 2022-09-19T13:39:27,812 `urls = {'Bug Tracker': 'https://github.com/AP6YC/cvi/issues', 'Documentation': 'https://cluster-validity-indices.readthedocs.io/'}` 2022-09-19T13:39:27,813 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-19T13:39:27,813 consider this value unless 'urls' is listed as `dynamic`. 2022-09-19T13:39:27,814 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-19T13:39:27,815 For the time being, `setuptools` will still consider the given value (as a 2022-09-19T13:39:27,815 **transitional** measure), but please note that future releases of setuptools will 2022-09-19T13:39:27,816 follow strictly the standard. 2022-09-19T13:39:27,817 To prevent this warning, you can list 'urls' under `dynamic` or alternatively 2022-09-19T13:39:27,817 remove the `[project]` table from your file and rely entirely on other means of 2022-09-19T13:39:27,817 configuration. 2022-09-19T13:39:27,819 !! 2022-09-19T13:39:27,819 warnings.warn(msg, _WouldIgnoreField) 2022-09-19T13:39:28,096 Building wheel for cvi (pyproject.toml): finished with status 'done' 2022-09-19T13:39:28,109 Created wheel for cvi: filename=cvi-0.1.0-py3-none-any.whl size=16784 sha256=cbb4453e3266116d147dd2f0933326753575711d38fd184893c41010c640dfe7 2022-09-19T13:39:28,111 Stored in directory: /tmp/pip-ephem-wheel-cache-o0xhipdt/wheels/9e/b9/14/6397f0425874e0812662792d36e43cd3e50c464a39830e3e04 2022-09-19T13:39:28,134 Successfully built cvi 2022-09-19T13:39:28,143 Removed build tracker: '/tmp/pip-build-tracker-ykxoqcfi'