From fd2784ed02d1c9a77498b704654ce116d0c644c3 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:10:20 -0600
Subject: [PATCH 01/46] new stuff

---
 .gitlab-ci.yml | 213 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 213 insertions(+)
 create mode 100644 .gitlab-ci.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000..dd4df250
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,213 @@
+image: usgs/centos:8
+
+stages:
+  - test
+  - integration
+  - deploy
+
+variables:
+  CI_REGISTRY: ${CODE_REGISTRY}
+  CI_REGISTRY_IMAGE: ${CODE_REGISTRY_IMAGE}
+
+## --------------------------------------------------
+# Templates
+## --------------------------------------------------
+
+.adjust_image_names:
+  before_script:
+    - IMAGE_NAME=usgs/${APP_NAME}:${CI_COMMIT_REF_SLUG}
+    - IMAGE_NAME=${IMAGE_NAME/:master/:latest}
+    - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}
+    - STACK_NAME=${APP_NAME}
+
+.build_docker_image:
+  cache: {}
+  extends:
+    - .adjust_image_names
+  image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
+  only:
+    - master@ghsc/geomag/geomag-plots
+    - production@ghsc/geomag/geomag-plots
+    - tags@ghsc/geomag/geomag-plots
+  script:
+    - docker build
+      --pull
+      --build-arg APP_NAME=${APP_NAME}
+      --build-arg FROM_IMAGE=${FROM_IMAGE}
+      --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
+      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
+      --tag local/${IMAGE_NAME} .
+
+    - docker tag local/${IMAGE_NAME} ${IMAGE_NAME}
+    - docker push ${IMAGE_NAME}
+    - docker image rm ${IMAGE_NAME}
+
+    - docker tag local/${IMAGE_NAME} ${INTERNAL_IMAGE_NAME}
+    - docker push ${INTERNAL_IMAGE_NAME}
+    - docker image rm ${INTERNAL_IMAGE_NAME}
+  stage: integration
+  tags:
+    - build
+  variables:
+    FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest
+
+.check_code:
+  cache: {}
+  image: usgs/centos:latest
+  script:
+    - wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
+    - bash miniconda.sh -b -p $HOME/miniconda
+    - export PATH="$HOME/miniconda/bin:$PATH"
+    - conda config --set always_yes yes --set changeps1 no
+    - conda update --yes conda
+    - conda info -a
+    # Install Project Dependencies
+    - conda config --add channels conda-forge
+    - conda create -q -n test-environment python=${PYTHON_VERSION} obspy pycurl
+    - source activate test-environment
+    - pip install pipenv
+    - pipenv --site-packages install --dev
+    # Run Code Checks
+    - black --check .
+    - pytest
+  stage: test
+  tags:
+    - development
+  variables:
+    PYTHON_VERSION: 3.8
+
+.deploy:
+  cache: {}
+  extends:
+    - .adjust_image_names
+  image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
+  script:
+    - git clone ${GENERIC_SWARM_DEPLOY_REPO} generic-deploy
+    - export REGISTRY=${CI_REGISTRY_IMAGE}
+    - cp -v
+      generic-deploy/default.config.sh
+      generic-deploy/default.funcs.sh
+      generic-deploy/deploy.sh
+      scripts/.
+    - ./scripts/deploy.sh
+  stage: deploy
+  tags:
+    - deploy
+    - swarm
+
+.staging:
+  only:
+    - master@ghsc/geomag/geomag-plots
+    - tags@ghsc/geomag/geomag-plots
+
+.staging01:
+  tags:
+    - staging01
+
+.staging02:
+  tags:
+    - staging02
+
+.mage:
+  variables:
+    USGS_ONLY: 'false'
+
+.mage01:
+  tags:
+    - mage01
+
+.production:
+  except:
+    - ^.*beta.*$
+    - ^.*-rc.*$
+  only:
+    - tags@ghsc/geomag/geomag-plots
+    - production@ghsc/geomag/geomag-plots
+  when: manual
+
+.production01:
+  tags:
+    - production01
+
+.production02:
+  tags:
+    - production02
+
+## --------------------------------------------------
+# Test Stage
+## --------------------------------------------------
+
+Check Python 3.6:
+  extends:
+    - .check_code
+  variables:
+    PYTHON_VERSION: 3.6
+
+Check Python 3.7:
+  extends:
+    - .check_code
+  variables:
+    PYTHON_VERSION: 3.7
+
+Check Python 3.8:
+  extends:
+    - .check_code
+  variables:
+    PYTHON_VERSION: 3.8
+
+## --------------------------------------------------
+# Integration Stage
+## --------------------------------------------------
+
+Build Algorithms Image:
+  extends:
+    - .build_docker_image
+  variables:
+    APP_NAME: geomag-algorithms
+# TODO: Penetration testing (e.g. OWASP ZAP etc...)
+
+## --------------------------------------------------
+# Deploy Stage
+## --------------------------------------------------
+
+# Deploy Production01:
+
+#   extends:
+#     - .deploy
+#     - .production
+#     - .production01
+#   variables:
+#     APP_NAME: geomag-plots
+
+# Deploy Production02:
+#   extends:
+#     - .deploy
+#     - .production
+#     - .production02
+#   variables:
+#     APP_NAME: geomag-plots
+
+# Deploy Staging01:
+#   extends:
+#     - .deploy
+#     - .staging
+#     - .staging01
+#   variables:
+#     APP_NAME: geomag-plots
+
+# Deploy Staging02:
+#   extends:
+#     - .deploy
+#     - .staging
+#     - .staging02
+#   variables:
+#     APP_NAME: geomag-plots
+
+# Deploy Mage01:
+#   extends:
+#     - .deploy
+#     - .staging
+#     - .mage
+#     - .mage01
+#   variables:
+#     APP_NAME: geomag-plots
-- 
GitLab


From 9cd86f337e6f446cc94c83407352e17d24770500 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:13:50 -0600
Subject: [PATCH 02/46] add strings

---
 .gitlab-ci.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dd4df250..56327dd7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -141,19 +141,19 @@ Check Python 3.6:
   extends:
     - .check_code
   variables:
-    PYTHON_VERSION: 3.6
+    PYTHON_VERSION: '3.6'
 
 Check Python 3.7:
   extends:
     - .check_code
   variables:
-    PYTHON_VERSION: 3.7
+    PYTHON_VERSION: '3.7'
 
 Check Python 3.8:
   extends:
     - .check_code
   variables:
-    PYTHON_VERSION: 3.8
+    PYTHON_VERSION: '3.8'
 
 ## --------------------------------------------------
 # Integration Stage
-- 
GitLab


From ff2c13959d568637d3c2fbf668077d7af89607e1 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:15:27 -0600
Subject: [PATCH 03/46] add wget

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 56327dd7..f8e1290e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,6 +55,7 @@ variables:
   cache: {}
   image: usgs/centos:latest
   script:
+    - yum install -y wget
     - wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
     - bash miniconda.sh -b -p $HOME/miniconda
     - export PATH="$HOME/miniconda/bin:$PATH"
-- 
GitLab


From 90a011640ba1f1f168a5caff5b1bc1b40ed87e40 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:19:58 -0600
Subject: [PATCH 04/46] add pre flag

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f8e1290e..56057a3c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -67,7 +67,7 @@ variables:
     - conda create -q -n test-environment python=${PYTHON_VERSION} obspy pycurl
     - source activate test-environment
     - pip install pipenv
-    - pipenv --site-packages install --dev
+    - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - black --check .
     - pytest
-- 
GitLab


From 2ab63571c63caa9aa5375f2c6ee4a6908292996a Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:23:06 -0600
Subject: [PATCH 05/46] remove environment

---
 .gitlab-ci.yml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 56057a3c..c41904c4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -64,8 +64,7 @@ variables:
     - conda info -a
     # Install Project Dependencies
     - conda config --add channels conda-forge
-    - conda create -q -n test-environment python=${PYTHON_VERSION} obspy pycurl
-    - source activate test-environment
+    - conda install python=${PYTHON_VERSION} obspy pycurl
     - pip install pipenv
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
-- 
GitLab


From 5994b881eb6c2827308f15c4c74555cbd3c0fb85 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:27:16 -0600
Subject: [PATCH 06/46]  add pipenv run

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c41904c4..14b6c14d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -68,8 +68,8 @@ variables:
     - pip install pipenv
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
-    - black --check .
-    - pytest
+    - pipenv run black --check .
+    - pipenv run pytest
   stage: test
   tags:
     - development
-- 
GitLab


From da9675c6f28bfb0ff353884b0c49668a12c98097 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 18 Jun 2020 17:28:53 -0600
Subject: [PATCH 07/46] add environment variables

---
 .gitlab-ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 14b6c14d..65962423 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -66,6 +66,8 @@ variables:
     - conda config --add channels conda-forge
     - conda install python=${PYTHON_VERSION} obspy pycurl
     - pip install pipenv
+    - export LC_ALL=C.UTF-8
+    - export LANG=C.UTF-8
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
-- 
GitLab


From 73952b4fb1f1d2905aa1019ec9e8fd21cd7738b2 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 11:04:29 -0600
Subject: [PATCH 08/46] update pydantic version

---
 .gitlab-ci.yml | 2 +-
 Pipfile        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 65962423..88aacb8b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,7 +55,7 @@ variables:
   cache: {}
   image: usgs/centos:latest
   script:
-    - yum install -y wget
+    - yum install -y wget which
     - wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
     - bash miniconda.sh -b -p $HOME/miniconda
     - export PATH="$HOME/miniconda/bin:$PATH"
diff --git a/Pipfile b/Pipfile
index b0aa5ae3..006b1080 100644
--- a/Pipfile
+++ b/Pipfile
@@ -21,7 +21,7 @@ databases = {extras = ["postgresql", "sqlite"],version = "*"}
 fastapi = "*"
 httpx = "==0.11.1"
 openpyxl = "*"
-pydantic = "==1.4"
+pydantic = "==1.51"
 sqlalchemy = "*"
 sqlalchemy-utc = "*"
 typing = "*"
-- 
GitLab


From 814b30f4453e68d39393f340a4b9186393833125 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 11:12:55 -0600
Subject: [PATCH 09/46] fix pydantic version

---
 Pipfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Pipfile b/Pipfile
index 006b1080..ad00171f 100644
--- a/Pipfile
+++ b/Pipfile
@@ -21,7 +21,7 @@ databases = {extras = ["postgresql", "sqlite"],version = "*"}
 fastapi = "*"
 httpx = "==0.11.1"
 openpyxl = "*"
-pydantic = "==1.51"
+pydantic = "==1.5.1"
 sqlalchemy = "*"
 sqlalchemy-utc = "*"
 typing = "*"
-- 
GitLab


From 090cd7017e29a503cc8da15880aa6a603c3e5ec0 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 11:53:54 -0600
Subject: [PATCH 10/46] add devops registry variable

---
 .gitlab-ci.yml | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 88aacb8b..c0e38a23 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: usgs/centos:8
+image: ${DEVOPS_REGISTRY}usgs/centos:latest
 
 stages:
   - test
@@ -166,8 +166,6 @@ Build Algorithms Image:
     - .build_docker_image
   variables:
     APP_NAME: geomag-algorithms
-# TODO: Penetration testing (e.g. OWASP ZAP etc...)
-
 ## --------------------------------------------------
 # Deploy Stage
 ## --------------------------------------------------
-- 
GitLab


From 78c638fd83c698059fdc6abc9b0cab16c51e6a89 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 12:15:30 -0600
Subject: [PATCH 11/46] try pydantic 1.5

---
 Pipfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Pipfile b/Pipfile
index ad00171f..f2d148d4 100644
--- a/Pipfile
+++ b/Pipfile
@@ -21,7 +21,7 @@ databases = {extras = ["postgresql", "sqlite"],version = "*"}
 fastapi = "*"
 httpx = "==0.11.1"
 openpyxl = "*"
-pydantic = "==1.5.1"
+pydantic = "==1.5"
 sqlalchemy = "*"
 sqlalchemy-utc = "*"
 typing = "*"
-- 
GitLab


From ec5292a77bbb79644f97af4e327d4b8ec99eccb3 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 14:44:35 -0600
Subject: [PATCH 12/46] change back pydantic, add code cov

---
 .gitlab-ci.yml | 2 +-
 Pipfile        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c0e38a23..bffea6bf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,7 +71,7 @@ variables:
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
-    - pipenv run pytest
+    - pipenv run pytest --cov-report term --cov=test/
   stage: test
   tags:
     - development
diff --git a/Pipfile b/Pipfile
index f2d148d4..ad00171f 100644
--- a/Pipfile
+++ b/Pipfile
@@ -21,7 +21,7 @@ databases = {extras = ["postgresql", "sqlite"],version = "*"}
 fastapi = "*"
 httpx = "==0.11.1"
 openpyxl = "*"
-pydantic = "==1.5"
+pydantic = "==1.5.1"
 sqlalchemy = "*"
 sqlalchemy-utc = "*"
 typing = "*"
-- 
GitLab


From ca1dd7b2f1741ce54e0568525b1d65420c013999 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 15:14:02 -0600
Subject: [PATCH 13/46] add coverage

---
 .gitlab-ci.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bffea6bf..e7843761 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,7 +71,8 @@ variables:
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
-    - pipenv run pytest --cov-report term --cov=test/
+    - pipenv run pytest --cov-report term --cov=test/ --junitxml=geomag-algorithms/test
+
   stage: test
   tags:
     - development
-- 
GitLab


From cfd0f74d6257e4f1d0850018f9b454d29ebb1aec Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 16:31:21 -0600
Subject: [PATCH 14/46] set up reports (maybe)

---
 .gitlab-ci.yml | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e7843761..6c2e3e24 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,7 +71,6 @@ variables:
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
-    - pipenv run pytest --cov-report term --cov=test/ --junitxml=geomag-algorithms/test
 
   stage: test
   tags:
@@ -79,6 +78,15 @@ variables:
   variables:
     PYTHON_VERSION: 3.8
 
+.pytest:
+  extends:
+    - .check_code
+  script:
+    - pipenv run pytest --cov-report xml:cov.xml --cov=test/ --junitxml=geomag-algorithms/test
+  artifacts:
+    reports:
+      pytest: cov.xml
+
 .deploy:
   cache: {}
   extends:
-- 
GitLab


From 04dcb01ecd22c4472777ee9ace3c7fd2f3549e1e Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 16:37:30 -0600
Subject: [PATCH 15/46] set up reports (maybe)

---
 .gitlab-ci.yml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6c2e3e24..90422588 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -166,6 +166,12 @@ Check Python 3.8:
   variables:
     PYTHON_VERSION: '3.8'
 
+PyTest:
+  extends:
+    - .pytest
+  variables:
+    PYTHON_VERSION: '3.8'
+
 ## --------------------------------------------------
 # Integration Stage
 ## --------------------------------------------------
-- 
GitLab


From 52c6ed48826cc707764bbde8b4cb74fde7e61ffc Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 16:38:55 -0600
Subject: [PATCH 16/46] set up reports (maybe)

---
 .gitlab-ci.yml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 90422588..d91ac636 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -87,6 +87,12 @@ variables:
     reports:
       pytest: cov.xml
 
