From 71cb58415df045e67a42063338f3080048836b43 Mon Sep 17 00:00:00 2001
From: Derek Maggio <derek.j.maggio@gmail.com>
Date: Fri, 5 Apr 2024 07:57:06 -0700
Subject: [PATCH] chore: switch over to setup.py

formatting

chore: formatting and configs

chore: remove comment add more cleaning

fix data
---
 performance-metrics/.flake8                   |   5 +-
 performance-metrics/Makefile                  |  13 +-
 performance-metrics/Pipfile                   |   1 -
 performance-metrics/Pipfile.lock              | 115 +++++++++---------
 performance-metrics/mypy.ini                  |   5 +
 performance-metrics/pyproject.toml            |  13 --
 performance-metrics/setup.py                  |  91 ++++++++++++++
 .../src/performance_metrics/__init__.py       |   1 +
 .../src/performance_metrics/py.typed          |   0
 9 files changed, 171 insertions(+), 73 deletions(-)
 create mode 100644 performance-metrics/mypy.ini
 delete mode 100644 performance-metrics/pyproject.toml
 create mode 100755 performance-metrics/setup.py
 create mode 100644 performance-metrics/src/performance_metrics/__init__.py
 create mode 100644 performance-metrics/src/performance_metrics/py.typed

diff --git a/performance-metrics/.flake8 b/performance-metrics/.flake8
index e1ab7cfcc9a7..4aa1c02d7aa7 100644
--- a/performance-metrics/.flake8
+++ b/performance-metrics/.flake8
@@ -19,4 +19,7 @@ extend-ignore =
 # https://pypi.org/project/flake8-docstrings/
 docstring-convention = google
 
-noqa-require-code = true
\ No newline at end of file
+noqa-require-code = true
+
+per-file-ignores =
+    setup.py:ANN,D
\ No newline at end of file
diff --git a/performance-metrics/Makefile b/performance-metrics/Makefile
index eba256656d3b..4e1273c3a9c0 100644
--- a/performance-metrics/Makefile
+++ b/performance-metrics/Makefile
@@ -1,3 +1,5 @@
+include ../scripts/python.mk
+
 .PHONY: lint
 lint:
 	pipenv run python -m black --check .
@@ -14,4 +16,13 @@ setup:
 
 .PHONY: teardown
 teardown:
-	pipenv --rm
\ No newline at end of file
+	pipenv --rm
+
+.PHONY: clean
+clean:
+	rm -rf build dist *.egg-info .mypy_cache .pytest_cache src/performance_metrics.egg-info
+
+.PHONY: wheel
+wheel:
+	pipenv run python setup.py $(wheel_opts) bdist_wheel
+	rm -rf build
\ No newline at end of file
diff --git a/performance-metrics/Pipfile b/performance-metrics/Pipfile
index e1aa5a16b88d..df5a3de89d6a 100644
--- a/performance-metrics/Pipfile
+++ b/performance-metrics/Pipfile
@@ -9,7 +9,6 @@ opentrons-shared-data = {file = "../shared-data/python", editable = true}
 [dev-packages]
 pytest  = "==7.2.2"
 mypy    = "==1.8.0"
-# For Github Flavored Markdown
 flake8 = "==7.0.0"
 flake8-annotations = "~=3.0.1"
 flake8-docstrings = "~=1.7.0"
