2022-09-28T20:08:05,269 Created temporary directory: /tmp/pip-ephem-wheel-cache-rcwtuxww 2022-09-28T20:08:05,275 Created temporary directory: /tmp/pip-build-tracker-yd6khg2h 2022-09-28T20:08:05,276 Initialized build tracking at /tmp/pip-build-tracker-yd6khg2h 2022-09-28T20:08:05,276 Created build tracker: /tmp/pip-build-tracker-yd6khg2h 2022-09-28T20:08:05,277 Entered build tracker: /tmp/pip-build-tracker-yd6khg2h 2022-09-28T20:08:05,278 Created temporary directory: /tmp/pip-wheel-7v2e1twb 2022-09-28T20:08:05,350 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2022-09-28T20:08:05,358 2 location(s) to search for versions of cvi: 2022-09-28T20:08:05,358 * https://pypi.org/simple/cvi/ 2022-09-28T20:08:05,358 * https://www.piwheels.org/simple/cvi/ 2022-09-28T20:08:05,359 Fetching project page and analyzing links: https://pypi.org/simple/cvi/ 2022-09-28T20:08:05,360 Getting page https://pypi.org/simple/cvi/ 2022-09-28T20:08:05,363 Found index url https://pypi.org/simple 2022-09-28T20:08:05,587 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-28T20:08:05,589 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-28T20:08:05,590 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-28T20:08:05,591 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-28T20:08:05,592 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-28T20:08:05,593 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-28T20:08:05,594 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-28T20:08:05,595 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-28T20:08:05,596 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-28T20:08:05,598 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-28T20:08:05,598 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/46/d6/99dbb4442c3db7e06cb83c3e2700af507c30c54f264c55341efc80dc3d7e/cvi-0.1.1-py3-none-any.whl#sha256=883d168bf6a4b3bae79674d1372d8cc9e56058b49e22eb06aba7837c52d08c60 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,600 Found link https://files.pythonhosted.org/packages/b0/ba/998362b94c5996635c53367c8f6ebc03774d1e82e3072d73d2a21745e8be/cvi-0.1.1.tar.gz#sha256=55f52eb3761541cd1628ac006ca6731f6658f42fa0f081293a756d5855eb2109 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.1.1 2022-09-28T20:08:05,600 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/bb/7c/350ccd0aaa609c3d3db04ffe37b3d14fba0c91885e01b4b9d431153d560d/cvi-0.2.0-py3-none-any.whl#sha256=1dcb4ecbe4aad9ea081069048f78b64ce58ba1cad42e6ecdf8e3051607c3eda8 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,602 Found link https://files.pythonhosted.org/packages/4c/30/7e5f6486482a9eb5a4773ba70290b7f6860fe7b7cebc248cef06d53f95b4/cvi-0.2.0.tar.gz#sha256=f621935f63fa2028ad1a2aed37477226c905bde4d0006edd031cbefb31a5bd6a (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.2.0 2022-09-28T20:08:05,602 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/16/b9/8b8a7685432ff74a83e9ac87ea08a3254687ac3df9b214d9a7ce1036c22a/cvi-0.3.0-py3-none-any.whl#sha256=b89ac91b8ed8c3fb3d4cabbad8dff9fa23eaa69d2731fdb49ca07b9ec716217a (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,604 Found link https://files.pythonhosted.org/packages/98/6c/bad42645f7b2457a2cd1ad18aeb6cdd3de825e00ec218125bc67408fa9bc/cvi-0.3.0.tar.gz#sha256=a590d4d9bcee8f242b3ed794f2e73dac0f680331c0b7333a51d59a57ae48ace5 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.3.0 2022-09-28T20:08:05,604 Skipping link: No binaries permitted for cvi: https://files.pythonhosted.org/packages/21/93/bf31f070a59dda32a915ae67ae50c4b2d664c36e093870840e8bcb6fd71c/cvi-0.4.0-py3-none-any.whl#sha256=24444e8227a1a7205ce03613aeeaa02e862679da24496f5288d3dfa93b875498 (from https://pypi.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,606 Found link https://files.pythonhosted.org/packages/48/2c/e6abc22752c9ac8cc8549a68210eb9d1f0bdf356e81e4d100e68a7108289/cvi-0.4.0.tar.gz#sha256=e786436b371c79a3cf8b9e7401139b5ef1ec6293f58c8112e73231edec02dbce (from https://pypi.org/simple/cvi/) (requires-python:>=3.6), version: 0.4.0 2022-09-28T20:08:05,607 Fetching project page and analyzing links: https://www.piwheels.org/simple/cvi/ 2022-09-28T20:08:05,607 Getting page https://www.piwheels.org/simple/cvi/ 2022-09-28T20:08:05,609 Found index url https://www.piwheels.org/simple 2022-09-28T20:08:05,896 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.3.0-py3-none-any.whl#sha256=d9108af7344a7f95602de2e5d4d4ff4853ea3f8f056e18581ed591d25d5f1fe4 (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,897 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.2.0-py3-none-any.whl#sha256=d6fdf15585ae4c5ba5d46e0f22bb6e58ab4e9db39fde6ee27b03fd18844b3001 (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,897 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.1.1-py3-none-any.whl#sha256=f2fe4b964e48f116b9009f7836ec22dfbdf55d1626aa77fd7efa49c7da320e87 (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,898 Skipping link: No binaries permitted for cvi: https://www.piwheels.org/simple/cvi/cvi-0.1.0-py3-none-any.whl#sha256=cbb4453e3266116d147dd2f0933326753575711d38fd184893c41010c640dfe7 (from https://www.piwheels.org/simple/cvi/) (requires-python:>=3.6) 2022-09-28T20:08:05,898 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-28T20:08:05,899 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-28T20:08:05,899 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-28T20:08:05,900 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-28T20:08:05,901 Skipping link: not a file: https://www.piwheels.org/simple/cvi/ 2022-09-28T20:08:05,901 Skipping link: not a file: https://pypi.org/simple/cvi/ 2022-09-28T20:08:05,940 Given no hashes to check 1 links for project 'cvi': discarding no candidates 2022-09-28T20:08:05,972 Collecting cvi==0.4.0 2022-09-28T20:08:05,977 Created temporary directory: /tmp/pip-unpack-n4oothhl 2022-09-28T20:08:06,199 Downloading cvi-0.4.0.tar.gz (20 kB) 2022-09-28T20:08:06,342 Added cvi==0.4.0 from https://files.pythonhosted.org/packages/48/2c/e6abc22752c9ac8cc8549a68210eb9d1f0bdf356e81e4d100e68a7108289/cvi-0.4.0.tar.gz#sha256=e786436b371c79a3cf8b9e7401139b5ef1ec6293f58c8112e73231edec02dbce to build tracker '/tmp/pip-build-tracker-yd6khg2h' 2022-09-28T20:08:06,349 Created temporary directory: /tmp/pip-build-env-3sv_fg2z 2022-09-28T20:08:06,363 Created temporary directory: /tmp/pip-standalone-pip-gyrp60wk 2022-09-28T20:08:08,719 Installing build dependencies: started 2022-09-28T20:08:08,722 Running command pip subprocess to install build dependencies 2022-09-28T20:08:18,384 Using pip 22.1.2 from /tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip (python 3.7) 2022-09-28T20:08:19,986 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2022-09-28T20:08:24,234 Collecting setuptools>=42 2022-09-28T20:08:24,535 Using cached https://www.piwheels.org/simple/setuptools/setuptools-65.4.0-py3-none-any.whl (1.2 MB) 2022-09-28T20:08:31,295 Installing collected packages: setuptools 2022-09-28T20:08:36,118 Successfully installed setuptools-65.4.0 2022-09-28T20:08:36,358 --- Logging error --- 2022-09-28T20:08:36,358 Traceback (most recent call last): 2022-09-28T20:08:36,359 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/utils/logging.py", line 177, in emit 2022-09-28T20:08:36,359 self.console.print(renderable, overflow="ignore", crop=False, style=style) 2022-09-28T20:08:36,359 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_vendor/rich/console.py", line 1752, in print 2022-09-28T20:08:36,360 extend(render(renderable, render_options)) 2022-09-28T20:08:36,360 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_vendor/rich/console.py", line 1390, in render 2022-09-28T20:08:36,360 for render_output in iter_render: 2022-09-28T20:08:36,361 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/utils/logging.py", line 134, in __rich_console__ 2022-09-28T20:08:36,361 for line in lines: 2022-09-28T20:08:36,361 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_vendor/rich/segment.py", line 245, in split_lines 2022-09-28T20:08:36,362 for segment in segments: 2022-09-28T20:08:36,362 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_vendor/rich/console.py", line 1368, in render 2022-09-28T20:08:36,362 renderable = rich_cast(renderable) 2022-09-28T20:08:36,363 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_vendor/rich/protocol.py", line 36, in rich_cast 2022-09-28T20:08:36,363 renderable = cast_method() 2022-09-28T20:08:36,363 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 130, in __rich__ 2022-09-28T20:08:36,363 pip_cmd = get_best_invocation_for_this_pip() 2022-09-28T20:08:36,364 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/utils/entrypoints.py", line 60, in get_best_invocation_for_this_pip 2022-09-28T20:08:36,364 os.path.join(binary_prefix, exe_name), 2022-09-28T20:08:36,365 File "/usr/lib/python3.7/genericpath.py", line 97, in samefile 2022-09-28T20:08:36,365 s2 = os.stat(f2) 2022-09-28T20:08:36,365 FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pip3.7' 2022-09-28T20:08:36,365 Call stack: 2022-09-28T20:08:36,366 File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main 2022-09-28T20:08:36,366 "__main__", mod_spec) 2022-09-28T20:08:36,366 File "/usr/lib/python3.7/runpy.py", line 85, in _run_code 2022-09-28T20:08:36,367 exec(code, run_globals) 2022-09-28T20:08:36,367 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/__main__.py", line 31, in 2022-09-28T20:08:36,367 sys.exit(_main()) 2022-09-28T20:08:36,368 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/cli/main.py", line 70, in main 2022-09-28T20:08:36,368 return command.main(cmd_args) 2022-09-28T20:08:36,368 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/cli/base_command.py", line 101, in main 2022-09-28T20:08:36,368 return self._main(args) 2022-09-28T20:08:36,369 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/cli/base_command.py", line 223, in _main 2022-09-28T20:08:36,369 self.handle_pip_version_check(options) 2022-09-28T20:08:36,369 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/cli/req_command.py", line 148, in handle_pip_version_check 2022-09-28T20:08:36,370 pip_self_version_check(session, options) 2022-09-28T20:08:36,370 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 237, in pip_self_version_check 2022-09-28T20:08:36,370 logger.info("[present-rich] %s", upgrade_prompt) 2022-09-28T20:08:36,371 File "/usr/lib/python3.7/logging/__init__.py", line 1383, in info 2022-09-28T20:08:36,371 self._log(INFO, msg, args, **kwargs) 2022-09-28T20:08:36,371 File "/usr/lib/python3.7/logging/__init__.py", line 1519, in _log 2022-09-28T20:08:36,371 self.handle(record) 2022-09-28T20:08:36,372 File "/usr/lib/python3.7/logging/__init__.py", line 1529, in handle 2022-09-28T20:08:36,372 self.callHandlers(record) 2022-09-28T20:08:36,372 File "/usr/lib/python3.7/logging/__init__.py", line 1591, in callHandlers 2022-09-28T20:08:36,373 hdlr.handle(record) 2022-09-28T20:08:36,373 File "/usr/lib/python3.7/logging/__init__.py", line 905, in handle 2022-09-28T20:08:36,373 self.emit(record) 2022-09-28T20:08:36,374 File "/tmp/pip-standalone-pip-gyrp60wk/__env_pip__.zip/pip/_internal/utils/logging.py", line 179, in emit 2022-09-28T20:08:36,374 self.handleError(record) 2022-09-28T20:08:36,374 Message: '[present-rich] %s' 2022-09-28T20:08:36,375 Arguments: (UpgradePrompt(old='22.1.2', new='22.2.2'),) 2022-09-28T20:08:36,805 Installing build dependencies: finished with status 'done' 2022-09-28T20:08:36,832 Getting requirements to build wheel: started 2022-09-28T20:08:36,835 Running command Getting requirements to build wheel 2022-09-28T20:08:41,208 /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-28T20:08:41,209 warnings.warn(msg, _ExperimentalProjectMetadata) 2022-09-28T20:08:41,210 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:08:41,211 ########################################################################## 2022-09-28T20:08:41,211 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:08:41,211 ########################################################################## 2022-09-28T20:08:41,212 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:08:41,213 `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.4.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.4.0\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-28T20:08:41,214 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:08:41,214 consider this value unless 'readme' is listed as `dynamic`. 2022-09-28T20:08:41,215 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:08:41,215 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:08:41,216 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:08:41,216 follow strictly the standard. 2022-09-28T20:08:41,217 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2022-09-28T20:08:41,217 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:08:41,217 configuration. 2022-09-28T20:08:41,218 !! 2022-09-28T20:08:41,219 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:08:42,820 running egg_info 2022-09-28T20:08:43,453 writing src/cvi.egg-info/PKG-INFO 2022-09-28T20:08:44,052 writing dependency_links to src/cvi.egg-info/dependency_links.txt 2022-09-28T20:08:47,026 writing requirements to src/cvi.egg-info/requires.txt 2022-09-28T20:08:47,623 writing top-level names to src/cvi.egg-info/top_level.txt 2022-09-28T20:08:48,339 reading manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-28T20:08:48,344 adding license file 'LICENSE' 2022-09-28T20:08:48,350 writing manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-28T20:08:48,353 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:08:48,355 ########################################################################## 2022-09-28T20:08:48,356 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:08:48,356 ########################################################################## 2022-09-28T20:08:48,357 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:08:48,358 `requires-python = =3.6')>` 2022-09-28T20:08:48,359 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:08:48,359 consider this value unless 'requires-python' is listed as `dynamic`. 2022-09-28T20:08:48,360 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:08:48,361 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:08:48,361 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:08:48,362 follow strictly the standard. 2022-09-28T20:08:48,363 To prevent this warning, you can list 'requires-python' under `dynamic` or alternatively 2022-09-28T20:08:48,363 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:08:48,364 configuration. 2022-09-28T20:08:48,365 !! 2022-09-28T20:08:48,366 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:08:48,366 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:08:48,367 ########################################################################## 2022-09-28T20:08:48,368 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:08:48,368 ########################################################################## 2022-09-28T20:08:48,369 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:08:48,370 `classifiers = ['Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent']` 2022-09-28T20:08:48,371 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:08:48,371 consider this value unless 'classifiers' is listed as `dynamic`. 2022-09-28T20:08:48,372 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:08:48,373 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:08:48,373 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:08:48,374 follow strictly the standard. 2022-09-28T20:08:48,374 To prevent this warning, you can list 'classifiers' under `dynamic` or alternatively 2022-09-28T20:08:48,375 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:08:48,375 configuration. 2022-09-28T20:08:48,376 !! 2022-09-28T20:08:48,377 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:08:48,378 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:08:48,379 ########################################################################## 2022-09-28T20:08:48,379 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:08:48,379 ########################################################################## 2022-09-28T20:08:48,380 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:08:48,381 `urls = {'Bug Tracker': 'https://github.com/AP6YC/cvi/issues', 'Documentation': 'https://cluster-validity-indices.readthedocs.io/'}` 2022-09-28T20:08:48,382 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:08:48,382 consider this value unless 'urls' is listed as `dynamic`. 2022-09-28T20:08:48,383 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:08:48,384 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:08:48,384 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:08:48,385 follow strictly the standard. 2022-09-28T20:08:48,385 To prevent this warning, you can list 'urls' under `dynamic` or alternatively 2022-09-28T20:08:48,386 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:08:48,386 configuration. 2022-09-28T20:08:48,387 !! 2022-09-28T20:08:48,388 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:08:48,652 Getting requirements to build wheel: finished with status 'done' 2022-09-28T20:08:48,677 Created temporary directory: /tmp/pip-standalone-pip-il8ae2r6 2022-09-28T20:08:50,766 Installing backend dependencies: started 2022-09-28T20:08:50,768 Running command pip subprocess to install backend dependencies 2022-09-28T20:09:00,331 Using pip 22.1.2 from /tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip (python 3.7) 2022-09-28T20:09:01,918 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2022-09-28T20:09:02,786 Collecting wheel 2022-09-28T20:09:02,820 Using cached https://www.piwheels.org/simple/wheel/wheel-0.37.1-py2.py3-none-any.whl (35 kB) 2022-09-28T20:09:08,798 Installing collected packages: wheel 2022-09-28T20:09:09,064 Creating /tmp/pip-build-env-3sv_fg2z/normal/bin 2022-09-28T20:09:09,068 changing mode of /tmp/pip-build-env-3sv_fg2z/normal/bin/wheel to 755 2022-09-28T20:09:09,093 Successfully installed wheel-0.37.1 2022-09-28T20:09:09,320 --- Logging error --- 2022-09-28T20:09:09,321 Traceback (most recent call last): 2022-09-28T20:09:09,321 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/utils/logging.py", line 177, in emit 2022-09-28T20:09:09,321 self.console.print(renderable, overflow="ignore", crop=False, style=style) 2022-09-28T20:09:09,322 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_vendor/rich/console.py", line 1752, in print 2022-09-28T20:09:09,322 extend(render(renderable, render_options)) 2022-09-28T20:09:09,322 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_vendor/rich/console.py", line 1390, in render 2022-09-28T20:09:09,323 for render_output in iter_render: 2022-09-28T20:09:09,323 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/utils/logging.py", line 134, in __rich_console__ 2022-09-28T20:09:09,323 for line in lines: 2022-09-28T20:09:09,324 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_vendor/rich/segment.py", line 245, in split_lines 2022-09-28T20:09:09,324 for segment in segments: 2022-09-28T20:09:09,325 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_vendor/rich/console.py", line 1368, in render 2022-09-28T20:09:09,325 renderable = rich_cast(renderable) 2022-09-28T20:09:09,325 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_vendor/rich/protocol.py", line 36, in rich_cast 2022-09-28T20:09:09,325 renderable = cast_method() 2022-09-28T20:09:09,326 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 130, in __rich__ 2022-09-28T20:09:09,326 pip_cmd = get_best_invocation_for_this_pip() 2022-09-28T20:09:09,326 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/utils/entrypoints.py", line 60, in get_best_invocation_for_this_pip 2022-09-28T20:09:09,327 os.path.join(binary_prefix, exe_name), 2022-09-28T20:09:09,327 File "/usr/lib/python3.7/genericpath.py", line 97, in samefile 2022-09-28T20:09:09,327 s2 = os.stat(f2) 2022-09-28T20:09:09,328 FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pip3.7' 2022-09-28T20:09:09,328 Call stack: 2022-09-28T20:09:09,328 File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main 2022-09-28T20:09:09,329 "__main__", mod_spec) 2022-09-28T20:09:09,329 File "/usr/lib/python3.7/runpy.py", line 85, in _run_code 2022-09-28T20:09:09,329 exec(code, run_globals) 2022-09-28T20:09:09,329 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/__main__.py", line 31, in 2022-09-28T20:09:09,330 sys.exit(_main()) 2022-09-28T20:09:09,330 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/cli/main.py", line 70, in main 2022-09-28T20:09:09,330 return command.main(cmd_args) 2022-09-28T20:09:09,331 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/cli/base_command.py", line 101, in main 2022-09-28T20:09:09,331 return self._main(args) 2022-09-28T20:09:09,331 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/cli/base_command.py", line 223, in _main 2022-09-28T20:09:09,332 self.handle_pip_version_check(options) 2022-09-28T20:09:09,332 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/cli/req_command.py", line 148, in handle_pip_version_check 2022-09-28T20:09:09,332 pip_self_version_check(session, options) 2022-09-28T20:09:09,332 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/self_outdated_check.py", line 237, in pip_self_version_check 2022-09-28T20:09:09,333 logger.info("[present-rich] %s", upgrade_prompt) 2022-09-28T20:09:09,333 File "/usr/lib/python3.7/logging/__init__.py", line 1383, in info 2022-09-28T20:09:09,333 self._log(INFO, msg, args, **kwargs) 2022-09-28T20:09:09,334 File "/usr/lib/python3.7/logging/__init__.py", line 1519, in _log 2022-09-28T20:09:09,334 self.handle(record) 2022-09-28T20:09:09,334 File "/usr/lib/python3.7/logging/__init__.py", line 1529, in handle 2022-09-28T20:09:09,335 self.callHandlers(record) 2022-09-28T20:09:09,335 File "/usr/lib/python3.7/logging/__init__.py", line 1591, in callHandlers 2022-09-28T20:09:09,335 hdlr.handle(record) 2022-09-28T20:09:09,336 File "/usr/lib/python3.7/logging/__init__.py", line 905, in handle 2022-09-28T20:09:09,336 self.emit(record) 2022-09-28T20:09:09,336 File "/tmp/pip-standalone-pip-il8ae2r6/__env_pip__.zip/pip/_internal/utils/logging.py", line 179, in emit 2022-09-28T20:09:09,337 self.handleError(record) 2022-09-28T20:09:09,337 Message: '[present-rich] %s' 2022-09-28T20:09:09,337 Arguments: (UpgradePrompt(old='22.1.2', new='22.2.2'),) 2022-09-28T20:09:09,716 Installing backend dependencies: finished with status 'done' 2022-09-28T20:09:09,736 Created temporary directory: /tmp/pip-modern-metadata-do6yh3cv 2022-09-28T20:09:09,743 Preparing metadata (pyproject.toml): started 2022-09-28T20:09:09,745 Running command Preparing metadata (pyproject.toml) 2022-09-28T20:09:13,943 /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-28T20:09:13,944 warnings.warn(msg, _ExperimentalProjectMetadata) 2022-09-28T20:09:13,944 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:13,945 ########################################################################## 2022-09-28T20:09:13,946 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:13,946 ########################################################################## 2022-09-28T20:09:13,947 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:13,948 `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.4.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.4.0\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-28T20:09:13,949 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:13,949 consider this value unless 'readme' is listed as `dynamic`. 2022-09-28T20:09:13,950 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:13,951 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:13,951 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:13,951 follow strictly the standard. 2022-09-28T20:09:13,952 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2022-09-28T20:09:13,952 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:13,953 configuration. 2022-09-28T20:09:13,954 !! 2022-09-28T20:09:13,954 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:15,612 running dist_info 2022-09-28T20:09:16,272 creating /tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info 2022-09-28T20:09:16,914 writing /tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/PKG-INFO 2022-09-28T20:09:17,537 writing dependency_links to /tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/dependency_links.txt 2022-09-28T20:09:20,567 writing requirements to /tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/requires.txt 2022-09-28T20:09:21,183 writing top-level names to /tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/top_level.txt 2022-09-28T20:09:21,187 writing manifest file '/tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/SOURCES.txt' 2022-09-28T20:09:21,906 reading manifest file '/tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/SOURCES.txt' 2022-09-28T20:09:21,910 adding license file 'LICENSE' 2022-09-28T20:09:21,915 writing manifest file '/tmp/pip-modern-metadata-do6yh3cv/cvi.egg-info/SOURCES.txt' 2022-09-28T20:09:21,919 creating '/tmp/pip-modern-metadata-do6yh3cv/cvi-0.4.0.dist-info' 2022-09-28T20:09:22,059 adding license file "LICENSE" (matched pattern "LICEN[CS]E*") 2022-09-28T20:09:22,073 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:22,074 ########################################################################## 2022-09-28T20:09:22,074 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:22,075 ########################################################################## 2022-09-28T20:09:22,076 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:22,077 `requires-python = =3.6')>` 2022-09-28T20:09:22,078 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:22,078 consider this value unless 'requires-python' is listed as `dynamic`. 2022-09-28T20:09:22,079 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:22,080 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:22,080 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:22,081 follow strictly the standard. 2022-09-28T20:09:22,082 To prevent this warning, you can list 'requires-python' under `dynamic` or alternatively 2022-09-28T20:09:22,082 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:22,083 configuration. 2022-09-28T20:09:22,084 !! 2022-09-28T20:09:22,085 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:22,085 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:22,087 ########################################################################## 2022-09-28T20:09:22,087 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:22,087 ########################################################################## 2022-09-28T20:09:22,088 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:22,089 `classifiers = ['Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent']` 2022-09-28T20:09:22,090 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:22,090 consider this value unless 'classifiers' is listed as `dynamic`. 2022-09-28T20:09:22,091 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:22,092 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:22,092 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:22,093 follow strictly the standard. 2022-09-28T20:09:22,093 To prevent this warning, you can list 'classifiers' under `dynamic` or alternatively 2022-09-28T20:09:22,094 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:22,094 configuration. 2022-09-28T20:09:22,095 !! 2022-09-28T20:09:22,096 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:22,097 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:22,098 ########################################################################## 2022-09-28T20:09:22,098 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:22,099 ########################################################################## 2022-09-28T20:09:22,100 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:22,100 `urls = {'Bug Tracker': 'https://github.com/AP6YC/cvi/issues', 'Documentation': 'https://cluster-validity-indices.readthedocs.io/'}` 2022-09-28T20:09:22,101 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:22,101 consider this value unless 'urls' is listed as `dynamic`. 2022-09-28T20:09:22,102 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:22,103 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:22,103 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:22,104 follow strictly the standard. 2022-09-28T20:09:22,105 To prevent this warning, you can list 'urls' under `dynamic` or alternatively 2022-09-28T20:09:22,105 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:22,106 configuration. 2022-09-28T20:09:22,107 !! 2022-09-28T20:09:22,108 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:22,380 Preparing metadata (pyproject.toml): finished with status 'done' 2022-09-28T20:09:22,396 Source in /tmp/pip-wheel-7v2e1twb/cvi_a42bd85458da45d6b548a978a0c029e6 has version 0.4.0, which satisfies requirement cvi==0.4.0 from https://files.pythonhosted.org/packages/48/2c/e6abc22752c9ac8cc8549a68210eb9d1f0bdf356e81e4d100e68a7108289/cvi-0.4.0.tar.gz#sha256=e786436b371c79a3cf8b9e7401139b5ef1ec6293f58c8112e73231edec02dbce 2022-09-28T20:09:22,398 Removed cvi==0.4.0 from https://files.pythonhosted.org/packages/48/2c/e6abc22752c9ac8cc8549a68210eb9d1f0bdf356e81e4d100e68a7108289/cvi-0.4.0.tar.gz#sha256=e786436b371c79a3cf8b9e7401139b5ef1ec6293f58c8112e73231edec02dbce from build tracker '/tmp/pip-build-tracker-yd6khg2h' 2022-09-28T20:09:22,412 Created temporary directory: /tmp/pip-unpack-bqjaydow 2022-09-28T20:09:22,413 Building wheels for collected packages: cvi 2022-09-28T20:09:22,423 Created temporary directory: /tmp/pip-wheel-m_an9l7_ 2022-09-28T20:09:22,424 Destination directory: /tmp/pip-wheel-m_an9l7_ 2022-09-28T20:09:22,429 Building wheel for cvi (pyproject.toml): started 2022-09-28T20:09:22,431 Running command Building wheel for cvi (pyproject.toml) 2022-09-28T20:09:26,573 /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-28T20:09:26,575 warnings.warn(msg, _ExperimentalProjectMetadata) 2022-09-28T20:09:26,575 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:26,576 ########################################################################## 2022-09-28T20:09:26,577 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:26,577 ########################################################################## 2022-09-28T20:09:26,578 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:26,579 `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.4.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.4.0\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-28T20:09:26,580 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:26,581 consider this value unless 'readme' is listed as `dynamic`. 2022-09-28T20:09:26,581 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:26,582 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:26,582 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:26,582 follow strictly the standard. 2022-09-28T20:09:26,583 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2022-09-28T20:09:26,584 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:26,584 configuration. 2022-09-28T20:09:26,585 !! 2022-09-28T20:09:26,586 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:27,595 running bdist_wheel 2022-09-28T20:09:28,380 running build 2022-09-28T20:09:28,381 running build_py 2022-09-28T20:09:29,007 creating build 2022-09-28T20:09:29,008 creating build/lib 2022-09-28T20:09:29,010 creating build/lib/cvi 2022-09-28T20:09:29,011 copying src/cvi/__init__.py -> build/lib/cvi 2022-09-28T20:09:29,017 creating build/lib/cvi/modules 2022-09-28T20:09:29,018 copying src/cvi/modules/__init__.py -> build/lib/cvi/modules 2022-09-28T20:09:29,022 copying src/cvi/modules/WB.py -> build/lib/cvi/modules 2022-09-28T20:09:29,026 copying src/cvi/modules/DB.py -> build/lib/cvi/modules 2022-09-28T20:09:29,030 copying src/cvi/modules/_base.py -> build/lib/cvi/modules 2022-09-28T20:09:29,034 copying src/cvi/modules/CH.py -> build/lib/cvi/modules 2022-09-28T20:09:29,038 copying src/cvi/modules/cSIL.py -> build/lib/cvi/modules 2022-09-28T20:09:29,042 copying src/cvi/modules/rCIP.py -> build/lib/cvi/modules 2022-09-28T20:09:29,046 copying src/cvi/modules/XB.py -> build/lib/cvi/modules 2022-09-28T20:09:29,050 copying src/cvi/modules/GD43.py -> build/lib/cvi/modules 2022-09-28T20:09:29,053 copying src/cvi/modules/PS.py -> build/lib/cvi/modules 2022-09-28T20:09:29,057 copying src/cvi/modules/GD53.py -> build/lib/cvi/modules 2022-09-28T20:09:29,062 creating build/lib/cvi/compat 2022-09-28T20:09:29,064 copying src/cvi/compat/v0.py -> build/lib/cvi/compat 2022-09-28T20:09:29,068 copying src/cvi/compat/__init__.py -> build/lib/cvi/compat 2022-09-28T20:09:29,071 running egg_info 2022-09-28T20:09:30,332 writing src/cvi.egg-info/PKG-INFO 2022-09-28T20:09:30,930 writing dependency_links to src/cvi.egg-info/dependency_links.txt 2022-09-28T20:09:33,892 writing requirements to src/cvi.egg-info/requires.txt 2022-09-28T20:09:34,488 writing top-level names to src/cvi.egg-info/top_level.txt 2022-09-28T20:09:34,533 reading manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-28T20:09:34,537 adding license file 'LICENSE' 2022-09-28T20:09:34,542 writing manifest file 'src/cvi.egg-info/SOURCES.txt' 2022-09-28T20:09:35,797 installing to build/bdist.linux-armv7l/wheel 2022-09-28T20:09:35,798 running install 2022-09-28T20:09:35,858 running install_lib 2022-09-28T20:09:36,487 creating build/bdist.linux-armv7l 2022-09-28T20:09:36,488 creating build/bdist.linux-armv7l/wheel 2022-09-28T20:09:36,490 creating build/bdist.linux-armv7l/wheel/cvi 2022-09-28T20:09:36,492 copying build/lib/cvi/__init__.py -> build/bdist.linux-armv7l/wheel/cvi 2022-09-28T20:09:36,497 creating build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,499 copying build/lib/cvi/modules/__init__.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,502 copying build/lib/cvi/modules/WB.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,507 copying build/lib/cvi/modules/DB.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,511 copying build/lib/cvi/modules/_base.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,515 copying build/lib/cvi/modules/CH.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,519 copying build/lib/cvi/modules/cSIL.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,524 copying build/lib/cvi/modules/rCIP.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,528 copying build/lib/cvi/modules/XB.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,532 copying build/lib/cvi/modules/GD43.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,536 copying build/lib/cvi/modules/PS.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,540 copying build/lib/cvi/modules/GD53.py -> build/bdist.linux-armv7l/wheel/cvi/modules 2022-09-28T20:09:36,545 creating build/bdist.linux-armv7l/wheel/cvi/compat 2022-09-28T20:09:36,546 copying build/lib/cvi/compat/v0.py -> build/bdist.linux-armv7l/wheel/cvi/compat 2022-09-28T20:09:36,552 copying build/lib/cvi/compat/__init__.py -> build/bdist.linux-armv7l/wheel/cvi/compat 2022-09-28T20:09:36,554 running install_egg_info 2022-09-28T20:09:37,180 Copying src/cvi.egg-info to build/bdist.linux-armv7l/wheel/cvi-0.4.0-py3.7.egg-info 2022-09-28T20:09:37,200 running install_scripts 2022-09-28T20:09:37,238 adding license file "LICENSE" (matched pattern "LICEN[CS]E*") 2022-09-28T20:09:37,247 creating build/bdist.linux-armv7l/wheel/cvi-0.4.0.dist-info/WHEEL 2022-09-28T20:09:37,252 creating '/tmp/pip-wheel-m_an9l7_/tmppraoqwnz/cvi-0.4.0-py3-none-any.whl' and adding 'build/bdist.linux-armv7l/wheel' to it 2022-09-28T20:09:37,257 adding 'cvi/__init__.py' 2022-09-28T20:09:37,260 adding 'cvi/compat/__init__.py' 2022-09-28T20:09:37,266 adding 'cvi/compat/v0.py' 2022-09-28T20:09:37,271 adding 'cvi/modules/CH.py' 2022-09-28T20:09:37,275 adding 'cvi/modules/DB.py' 2022-09-28T20:09:37,278 adding 'cvi/modules/GD43.py' 2022-09-28T20:09:37,281 adding 'cvi/modules/GD53.py' 2022-09-28T20:09:37,285 adding 'cvi/modules/PS.py' 2022-09-28T20:09:37,288 adding 'cvi/modules/WB.py' 2022-09-28T20:09:37,291 adding 'cvi/modules/XB.py' 2022-09-28T20:09:37,293 adding 'cvi/modules/__init__.py' 2022-09-28T20:09:37,297 adding 'cvi/modules/_base.py' 2022-09-28T20:09:37,300 adding 'cvi/modules/cSIL.py' 2022-09-28T20:09:37,304 adding 'cvi/modules/rCIP.py' 2022-09-28T20:09:37,308 adding 'cvi-0.4.0.dist-info/LICENSE' 2022-09-28T20:09:37,312 adding 'cvi-0.4.0.dist-info/METADATA' 2022-09-28T20:09:37,313 adding 'cvi-0.4.0.dist-info/WHEEL' 2022-09-28T20:09:37,316 adding 'cvi-0.4.0.dist-info/top_level.txt' 2022-09-28T20:09:37,317 adding 'cvi-0.4.0.dist-info/RECORD' 2022-09-28T20:09:37,321 removing build/bdist.linux-armv7l/wheel 2022-09-28T20:09:37,338 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:37,340 ########################################################################## 2022-09-28T20:09:37,340 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:37,341 ########################################################################## 2022-09-28T20:09:37,341 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:37,342 `requires-python = =3.6')>` 2022-09-28T20:09:37,343 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:37,344 consider this value unless 'requires-python' is listed as `dynamic`. 2022-09-28T20:09:37,345 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:37,346 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:37,346 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:37,346 follow strictly the standard. 2022-09-28T20:09:37,347 To prevent this warning, you can list 'requires-python' under `dynamic` or alternatively 2022-09-28T20:09:37,348 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:37,348 configuration. 2022-09-28T20:09:37,349 !! 2022-09-28T20:09:37,350 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:37,351 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:37,352 ########################################################################## 2022-09-28T20:09:37,352 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:37,353 ########################################################################## 2022-09-28T20:09:37,353 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:37,354 `classifiers = ['Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent']` 2022-09-28T20:09:37,355 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:37,355 consider this value unless 'classifiers' is listed as `dynamic`. 2022-09-28T20:09:37,356 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:37,357 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:37,358 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:37,358 follow strictly the standard. 2022-09-28T20:09:37,359 To prevent this warning, you can list 'classifiers' under `dynamic` or alternatively 2022-09-28T20:09:37,359 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:37,360 configuration. 2022-09-28T20:09:37,361 !! 2022-09-28T20:09:37,362 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:37,362 /usr/local/lib/python3.7/dist-packages/setuptools/config/_apply_pyprojecttoml.py:101: _WouldIgnoreField: !! 2022-09-28T20:09:37,363 ########################################################################## 2022-09-28T20:09:37,364 # configuration would be ignored/result in error due to `pyproject.toml` # 2022-09-28T20:09:37,364 ########################################################################## 2022-09-28T20:09:37,365 The following seems to be defined outside of `pyproject.toml`: 2022-09-28T20:09:37,366 `urls = {'Bug Tracker': 'https://github.com/AP6YC/cvi/issues', 'Documentation': 'https://cluster-validity-indices.readthedocs.io/'}` 2022-09-28T20:09:37,367 According to the spec (see the link bellow), however, setuptools CANNOT 2022-09-28T20:09:37,367 consider this value unless 'urls' is listed as `dynamic`. 2022-09-28T20:09:37,368 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2022-09-28T20:09:37,368 For the time being, `setuptools` will still consider the given value (as a 2022-09-28T20:09:37,369 **transitional** measure), but please note that future releases of setuptools will 2022-09-28T20:09:37,369 follow strictly the standard. 2022-09-28T20:09:37,370 To prevent this warning, you can list 'urls' under `dynamic` or alternatively 2022-09-28T20:09:37,370 remove the `[project]` table from your file and rely entirely on other means of 2022-09-28T20:09:37,371 configuration. 2022-09-28T20:09:37,372 !! 2022-09-28T20:09:37,373 warnings.warn(msg, _WouldIgnoreField) 2022-09-28T20:09:37,649 Building wheel for cvi (pyproject.toml): finished with status 'done' 2022-09-28T20:09:37,663 Created wheel for cvi: filename=cvi-0.4.0-py3-none-any.whl size=31603 sha256=7e9e66fa4dd61b9a6ce72e7a1b2b356319ca9ba3a999bb5e77a83225b65449b7 2022-09-28T20:09:37,665 Stored in directory: /tmp/pip-ephem-wheel-cache-rcwtuxww/wheels/dd/63/89/45e2ca054086b30b45e7a8f367f44adba0f55c2ab0bd451029 2022-09-28T20:09:37,689 Successfully built cvi 2022-09-28T20:09:37,699 Removed build tracker: '/tmp/pip-build-tracker-yd6khg2h'