+  stage: test
+  tags:
+    - development
+  variables:
+    PYTHON_VERSION: 3.8
+
 .deploy:
   cache: {}
   extends:
-- 
GitLab


From 767aea27cc26b3ba396473b9d72b43718e816dca Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 16:45:23 -0600
Subject: [PATCH 17/46] change reports key

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d91ac636..4d02a1eb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -85,7 +85,7 @@ variables:
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/ --junitxml=geomag-algorithms/test
   artifacts:
     reports:
-      pytest: cov.xml
+      junit: cov.xml
 
   stage: test
   tags:
-- 
GitLab


From c867daa19b086692b18b85a8319bfae4fb7dad59 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 16:51:36 -0600
Subject: [PATCH 18/46] add pytest to check code

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4d02a1eb..9256cc36 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -169,6 +169,7 @@ Check Python 3.7:
 Check Python 3.8:
   extends:
     - .check_code
+    - .pytest
   variables:
     PYTHON_VERSION: '3.8'
 
-- 
GitLab


From c488ffb3ec97184fef2a946fd339f6d0b0df2df8 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 16:55:47 -0600
Subject: [PATCH 19/46] add pytest to check code

---
 .gitlab-ci.yml | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9256cc36..6f5de052 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,22 +71,10 @@ variables:
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
-
-  stage: test
-  tags:
-    - development
-  variables:
-    PYTHON_VERSION: 3.8
-
-.pytest:
-  extends:
-    - .check_code
-  script:
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/ --junitxml=geomag-algorithms/test
   artifacts:
     reports:
       junit: cov.xml
-
   stage: test
   tags:
     - development
@@ -169,13 +157,6 @@ Check Python 3.7:
 Check Python 3.8:
   extends:
     - .check_code
-    - .pytest
-  variables:
-    PYTHON_VERSION: '3.8'
-
-PyTest:
-  extends:
-    - .pytest
   variables:
     PYTHON_VERSION: '3.8'
 
-- 
GitLab


From fcb0fa755c816af625e7460e76ae2cda399dddd2 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Mon, 22 Jun 2020 17:04:58 -0600
Subject: [PATCH 20/46] change pytest settings

---
 .gitlab-ci.yml |    4 +-
 cov.xml        | 1755 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1758 insertions(+), 1 deletion(-)
 create mode 100644 cov.xml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6f5de052..bdda762f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,8 +71,10 @@ variables:
     - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
-    - pipenv run pytest --cov-report xml:cov.xml --cov=test/ --junitxml=geomag-algorithms/test
+    - pipenv run pytest --cov-report xml:cov.xml --cov=test/
   artifacts:
+    paths:
+      - cov.xml
     reports:
       junit: cov.xml
   stage: test