diff --git a/performance-metrics/Pipfile.lock b/performance-metrics/Pipfile.lock
index 5a422a8af7fd..61556f3dee9e 100644
--- a/performance-metrics/Pipfile.lock
+++ b/performance-metrics/Pipfile.lock
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": "1ae7eea4b27223dc5e53e8ab1dc77b034aa89c0aa8951fef5dd99e46730682b0"
+            "sha256": "fa95804888e2d45ce401c98bafc9b543cb6e1afe0a36713660d3f5517ac02b8e"
         },
         "pipfile-spec": 6,
         "requires": {
@@ -137,32 +137,33 @@
         },
         "black": {
             "hashes": [
-                "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f",
-                "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93",
-                "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11",
-                "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0",
-                "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9",
-                "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5",
-                "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213",
-                "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d",
-                "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7",
-                "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837",
-                "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f",
-                "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395",
-                "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995",
-                "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f",
-                "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597",
-                "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959",
-                "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5",
-                "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb",
-                "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4",
-                "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7",
-                "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd",
-                "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"
+                "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b",
+                "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176",
+                "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09",
+                "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a",
+                "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015",
+                "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79",
+                "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb",
+                "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20",
+                "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464",
+                "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968",
+                "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82",
+                "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21",
+                "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0",
+                "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265",
+                "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b",
+                "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a",
+                "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72",
+                "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce",
+                "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0",
+                "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a",
+                "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163",
+                "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad",
+                "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"
             ],
             "index": "pypi",
-            "markers": "python_version >= '3.8'",
-            "version": "==24.3.0"
+            "markers": "python_full_version >= '3.6.2'",
+            "version": "==22.3.0"
         },
         "click": {
             "hashes": [
@@ -234,37 +235,37 @@
         },
         "mypy": {
             "hashes": [
-                "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6",
-                "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913",
-                "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129",
-                "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc",
-                "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974",
-                "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374",
-                "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150",
-                "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03",
-                "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9",
-                "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02",
-                "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89",
-                "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2",
-                "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d",
-                "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3",
-                "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612",
-                "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e",
-                "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3",
-                "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e",
-                "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd",
-                "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04",
-                "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed",
-                "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185",
-                "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf",
-                "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b",
-                "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4",
-                "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f",
-                "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"
+                "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6",
+                "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d",
+                "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02",
+                "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d",
+                "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3",
+                "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3",
+                "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3",
+                "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66",
+                "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259",
+                "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835",
+                "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd",
+                "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d",
+                "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8",
+                "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07",
+                "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b",
+                "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e",
+                "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6",
+                "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae",
+                "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9",
+                "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d",
+                "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a",
+                "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592",
+                "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218",
+                "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817",
+                "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4",
+                "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410",
+                "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"
             ],
             "index": "pypi",
             "markers": "python_version >= '3.8'",
-            "version": "==1.9.0"
+            "version": "==1.8.0"
         },
         "mypy-extensions": {
             "hashes": [
@@ -332,12 +333,12 @@
         },
         "pytest": {
             "hashes": [
-                "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7",
-                "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"
+                "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e",
+                "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"
             ],
             "index": "pypi",
-            "markers": "python_version >= '3.8'",
-            "version": "==8.1.1"
+            "markers": "python_version >= '3.7'",
+            "version": "==7.2.2"
         },
         "snowballstemmer": {
             "hashes": [
diff --git a/performance-metrics/mypy.ini b/performance-metrics/mypy.ini
new file mode 100644
index 000000000000..b94476cbcaa8
--- /dev/null
+++ b/performance-metrics/mypy.ini
@@ -0,0 +1,5 @@
+[mypy]
+show_error_codes = True
+warn_unused_configs = True
+strict = True
+exclude = setup.py
\ No newline at end of file
diff --git a/performance-metrics/pyproject.toml b/performance-metrics/pyproject.toml
deleted file mode 100644
index 0aaaea29f7a7..000000000000
--- a/performance-metrics/pyproject.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-[tool.ruff]
-line-length = 100
-target-version = "py310"
-exclude = []
-src = ["*.py", "tests"]
-lint.select = [
-    "E",  # pycodestyle errors
-    "W",  # pycodestyle warnings
-    "F",  # pyflakes
-    "I",  # isort
-    "C",  # flake8-comprehensions
-    "B",  # flake8-bugbear
-]
\ No newline at end of file
diff --git a/performance-metrics/setup.py b/performance-metrics/setup.py
new file mode 100755
index 000000000000..eced9a55ab90
--- /dev/null
+++ b/performance-metrics/setup.py
@@ -0,0 +1,91 @@
+# Inspired by:
+# https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/
+import sys
+import codecs
+import os
+import os.path
+from setuptools import setup, find_packages
+
+# make stdout blocking since Travis sets it to nonblocking
+if os.name == "posix":
+    import fcntl
+
+    flags = fcntl.fcntl(sys.stdout, fcntl.F_GETFL)
+    fcntl.fcntl(sys.stdout, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
+
+HERE = os.path.abspath(os.path.dirname(__file__))
+sys.path.append(os.path.join(HERE, "..", "scripts"))
+
+from python_build_utils import normalize_version  # noqa: E402
+
+
+def get_version():
+    buildno = os.getenv("BUILD_NUMBER")
+    project = os.getenv("OPENTRONS_PROJECT", "robot-stack")
+    git_dir = os.getenv("OPENTRONS_GIT_DIR", None)
+    if buildno:
+        normalize_opts = {"extra_tag": buildno}
+    else:
+        normalize_opts = {}
+    return normalize_version(
+        "performance-metrics", project, git_dir=git_dir, **normalize_opts
+    )
+
+
+VERSION = get_version()
+
+DISTNAME = "performance_metrics"
+LICENSE = "Apache 2.0"
+AUTHOR = "Opentrons"
+EMAIL = "engineering@opentrons.com"
+URL = "https://github.com/Opentrons/opentrons"
+DOWNLOAD_URL = ""
+CLASSIFIERS = [
+    "Development Status :: 5 - Production/Stable",
+    "Environment :: Console",
+    "Operating System :: OS Independent",
+    "Intended Audience :: Science/Research",
+    "Programming Language :: Python",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.10",
+    "Topic :: Scientific/Engineering",
+]
+KEYWORDS = ["robots", "protocols", "synbio", "pcr", "automation", "lab"]
+DESCRIPTION = "Library for working with performance metrics on the Opentrons robots"
+PACKAGES = find_packages(where="src", exclude=["tests.*", "tests"])
+INSTALL_REQUIRES = [
+    f"opentrons-shared-data=={VERSION}",
+]
+
+
+def read(*parts):
+    """
+    Build an absolute path from *parts* and and return the contents of the
+    resulting file.  Assume UTF-8 encoding.
+    """
+    with codecs.open(os.path.join(HERE, *parts), "rb", "utf-8") as f:
+        return f.read()
+
+
+if __name__ == "__main__":
+    setup(
+        python_requires="~=3.10",
+        name=DISTNAME,
+        description=DESCRIPTION,
+        license=LICENSE,
+        url=URL,
+        version=VERSION,
+        author=AUTHOR,
+        author_email=EMAIL,
+        maintainer=AUTHOR,
+        maintainer_email=EMAIL,
+        keywords=KEYWORDS,
+        long_description=__doc__,
+        packages=PACKAGES,
+        zip_safe=False,
+        classifiers=CLASSIFIERS,
+        install_requires=INSTALL_REQUIRES,
+        include_package_data=True,
+        package_dir={"": "src"},
+        package_data={"performance-metrics": ["py.typed"]},
+    )
diff --git a/performance-metrics/src/performance_metrics/__init__.py b/performance-metrics/src/performance_metrics/__init__.py
new file mode 100644
index 000000000000..a92b39b6d7b0
--- /dev/null
+++ b/performance-metrics/src/performance_metrics/__init__.py
@@ -0,0 +1 @@
+"""Opentrons performance metrics library."""
diff --git a/performance-metrics/src/performance_metrics/py.typed b/performance-metrics/src/performance_metrics/py.typed
new file mode 100644
index 000000000000..e69de29bb2d1