diff --git a/cov.xml b/cov.xml
new file mode 100644
index 00000000..fcffa53b
--- /dev/null
+++ b/cov.xml
@@ -0,0 +1,1755 @@
+<?xml version="1.0" ?>
+<coverage branch-rate="0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.8602" lines-covered="1335" lines-valid="1552" timestamp="1592867049082" version="5.1">
+	<!-- Generated by coverage.py: https://coverage.readthedocs.io -->
+	<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
+	<sources>
+		<source>/Users/trivers/Desktop/WebApps/Flask/geomag-algorithms/geomag-algorithms/test</source>
+	</sources>
+	<packages>
+		<package branch-rate="0" complexity="0" line-rate="0.7497" name=".">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="ChannelConverter_test.py" line-rate="0.1336" name="ChannelConverter_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="48"/>
+						<line hits="0" number="55"/>
+						<line hits="0" number="56"/>
+						<line hits="0" number="57"/>
+						<line hits="0" number="58"/>
+						<line hits="0" number="59"/>
+						<line hits="0" number="60"/>
+						<line hits="1" number="62"/>
+						<line hits="0" number="73"/>
+						<line hits="0" number="74"/>
+						<line hits="0" number="75"/>
+						<line hits="0" number="76"/>
+						<line hits="0" number="77"/>
+						<line hits="0" number="82"/>
+						<line hits="0" number="83"/>
+						<line hits="0" number="84"/>
+						<line hits="0" number="85"/>
+						<line hits="0" number="86"/>
+						<line hits="0" number="87"/>
+						<line hits="0" number="91"/>
+						<line hits="0" number="92"/>
+						<line hits="0" number="93"/>
+						<line hits="0" number="94"/>
+						<line hits="0" number="95"/>
+						<line hits="0" number="96"/>
+						<line hits="0" number="102"/>
+						<line hits="0" number="103"/>
+						<line hits="0" number="104"/>
+						<line hits="0" number="105"/>
+						<line hits="0" number="106"/>
+						<line hits="0" number="107"/>
+						<line hits="1" number="109"/>
+						<line hits="0" number="118"/>
+						<line hits="0" number="119"/>
+						<line hits="0" number="120"/>
+						<line hits="0" number="121"/>
+						<line hits="0" number="122"/>
+						<line hits="1" number="124"/>
+						<line hits="0" number="133"/>
+						<line hits="0" number="134"/>
+						<line hits="0" number="135"/>
+						<line hits="0" number="136"/>
+						<line hits="0" number="139"/>
+						<line hits="0" number="140"/>
+						<line hits="0" number="141"/>
+						<line hits="0" number="142"/>
+						<line hits="1" number="144"/>
+						<line hits="0" number="153"/>
+						<line hits="0" number="154"/>
+						<line hits="0" number="155"/>
+						<line hits="0" number="156"/>
+						<line hits="0" number="159"/>
+						<line hits="0" number="160"/>
+						<line hits="0" number="161"/>
+						<line hits="0" number="162"/>
+						<line hits="1" number="164"/>
+						<line hits="0" number="176"/>
+						<line hits="0" number="177"/>
+						<line hits="0" number="178"/>
+						<line hits="0" number="179"/>
+						<line hits="0" number="180"/>
+						<line hits="0" number="181"/>
+						<line hits="1" number="183"/>
+						<line hits="0" number="193"/>
+						<line hits="0" number="194"/>
+						<line hits="0" number="195"/>
+						<line hits="0" number="196"/>
+						<line hits="0" number="197"/>
+						<line hits="1" number="199"/>
+						<line hits="0" number="210"/>
+						<line hits="0" number="211"/>
+						<line hits="0" number="212"/>
+						<line hits="0" number="213"/>
+						<line hits="0" number="216"/>
+						<line hits="0" number="217"/>
+						<line hits="0" number="218"/>
+						<line hits="0" number="219"/>
+						<line hits="0" number="222"/>
+						<line hits="0" number="223"/>
+						<line hits="0" number="224"/>
+						<line hits="0" number="225"/>
+						<line hits="0" number="226"/>
+						<line hits="0" number="229"/>
+						<line hits="0" number="230"/>
+						<line hits="0" number="231"/>
+						<line hits="0" number="232"/>
+						<line hits="0" number="233"/>
+						<line hits="0" number="236"/>
+						<line hits="0" number="237"/>
+						<line hits="0" number="238"/>
+						<line hits="0" number="239"/>
+						<line hits="0" number="240"/>
+						<line hits="0" number="243"/>
+						<line hits="0" number="244"/>
+						<line hits="0" number="245"/>
+						<line hits="0" number="246"/>
+						<line hits="0" number="247"/>
+						<line hits="1" number="249"/>
+						<line hits="0" number="258"/>
+						<line hits="0" number="259"/>
+						<line hits="0" number="260"/>
+						<line hits="0" number="261"/>
+						<line hits="0" number="264"/>
+						<line hits="0" number="265"/>
+						<line hits="0" number="266"/>
+						<line hits="0" number="267"/>
+						<line hits="0" number="270"/>
+						<line hits="0" number="271"/>
+						<line hits="0" number="272"/>
+						<line hits="0" number="273"/>
+						<line hits="1" number="275"/>
+						<line hits="0" number="283"/>
+						<line hits="0" number="284"/>
+						<line hits="0" number="285"/>
+						<line hits="0" number="286"/>
+						<line hits="1" number="288"/>
+						<line hits="0" number="296"/>
+						<line hits="0" number="297"/>
+						<line hits="0" number="298"/>
+						<line hits="0" number="299"/>
+						<line hits="1" number="301"/>
+						<line hits="0" number="312"/>
+						<line hits="0" number="313"/>
+						<line hits="0" number="314"/>
+						<line hits="0" number="315"/>
+						<line hits="0" number="316"/>
+						<line hits="0" number="321"/>
+						<line hits="0" number="322"/>
+						<line hits="0" number="323"/>
+						<line hits="0" number="324"/>
+						<line hits="0" number="325"/>
+						<line hits="0" number="326"/>
+						<line hits="0" number="330"/>
+						<line hits="0" number="331"/>
+						<line hits="0" number="332"/>
+						<line hits="0" number="333"/>
+						<line hits="0" number="334"/>
+						<line hits="0" number="335"/>
+						<line hits="0" number="341"/>
+						<line hits="0" number="342"/>
+						<line hits="0" number="343"/>
+						<line hits="0" number="344"/>
+						<line hits="0" number="345"/>
+						<line hits="0" number="346"/>
+						<line hits="0" number="347"/>
+						<line hits="0" number="348"/>
+						<line hits="1" number="350"/>
+						<line hits="0" number="358"/>
+						<line hits="0" number="359"/>
+						<line hits="0" number="360"/>
+						<line hits="0" number="361"/>
+						<line hits="0" number="362"/>
+						<line hits="1" number="364"/>
+						<line hits="0" number="373"/>
+						<line hits="0" number="374"/>
+						<line hits="0" number="375"/>
+						<line hits="0" number="376"/>
+						<line hits="0" number="379"/>
+						<line hits="0" number="380"/>
+						<line hits="0" number="381"/>
+						<line hits="0" number="382"/>
+						<line hits="1" number="384"/>
+						<line hits="0" number="394"/>
+						<line hits="0" number="395"/>
+						<line hits="0" number="396"/>
+						<line hits="0" number="399"/>
+						<line hits="0" number="400"/>
+						<line hits="0" number="401"/>
+						<line hits="0" number="402"/>
+						<line hits="0" number="405"/>
+						<line hits="0" number="406"/>
+						<line hits="0" number="407"/>
+						<line hits="0" number="408"/>
+						<line hits="0" number="411"/>
+						<line hits="0" number="412"/>
+						<line hits="0" number="413"/>
+						<line hits="0" number="414"/>
+						<line hits="1" number="416"/>
+						<line hits="0" number="427"/>
+						<line hits="0" number="428"/>
+						<line hits="0" number="429"/>
+						<line hits="0" number="430"/>
+						<line hits="0" number="432"/>
+						<line hits="0" number="433"/>
+						<line hits="0" number="434"/>
+						<line hits="0" number="435"/>
+						<line hits="0" number="438"/>
+						<line hits="0" number="439"/>
+						<line hits="0" number="440"/>
+						<line hits="0" number="441"/>
+						<line hits="0" number="442"/>
+						<line hits="1" number="444"/>
+						<line hits="0" number="454"/>
+						<line hits="0" number="455"/>
+						<line hits="0" number="456"/>
+						<line hits="0" number="457"/>
+						<line hits="1" number="461"/>
+						<line hits="0" number="471"/>
+						<line hits="0" number="472"/>
+						<line hits="0" number="473"/>
+						<line hits="0" number="474"/>
+						<line hits="0" number="477"/>
+						<line hits="0" number="478"/>
+						<line hits="0" number="479"/>
+						<line hits="0" number="480"/>
+						<line hits="0" number="481"/>
+						<line hits="1" number="483"/>
+						<line hits="0" number="491"/>
+						<line hits="0" number="492"/>
+						<line hits="0" number="493"/>
+						<line hits="0" number="494"/>
+						<line hits="0" number="495"/>
+						<line hits="0" number="497"/>
+						<line hits="0" number="498"/>
+						<line hits="1" number="500"/>
+						<line hits="0" number="505"/>
+						<line hits="0" number="506"/>
+						<line hits="0" number="507"/>
+						<line hits="1" number="511"/>
+						<line hits="0" number="516"/>
+						<line hits="0" number="517"/>
+						<line hits="0" number="518"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="Controller_test.py" line-rate="1" name="Controller_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="109"/>
+						<line hits="1" number="112"/>
+						<line hits="1" number="118"/>
+						<line hits="1" number="127"/>
+						<line hits="1" number="128"/>
+						<line hits="1" number="135"/>
+						<line hits="1" number="136"/>
+						<line hits="1" number="137"/>
+						<line hits="1" number="139"/>
+						<line hits="1" number="140"/>
+						<line hits="1" number="143"/>
+						<line hits="1" number="144"/>
+						<line hits="1" number="149"/>
+						<line hits="1" number="150"/>
+						<line hits="1" number="151"/>
+						<line hits="1" number="153"/>
+						<line hits="1" number="154"/>
+						<line hits="1" number="157"/>
+						<line hits="1" number="158"/>
+						<line hits="1" number="163"/>
+						<line hits="1" number="164"/>
+						<line hits="1" number="165"/>
+						<line hits="1" number="167"/>
+						<line hits="1" number="168"/>
+						<line hits="1" number="171"/>
+						<line hits="1" number="172"/>
+						<line hits="1" number="177"/>
+						<line hits="1" number="178"/>
+						<line hits="1" number="179"/>
+						<line hits="1" number="181"/>
+						<line hits="1" number="182"/>
+						<line hits="1" number="185"/>
+						<line hits="1" number="186"/>
+						<line hits="1" number="191"/>
+						<line hits="1" number="192"/>
+						<line hits="1" number="193"/>
+						<line hits="1" number="195"/>
+						<line hits="1" number="196"/>
+						<line hits="1" number="199"/>
+						<line hits="1" number="200"/>
+						<line hits="1" number="204"/>
+						<line hits="1" number="205"/>
+						<line hits="1" number="206"/>
+						<line hits="1" number="208"/>
+						<line hits="1" number="209"/>
+						<line hits="1" number="212"/>
+						<line hits="1" number="213"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="Metadata_test.py" line-rate="1" name="Metadata_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="1"/>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="79"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="ObservatoryMetadata_test.py" line-rate="1" name="ObservatoryMetadata_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="48"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="67"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="69"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="StreamConverter_test.py" line-rate="1" name="StreamConverter_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="12"/>
+						<line hits="1" number="13"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="16"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="22"/>
+						<line hits="1" number="23"/>
+						<line hits="1" number="26"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="79"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="87"/>
+						<line hits="1" number="88"/>
+						<line hits="1" number="89"/>
+						<line hits="1" number="90"/>
+						<line hits="1" number="91"/>
+						<line hits="1" number="92"/>
+						<line hits="1" number="93"/>
+						<line hits="1" number="94"/>
+						<line hits="1" number="95"/>
+						<line hits="1" number="102"/>
+						<line hits="1" number="111"/>
+						<line hits="1" number="118"/>
+						<line hits="1" number="123"/>
+						<line hits="1" number="124"/>
+						<line hits="1" number="125"/>
+						<line hits="1" number="126"/>
+						<line hits="1" number="127"/>
+						<line hits="1" number="128"/>
+						<line hits="1" number="129"/>
+						<line hits="1" number="130"/>
+						<line hits="1" number="131"/>
+						<line hits="1" number="132"/>
+						<line hits="1" number="137"/>
+						<line hits="1" number="143"/>
+						<line hits="1" number="148"/>
+						<line hits="1" number="149"/>
+						<line hits="1" number="150"/>
+						<line hits="1" number="151"/>
+						<line hits="1" number="152"/>
+						<line hits="1" number="153"/>
+						<line hits="1" number="154"/>
+						<line hits="1" number="155"/>
+						<line hits="1" number="156"/>
+						<line hits="1" number="157"/>
+						<line hits="1" number="162"/>
+						<line hits="1" number="169"/>
+						<line hits="1" number="175"/>
+						<line hits="1" number="176"/>
+						<line hits="1" number="177"/>
+						<line hits="1" number="178"/>
+						<line hits="1" number="179"/>
+						<line hits="1" number="180"/>
+						<line hits="1" number="181"/>
+						<line hits="1" number="182"/>
+						<line hits="1" number="183"/>
+						<line hits="1" number="184"/>
+						<line hits="1" number="191"/>
+						<line hits="1" number="198"/>
+						<line hits="1" number="203"/>
+						<line hits="1" number="210"/>
+						<line hits="1" number="216"/>
+						<line hits="1" number="217"/>
+						<line hits="1" number="218"/>
+						<line hits="1" number="219"/>
+						<line hits="1" number="220"/>
+						<line hits="1" number="221"/>
+						<line hits="1" number="222"/>
+						<line hits="1" number="223"/>
+						<line hits="1" number="224"/>
+						<line hits="1" number="225"/>
+						<line hits="1" number="232"/>
+						<line hits="1" number="235"/>
+						<line hits="1" number="244"/>
+						<line hits="1" number="255"/>
+						<line hits="1" number="256"/>
+						<line hits="1" number="257"/>
+						<line hits="1" number="258"/>
+						<line hits="1" number="259"/>
+						<line hits="1" number="260"/>
+						<line hits="1" number="261"/>
+						<line hits="1" number="262"/>
+						<line hits="1" number="263"/>
+						<line hits="1" number="270"/>
+						<line hits="1" number="271"/>
+						<line hits="1" number="272"/>
+						<line hits="1" number="273"/>
+						<line hits="1" number="274"/>
+						<line hits="1" number="275"/>
+						<line hits="1" number="276"/>
+						<line hits="1" number="277"/>
+						<line hits="1" number="286"/>
+						<line hits="1" number="298"/>
+						<line hits="1" number="299"/>
+						<line hits="1" number="300"/>
+						<line hits="1" number="303"/>
+						<line hits="1" number="306"/>
+						<line hits="1" number="309"/>
+						<line hits="1" number="312"/>
+						<line hits="1" number="313"/>
+						<line hits="1" number="314"/>
+						<line hits="1" number="316"/>
+						<line hits="1" number="324"/>
+						<line hits="1" number="325"/>
+						<line hits="1" number="326"/>
+						<line hits="1" number="329"/>
+						<line hits="1" number="332"/>
+						<line hits="1" number="333"/>
+						<line hits="1" number="336"/>
+						<line hits="1" number="337"/>
+						<line hits="1" number="338"/>
+						<line hits="1" number="339"/>
+						<line hits="1" number="340"/>
+						<line hits="1" number="343"/>
+						<line hits="1" number="346"/>
+						<line hits="1" number="362"/>
+						<line hits="1" number="363"/>
+						<line hits="1" number="364"/>
+						<line hits="1" number="365"/>
+						<line hits="1" number="366"/>
+						<line hits="1" number="367"/>
+						<line hits="1" number="368"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="TimeseriesUtility_test.py" line-rate="1" name="TimeseriesUtility_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="22"/>
+						<line hits="1" number="23"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="79"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="83"/>
+						<line hits="1" number="85"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="87"/>
+						<line hits="1" number="89"/>
+						<line hits="1" number="92"/>
+						<line hits="1" number="97"/>
+						<line hits="1" number="103"/>
+						<line hits="1" number="105"/>
+						<line hits="1" number="107"/>
+						<line hits="1" number="109"/>
+						<line hits="1" number="110"/>
+						<line hits="1" number="111"/>
+						<line hits="1" number="114"/>
+						<line hits="1" number="119"/>
+						<line hits="1" number="121"/>
+						<line hits="1" number="123"/>
+						<line hits="1" number="125"/>
+						<line hits="1" number="126"/>
+						<line hits="1" number="127"/>
+						<line hits="1" number="128"/>
+						<line hits="1" number="129"/>
+						<line hits="1" number="132"/>
+						<line hits="1" number="137"/>
+						<line hits="1" number="162"/>
+						<line hits="1" number="164"/>
+						<line hits="1" number="165"/>
+						<line hits="1" number="166"/>
+						<line hits="1" number="168"/>
+						<line hits="1" number="169"/>
+						<line hits="1" number="170"/>
+						<line hits="1" number="173"/>
+						<line hits="1" number="176"/>
+						<line hits="1" number="182"/>
+						<line hits="1" number="184"/>
+						<line hits="1" number="186"/>
+						<line hits="1" number="187"/>
+						<line hits="1" number="188"/>
+						<line hits="1" number="189"/>
+						<line hits="1" number="191"/>
+						<line hits="1" number="198"/>
+						<line hits="1" number="205"/>
+						<line hits="1" number="215"/>
+						<line hits="1" number="218"/>
+						<line hits="1" number="219"/>
+						<line hits="1" number="226"/>
+						<line hits="1" number="228"/>
+						<line hits="1" number="230"/>
+						<line hits="1" number="231"/>
+						<line hits="1" number="233"/>
+						<line hits="1" number="234"/>
+						<line hits="1" number="235"/>
+						<line hits="1" number="238"/>
+						<line hits="1" number="242"/>
+						<line hits="1" number="247"/>
+						<line hits="1" number="250"/>
+						<line hits="1" number="251"/>
+						<line hits="1" number="258"/>
+						<line hits="1" number="260"/>
+						<line hits="1" number="262"/>
+						<line hits="1" number="263"/>
+						<line hits="1" number="265"/>
+						<line hits="1" number="266"/>
+						<line hits="1" number="267"/>
+						<line hits="1" number="270"/>
+						<line hits="1" number="274"/>
+						<line hits="1" number="279"/>
+						<line hits="1" number="284"/>
+						<line hits="1" number="285"/>
+						<line hits="1" number="286"/>
+						<line hits="1" number="287"/>
+						<line hits="1" number="288"/>
+						<line hits="1" number="289"/>
+						<line hits="1" number="290"/>
+						<line hits="1" number="291"/>
+						<line hits="1" number="292"/>
+						<line hits="1" number="293"/>
+						<line hits="1" number="294"/>
+						<line hits="1" number="295"/>
+						<line hits="1" number="296"/>
+						<line hits="1" number="297"/>
+						<line hits="1" number="298"/>
+						<line hits="1" number="299"/>
+						<line hits="1" number="300"/>
+						<line hits="1" number="302"/>
+						<line hits="1" number="304"/>
+						<line hits="1" number="306"/>
+						<line hits="1" number="307"/>
+						<line hits="1" number="308"/>
+						<line hits="1" number="309"/>
+						<line hits="1" number="310"/>
+						<line hits="1" number="311"/>
+						<line hits="1" number="314"/>
+						<line hits="1" number="316"/>
+						<line hits="1" number="317"/>
+						<line hits="1" number="318"/>
+						<line hits="1" number="319"/>
+						<line hits="1" number="320"/>
+						<line hits="1" number="321"/>
+						<line hits="1" number="322"/>
+						<line hits="1" number="323"/>
+						<line hits="1" number="324"/>
+						<line hits="1" number="325"/>
+						<line hits="1" number="326"/>
+						<line hits="1" number="327"/>
+						<line hits="1" number="328"/>
+						<line hits="1" number="330"/>
+						<line hits="1" number="331"/>
+						<line hits="1" number="332"/>
+						<line hits="1" number="333"/>
+						<line hits="1" number="334"/>
+						<line hits="1" number="335"/>
+						<line hits="1" number="336"/>
+						<line hits="1" number="337"/>
+						<line hits="1" number="340"/>
+						<line hits="1" number="343"/>
+						<line hits="1" number="344"/>
+						<line hits="1" number="345"/>
+						<line hits="1" number="346"/>
+						<line hits="1" number="351"/>
+						<line hits="1" number="352"/>
+						<line hits="1" number="353"/>
+						<line hits="1" number="355"/>
+						<line hits="1" number="356"/>
+						<line hits="1" number="357"/>
+						<line hits="1" number="358"/>
+						<line hits="1" number="360"/>
+						<line hits="1" number="361"/>
+						<line hits="1" number="362"/>
+						<line hits="1" number="365"/>
+						<line hits="1" number="368"/>
+						<line hits="1" number="369"/>
+						<line hits="1" number="370"/>
+						<line hits="1" number="373"/>
+						<line hits="1" number="378"/>
+						<line hits="1" number="379"/>
+						<line hits="1" number="380"/>
+						<line hits="1" number="382"/>
+						<line hits="1" number="387"/>
+						<line hits="1" number="388"/>
+						<line hits="1" number="389"/>
+						<line hits="1" number="391"/>
+						<line hits="1" number="396"/>
+						<line hits="1" number="397"/>
+						<line hits="1" number="398"/>
+						<line hits="1" number="400"/>
+						<line hits="1" number="405"/>
+						<line hits="1" number="406"/>
+						<line hits="1" number="407"/>
+						<line hits="1" number="409"/>
+						<line hits="1" number="414"/>
+						<line hits="1" number="415"/>
+						<line hits="1" number="416"/>
+						<line hits="1" number="418"/>
+						<line hits="1" number="423"/>
+						<line hits="1" number="424"/>
+						<line hits="1" number="425"/>
+						<line hits="1" number="428"/>
+						<line hits="1" number="434"/>
+						<line hits="1" number="437"/>
+						<line hits="1" number="438"/>
+						<line hits="1" number="443"/>
+						<line hits="1" number="448"/>
+						<line hits="1" number="449"/>
+						<line hits="1" number="450"/>
+						<line hits="1" number="458"/>
+						<line hits="1" number="459"/>
+						<line hits="1" number="460"/>
+						<line hits="1" number="461"/>
+						<line hits="1" number="462"/>
+						<line hits="1" number="463"/>
+						<line hits="1" number="464"/>
+						<line hits="1" number="465"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="Util_test.py" line-rate="0.9318" name="Util_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="13"/>
+						<line hits="1" number="14"/>
+						<line hits="0" number="15"/>
+						<line hits="1" number="16"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="32"/>
+						<line hits="0" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="37"/>
+						<line hits="0" number="38"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="48"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="67"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="WebService_test.py" line-rate="0.9451" name="WebService_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="35"/>
+						<line hits="0" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="0" number="39"/>
+						<line hits="0" number="40"/>
+						<line hits="0" number="41"/>
+						<line hits="0" number="42"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="48"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="79"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="83"/>
+						<line hits="1" number="89"/>
+						<line hits="1" number="90"/>
+						<line hits="1" number="97"/>
+						<line hits="1" number="98"/>
+						<line hits="1" number="101"/>
+						<line hits="1" number="108"/>
+						<line hits="1" number="109"/>
+						<line hits="1" number="116"/>
+						<line hits="1" number="117"/>
+						<line hits="1" number="118"/>
+						<line hits="1" number="119"/>
+						<line hits="1" number="120"/>
+						<line hits="1" number="121"/>
+						<line hits="1" number="122"/>
+						<line hits="1" number="124"/>
+						<line hits="1" number="125"/>
+						<line hits="1" number="126"/>
+						<line hits="1" number="127"/>
+						<line hits="1" number="128"/>
+						<line hits="1" number="129"/>
+						<line hits="1" number="130"/>
+						<line hits="1" number="131"/>
+						<line hits="1" number="132"/>
+						<line hits="1" number="133"/>
+						<line hits="1" number="134"/>
+						<line hits="1" number="135"/>
+						<line hits="1" number="138"/>
+						<line hits="1" number="144"/>
+						<line hits="1" number="146"/>
+						<line hits="1" number="147"/>
+						<line hits="1" number="148"/>
+						<line hits="1" number="149"/>
+						<line hits="1" number="151"/>
+						<line hits="1" number="152"/>
+						<line hits="1" number="153"/>
+						<line hits="1" number="154"/>
+						<line hits="1" number="156"/>
+						<line hits="1" number="157"/>
+						<line hits="1" number="158"/>
+						<line hits="1" number="159"/>
+						<line hits="1" number="161"/>
+						<line hits="1" number="162"/>
+						<line hits="1" number="163"/>
+						<line hits="1" number="164"/>
+						<line hits="1" number="165"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="algorithm_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/AdjustedAlgorithm_test.py" line-rate="1" name="AdjustedAlgorithm_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="1"/>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="86"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/Algorithm_test.py" line-rate="1" name="Algorithm_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="13"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="26"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="28"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/AverageAlgorithm_test.py" line-rate="1" name="AverageAlgorithm_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="1"/>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="22"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="26"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="70"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="83"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="94"/>
+						<line hits="1" number="95"/>
+						<line hits="1" number="98"/>
+						<line hits="1" number="99"/>
+						<line hits="1" number="100"/>
+						<line hits="1" number="101"/>
+						<line hits="1" number="102"/>
+						<line hits="1" number="105"/>
+						<line hits="1" number="106"/>
+						<line hits="1" number="107"/>
+						<line hits="1" number="110"/>
+						<line hits="1" number="111"/>
+						<line hits="1" number="112"/>
+						<line hits="1" number="116"/>
+						<line hits="1" number="117"/>
+						<line hits="1" number="120"/>
+						<line hits="1" number="122"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/FilterAlgorithm_test.py" line-rate="1" name="FilterAlgorithm_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="1"/>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="70"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="79"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="83"/>
+						<line hits="1" number="85"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="87"/>
+						<line hits="1" number="90"/>
+						<line hits="1" number="94"/>
+						<line hits="1" number="111"/>
+						<line hits="1" number="112"/>
+						<line hits="1" number="114"/>
+						<line hits="1" number="115"/>
+						<line hits="1" number="116"/>
+						<line hits="1" number="118"/>
+						<line hits="1" number="119"/>
+						<line hits="1" number="120"/>
+						<line hits="1" number="122"/>
+						<line hits="1" number="123"/>
+						<line hits="1" number="124"/>
+						<line hits="1" number="126"/>
+						<line hits="1" number="127"/>
+						<line hits="1" number="128"/>
+						<line hits="1" number="131"/>
+						<line hits="1" number="135"/>
+						<line hits="1" number="156"/>
+						<line hits="1" number="157"/>
+						<line hits="1" number="159"/>
+						<line hits="1" number="160"/>
+						<line hits="1" number="161"/>
+						<line hits="1" number="163"/>
+						<line hits="1" number="164"/>
+						<line hits="1" number="165"/>
+						<line hits="1" number="167"/>
+						<line hits="1" number="168"/>
+						<line hits="1" number="169"/>
+						<line hits="1" number="171"/>
+						<line hits="1" number="172"/>
+						<line hits="1" number="173"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/SQDistAlgorithm_test.py" line-rate="1" name="SQDistAlgorithm_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="1"/>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="23"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="84"/>
+						<line hits="1" number="85"/>
+						<line hits="1" number="98"/>
+						<line hits="1" number="103"/>
+						<line hits="1" number="108"/>
+						<line hits="1" number="129"/>
+						<line hits="1" number="130"/>
+						<line hits="1" number="144"/>
+						<line hits="1" number="163"/>
+						<line hits="1" number="169"/>
+						<line hits="1" number="191"/>
+						<line hits="1" number="192"/>
+						<line hits="1" number="206"/>
+						<line hits="1" number="212"/>
+						<line hits="1" number="231"/>
+						<line hits="1" number="253"/>
+						<line hits="1" number="254"/>
+						<line hits="1" number="268"/>
+						<line hits="1" number="274"/>
+						<line hits="1" number="293"/>
+						<line hits="1" number="314"/>
+						<line hits="1" number="321"/>
+						<line hits="1" number="322"/>
+						<line hits="1" number="323"/>
+						<line hits="1" number="324"/>
+						<line hits="1" number="325"/>
+						<line hits="1" number="328"/>
+						<line hits="1" number="329"/>
+						<line hits="1" number="330"/>
+						<line hits="1" number="331"/>
+						<line hits="1" number="334"/>
+						<line hits="1" number="335"/>
+						<line hits="1" number="338"/>
+						<line hits="1" number="339"/>
+						<line hits="1" number="340"/>
+						<line hits="1" number="343"/>
+						<line hits="1" number="367"/>
+						<line hits="1" number="374"/>
+						<line hits="1" number="377"/>
+						<line hits="1" number="380"/>
+						<line hits="1" number="385"/>
+						<line hits="1" number="386"/>
+						<line hits="1" number="389"/>
+						<line hits="1" number="413"/>
+						<line hits="1" number="416"/>
+						<line hits="1" number="422"/>
+						<line hits="1" number="430"/>
+						<line hits="1" number="436"/>
+						<line hits="1" number="438"/>
+						<line hits="1" number="440"/>
+						<line hits="1" number="442"/>
+						<line hits="1" number="448"/>
+						<line hits="1" number="454"/>
+						<line hits="1" number="460"/>
+						<line hits="1" number="466"/>
+						<line hits="1" number="472"/>
+						<line hits="1" number="480"/>
+						<line hits="1" number="481"/>
+						<line hits="1" number="488"/>
+						<line hits="1" number="512"/>
+						<line hits="1" number="518"/>
+						<line hits="1" number="524"/>
+						<line hits="1" number="532"/>
+						<line hits="1" number="540"/>
+						<line hits="1" number="541"/>
+						<line hits="1" number="546"/>
+						<line hits="1" number="570"/>
+						<line hits="1" number="576"/>
+						<line hits="1" number="582"/>
+						<line hits="1" number="590"/>
+						<line hits="1" number="591"/>
+						<line hits="1" number="598"/>
+						<line hits="1" number="622"/>
+						<line hits="1" number="628"/>
+						<line hits="1" number="634"/>
+						<line hits="1" number="642"/>
+						<line hits="1" number="643"/>
+						<line hits="1" number="644"/>
+						<line hits="1" number="655"/>
+						<line hits="1" number="679"/>
+						<line hits="1" number="685"/>
+						<line hits="1" number="691"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/XYZAlgorithm_test.py" line-rate="1" name="XYZAlgorithm_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="16"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="48"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="67"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="70"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="84"/>
+						<line hits="1" number="85"/>
+						<line hits="1" number="87"/>
+						<line hits="1" number="89"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="algorithm_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="0.9444" name="edge_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="edge_test/EdgeFactory_test.py" line-rate="0.8919" name="EdgeFactory_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="22"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="50"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="70"/>
+						<line hits="0" number="75"/>
+						<line hits="0" number="76"/>
+						<line hits="0" number="84"/>
+						<line hits="0" number="89"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="edge_test/MiniSeedFactory_test.py" line-rate="0.9481" name="MiniSeedFactory_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="50"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="79"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="84"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="87"/>
+						<line hits="1" number="89"/>
+						<line hits="1" number="90"/>
+						<line hits="1" number="91"/>
+						<line hits="1" number="93"/>
+						<line hits="1" number="94"/>
+						<line hits="1" number="95"/>
+						<line hits="1" number="96"/>
+						<line hits="1" number="99"/>
+						<line hits="1" number="104"/>
+						<line hits="1" number="105"/>
+						<line hits="1" number="106"/>
+						<line hits="1" number="107"/>
+						<line hits="1" number="108"/>
+						<line hits="1" number="109"/>
+						<line hits="1" number="113"/>
+						<line hits="0" number="118"/>
+						<line hits="0" number="119"/>
+						<line hits="0" number="127"/>
+						<line hits="0" number="132"/>
+						<line hits="1" number="139"/>
+						<line hits="1" number="161"/>
+						<line hits="1" number="162"/>
+						<line hits="1" number="163"/>
+						<line hits="1" number="164"/>
+						<line hits="1" number="165"/>
+						<line hits="1" number="166"/>
+						<line hits="1" number="167"/>
+						<line hits="1" number="168"/>
+						<line hits="1" number="169"/>
+						<line hits="1" number="170"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="edge_test/RawInputClient_test.py" line-rate="1" name="RawInputClient_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="16"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="22"/>
+						<line hits="1" number="23"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="26"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="76"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="edge_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="iaga2002_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="iaga2002_test/IAGA2002Factory_test.py" line-rate="1" name="IAGA2002Factory_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="13"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="15"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="iaga2002_test/IAGA2002Parser_test.py" line-rate="1" name="IAGA2002Parser_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="44"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="67"/>
+						<line hits="1" number="70"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="93"/>
+						<line hits="1" number="94"/>
+						<line hits="1" number="97"/>
+						<line hits="1" number="100"/>
+						<line hits="1" number="103"/>
+						<line hits="1" number="110"/>
+						<line hits="1" number="111"/>
+						<line hits="1" number="112"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="iaga2002_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="imfjson_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="imfjson_test/IMFJSONWriter_test.py" line-rate="1" name="IMFJSONWriter_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="9"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="13"/>
+						<line hits="1" number="14"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="26"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="50"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="70"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="83"/>
+						<line hits="1" number="84"/>
+						<line hits="1" number="85"/>
+						<line hits="1" number="86"/>
+						<line hits="1" number="89"/>
+						<line hits="1" number="92"/>
+						<line hits="1" number="93"/>
+						<line hits="1" number="94"/>
+						<line hits="1" number="98"/>
+						<line hits="1" number="99"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="imfjson_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="imfv122_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="imfv122_test/IMFV122Parser_test.py" line-rate="1" name="IMFV122Parser_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="11"/>
+						<line hits="1" number="12"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="16"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="22"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="28"/>
+						<line hits="1" number="29"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="50"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="69"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="74"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+						<line hits="1" number="79"/>
+						<line hits="1" number="80"/>
+						<line hits="1" number="81"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="83"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="imfv122_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="imfv283_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="imfv283_test/IMFV283Parser_test.py" line-rate="1" name="IMFV283Parser_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="2"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="10"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="25"/>
+						<line hits="1" number="31"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="45"/>
+						<line hits="1" number="50"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="59"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="63"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="70"/>
+						<line hits="1" number="71"/>
+						<line hits="1" number="72"/>
+						<line hits="1" number="73"/>
+						<line hits="1" number="76"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="78"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="imfv283_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="pcdcp_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="pcdcp_test/PCDCPFactory_test.py" line-rate="1" name="PCDCPFactory_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="6"/>
+						<line hits="1" number="8"/>
+						<line hits="1" number="15"/>
+						<line hits="1" number="24"/>
+						<line hits="1" number="30"/>
+						<line hits="1" number="32"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="34"/>
+						<line hits="1" number="35"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="37"/>
+						<line hits="1" number="38"/>
+						<line hits="1" number="39"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="52"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="55"/>
+						<line hits="1" number="56"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="58"/>
+						<line hits="1" number="59"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="pcdcp_test/PCDCPParser_test.py" line-rate="1" name="PCDCPParser_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="3"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="7"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="36"/>
+						<line hits="1" number="42"/>
+						<line hits="1" number="43"/>
+						<line hits="1" number="47"/>
+						<line hits="1" number="48"/>
+						<line hits="1" number="49"/>
+						<line hits="1" number="50"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="60"/>
+						<line hits="1" number="61"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="66"/>
+						<line hits="1" number="67"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="69"/>
+					</lines>
+				</class>
+				<class branch-rate="0" complexity="0" filename="pcdcp_test/__init__.py" line-rate="1" name="__init__.py">
+					<methods/>
+					<lines/>
+				</class>
+			</classes>
+		</package>
+		<package branch-rate="0" complexity="0" line-rate="1" name="residual_test">
+			<classes>
+				<class branch-rate="0" complexity="0" filename="residual_test/residual_test.py" line-rate="1" name="residual_test.py">
+					<methods/>
+					<lines>
+						<line hits="1" number="1"/>
+						<line hits="1" number="2"/>
+						<line hits="1" number="4"/>
+						<line hits="1" number="5"/>
+						<line hits="1" number="13"/>
+						<line hits="1" number="17"/>
+						<line hits="1" number="18"/>
+						<line hits="1" number="19"/>
+						<line hits="1" number="20"/>
+						<line hits="1" number="21"/>
+						<line hits="1" number="27"/>
+						<line hits="1" number="33"/>
+						<line hits="1" number="40"/>
+						<line hits="1" number="41"/>
+						<line hits="1" number="46"/>
+						<line hits="1" number="51"/>
+						<line hits="1" number="53"/>
+						<line hits="1" number="54"/>
+						<line hits="1" number="57"/>
+						<line hits="1" number="62"/>
+						<line hits="1" number="64"/>
+						<line hits="1" number="65"/>
+						<line hits="1" number="68"/>
+						<line hits="1" number="75"/>
+						<line hits="1" number="77"/>
+						<line hits="1" number="82"/>
+						<line hits="1" number="89"/>
+						<line hits="1" number="91"/>
+						<line hits="1" number="98"/>
+						<line hits="1" number="104"/>
+						<line hits="1" number="109"/>
+						<line hits="1" number="110"/>
+						<line hits="1" number="117"/>
+						<line hits="1" number="123"/>
+						<line hits="1" number="128"/>
+						<line hits="1" number="129"/>
+					</lines>
+				</class>
+			</classes>
+		</package>
+	</packages>
+</coverage>
-- 
GitLab


From 72ec699881958080c06550999018df0710eeb7fe Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 15:14:37 -0600
Subject: [PATCH 21/46] update docker build

---
 .gitlab-ci.yml | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bdda762f..9a3bbdd6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -26,9 +26,9 @@ variables:
     - .adjust_image_names
   image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
   only:
-    - master@ghsc/geomag/geomag-plots
-    - production@ghsc/geomag/geomag-plots
-    - tags@ghsc/geomag/geomag-plots
+    - master@ghsc/geomag/geomag-algorithms
+    - production@ghsc/geomag/geomag-algorithms
+    - tags@ghsc/geomag/geomag-algorithms
   script:
     - docker build
       --pull
@@ -104,8 +104,8 @@ variables:
 
 .staging:
   only:
-    - master@ghsc/geomag/geomag-plots
-    - tags@ghsc/geomag/geomag-plots
+    - master@ghsc/geomag/geomag-algorithms
+    - tags@ghsc/geomag/geomag-algorithms
 
 .staging01:
   tags:
@@ -128,8 +128,8 @@ variables:
     - ^.*beta.*$
     - ^.*-rc.*$
   only:
-    - tags@ghsc/geomag/geomag-plots
-    - production@ghsc/geomag/geomag-plots
+    - tags@ghsc/geomag/geomag-algorithms
+    - production@ghsc/geomag/geomag-algorithms
   when: manual
 
 .production01:
@@ -165,7 +165,6 @@ Check Python 3.8:
 ## --------------------------------------------------
 # Integration Stage
 ## --------------------------------------------------
-
 Build Algorithms Image:
   extends:
     - .build_docker_image
-- 
GitLab


From e1fd12bff03be9d1f122969c765f6658e45a1e0c Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 15:20:47 -0600
Subject: [PATCH 22/46] comment out 'only' section of docker build

---
 .gitlab-ci.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9a3bbdd6..c161a28f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,10 +25,10 @@ variables:
   extends:
     - .adjust_image_names
   image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
-  only:
-    - master@ghsc/geomag/geomag-algorithms
-    - production@ghsc/geomag/geomag-algorithms
-    - tags@ghsc/geomag/geomag-algorithms
+  # only:
+  #   - master@ghsc/geomag/geomag-algorithms
+  #   - production@ghsc/geomag/geomag-algorithms
+  #   - tags@ghsc/geomag/geomag-algorithms
   script:
     - docker build
       --pull
-- 
GitLab


From 9c1b81d6de4ef19959d570d39b47c6fd96d5383c Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 16:10:36 -0600
Subject: [PATCH 23/46] comment out 3.6,7 to test docker build

---
 .gitlab-ci.yml | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c161a28f..565be8b6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -144,17 +144,17 @@ variables:
 # Test Stage
 ## --------------------------------------------------
 
-Check Python 3.6:
-  extends:
-    - .check_code
-  variables:
-    PYTHON_VERSION: '3.6'
+# Check Python 3.6:
+#   extends:
+#     - .check_code
+#   variables:
+#     PYTHON_VERSION: '3.6'
 
-Check Python 3.7:
-  extends:
-    - .check_code
-  variables:
-    PYTHON_VERSION: '3.7'
+# Check Python 3.7:
+#   extends:
+#     - .check_code
+#   variables:
+#     PYTHON_VERSION: '3.7'
 
 Check Python 3.8:
   extends:
-- 
GitLab


From 30eb6f1d2c74bb63bd873e15bb23a412a391f7d6 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 16:20:00 -0600
Subject: [PATCH 24/46] comment out tags for testing

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 565be8b6..857333de 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -46,8 +46,8 @@ variables:
     - docker push ${INTERNAL_IMAGE_NAME}
     - docker image rm ${INTERNAL_IMAGE_NAME}
   stage: integration
-  tags:
-    - build
+  # tags:
+  #   - build
   variables:
     FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest
 
-- 
GitLab


From 20a1c01a09bfd12100e73f76a5a0d5ce47b963e3 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 16:36:02 -0600
Subject: [PATCH 25/46] add skip lock to pipenv install

---
 .gitlab-ci.yml | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 857333de..624b2b35 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -65,7 +65,7 @@ variables:
     # Install Project Dependencies
     - conda config --add channels conda-forge
     - conda install python=${PYTHON_VERSION} obspy pycurl
-    - pip install pipenv
+    - pip install pipenv --skip-lock
     - export LC_ALL=C.UTF-8
     - export LANG=C.UTF-8
     - pipenv --site-packages install --dev --pre
@@ -144,17 +144,17 @@ variables:
 # Test Stage
 ## --------------------------------------------------
 
-# Check Python 3.6:
-#   extends:
-#     - .check_code
-#   variables:
-#     PYTHON_VERSION: '3.6'
+Check Python 3.6:
+  extends:
+    - .check_code
+  variables:
+    PYTHON_VERSION: '3.6'
 
-# Check Python 3.7:
-#   extends:
-#     - .check_code
-#   variables:
-#     PYTHON_VERSION: '3.7'
+Check Python 3.7:
+  extends:
+    - .check_code
+  variables:
+    PYTHON_VERSION: '3.7'
 
 Check Python 3.8:
   extends:
-- 
GitLab


From f15ad3f79fe28c7492f4af2ff0cc9b57c5a0c119 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 16:39:06 -0600
Subject: [PATCH 26/46] move skip lock

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 624b2b35..75c436bb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -65,10 +65,10 @@ variables:
     # Install Project Dependencies
     - conda config --add channels conda-forge
     - conda install python=${PYTHON_VERSION} obspy pycurl
-    - pip install pipenv --skip-lock
+    - pip install pipenv
     - export LC_ALL=C.UTF-8
     - export LANG=C.UTF-8
-    - pipenv --site-packages install --dev --pre
+    - pipenv --site-packages install --dev --pre --skip-lock
     # Run Code Checks
     - pipenv run black --check .
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/
-- 
GitLab


From f098b7116c4808197fb17cfe956dfa0ae4f18993 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 23 Jun 2020 17:12:43 -0600
Subject: [PATCH 27/46] comment out 3.7 for testing

---
 .gitlab-ci.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 75c436bb..c8aace1f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -150,11 +150,11 @@ Check Python 3.6:
   variables:
     PYTHON_VERSION: '3.6'
 
-Check Python 3.7:
-  extends:
-    - .check_code
-  variables:
-    PYTHON_VERSION: '3.7'
+# Check Python 3.7:
+#   extends:
+#     - .check_code
+#   variables:
+#     PYTHON_VERSION: '3.7'
 
 Check Python 3.8:
   extends:
-- 
GitLab


From 603e6de0bfe211fe69faef9a14b14a3d038c4f8c Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 12:30:47 -0600
Subject: [PATCH 28/46] update stuffs

---
 .gitlab-ci.yml | 4 ++--
 Dockerfile     | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c8aace1f..7be83cf8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -68,7 +68,7 @@ variables:
     - pip install pipenv
     - export LC_ALL=C.UTF-8
     - export LANG=C.UTF-8
-    - pipenv --site-packages install --dev --pre --skip-lock
+    - pipenv --site-packages install --dev --pre
     # Run Code Checks
     - pipenv run black --check .
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/
@@ -144,7 +144,7 @@ variables:
 # Test Stage
 ## --------------------------------------------------
 
-Check Python 3.6:
+Check_Python_3.6:
   extends:
     - .check_code
   variables:
diff --git a/Dockerfile b/Dockerfile
index 215b2e55..c236da2c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-ARG FROM_IMAGE=usgs/centos:8
+ARG FROM_IMAGE=usgs/centos:latest
 
 FROM ${FROM_IMAGE}
 LABEL maintainer="Jeremy Fee <jmfee@usgs.gov>"
-- 
GitLab


From 11cab65d45fcb98617c90b2cbc3fc9ca732bc478 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 12:33:19 -0600
Subject: [PATCH 29/46] remove template for test

---
 .gitlab-ci.yml | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7be83cf8..edc9b579 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -145,8 +145,24 @@ variables:
 ## --------------------------------------------------
 
 Check_Python_3.6:
-  extends:
-    - .check_code
+  script:
+    - yum install -y wget which
+    - wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
+    - bash miniconda.sh -b -p $HOME/miniconda
+    - export PATH="$HOME/miniconda/bin:$PATH"
+    - conda config --set always_yes yes --set changeps1 no
+    - conda update --yes conda
+    - conda info -a
+    # Install Project Dependencies
+    - conda config --add channels conda-forge
+    - conda install python=${PYTHON_VERSION} obspy pycurl
+    - pip install pipenv
+    - export LC_ALL=C.UTF-8
+    - export LANG=C.UTF-8
+    - pipenv --site-packages install --dev --pre
+    # Run Code Checks
+    - pipenv run black --check .
+    - pipenv run pytest --cov-report xml:cov.xml --cov=test/
   variables:
     PYTHON_VERSION: '3.6'
 
-- 
GitLab


From a70900caa37d69311af0d81392d9ccc4fa90c83a Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 13:04:38 -0600
Subject: [PATCH 30/46] update python version

---
 .gitlab-ci.yml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index edc9b579..0e885cb7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -164,8 +164,7 @@ Check_Python_3.6:
     - pipenv run black --check .
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/
   variables:
-    PYTHON_VERSION: '3.6'
-
+    PYTHON_VERSION: '3.7'
 # Check Python 3.7:
 #   extends:
 #     - .check_code
-- 
GitLab


From 29ce1db6c3a6dbe48a4eae6c77ddcfb25f8795f9 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 13:31:41 -0600
Subject: [PATCH 31/46] update python version

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0e885cb7..f04f0056 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -164,7 +164,7 @@ Check_Python_3.6:
     - pipenv run black --check .
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/
   variables:
-    PYTHON_VERSION: '3.7'
+    PYTHON_VERSION: 3.7
 # Check Python 3.7:
 #   extends:
 #     - .check_code
-- 
GitLab


From 14808741901681c31514ff5d4e1afba0034fd984 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 13:32:14 -0600
Subject: [PATCH 32/46] update python version

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f04f0056..0e885cb7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -164,7 +164,7 @@ Check_Python_3.6:
     - pipenv run black --check .
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/
   variables:
-    PYTHON_VERSION: 3.7
+    PYTHON_VERSION: '3.7'
 # Check Python 3.7:
 #   extends:
 #     - .check_code
-- 
GitLab


From 6cc8ce4648a3102a520dbdc7cce6c1aba643936e Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 13:45:53 -0600
Subject: [PATCH 33/46] remove quotes?

---
 .gitlab-ci.yml | 33 +++++++++------------------------
 1 file changed, 9 insertions(+), 24 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0e885cb7..d831d7bc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -145,31 +145,16 @@ variables:
 ## --------------------------------------------------
 
 Check_Python_3.6:
-  script:
-    - yum install -y wget which
-    - wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
-    - bash miniconda.sh -b -p $HOME/miniconda
-    - export PATH="$HOME/miniconda/bin:$PATH"
-    - conda config --set always_yes yes --set changeps1 no
-    - conda update --yes conda
-    - conda info -a
-    # Install Project Dependencies
-    - conda config --add channels conda-forge
-    - conda install python=${PYTHON_VERSION} obspy pycurl
-    - pip install pipenv
-    - export LC_ALL=C.UTF-8
-    - export LANG=C.UTF-8
-    - pipenv --site-packages install --dev --pre
-    # Run Code Checks
-    - pipenv run black --check .
-    - pipenv run pytest --cov-report xml:cov.xml --cov=test/
+  extends:
+    - .check_code
   variables:
-    PYTHON_VERSION: '3.7'
-# Check Python 3.7:
-#   extends:
-#     - .check_code
-#   variables:
-#     PYTHON_VERSION: '3.7'
+    PYTHON_VERSION: '3.6'
+
+Check Python 3.7:
+  extends:
+    - .check_code
+  variables:
+    PYTHON_VERSION: 3.7
 
 Check Python 3.8:
   extends:
-- 
GitLab


From 5b513991b0e4f2c7bfa5256ba153b7171ce2adda Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 13:46:37 -0600
Subject: [PATCH 34/46] ok, quotes back

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d831d7bc..dedf15e5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -154,7 +154,7 @@ Check Python 3.7:
   extends:
     - .check_code
   variables:
-    PYTHON_VERSION: 3.7
+    PYTHON_VERSION: '3.7'
 
 Check Python 3.8:
   extends:
-- 
GitLab


From c2f474df6a1fd71ae4ba902d08284ef9e0bb4e8d Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 13:52:48 -0600
Subject: [PATCH 35/46] add skip lock flag

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dedf15e5..ea9ddd90 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -68,7 +68,7 @@ variables:
     - pip install pipenv
     - export LC_ALL=C.UTF-8
     - export LANG=C.UTF-8
-    - pipenv --site-packages install --dev --pre
+    - pipenv --site-packages install --dev --pre --skip-lock
     # Run Code Checks
     - pipenv run black --check .
     - pipenv run pytest --cov-report xml:cov.xml --cov=test/
-- 
GitLab


From 26e53ba19490a6004cbf56fb7fd44d0ae5cbb776 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 14:09:41 -0600
Subject: [PATCH 36/46] test docker

---
 .gitlab-ci.yml | 37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ea9ddd90..03eece12 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,10 +25,10 @@ variables:
   extends:
     - .adjust_image_names
   image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
-  # only:
-  #   - master@ghsc/geomag/geomag-algorithms
-  #   - production@ghsc/geomag/geomag-algorithms
-  #   - tags@ghsc/geomag/geomag-algorithms
+  only:
+    - master@ghsc/geomag/geomag-algorithms
+    - production@ghsc/geomag/geomag-algorithms
+    - tags@ghsc/geomag/geomag-algorithms
   script:
     - docker build
       --pull
@@ -46,8 +46,8 @@ variables:
     - docker push ${INTERNAL_IMAGE_NAME}
     - docker image rm ${INTERNAL_IMAGE_NAME}
   stage: integration
-  # tags:
-  #   - build
+  tags:
+    - build
   variables:
     FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest
 
@@ -165,9 +165,28 @@ Check Python 3.8:
 ## --------------------------------------------------
 # Integration Stage
 ## --------------------------------------------------
-Build Algorithms Image:
-  extends:
-    - .build_docker_image
+Build_Algorithms_Image:
+  before_script:
+    - IMAGE_NAME=usgs/${APP_NAME}:${CI_COMMIT_REF_SLUG}
+    - IMAGE_NAME=${IMAGE_NAME/:master/:latest}
+    - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}
+    - STACK_NAME=${APP_NAME}
+  script:
+    - docker build
+      --pull
+      --build-arg APP_NAME=${APP_NAME}
+      --build-arg FROM_IMAGE=${FROM_IMAGE}
+      --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
+      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
+      --tag local/${IMAGE_NAME} .
+
+    - docker tag local/${IMAGE_NAME} ${IMAGE_NAME}
+    - docker push ${IMAGE_NAME}
+    - docker image rm ${IMAGE_NAME}
+
+    - docker tag local/${IMAGE_NAME} ${INTERNAL_IMAGE_NAME}
+    - docker push ${INTERNAL_IMAGE_NAME}
+    - docker image rm ${INTERNAL_IMAGE_NAME}
   variables:
     APP_NAME: geomag-algorithms
 ## --------------------------------------------------
-- 
GitLab


From 81487a55118107ee5f11a0c2dc57b37872779435 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 14:57:34 -0600
Subject: [PATCH 37/46] remove tag for test

---
 .gitlab-ci.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 03eece12..eed7ebc0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -180,11 +180,9 @@ Build_Algorithms_Image:
       --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
       --tag local/${IMAGE_NAME} .
 
-    - docker tag local/${IMAGE_NAME} ${IMAGE_NAME}
     - docker push ${IMAGE_NAME}
     - docker image rm ${IMAGE_NAME}
 
-    - docker tag local/${IMAGE_NAME} ${INTERNAL_IMAGE_NAME}
     - docker push ${INTERNAL_IMAGE_NAME}
     - docker image rm ${INTERNAL_IMAGE_NAME}
   variables:
-- 
GitLab


From ee4252f5883a1676adedf84740d1061f70725e62 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 14:58:37 -0600
Subject: [PATCH 38/46] remove other tag

---
 .gitlab-ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index eed7ebc0..b1641dab 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -178,7 +178,6 @@ Build_Algorithms_Image:
       --build-arg FROM_IMAGE=${FROM_IMAGE}
       --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
       --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
-      --tag local/${IMAGE_NAME} .
 
     - docker push ${IMAGE_NAME}
     - docker image rm ${IMAGE_NAME}
-- 
GitLab


From d4a7bd95530b03ae15a9b74b25fccac553be023e Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 15:00:12 -0600
Subject: [PATCH 39/46] add build tag

---
 .gitlab-ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b1641dab..3bf39a59 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -184,6 +184,8 @@ Build_Algorithms_Image:
 
     - docker push ${INTERNAL_IMAGE_NAME}
     - docker image rm ${INTERNAL_IMAGE_NAME}
+  tags:
+    - build
   variables:
     APP_NAME: geomag-algorithms
 ## --------------------------------------------------
-- 
GitLab


From bf27a519d710f3148e20febd1ab46368f883a6eb Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 15:01:22 -0600
Subject: [PATCH 40/46] add build tag

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3bf39a59..f379bcf9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -177,7 +177,7 @@ Build_Algorithms_Image:
       --build-arg APP_NAME=${APP_NAME}
       --build-arg FROM_IMAGE=${FROM_IMAGE}
       --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
-      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
+      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA} .
 
     - docker push ${IMAGE_NAME}
     - docker image rm ${IMAGE_NAME}
-- 
GitLab


From 6aa3f353be63f8c28c301740de21c7e6e9e3fbb3 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 15:02:21 -0600
Subject: [PATCH 41/46] add from image

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f379bcf9..ad9b312a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -188,6 +188,7 @@ Build_Algorithms_Image:
     - build
   variables:
     APP_NAME: geomag-algorithms
+    FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest
 ## --------------------------------------------------
 # Deploy Stage
 ## --------------------------------------------------
-- 
GitLab


From 2595921eed19350fe2c51e51d34b7ebcd6e36477 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 15:03:05 -0600
Subject: [PATCH 42/46] add from image

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ad9b312a..219c88fa 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -188,7 +188,7 @@ Build_Algorithms_Image:
     - build
   variables:
     APP_NAME: geomag-algorithms
-    FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest
+    FROM_IMAGE: usgs/centos:latest
 ## --------------------------------------------------
 # Deploy Stage
 ## --------------------------------------------------
-- 
GitLab


From 7c4f1cb592964beed941b53e3d636ddbfb7ce3dd Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 15:17:47 -0600
Subject: [PATCH 43/46] clean up

---
 .gitlab-ci.yml | 23 ++---------------------
 1 file changed, 2 insertions(+), 21 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 219c88fa..91201217 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -166,29 +166,10 @@ Check Python 3.8:
 # Integration Stage
 ## --------------------------------------------------
 Build_Algorithms_Image:
-  before_script:
-    - IMAGE_NAME=usgs/${APP_NAME}:${CI_COMMIT_REF_SLUG}
-    - IMAGE_NAME=${IMAGE_NAME/:master/:latest}
-    - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}
-    - STACK_NAME=${APP_NAME}
-  script:
-    - docker build
-      --pull
-      --build-arg APP_NAME=${APP_NAME}
-      --build-arg FROM_IMAGE=${FROM_IMAGE}
-      --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
-      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA} .
-
-    - docker push ${IMAGE_NAME}
-    - docker image rm ${IMAGE_NAME}
-
-    - docker push ${INTERNAL_IMAGE_NAME}
-    - docker image rm ${INTERNAL_IMAGE_NAME}
-  tags:
-    - build
+  extends:
+    - .build_docker_image
   variables:
     APP_NAME: geomag-algorithms
-    FROM_IMAGE: usgs/centos:latest
 ## --------------------------------------------------
 # Deploy Stage
 ## --------------------------------------------------
-- 
GitLab


From abcd448d94f02ae8c5906e7af5ee1f44c9d05e96 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Wed, 24 Jun 2020 15:24:17 -0600
Subject: [PATCH 44/46] fix job names

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 91201217..f2fe110c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -144,7 +144,7 @@ variables:
 # Test Stage
 ## --------------------------------------------------
 
-Check_Python_3.6:
+Check Python 3.6:
   extends:
     - .check_code
   variables:
@@ -165,7 +165,7 @@ Check Python 3.8:
 ## --------------------------------------------------
 # Integration Stage
 ## --------------------------------------------------
-Build_Algorithms_Image:
+Build Algorithms Docker Image:
   extends:
     - .build_docker_image
   variables:
-- 
GitLab


From fc6d94a29443108f4f94e6083fe0a20e83753ba3 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 25 Jun 2020 10:44:15 -0600
Subject: [PATCH 45/46] remove integration and build steps

---
 .gitlab-ci.yml | 149 -------------------------------------------------
 1 file changed, 149 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f2fe110c..87aebece 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,44 +13,6 @@ variables:
 # Templates
 ## --------------------------------------------------
 
-.adjust_image_names:
-  before_script:
-    - IMAGE_NAME=usgs/${APP_NAME}:${CI_COMMIT_REF_SLUG}
-    - IMAGE_NAME=${IMAGE_NAME/:master/:latest}
-    - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}
-    - STACK_NAME=${APP_NAME}
-
-.build_docker_image:
-  cache: {}
-  extends:
-    - .adjust_image_names
-  image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
-  only:
-    - master@ghsc/geomag/geomag-algorithms
-    - production@ghsc/geomag/geomag-algorithms
-    - tags@ghsc/geomag/geomag-algorithms
-  script:
-    - docker build
-      --pull
-      --build-arg APP_NAME=${APP_NAME}
-      --build-arg FROM_IMAGE=${FROM_IMAGE}
-      --build-arg GIT_BRANCH_NAME=${CI_COMMIT_REF_NAME}
-      --build-arg GIT_COMMIT_SHA=${CI_COMMIT_SHA}
-      --tag local/${IMAGE_NAME} .
-
-    - docker tag local/${IMAGE_NAME} ${IMAGE_NAME}
-    - docker push ${IMAGE_NAME}
-    - docker image rm ${IMAGE_NAME}
-
-    - docker tag local/${IMAGE_NAME} ${INTERNAL_IMAGE_NAME}
-    - docker push ${INTERNAL_IMAGE_NAME}
-    - docker image rm ${INTERNAL_IMAGE_NAME}
-  stage: integration
-  tags:
-    - build
-  variables:
-    FROM_IMAGE: ${CODE_REGISTRY}/devops/images/usgs/centos:latest
-
 .check_code:
   cache: {}
   image: usgs/centos:latest
@@ -83,63 +45,6 @@ variables:
   variables:
     PYTHON_VERSION: 3.8
 
-.deploy:
-  cache: {}
-  extends:
-    - .adjust_image_names
-  image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest
-  script:
-    - git clone ${GENERIC_SWARM_DEPLOY_REPO} generic-deploy
-    - export REGISTRY=${CI_REGISTRY_IMAGE}
-    - cp -v
-      generic-deploy/default.config.sh
-      generic-deploy/default.funcs.sh
-      generic-deploy/deploy.sh
-      scripts/.
-    - ./scripts/deploy.sh
-  stage: deploy
-  tags:
-    - deploy
-    - swarm
-
-.staging:
-  only:
-    - master@ghsc/geomag/geomag-algorithms
-    - tags@ghsc/geomag/geomag-algorithms
-
-.staging01:
-  tags:
-    - staging01
-
-.staging02:
-  tags:
-    - staging02
-
-.mage:
-  variables:
-    USGS_ONLY: 'false'
-
-.mage01:
-  tags:
-    - mage01
-
-.production:
-  except:
-    - ^.*beta.*$
-    - ^.*-rc.*$
-  only:
-    - tags@ghsc/geomag/geomag-algorithms
-    - production@ghsc/geomag/geomag-algorithms
-  when: manual
-
-.production01:
-  tags:
-    - production01
-
-.production02:
-  tags:
-    - production02
-
 ## --------------------------------------------------
 # Test Stage
 ## --------------------------------------------------
@@ -161,57 +66,3 @@ Check Python 3.8:
     - .check_code
   variables:
     PYTHON_VERSION: '3.8'
-
-## --------------------------------------------------
-# Integration Stage
-## --------------------------------------------------
-Build Algorithms Docker Image:
-  extends:
-    - .build_docker_image
-  variables:
-    APP_NAME: geomag-algorithms
-## --------------------------------------------------
-# Deploy Stage
-## --------------------------------------------------
-
-# Deploy Production01:
-
-#   extends:
-#     - .deploy
-#     - .production
-#     - .production01
-#   variables:
-#     APP_NAME: geomag-plots
-
-# Deploy Production02:
-#   extends:
-#     - .deploy
-#     - .production
-#     - .production02
-#   variables:
-#     APP_NAME: geomag-plots
-
-# Deploy Staging01:
-#   extends:
-#     - .deploy
-#     - .staging
-#     - .staging01
-#   variables:
-#     APP_NAME: geomag-plots
-
-# Deploy Staging02:
-#   extends:
-#     - .deploy
-#     - .staging
-#     - .staging02
-#   variables:
-#     APP_NAME: geomag-plots
-
-# Deploy Mage01:
-#   extends:
-#     - .deploy
-#     - .staging
-#     - .mage
-#     - .mage01
-#   variables:
-#     APP_NAME: geomag-plots
-- 
GitLab


From 76211dca0634db636ccfc3136b933146f771d9a4 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Thu, 25 Jun 2020 15:43:51 -0600
Subject: [PATCH 46/46] remove cov, add to gitignore, and update Pipfile

---
 .gitignore |    1 +
 Pipfile    |    2 +-
 cov.xml    | 1755 ----------------------------------------------------
 3 files changed, 2 insertions(+), 1756 deletions(-)
 delete mode 100644 cov.xml

diff --git a/.gitignore b/.gitignore
index ffcd96a5..a8cadd0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 .coverage
+cov.xml
 .DS_Store
 node_modules
 *.pyc
diff --git a/Pipfile b/Pipfile
index ad00171f..6576f15b 100644
--- a/Pipfile
+++ b/Pipfile
@@ -21,7 +21,7 @@ databases = {extras = ["postgresql", "sqlite"],version = "*"}
 fastapi = "*"
 httpx = "==0.11.1"
 openpyxl = "*"
-pydantic = "==1.5.1"
+pydantic = "*"
 sqlalchemy = "*"
 sqlalchemy-utc = "*"
 typing = "*"
diff --git a/cov.xml b/cov.xml
deleted file mode 100644
index fcffa53b..00000000
--- a/cov.xml
+++ /dev/null
@@ -1,1755 +0,0 @@
-<?xml version="1.0" ?>
-<coverage branch-rate="0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.8602" lines-covered="1335" lines-valid="1552" timestamp="1592867049082" version="5.1">
-	<!-- Generated by coverage.py: https://coverage.readthedocs.io -->
-	<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
-	<sources>
-		<source>/Users/trivers/Desktop/WebApps/Flask/geomag-algorithms/geomag-algorithms/test</source>
-	</sources>
-	<packages>
-		<package branch-rate="0" complexity="0" line-rate="0.7497" name=".">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="ChannelConverter_test.py" line-rate="0.1336" name="ChannelConverter_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="48"/>
-						<line hits="0" number="55"/>
-						<line hits="0" number="56"/>
-						<line hits="0" number="57"/>
-						<line hits="0" number="58"/>
-						<line hits="0" number="59"/>
-						<line hits="0" number="60"/>
-						<line hits="1" number="62"/>
-						<line hits="0" number="73"/>
-						<line hits="0" number="74"/>
-						<line hits="0" number="75"/>
-						<line hits="0" number="76"/>
-						<line hits="0" number="77"/>
-						<line hits="0" number="82"/>
-						<line hits="0" number="83"/>
-						<line hits="0" number="84"/>
-						<line hits="0" number="85"/>
-						<line hits="0" number="86"/>
-						<line hits="0" number="87"/>
-						<line hits="0" number="91"/>
-						<line hits="0" number="92"/>
-						<line hits="0" number="93"/>
-						<line hits="0" number="94"/>
-						<line hits="0" number="95"/>
-						<line hits="0" number="96"/>
-						<line hits="0" number="102"/>
-						<line hits="0" number="103"/>
-						<line hits="0" number="104"/>
-						<line hits="0" number="105"/>
-						<line hits="0" number="106"/>
-						<line hits="0" number="107"/>
-						<line hits="1" number="109"/>
-						<line hits="0" number="118"/>
-						<line hits="0" number="119"/>
-						<line hits="0" number="120"/>
-						<line hits="0" number="121"/>
-						<line hits="0" number="122"/>
-						<line hits="1" number="124"/>
-						<line hits="0" number="133"/>
-						<line hits="0" number="134"/>
-						<line hits="0" number="135"/>
-						<line hits="0" number="136"/>
-						<line hits="0" number="139"/>
-						<line hits="0" number="140"/>
-						<line hits="0" number="141"/>
-						<line hits="0" number="142"/>
-						<line hits="1" number="144"/>
-						<line hits="0" number="153"/>
-						<line hits="0" number="154"/>
-						<line hits="0" number="155"/>
-						<line hits="0" number="156"/>
-						<line hits="0" number="159"/>
-						<line hits="0" number="160"/>
-						<line hits="0" number="161"/>
-						<line hits="0" number="162"/>
-						<line hits="1" number="164"/>
-						<line hits="0" number="176"/>
-						<line hits="0" number="177"/>
-						<line hits="0" number="178"/>
-						<line hits="0" number="179"/>
-						<line hits="0" number="180"/>
-						<line hits="0" number="181"/>
-						<line hits="1" number="183"/>
-						<line hits="0" number="193"/>
-						<line hits="0" number="194"/>
-						<line hits="0" number="195"/>
-						<line hits="0" number="196"/>
-						<line hits="0" number="197"/>
-						<line hits="1" number="199"/>
-						<line hits="0" number="210"/>
-						<line hits="0" number="211"/>
-						<line hits="0" number="212"/>
-						<line hits="0" number="213"/>
-						<line hits="0" number="216"/>
-						<line hits="0" number="217"/>
-						<line hits="0" number="218"/>
-						<line hits="0" number="219"/>
-						<line hits="0" number="222"/>
-						<line hits="0" number="223"/>
-						<line hits="0" number="224"/>
-						<line hits="0" number="225"/>
-						<line hits="0" number="226"/>
-						<line hits="0" number="229"/>
-						<line hits="0" number="230"/>
-						<line hits="0" number="231"/>
-						<line hits="0" number="232"/>
-						<line hits="0" number="233"/>
-						<line hits="0" number="236"/>
-						<line hits="0" number="237"/>
-						<line hits="0" number="238"/>
-						<line hits="0" number="239"/>
-						<line hits="0" number="240"/>
-						<line hits="0" number="243"/>
-						<line hits="0" number="244"/>
-						<line hits="0" number="245"/>
-						<line hits="0" number="246"/>
-						<line hits="0" number="247"/>
-						<line hits="1" number="249"/>
-						<line hits="0" number="258"/>
-						<line hits="0" number="259"/>
-						<line hits="0" number="260"/>
-						<line hits="0" number="261"/>
-						<line hits="0" number="264"/>
-						<line hits="0" number="265"/>
-						<line hits="0" number="266"/>
-						<line hits="0" number="267"/>
-						<line hits="0" number="270"/>
-						<line hits="0" number="271"/>
-						<line hits="0" number="272"/>
-						<line hits="0" number="273"/>
-						<line hits="1" number="275"/>
-						<line hits="0" number="283"/>
-						<line hits="0" number="284"/>
-						<line hits="0" number="285"/>
-						<line hits="0" number="286"/>
-						<line hits="1" number="288"/>
-						<line hits="0" number="296"/>
-						<line hits="0" number="297"/>
-						<line hits="0" number="298"/>
-						<line hits="0" number="299"/>
-						<line hits="1" number="301"/>
-						<line hits="0" number="312"/>
-						<line hits="0" number="313"/>
-						<line hits="0" number="314"/>
-						<line hits="0" number="315"/>
-						<line hits="0" number="316"/>
-						<line hits="0" number="321"/>
-						<line hits="0" number="322"/>
-						<line hits="0" number="323"/>
-						<line hits="0" number="324"/>
-						<line hits="0" number="325"/>
-						<line hits="0" number="326"/>
-						<line hits="0" number="330"/>
-						<line hits="0" number="331"/>
-						<line hits="0" number="332"/>
-						<line hits="0" number="333"/>
-						<line hits="0" number="334"/>
-						<line hits="0" number="335"/>
-						<line hits="0" number="341"/>
-						<line hits="0" number="342"/>
-						<line hits="0" number="343"/>
-						<line hits="0" number="344"/>
-						<line hits="0" number="345"/>
-						<line hits="0" number="346"/>
-						<line hits="0" number="347"/>
-						<line hits="0" number="348"/>
-						<line hits="1" number="350"/>
-						<line hits="0" number="358"/>
-						<line hits="0" number="359"/>
-						<line hits="0" number="360"/>
-						<line hits="0" number="361"/>
-						<line hits="0" number="362"/>
-						<line hits="1" number="364"/>
-						<line hits="0" number="373"/>
-						<line hits="0" number="374"/>
-						<line hits="0" number="375"/>
-						<line hits="0" number="376"/>
-						<line hits="0" number="379"/>
-						<line hits="0" number="380"/>
-						<line hits="0" number="381"/>
-						<line hits="0" number="382"/>
-						<line hits="1" number="384"/>
-						<line hits="0" number="394"/>
-						<line hits="0" number="395"/>
-						<line hits="0" number="396"/>
-						<line hits="0" number="399"/>
-						<line hits="0" number="400"/>
-						<line hits="0" number="401"/>
-						<line hits="0" number="402"/>
-						<line hits="0" number="405"/>
-						<line hits="0" number="406"/>
-						<line hits="0" number="407"/>
-						<line hits="0" number="408"/>
-						<line hits="0" number="411"/>
-						<line hits="0" number="412"/>
-						<line hits="0" number="413"/>
-						<line hits="0" number="414"/>
-						<line hits="1" number="416"/>
-						<line hits="0" number="427"/>
-						<line hits="0" number="428"/>
-						<line hits="0" number="429"/>
-						<line hits="0" number="430"/>
-						<line hits="0" number="432"/>
-						<line hits="0" number="433"/>
-						<line hits="0" number="434"/>
-						<line hits="0" number="435"/>
-						<line hits="0" number="438"/>
-						<line hits="0" number="439"/>
-						<line hits="0" number="440"/>
-						<line hits="0" number="441"/>
-						<line hits="0" number="442"/>
-						<line hits="1" number="444"/>
-						<line hits="0" number="454"/>
-						<line hits="0" number="455"/>
-						<line hits="0" number="456"/>
-						<line hits="0" number="457"/>
-						<line hits="1" number="461"/>
-						<line hits="0" number="471"/>
-						<line hits="0" number="472"/>
-						<line hits="0" number="473"/>
-						<line hits="0" number="474"/>
-						<line hits="0" number="477"/>
-						<line hits="0" number="478"/>
-						<line hits="0" number="479"/>
-						<line hits="0" number="480"/>
-						<line hits="0" number="481"/>
-						<line hits="1" number="483"/>
-						<line hits="0" number="491"/>
-						<line hits="0" number="492"/>
-						<line hits="0" number="493"/>
-						<line hits="0" number="494"/>
-						<line hits="0" number="495"/>
-						<line hits="0" number="497"/>
-						<line hits="0" number="498"/>
-						<line hits="1" number="500"/>
-						<line hits="0" number="505"/>
-						<line hits="0" number="506"/>
-						<line hits="0" number="507"/>
-						<line hits="1" number="511"/>
-						<line hits="0" number="516"/>
-						<line hits="0" number="517"/>
-						<line hits="0" number="518"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="Controller_test.py" line-rate="1" name="Controller_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="109"/>
-						<line hits="1" number="112"/>
-						<line hits="1" number="118"/>
-						<line hits="1" number="127"/>
-						<line hits="1" number="128"/>
-						<line hits="1" number="135"/>
-						<line hits="1" number="136"/>
-						<line hits="1" number="137"/>
-						<line hits="1" number="139"/>
-						<line hits="1" number="140"/>
-						<line hits="1" number="143"/>
-						<line hits="1" number="144"/>
-						<line hits="1" number="149"/>
-						<line hits="1" number="150"/>
-						<line hits="1" number="151"/>
-						<line hits="1" number="153"/>
-						<line hits="1" number="154"/>
-						<line hits="1" number="157"/>
-						<line hits="1" number="158"/>
-						<line hits="1" number="163"/>
-						<line hits="1" number="164"/>
-						<line hits="1" number="165"/>
-						<line hits="1" number="167"/>
-						<line hits="1" number="168"/>
-						<line hits="1" number="171"/>
-						<line hits="1" number="172"/>
-						<line hits="1" number="177"/>
-						<line hits="1" number="178"/>
-						<line hits="1" number="179"/>
-						<line hits="1" number="181"/>
-						<line hits="1" number="182"/>
-						<line hits="1" number="185"/>
-						<line hits="1" number="186"/>
-						<line hits="1" number="191"/>
-						<line hits="1" number="192"/>
-						<line hits="1" number="193"/>
-						<line hits="1" number="195"/>
-						<line hits="1" number="196"/>
-						<line hits="1" number="199"/>
-						<line hits="1" number="200"/>
-						<line hits="1" number="204"/>
-						<line hits="1" number="205"/>
-						<line hits="1" number="206"/>
-						<line hits="1" number="208"/>
-						<line hits="1" number="209"/>
-						<line hits="1" number="212"/>
-						<line hits="1" number="213"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="Metadata_test.py" line-rate="1" name="Metadata_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="1"/>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="79"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="ObservatoryMetadata_test.py" line-rate="1" name="ObservatoryMetadata_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="48"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="67"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="69"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="StreamConverter_test.py" line-rate="1" name="StreamConverter_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="12"/>
-						<line hits="1" number="13"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="16"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="22"/>
-						<line hits="1" number="23"/>
-						<line hits="1" number="26"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="79"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="87"/>
-						<line hits="1" number="88"/>
-						<line hits="1" number="89"/>
-						<line hits="1" number="90"/>
-						<line hits="1" number="91"/>
-						<line hits="1" number="92"/>
-						<line hits="1" number="93"/>
-						<line hits="1" number="94"/>
-						<line hits="1" number="95"/>
-						<line hits="1" number="102"/>
-						<line hits="1" number="111"/>
-						<line hits="1" number="118"/>
-						<line hits="1" number="123"/>
-						<line hits="1" number="124"/>
-						<line hits="1" number="125"/>
-						<line hits="1" number="126"/>
-						<line hits="1" number="127"/>
-						<line hits="1" number="128"/>
-						<line hits="1" number="129"/>
-						<line hits="1" number="130"/>
-						<line hits="1" number="131"/>
-						<line hits="1" number="132"/>
-						<line hits="1" number="137"/>
-						<line hits="1" number="143"/>
-						<line hits="1" number="148"/>
-						<line hits="1" number="149"/>
-						<line hits="1" number="150"/>
-						<line hits="1" number="151"/>
-						<line hits="1" number="152"/>
-						<line hits="1" number="153"/>
-						<line hits="1" number="154"/>
-						<line hits="1" number="155"/>
-						<line hits="1" number="156"/>
-						<line hits="1" number="157"/>
-						<line hits="1" number="162"/>
-						<line hits="1" number="169"/>
-						<line hits="1" number="175"/>
-						<line hits="1" number="176"/>
-						<line hits="1" number="177"/>
-						<line hits="1" number="178"/>
-						<line hits="1" number="179"/>
-						<line hits="1" number="180"/>
-						<line hits="1" number="181"/>
-						<line hits="1" number="182"/>
-						<line hits="1" number="183"/>
-						<line hits="1" number="184"/>
-						<line hits="1" number="191"/>
-						<line hits="1" number="198"/>
-						<line hits="1" number="203"/>
-						<line hits="1" number="210"/>
-						<line hits="1" number="216"/>
-						<line hits="1" number="217"/>
-						<line hits="1" number="218"/>
-						<line hits="1" number="219"/>
-						<line hits="1" number="220"/>
-						<line hits="1" number="221"/>
-						<line hits="1" number="222"/>
-						<line hits="1" number="223"/>
-						<line hits="1" number="224"/>
-						<line hits="1" number="225"/>
-						<line hits="1" number="232"/>
-						<line hits="1" number="235"/>
-						<line hits="1" number="244"/>
-						<line hits="1" number="255"/>
-						<line hits="1" number="256"/>
-						<line hits="1" number="257"/>
-						<line hits="1" number="258"/>
-						<line hits="1" number="259"/>
-						<line hits="1" number="260"/>
-						<line hits="1" number="261"/>
-						<line hits="1" number="262"/>
-						<line hits="1" number="263"/>
-						<line hits="1" number="270"/>
-						<line hits="1" number="271"/>
-						<line hits="1" number="272"/>
-						<line hits="1" number="273"/>
-						<line hits="1" number="274"/>
-						<line hits="1" number="275"/>
-						<line hits="1" number="276"/>
-						<line hits="1" number="277"/>
-						<line hits="1" number="286"/>
-						<line hits="1" number="298"/>
-						<line hits="1" number="299"/>
-						<line hits="1" number="300"/>
-						<line hits="1" number="303"/>
-						<line hits="1" number="306"/>
-						<line hits="1" number="309"/>
-						<line hits="1" number="312"/>
-						<line hits="1" number="313"/>
-						<line hits="1" number="314"/>
-						<line hits="1" number="316"/>
-						<line hits="1" number="324"/>
-						<line hits="1" number="325"/>
-						<line hits="1" number="326"/>
-						<line hits="1" number="329"/>
-						<line hits="1" number="332"/>
-						<line hits="1" number="333"/>
-						<line hits="1" number="336"/>
-						<line hits="1" number="337"/>
-						<line hits="1" number="338"/>
-						<line hits="1" number="339"/>
-						<line hits="1" number="340"/>
-						<line hits="1" number="343"/>
-						<line hits="1" number="346"/>
-						<line hits="1" number="362"/>
-						<line hits="1" number="363"/>
-						<line hits="1" number="364"/>
-						<line hits="1" number="365"/>
-						<line hits="1" number="366"/>
-						<line hits="1" number="367"/>
-						<line hits="1" number="368"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="TimeseriesUtility_test.py" line-rate="1" name="TimeseriesUtility_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="22"/>
-						<line hits="1" number="23"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="79"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="83"/>
-						<line hits="1" number="85"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="87"/>
-						<line hits="1" number="89"/>
-						<line hits="1" number="92"/>
-						<line hits="1" number="97"/>
-						<line hits="1" number="103"/>
-						<line hits="1" number="105"/>
-						<line hits="1" number="107"/>
-						<line hits="1" number="109"/>
-						<line hits="1" number="110"/>
-						<line hits="1" number="111"/>
-						<line hits="1" number="114"/>
-						<line hits="1" number="119"/>
-						<line hits="1" number="121"/>
-						<line hits="1" number="123"/>
-						<line hits="1" number="125"/>
-						<line hits="1" number="126"/>
-						<line hits="1" number="127"/>
-						<line hits="1" number="128"/>
-						<line hits="1" number="129"/>
-						<line hits="1" number="132"/>
-						<line hits="1" number="137"/>
-						<line hits="1" number="162"/>
-						<line hits="1" number="164"/>
-						<line hits="1" number="165"/>
-						<line hits="1" number="166"/>
-						<line hits="1" number="168"/>
-						<line hits="1" number="169"/>
-						<line hits="1" number="170"/>
-						<line hits="1" number="173"/>
-						<line hits="1" number="176"/>
-						<line hits="1" number="182"/>
-						<line hits="1" number="184"/>
-						<line hits="1" number="186"/>
-						<line hits="1" number="187"/>
-						<line hits="1" number="188"/>
-						<line hits="1" number="189"/>
-						<line hits="1" number="191"/>
-						<line hits="1" number="198"/>
-						<line hits="1" number="205"/>
-						<line hits="1" number="215"/>
-						<line hits="1" number="218"/>
-						<line hits="1" number="219"/>
-						<line hits="1" number="226"/>
-						<line hits="1" number="228"/>
-						<line hits="1" number="230"/>
-						<line hits="1" number="231"/>
-						<line hits="1" number="233"/>
-						<line hits="1" number="234"/>
-						<line hits="1" number="235"/>
-						<line hits="1" number="238"/>
-						<line hits="1" number="242"/>
-						<line hits="1" number="247"/>
-						<line hits="1" number="250"/>
-						<line hits="1" number="251"/>
-						<line hits="1" number="258"/>
-						<line hits="1" number="260"/>
-						<line hits="1" number="262"/>
-						<line hits="1" number="263"/>
-						<line hits="1" number="265"/>
-						<line hits="1" number="266"/>
-						<line hits="1" number="267"/>
-						<line hits="1" number="270"/>
-						<line hits="1" number="274"/>
-						<line hits="1" number="279"/>
-						<line hits="1" number="284"/>
-						<line hits="1" number="285"/>
-						<line hits="1" number="286"/>
-						<line hits="1" number="287"/>
-						<line hits="1" number="288"/>
-						<line hits="1" number="289"/>
-						<line hits="1" number="290"/>
-						<line hits="1" number="291"/>
-						<line hits="1" number="292"/>
-						<line hits="1" number="293"/>
-						<line hits="1" number="294"/>
-						<line hits="1" number="295"/>
-						<line hits="1" number="296"/>
-						<line hits="1" number="297"/>
-						<line hits="1" number="298"/>
-						<line hits="1" number="299"/>
-						<line hits="1" number="300"/>
-						<line hits="1" number="302"/>
-						<line hits="1" number="304"/>
-						<line hits="1" number="306"/>
-						<line hits="1" number="307"/>
-						<line hits="1" number="308"/>
-						<line hits="1" number="309"/>
-						<line hits="1" number="310"/>
-						<line hits="1" number="311"/>
-						<line hits="1" number="314"/>
-						<line hits="1" number="316"/>
-						<line hits="1" number="317"/>
-						<line hits="1" number="318"/>
-						<line hits="1" number="319"/>
-						<line hits="1" number="320"/>
-						<line hits="1" number="321"/>
-						<line hits="1" number="322"/>
-						<line hits="1" number="323"/>
-						<line hits="1" number="324"/>
-						<line hits="1" number="325"/>
-						<line hits="1" number="326"/>
-						<line hits="1" number="327"/>
-						<line hits="1" number="328"/>
-						<line hits="1" number="330"/>
-						<line hits="1" number="331"/>
-						<line hits="1" number="332"/>
-						<line hits="1" number="333"/>
-						<line hits="1" number="334"/>
-						<line hits="1" number="335"/>
-						<line hits="1" number="336"/>
-						<line hits="1" number="337"/>
-						<line hits="1" number="340"/>
-						<line hits="1" number="343"/>
-						<line hits="1" number="344"/>
-						<line hits="1" number="345"/>
-						<line hits="1" number="346"/>
-						<line hits="1" number="351"/>
-						<line hits="1" number="352"/>
-						<line hits="1" number="353"/>
-						<line hits="1" number="355"/>
-						<line hits="1" number="356"/>
-						<line hits="1" number="357"/>
-						<line hits="1" number="358"/>
-						<line hits="1" number="360"/>
-						<line hits="1" number="361"/>
-						<line hits="1" number="362"/>
-						<line hits="1" number="365"/>
-						<line hits="1" number="368"/>
-						<line hits="1" number="369"/>
-						<line hits="1" number="370"/>
-						<line hits="1" number="373"/>
-						<line hits="1" number="378"/>
-						<line hits="1" number="379"/>
-						<line hits="1" number="380"/>
-						<line hits="1" number="382"/>
-						<line hits="1" number="387"/>
-						<line hits="1" number="388"/>
-						<line hits="1" number="389"/>
-						<line hits="1" number="391"/>
-						<line hits="1" number="396"/>
-						<line hits="1" number="397"/>
-						<line hits="1" number="398"/>
-						<line hits="1" number="400"/>
-						<line hits="1" number="405"/>
-						<line hits="1" number="406"/>
-						<line hits="1" number="407"/>
-						<line hits="1" number="409"/>
-						<line hits="1" number="414"/>
-						<line hits="1" number="415"/>
-						<line hits="1" number="416"/>
-						<line hits="1" number="418"/>
-						<line hits="1" number="423"/>
-						<line hits="1" number="424"/>
-						<line hits="1" number="425"/>
-						<line hits="1" number="428"/>
-						<line hits="1" number="434"/>
-						<line hits="1" number="437"/>
-						<line hits="1" number="438"/>
-						<line hits="1" number="443"/>
-						<line hits="1" number="448"/>
-						<line hits="1" number="449"/>
-						<line hits="1" number="450"/>
-						<line hits="1" number="458"/>
-						<line hits="1" number="459"/>
-						<line hits="1" number="460"/>
-						<line hits="1" number="461"/>
-						<line hits="1" number="462"/>
-						<line hits="1" number="463"/>
-						<line hits="1" number="464"/>
-						<line hits="1" number="465"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="Util_test.py" line-rate="0.9318" name="Util_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="13"/>
-						<line hits="1" number="14"/>
-						<line hits="0" number="15"/>
-						<line hits="1" number="16"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="32"/>
-						<line hits="0" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="37"/>
-						<line hits="0" number="38"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="48"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="67"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="WebService_test.py" line-rate="0.9451" name="WebService_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="35"/>
-						<line hits="0" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="0" number="39"/>
-						<line hits="0" number="40"/>
-						<line hits="0" number="41"/>
-						<line hits="0" number="42"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="48"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="79"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="83"/>
-						<line hits="1" number="89"/>
-						<line hits="1" number="90"/>
-						<line hits="1" number="97"/>
-						<line hits="1" number="98"/>
-						<line hits="1" number="101"/>
-						<line hits="1" number="108"/>
-						<line hits="1" number="109"/>
-						<line hits="1" number="116"/>
-						<line hits="1" number="117"/>
-						<line hits="1" number="118"/>
-						<line hits="1" number="119"/>
-						<line hits="1" number="120"/>
-						<line hits="1" number="121"/>
-						<line hits="1" number="122"/>
-						<line hits="1" number="124"/>
-						<line hits="1" number="125"/>
-						<line hits="1" number="126"/>
-						<line hits="1" number="127"/>
-						<line hits="1" number="128"/>
-						<line hits="1" number="129"/>
-						<line hits="1" number="130"/>
-						<line hits="1" number="131"/>
-						<line hits="1" number="132"/>
-						<line hits="1" number="133"/>
-						<line hits="1" number="134"/>
-						<line hits="1" number="135"/>
-						<line hits="1" number="138"/>
-						<line hits="1" number="144"/>
-						<line hits="1" number="146"/>
-						<line hits="1" number="147"/>
-						<line hits="1" number="148"/>
-						<line hits="1" number="149"/>
-						<line hits="1" number="151"/>
-						<line hits="1" number="152"/>
-						<line hits="1" number="153"/>
-						<line hits="1" number="154"/>
-						<line hits="1" number="156"/>
-						<line hits="1" number="157"/>
-						<line hits="1" number="158"/>
-						<line hits="1" number="159"/>
-						<line hits="1" number="161"/>
-						<line hits="1" number="162"/>
-						<line hits="1" number="163"/>
-						<line hits="1" number="164"/>
-						<line hits="1" number="165"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="algorithm_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/AdjustedAlgorithm_test.py" line-rate="1" name="AdjustedAlgorithm_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="1"/>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="86"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/Algorithm_test.py" line-rate="1" name="Algorithm_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="13"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="26"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="28"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/AverageAlgorithm_test.py" line-rate="1" name="AverageAlgorithm_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="1"/>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="22"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="26"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="70"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="83"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="94"/>
-						<line hits="1" number="95"/>
-						<line hits="1" number="98"/>
-						<line hits="1" number="99"/>
-						<line hits="1" number="100"/>
-						<line hits="1" number="101"/>
-						<line hits="1" number="102"/>
-						<line hits="1" number="105"/>
-						<line hits="1" number="106"/>
-						<line hits="1" number="107"/>
-						<line hits="1" number="110"/>
-						<line hits="1" number="111"/>
-						<line hits="1" number="112"/>
-						<line hits="1" number="116"/>
-						<line hits="1" number="117"/>
-						<line hits="1" number="120"/>
-						<line hits="1" number="122"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/FilterAlgorithm_test.py" line-rate="1" name="FilterAlgorithm_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="1"/>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="70"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="79"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="83"/>
-						<line hits="1" number="85"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="87"/>
-						<line hits="1" number="90"/>
-						<line hits="1" number="94"/>
-						<line hits="1" number="111"/>
-						<line hits="1" number="112"/>
-						<line hits="1" number="114"/>
-						<line hits="1" number="115"/>
-						<line hits="1" number="116"/>
-						<line hits="1" number="118"/>
-						<line hits="1" number="119"/>
-						<line hits="1" number="120"/>
-						<line hits="1" number="122"/>
-						<line hits="1" number="123"/>
-						<line hits="1" number="124"/>
-						<line hits="1" number="126"/>
-						<line hits="1" number="127"/>
-						<line hits="1" number="128"/>
-						<line hits="1" number="131"/>
-						<line hits="1" number="135"/>
-						<line hits="1" number="156"/>
-						<line hits="1" number="157"/>
-						<line hits="1" number="159"/>
-						<line hits="1" number="160"/>
-						<line hits="1" number="161"/>
-						<line hits="1" number="163"/>
-						<line hits="1" number="164"/>
-						<line hits="1" number="165"/>
-						<line hits="1" number="167"/>
-						<line hits="1" number="168"/>
-						<line hits="1" number="169"/>
-						<line hits="1" number="171"/>
-						<line hits="1" number="172"/>
-						<line hits="1" number="173"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/SQDistAlgorithm_test.py" line-rate="1" name="SQDistAlgorithm_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="1"/>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="23"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="84"/>
-						<line hits="1" number="85"/>
-						<line hits="1" number="98"/>
-						<line hits="1" number="103"/>
-						<line hits="1" number="108"/>
-						<line hits="1" number="129"/>
-						<line hits="1" number="130"/>
-						<line hits="1" number="144"/>
-						<line hits="1" number="163"/>
-						<line hits="1" number="169"/>
-						<line hits="1" number="191"/>
-						<line hits="1" number="192"/>
-						<line hits="1" number="206"/>
-						<line hits="1" number="212"/>
-						<line hits="1" number="231"/>
-						<line hits="1" number="253"/>
-						<line hits="1" number="254"/>
-						<line hits="1" number="268"/>
-						<line hits="1" number="274"/>
-						<line hits="1" number="293"/>
-						<line hits="1" number="314"/>
-						<line hits="1" number="321"/>
-						<line hits="1" number="322"/>
-						<line hits="1" number="323"/>
-						<line hits="1" number="324"/>
-						<line hits="1" number="325"/>
-						<line hits="1" number="328"/>
-						<line hits="1" number="329"/>
-						<line hits="1" number="330"/>
-						<line hits="1" number="331"/>
-						<line hits="1" number="334"/>
-						<line hits="1" number="335"/>
-						<line hits="1" number="338"/>
-						<line hits="1" number="339"/>
-						<line hits="1" number="340"/>
-						<line hits="1" number="343"/>
-						<line hits="1" number="367"/>
-						<line hits="1" number="374"/>
-						<line hits="1" number="377"/>
-						<line hits="1" number="380"/>
-						<line hits="1" number="385"/>
-						<line hits="1" number="386"/>
-						<line hits="1" number="389"/>
-						<line hits="1" number="413"/>
-						<line hits="1" number="416"/>
-						<line hits="1" number="422"/>
-						<line hits="1" number="430"/>
-						<line hits="1" number="436"/>
-						<line hits="1" number="438"/>
-						<line hits="1" number="440"/>
-						<line hits="1" number="442"/>
-						<line hits="1" number="448"/>
-						<line hits="1" number="454"/>
-						<line hits="1" number="460"/>
-						<line hits="1" number="466"/>
-						<line hits="1" number="472"/>
-						<line hits="1" number="480"/>
-						<line hits="1" number="481"/>
-						<line hits="1" number="488"/>
-						<line hits="1" number="512"/>
-						<line hits="1" number="518"/>
-						<line hits="1" number="524"/>
-						<line hits="1" number="532"/>
-						<line hits="1" number="540"/>
-						<line hits="1" number="541"/>
-						<line hits="1" number="546"/>
-						<line hits="1" number="570"/>
-						<line hits="1" number="576"/>
-						<line hits="1" number="582"/>
-						<line hits="1" number="590"/>
-						<line hits="1" number="591"/>
-						<line hits="1" number="598"/>
-						<line hits="1" number="622"/>
-						<line hits="1" number="628"/>
-						<line hits="1" number="634"/>
-						<line hits="1" number="642"/>
-						<line hits="1" number="643"/>
-						<line hits="1" number="644"/>
-						<line hits="1" number="655"/>
-						<line hits="1" number="679"/>
-						<line hits="1" number="685"/>
-						<line hits="1" number="691"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/XYZAlgorithm_test.py" line-rate="1" name="XYZAlgorithm_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="16"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="48"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="67"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="70"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="84"/>
-						<line hits="1" number="85"/>
-						<line hits="1" number="87"/>
-						<line hits="1" number="89"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="algorithm_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="0.9444" name="edge_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="edge_test/EdgeFactory_test.py" line-rate="0.8919" name="EdgeFactory_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="22"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="50"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="70"/>
-						<line hits="0" number="75"/>
-						<line hits="0" number="76"/>
-						<line hits="0" number="84"/>
-						<line hits="0" number="89"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="edge_test/MiniSeedFactory_test.py" line-rate="0.9481" name="MiniSeedFactory_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="50"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="79"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="84"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="87"/>
-						<line hits="1" number="89"/>
-						<line hits="1" number="90"/>
-						<line hits="1" number="91"/>
-						<line hits="1" number="93"/>
-						<line hits="1" number="94"/>
-						<line hits="1" number="95"/>
-						<line hits="1" number="96"/>
-						<line hits="1" number="99"/>
-						<line hits="1" number="104"/>
-						<line hits="1" number="105"/>
-						<line hits="1" number="106"/>
-						<line hits="1" number="107"/>
-						<line hits="1" number="108"/>
-						<line hits="1" number="109"/>
-						<line hits="1" number="113"/>
-						<line hits="0" number="118"/>
-						<line hits="0" number="119"/>
-						<line hits="0" number="127"/>
-						<line hits="0" number="132"/>
-						<line hits="1" number="139"/>
-						<line hits="1" number="161"/>
-						<line hits="1" number="162"/>
-						<line hits="1" number="163"/>
-						<line hits="1" number="164"/>
-						<line hits="1" number="165"/>
-						<line hits="1" number="166"/>
-						<line hits="1" number="167"/>
-						<line hits="1" number="168"/>
-						<line hits="1" number="169"/>
-						<line hits="1" number="170"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="edge_test/RawInputClient_test.py" line-rate="1" name="RawInputClient_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="16"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="22"/>
-						<line hits="1" number="23"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="26"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="76"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="edge_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="iaga2002_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="iaga2002_test/IAGA2002Factory_test.py" line-rate="1" name="IAGA2002Factory_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="13"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="15"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="iaga2002_test/IAGA2002Parser_test.py" line-rate="1" name="IAGA2002Parser_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="44"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="67"/>
-						<line hits="1" number="70"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="93"/>
-						<line hits="1" number="94"/>
-						<line hits="1" number="97"/>
-						<line hits="1" number="100"/>
-						<line hits="1" number="103"/>
-						<line hits="1" number="110"/>
-						<line hits="1" number="111"/>
-						<line hits="1" number="112"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="iaga2002_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="imfjson_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="imfjson_test/IMFJSONWriter_test.py" line-rate="1" name="IMFJSONWriter_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="9"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="13"/>
-						<line hits="1" number="14"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="26"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="50"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="70"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="83"/>
-						<line hits="1" number="84"/>
-						<line hits="1" number="85"/>
-						<line hits="1" number="86"/>
-						<line hits="1" number="89"/>
-						<line hits="1" number="92"/>
-						<line hits="1" number="93"/>
-						<line hits="1" number="94"/>
-						<line hits="1" number="98"/>
-						<line hits="1" number="99"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="imfjson_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="imfv122_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="imfv122_test/IMFV122Parser_test.py" line-rate="1" name="IMFV122Parser_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="11"/>
-						<line hits="1" number="12"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="16"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="22"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="28"/>
-						<line hits="1" number="29"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="50"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="69"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="74"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-						<line hits="1" number="79"/>
-						<line hits="1" number="80"/>
-						<line hits="1" number="81"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="83"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="imfv122_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="imfv283_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="imfv283_test/IMFV283Parser_test.py" line-rate="1" name="IMFV283Parser_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="2"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="10"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="25"/>
-						<line hits="1" number="31"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="45"/>
-						<line hits="1" number="50"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="59"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="63"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="70"/>
-						<line hits="1" number="71"/>
-						<line hits="1" number="72"/>
-						<line hits="1" number="73"/>
-						<line hits="1" number="76"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="78"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="imfv283_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="pcdcp_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="pcdcp_test/PCDCPFactory_test.py" line-rate="1" name="PCDCPFactory_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="6"/>
-						<line hits="1" number="8"/>
-						<line hits="1" number="15"/>
-						<line hits="1" number="24"/>
-						<line hits="1" number="30"/>
-						<line hits="1" number="32"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="34"/>
-						<line hits="1" number="35"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="37"/>
-						<line hits="1" number="38"/>
-						<line hits="1" number="39"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="52"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="55"/>
-						<line hits="1" number="56"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="58"/>
-						<line hits="1" number="59"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="pcdcp_test/PCDCPParser_test.py" line-rate="1" name="PCDCPParser_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="3"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="7"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="36"/>
-						<line hits="1" number="42"/>
-						<line hits="1" number="43"/>
-						<line hits="1" number="47"/>
-						<line hits="1" number="48"/>
-						<line hits="1" number="49"/>
-						<line hits="1" number="50"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="60"/>
-						<line hits="1" number="61"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="66"/>
-						<line hits="1" number="67"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="69"/>
-					</lines>
-				</class>
-				<class branch-rate="0" complexity="0" filename="pcdcp_test/__init__.py" line-rate="1" name="__init__.py">
-					<methods/>
-					<lines/>
-				</class>
-			</classes>
-		</package>
-		<package branch-rate="0" complexity="0" line-rate="1" name="residual_test">
-			<classes>
-				<class branch-rate="0" complexity="0" filename="residual_test/residual_test.py" line-rate="1" name="residual_test.py">
-					<methods/>
-					<lines>
-						<line hits="1" number="1"/>
-						<line hits="1" number="2"/>
-						<line hits="1" number="4"/>
-						<line hits="1" number="5"/>
-						<line hits="1" number="13"/>
-						<line hits="1" number="17"/>
-						<line hits="1" number="18"/>
-						<line hits="1" number="19"/>
-						<line hits="1" number="20"/>
-						<line hits="1" number="21"/>
-						<line hits="1" number="27"/>
-						<line hits="1" number="33"/>
-						<line hits="1" number="40"/>
-						<line hits="1" number="41"/>
-						<line hits="1" number="46"/>
-						<line hits="1" number="51"/>
-						<line hits="1" number="53"/>
-						<line hits="1" number="54"/>
-						<line hits="1" number="57"/>
-						<line hits="1" number="62"/>
-						<line hits="1" number="64"/>
-						<line hits="1" number="65"/>
-						<line hits="1" number="68"/>
-						<line hits="1" number="75"/>
-						<line hits="1" number="77"/>
-						<line hits="1" number="82"/>
-						<line hits="1" number="89"/>
-						<line hits="1" number="91"/>
-						<line hits="1" number="98"/>
-						<line hits="1" number="104"/>
-						<line hits="1" number="109"/>
-						<line hits="1" number="110"/>
-						<line hits="1" number="117"/>
-						<line hits="1" number="123"/>
-						<line hits="1" number="128"/>
-						<line hits="1" number="129"/>
-					</lines>
-				</class>
-			</classes>
-		</package>
-	</packages>
-</coverage>
-- 
GitLab