IV dosing: A1 for PK models and A1_f (full TMDD models) or A1_t (for QSS models)
+
PO/SC dosing: Aa
+
For custom-made models, please consult your tM&S expert
+ >
+ );
+
+ const sROHelp = (
+
The receptor occupancy for SM and LM (calc_RO) is calculated from the total drug concentration (typcially C1 or Ce), the total target concentration and the KD value of drug-target binding
+ );
+
+ const unboundHelp = (
+
For SM, the unbound concentration in plasma is calculated by multiplying the central drug concentration (typically C1) by fup (see Drug Target tab)
+ );
+
+ const bloodHelp = (
+
For SM, the total concentration in blood is calculated by dividing the central drug concentration (typically C1) by BP (see Drug Target tab)
+ );
+
+ const lagTimeHelp = (
+
Adds a tlag parameter to the model, which is the time delay between the dosing into the chosen compartment and the first observation of drug in this compartment
+
+
+ Name
+ Type
+ Lower Bound
+ Value
+ Upper Bound
+ Unit Changing the units does not update the PKPD values. The user is responsible for the correctness of the values and units.
+
+
+
+ {constVariables.length === 0 && (
+
+ No variables found
+
+ )}
+ {constVariables.map((variable) => (
+
+ ))}
+
+
+
+
+
+ );
+}
+
+export default ParametersTab;
diff --git a/frontend-v2/src/features/model/TranslationTab.tsx b/frontend-v2/src/features/model/TranslationTab.tsx
new file mode 100644
index 00000000..0002657b
--- /dev/null
+++ b/frontend-v2/src/features/model/TranslationTab.tsx
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CombinedModel, Project } from '../../app/backendApi';
+import { Control } from 'react-hook-form';
+
+interface Props {
+ model: CombinedModel;
+ project: Project;
+ control: Control;
+}
+
+const TranslationTab: React.FC = ({ model, project, control }: Props ) => {
+ return (
+
+
+
+ Site of AdminDefined in Model/Map Variables
+ Dose
+ Dose UnitDefault selection: mg/kg for preclinical, mg for clinical
+ Number of Doses
+ Start TimeStart time of the first dose
+ Dose DurationDuration of dosing. For IV bolus PO/SC dosing use the default value 0.0833 h
+ Dosing Interval
+ Time Unit
+
+ Add Dose Line Adding an additional dosing line allows defining complex dosing regimens (e.g. changing dosing frequency and/or dosing levels)
+
+
+
+
+ {protocols?.length === 0 && (
+
+ No protocols found
+
+ )}
+ {filteredProtocols?.map((protocol) => (
+
+ ))}
+
+
+
+
+ );
+};
+
+export default Protocols;
diff --git a/frontend-v2/src/hooks/useDirty.ts b/frontend-v2/src/hooks/useDirty.ts
new file mode 100644
index 00000000..2a504137
--- /dev/null
+++ b/frontend-v2/src/hooks/useDirty.ts
@@ -0,0 +1,18 @@
+import { useDispatch } from "react-redux";
+import { decrementDirtyCount, incrementDirtyCount } from "../features/main/mainSlice";
+import { useEffect, useState } from "react";
+
+function useDirty(isDirty: boolean) {
+ const dispatch = useDispatch();
+ useEffect(() => {
+ if (isDirty) {
+ dispatch(incrementDirtyCount())
+ return () => {
+ dispatch(decrementDirtyCount())
+ };
+ }
+
+ }, [isDirty]);
+}
+
+export default useDirty;
\ No newline at end of file
diff --git a/frontend-v2/src/hooks/usePrevious.ts b/frontend-v2/src/hooks/usePrevious.ts
new file mode 100644
index 00000000..638b9d3f
--- /dev/null
+++ b/frontend-v2/src/hooks/usePrevious.ts
@@ -0,0 +1,11 @@
+import { useEffect, useRef } from "react";
+
+function usePrevious(value: any) {
+ const ref = useRef();
+ useEffect(() => {
+ ref.current = value; //assign the value of ref to the argument
+ },[value]); //this code will run when the value of 'value' changes
+
+ return ref.current; //in the end, return the current ref value.
+}
+export default usePrevious;
\ No newline at end of file
diff --git a/frontend-v2/src/logo_pkpdapp_with_text.svg b/frontend-v2/src/logo_pkpdapp_with_text.svg
new file mode 100644
index 00000000..1b524776
--- /dev/null
+++ b/frontend-v2/src/logo_pkpdapp_with_text.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend-v2/src/setupProxy.js b/frontend-v2/src/setupProxy.js
new file mode 100644
index 00000000..606ea6e2
--- /dev/null
+++ b/frontend-v2/src/setupProxy.js
@@ -0,0 +1,11 @@
+const { createProxyMiddleware } = require('http-proxy-middleware');
+
+module.exports = function(app) {
+ const backend = createProxyMiddleware({
+ target: 'http://localhost:8000',
+ changeOrigin: true,
+ pathRewrite: { '^/backend': '/static' },
+ });
+ app.use('/api', backend);
+ app.use('/backend', backend);
+};
\ No newline at end of file
diff --git a/frontend-v2/yarn.lock b/frontend-v2/yarn.lock
index dd0cfb10..6a4756e4 100644
--- a/frontend-v2/yarn.lock
+++ b/frontend-v2/yarn.lock
@@ -29,33 +29,33 @@
jsonpointer "^5.0.0"
leven "^3.1.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39"
- integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
+ integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
dependencies:
- "@babel/highlight" "^7.18.6"
+ "@babel/highlight" "^7.22.5"
-"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5":
- version "7.21.7"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc"
- integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==
+"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255"
+ integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==
"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.5.tgz#92f753e8b9f96e15d4b398dbe2f25d1408c9c426"
- integrity sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89"
+ integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.21.4"
- "@babel/generator" "^7.21.5"
- "@babel/helper-compilation-targets" "^7.21.5"
- "@babel/helper-module-transforms" "^7.21.5"
- "@babel/helpers" "^7.21.5"
- "@babel/parser" "^7.21.5"
- "@babel/template" "^7.20.7"
- "@babel/traverse" "^7.21.5"
- "@babel/types" "^7.21.5"
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.5"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helpers" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -63,77 +63,77 @@
semver "^6.3.0"
"@babel/eslint-parser@^7.16.3":
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz#d79e822050f2de65d7f368a076846e7184234af7"
- integrity sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz#fa032503b9e2d188e25b1b95d29e8b8431042d78"
+ integrity sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==
dependencies:
"@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
eslint-visitor-keys "^2.1.0"
semver "^6.3.0"
-"@babel/generator@^7.21.5", "@babel/generator@^7.7.2":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f"
- integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==
+"@babel/generator@^7.22.5", "@babel/generator@^7.7.2":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7"
+ integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==
dependencies:
- "@babel/types" "^7.21.5"
+ "@babel/types" "^7.22.5"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
-"@babel/helper-annotate-as-pure@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
- integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
+"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
+ integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
dependencies:
- "@babel/types" "^7.18.6"
+ "@babel/types" "^7.22.5"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb"
- integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878"
+ integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==
dependencies:
- "@babel/types" "^7.21.5"
+ "@babel/types" "^7.22.5"
-"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366"
- integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==
+"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02"
+ integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==
dependencies:
- "@babel/compat-data" "^7.21.5"
- "@babel/helper-validator-option" "^7.21.0"
+ "@babel/compat-data" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
browserslist "^4.21.3"
lru-cache "^5.1.1"
semver "^6.3.0"
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.5.tgz#09a259305467d2020bd2492119ee1c1bc55029e9"
- integrity sha512-yNSEck9SuDvPTEUYm4BSXl6ZVC7yO5ZLEMAhG3v3zi7RDxyL/nQDemWWZmw4L0stPWwhpnznRRyJHPRcbXR2jw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-environment-visitor" "^7.21.5"
- "@babel/helper-function-name" "^7.21.0"
- "@babel/helper-member-expression-to-functions" "^7.21.5"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/helper-replace-supers" "^7.21.5"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
- "@babel/helper-split-export-declaration" "^7.18.6"
+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c"
+ integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-member-expression-to-functions" "^7.22.5"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
semver "^6.3.0"
-"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.5.tgz#4ce6ffaf497a241aa6c62192416b273987a8daa3"
- integrity sha512-1+DPMcln46eNAta/rPIqQYXYRGvQ/LRy6bRKnSt9Dzt/yLjNUbbsh+6yzD6fUHmtzc9kWvVnAhtcMSMyziHmUA==
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4"
+ integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
regexpu-core "^5.3.1"
semver "^6.3.0"
-"@babel/helper-define-polyfill-provider@^0.3.3":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a"
- integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==
+"@babel/helper-define-polyfill-provider@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8"
+ integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==
dependencies:
"@babel/helper-compilation-targets" "^7.17.7"
"@babel/helper-plugin-utils" "^7.16.7"
@@ -142,184 +142,174 @@
resolve "^1.14.2"
semver "^6.1.2"
-"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba"
- integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==
-
-"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
- integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
- dependencies:
- "@babel/template" "^7.20.7"
- "@babel/types" "^7.21.0"
-
-"@babel/helper-hoist-variables@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
- integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-member-expression-to-functions@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0"
- integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==
- dependencies:
- "@babel/types" "^7.21.5"
-
-"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af"
- integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==
- dependencies:
- "@babel/types" "^7.21.4"
-
-"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420"
- integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==
- dependencies:
- "@babel/helper-environment-visitor" "^7.21.5"
- "@babel/helper-module-imports" "^7.21.4"
- "@babel/helper-simple-access" "^7.21.5"
- "@babel/helper-split-export-declaration" "^7.18.6"
- "@babel/helper-validator-identifier" "^7.19.1"
- "@babel/template" "^7.20.7"
- "@babel/traverse" "^7.21.5"
- "@babel/types" "^7.21.5"
-
-"@babel/helper-optimise-call-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
- integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56"
- integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==
-
-"@babel/helper-remap-async-to-generator@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
- integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-wrap-function" "^7.18.9"
- "@babel/types" "^7.18.9"
-
-"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c"
- integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==
- dependencies:
- "@babel/helper-environment-visitor" "^7.21.5"
- "@babel/helper-member-expression-to-functions" "^7.21.5"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/template" "^7.20.7"
- "@babel/traverse" "^7.21.5"
- "@babel/types" "^7.21.5"
-
-"@babel/helper-simple-access@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee"
- integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==
- dependencies:
- "@babel/types" "^7.21.5"
-
-"@babel/helper-skip-transparent-expression-wrappers@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
- integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==
- dependencies:
- "@babel/types" "^7.20.0"
-
-"@babel/helper-split-export-declaration@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
- integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-string-parser@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd"
- integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==
-
-"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
- integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
-
-"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180"
- integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==
-
-"@babel/helper-wrap-function@^7.18.9":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3"
- integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==
- dependencies:
- "@babel/helper-function-name" "^7.19.0"
- "@babel/template" "^7.18.10"
- "@babel/traverse" "^7.20.5"
- "@babel/types" "^7.20.5"
-
-"@babel/helpers@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08"
- integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==
- dependencies:
- "@babel/template" "^7.20.7"
- "@babel/traverse" "^7.21.5"
- "@babel/types" "^7.21.5"
-
-"@babel/highlight@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
- integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
- dependencies:
- "@babel/helper-validator-identifier" "^7.18.6"
+"@babel/helper-environment-visitor@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
+ integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
+
+"@babel/helper-function-name@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
+ integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-member-expression-to-functions@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2"
+ integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
+ integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-module-transforms@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef"
+ integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-optimise-call-expression@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e"
+ integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
+ integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+
+"@babel/helper-remap-async-to-generator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2"
+ integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-wrap-function" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-replace-supers@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc"
+ integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-member-expression-to-functions" "^7.22.5"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
+ integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08"
+ integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
+ integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
+"@babel/helper-validator-identifier@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
+ integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
+"@babel/helper-validator-option@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac"
+ integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==
+
+"@babel/helper-wrap-function@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06"
+ integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==
+ dependencies:
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/helpers@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820"
+ integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/highlight@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
+ integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.5"
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.5.tgz#821bb520118fd25b982eaf8d37421cf5c64a312b"
- integrity sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==
-
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
- integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea"
+ integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1"
- integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e"
+ integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
- "@babel/plugin-proposal-optional-chaining" "^7.20.7"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-proposal-async-generator-functions@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326"
- integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca"
+ integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==
dependencies:
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-remap-async-to-generator" "^7.18.9"
- "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/plugin-transform-optional-chaining" "^7.22.5"
-"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6":
+"@babel/plugin-proposal-class-properties@^7.16.0":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
@@ -327,59 +317,18 @@
"@babel/helper-create-class-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-proposal-class-static-block@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d"
- integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.21.0"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-class-static-block" "^7.14.5"
-
"@babel/plugin-proposal-decorators@^7.16.4":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz#70e0c89fdcd7465c97593edb8f628ba6e4199d63"
- integrity sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.5.tgz#dc8cdda048e5aea947efda920e030199806b868d"
+ integrity sha512-h8hlezQ4dl6ixodgXkH8lUfcD7x+WAuIqPUjwGoItynrXOAv4a4Tci1zA/qjzQjjcl0v3QpLdc2LM6ZACQuY7A==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.21.0"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-replace-supers" "^7.20.7"
- "@babel/helper-split-export-declaration" "^7.18.6"
- "@babel/plugin-syntax-decorators" "^7.21.0"
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
+ "@babel/plugin-syntax-decorators" "^7.22.5"
-"@babel/plugin-proposal-dynamic-import@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94"
- integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/plugin-syntax-dynamic-import" "^7.8.3"
-
-"@babel/plugin-proposal-export-namespace-from@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203"
- integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
- "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-
-"@babel/plugin-proposal-json-strings@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b"
- integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/plugin-syntax-json-strings" "^7.8.3"
-
-"@babel/plugin-proposal-logical-assignment-operators@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83"
- integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==
- dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6":
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
@@ -387,7 +336,7 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6":
+"@babel/plugin-proposal-numeric-separator@^7.16.0":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75"
integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==
@@ -395,26 +344,7 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a"
- integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==
- dependencies:
- "@babel/compat-data" "^7.20.5"
- "@babel/helper-compilation-targets" "^7.20.7"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
- "@babel/plugin-transform-parameters" "^7.20.7"
-
-"@babel/plugin-proposal-optional-catch-binding@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb"
- integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-
-"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0":
+"@babel/plugin-proposal-optional-chaining@^7.16.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea"
integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==
@@ -423,7 +353,7 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6":
+"@babel/plugin-proposal-private-methods@^7.16.0":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea"
integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==
@@ -431,17 +361,22 @@
"@babel/helper-create-class-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-proposal-private-property-in-object@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc"
- integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==
+"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
+ version "7.21.0-placeholder-for-preset-env.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
+ integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
+
+"@babel/plugin-proposal-private-property-in-object@^7.21.11":
+ version "7.21.11"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c"
+ integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.18.6"
"@babel/helper-create-class-features-plugin" "^7.21.0"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e"
integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==
@@ -477,12 +412,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-decorators@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz#d2b3f31c3e86fa86e16bb540b7660c55bd7d0e78"
- integrity sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==
+"@babel/plugin-syntax-decorators@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz#329fe2907c73de184033775637dbbc507f09116a"
+ integrity sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-dynamic-import@^7.8.3":
version "7.8.3"
@@ -498,19 +433,26 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-syntax-flow@^7.18.6":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz#3e37fca4f06d93567c1cd9b75156422e90a67107"
- integrity sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==
+"@babel/plugin-syntax-flow@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859"
+ integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-import-assertions@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98"
+ integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-import-assertions@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4"
- integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==
+"@babel/plugin-syntax-import-attributes@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb"
+ integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==
dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":
version "7.10.4"
@@ -526,12 +468,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.21.4":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2"
- integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==
+"@babel/plugin-syntax-jsx@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918"
+ integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
@@ -589,366 +531,498 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8"
- integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==
+"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272"
+ integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-arrow-functions@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929"
- integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==
+"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
+ integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
dependencies:
- "@babel/helper-plugin-utils" "^7.21.5"
+ "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-async-to-generator@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354"
- integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==
+"@babel/plugin-transform-arrow-functions@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958"
+ integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==
dependencies:
- "@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-remap-async-to-generator" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-block-scoped-functions@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8"
- integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==
+"@babel/plugin-transform-async-generator-functions@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3"
+ integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-remap-async-to-generator" "^7.22.5"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
-"@babel/plugin-transform-block-scoping@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02"
- integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==
+"@babel/plugin-transform-async-to-generator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775"
+ integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-remap-async-to-generator" "^7.22.5"
-"@babel/plugin-transform-classes@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665"
- integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==
+"@babel/plugin-transform-block-scoped-functions@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024"
+ integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-compilation-targets" "^7.20.7"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.21.0"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-replace-supers" "^7.20.7"
- "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-block-scoping@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b"
+ integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-class-properties@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77"
+ integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-class-static-block@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba"
+ integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1"
+ integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44"
- integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==
+"@babel/plugin-transform-computed-properties@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869"
+ integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==
dependencies:
- "@babel/helper-plugin-utils" "^7.21.5"
- "@babel/template" "^7.20.7"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/template" "^7.22.5"
-"@babel/plugin-transform-destructuring@^7.21.3":
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401"
- integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==
+"@babel/plugin-transform-destructuring@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc"
+ integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8"
- integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==
+"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165"
+ integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-duplicate-keys@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e"
- integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==
+"@babel/plugin-transform-duplicate-keys@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285"
+ integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-exponentiation-operator@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd"
- integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==
+"@babel/plugin-transform-dynamic-import@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e"
+ integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-transform-exponentiation-operator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a"
+ integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-export-namespace-from@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b"
+ integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-transform-flow-strip-types@^7.16.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz#6aeca0adcb81dc627c8986e770bfaa4d9812aff5"
- integrity sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2"
+ integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-flow" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-flow" "^7.22.5"
-"@babel/plugin-transform-for-of@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc"
- integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==
+"@babel/plugin-transform-for-of@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f"
+ integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==
dependencies:
- "@babel/helper-plugin-utils" "^7.21.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-function-name@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0"
- integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==
+"@babel/plugin-transform-function-name@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143"
+ integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==
dependencies:
- "@babel/helper-compilation-targets" "^7.18.9"
- "@babel/helper-function-name" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-compilation-targets" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-literals@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc"
- integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==
+"@babel/plugin-transform-json-strings@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0"
+ integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
-"@babel/plugin-transform-member-expression-literals@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e"
- integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==
+"@babel/plugin-transform-literals@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920"
+ integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-amd@^7.20.11":
- version "7.20.11"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a"
- integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==
+"@babel/plugin-transform-logical-assignment-operators@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c"
+ integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==
dependencies:
- "@babel/helper-module-transforms" "^7.20.11"
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-"@babel/plugin-transform-modules-commonjs@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc"
- integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==
+"@babel/plugin-transform-member-expression-literals@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def"
+ integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==
dependencies:
- "@babel/helper-module-transforms" "^7.21.5"
- "@babel/helper-plugin-utils" "^7.21.5"
- "@babel/helper-simple-access" "^7.21.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-systemjs@^7.20.11":
- version "7.20.11"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e"
- integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==
+"@babel/plugin-transform-modules-amd@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526"
+ integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==
dependencies:
- "@babel/helper-hoist-variables" "^7.18.6"
- "@babel/helper-module-transforms" "^7.20.11"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-validator-identifier" "^7.19.1"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-umd@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9"
- integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==
+"@babel/plugin-transform-modules-commonjs@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa"
+ integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==
dependencies:
- "@babel/helper-module-transforms" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-simple-access" "^7.22.5"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8"
- integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==
+"@babel/plugin-transform-modules-systemjs@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496"
+ integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.20.5"
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
-"@babel/plugin-transform-new-target@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8"
- integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==
+"@babel/plugin-transform-modules-umd@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98"
+ integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-object-super@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c"
- integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f"
+ integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-replace-supers" "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3":
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db"
- integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==
+"@babel/plugin-transform-new-target@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d"
+ integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-property-literals@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
- integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==
+"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381"
+ integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-transform-numeric-separator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58"
+ integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-transform-object-rest-spread@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1"
+ integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==
+ dependencies:
+ "@babel/compat-data" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.22.5"
+
+"@babel/plugin-transform-object-super@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c"
+ integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.5"
+
+"@babel/plugin-transform-optional-catch-binding@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333"
+ integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-transform-optional-chaining@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0"
+ integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18"
+ integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-private-methods@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722"
+ integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-private-property-in-object@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32"
+ integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766"
+ integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-transform-react-constant-elements@^7.12.1":
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d"
- integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29"
+ integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415"
- integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==
+"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b"
+ integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-react-jsx-development@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5"
- integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==
+"@babel/plugin-transform-react-jsx-development@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87"
+ integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==
dependencies:
- "@babel/plugin-transform-react-jsx" "^7.18.6"
+ "@babel/plugin-transform-react-jsx" "^7.22.5"
-"@babel/plugin-transform-react-jsx@^7.18.6":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz#bd98f3b429688243e4fa131fe1cbb2ef31ce6f38"
- integrity sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==
+"@babel/plugin-transform-react-jsx@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416"
+ integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-module-imports" "^7.21.4"
- "@babel/helper-plugin-utils" "^7.21.5"
- "@babel/plugin-syntax-jsx" "^7.21.4"
- "@babel/types" "^7.21.5"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-jsx" "^7.22.5"
+ "@babel/types" "^7.22.5"
-"@babel/plugin-transform-react-pure-annotations@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844"
- integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==
+"@babel/plugin-transform-react-pure-annotations@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0"
+ integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-regenerator@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e"
- integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==
+"@babel/plugin-transform-regenerator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa"
+ integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==
dependencies:
- "@babel/helper-plugin-utils" "^7.21.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
regenerator-transform "^0.15.1"
-"@babel/plugin-transform-reserved-words@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a"
- integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==
+"@babel/plugin-transform-reserved-words@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb"
+ integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-transform-runtime@^7.16.4":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa"
- integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==
- dependencies:
- "@babel/helper-module-imports" "^7.21.4"
- "@babel/helper-plugin-utils" "^7.20.2"
- babel-plugin-polyfill-corejs2 "^0.3.3"
- babel-plugin-polyfill-corejs3 "^0.6.0"
- babel-plugin-polyfill-regenerator "^0.4.1"
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b"
+ integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ babel-plugin-polyfill-corejs2 "^0.4.3"
+ babel-plugin-polyfill-corejs3 "^0.8.1"
+ babel-plugin-polyfill-regenerator "^0.5.0"
semver "^6.3.0"
-"@babel/plugin-transform-shorthand-properties@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9"
- integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==
+"@babel/plugin-transform-shorthand-properties@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624"
+ integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-spread@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e"
- integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==
+"@babel/plugin-transform-spread@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b"
+ integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
-"@babel/plugin-transform-sticky-regex@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc"
- integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==
+"@babel/plugin-transform-sticky-regex@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa"
+ integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-template-literals@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e"
- integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==
+"@babel/plugin-transform-template-literals@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff"
+ integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-typeof-symbol@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0"
- integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==
+"@babel/plugin-transform-typeof-symbol@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34"
+ integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-typescript@^7.21.3":
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b"
- integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==
+"@babel/plugin-transform-typescript@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d"
+ integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-create-class-features-plugin" "^7.21.0"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-typescript" "^7.20.0"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-typescript" "^7.22.5"
-"@babel/plugin-transform-unicode-escapes@^7.21.5":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2"
- integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==
+"@babel/plugin-transform-unicode-escapes@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c"
+ integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==
dependencies:
- "@babel/helper-plugin-utils" "^7.21.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-unicode-regex@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca"
- integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==
+"@babel/plugin-transform-unicode-property-regex@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81"
+ integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-regex@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183"
+ integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-sets-regex@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91"
+ integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb"
- integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==
- dependencies:
- "@babel/compat-data" "^7.21.5"
- "@babel/helper-compilation-targets" "^7.21.5"
- "@babel/helper-plugin-utils" "^7.21.5"
- "@babel/helper-validator-option" "^7.21.0"
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7"
- "@babel/plugin-proposal-async-generator-functions" "^7.20.7"
- "@babel/plugin-proposal-class-properties" "^7.18.6"
- "@babel/plugin-proposal-class-static-block" "^7.21.0"
- "@babel/plugin-proposal-dynamic-import" "^7.18.6"
- "@babel/plugin-proposal-export-namespace-from" "^7.18.9"
- "@babel/plugin-proposal-json-strings" "^7.18.6"
- "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
- "@babel/plugin-proposal-numeric-separator" "^7.18.6"
- "@babel/plugin-proposal-object-rest-spread" "^7.20.7"
- "@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
- "@babel/plugin-proposal-optional-chaining" "^7.21.0"
- "@babel/plugin-proposal-private-methods" "^7.18.6"
- "@babel/plugin-proposal-private-property-in-object" "^7.21.0"
- "@babel/plugin-proposal-unicode-property-regex" "^7.18.6"
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e"
+ integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==
+ dependencies:
+ "@babel/compat-data" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5"
+ "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/plugin-syntax-class-properties" "^7.12.13"
"@babel/plugin-syntax-class-static-block" "^7.14.5"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
- "@babel/plugin-syntax-import-assertions" "^7.20.0"
+ "@babel/plugin-syntax-import-assertions" "^7.22.5"
+ "@babel/plugin-syntax-import-attributes" "^7.22.5"
"@babel/plugin-syntax-import-meta" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.3"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
@@ -959,44 +1033,61 @@
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
- "@babel/plugin-transform-arrow-functions" "^7.21.5"
- "@babel/plugin-transform-async-to-generator" "^7.20.7"
- "@babel/plugin-transform-block-scoped-functions" "^7.18.6"
- "@babel/plugin-transform-block-scoping" "^7.21.0"
- "@babel/plugin-transform-classes" "^7.21.0"
- "@babel/plugin-transform-computed-properties" "^7.21.5"
- "@babel/plugin-transform-destructuring" "^7.21.3"
- "@babel/plugin-transform-dotall-regex" "^7.18.6"
- "@babel/plugin-transform-duplicate-keys" "^7.18.9"
- "@babel/plugin-transform-exponentiation-operator" "^7.18.6"
- "@babel/plugin-transform-for-of" "^7.21.5"
- "@babel/plugin-transform-function-name" "^7.18.9"
- "@babel/plugin-transform-literals" "^7.18.9"
- "@babel/plugin-transform-member-expression-literals" "^7.18.6"
- "@babel/plugin-transform-modules-amd" "^7.20.11"
- "@babel/plugin-transform-modules-commonjs" "^7.21.5"
- "@babel/plugin-transform-modules-systemjs" "^7.20.11"
- "@babel/plugin-transform-modules-umd" "^7.18.6"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5"
- "@babel/plugin-transform-new-target" "^7.18.6"
- "@babel/plugin-transform-object-super" "^7.18.6"
- "@babel/plugin-transform-parameters" "^7.21.3"
- "@babel/plugin-transform-property-literals" "^7.18.6"
- "@babel/plugin-transform-regenerator" "^7.21.5"
- "@babel/plugin-transform-reserved-words" "^7.18.6"
- "@babel/plugin-transform-shorthand-properties" "^7.18.6"
- "@babel/plugin-transform-spread" "^7.20.7"
- "@babel/plugin-transform-sticky-regex" "^7.18.6"
- "@babel/plugin-transform-template-literals" "^7.18.9"
- "@babel/plugin-transform-typeof-symbol" "^7.18.9"
- "@babel/plugin-transform-unicode-escapes" "^7.21.5"
- "@babel/plugin-transform-unicode-regex" "^7.18.6"
+ "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+ "@babel/plugin-transform-arrow-functions" "^7.22.5"
+ "@babel/plugin-transform-async-generator-functions" "^7.22.5"
+ "@babel/plugin-transform-async-to-generator" "^7.22.5"
+ "@babel/plugin-transform-block-scoped-functions" "^7.22.5"
+ "@babel/plugin-transform-block-scoping" "^7.22.5"
+ "@babel/plugin-transform-class-properties" "^7.22.5"
+ "@babel/plugin-transform-class-static-block" "^7.22.5"
+ "@babel/plugin-transform-classes" "^7.22.5"
+ "@babel/plugin-transform-computed-properties" "^7.22.5"
+ "@babel/plugin-transform-destructuring" "^7.22.5"
+ "@babel/plugin-transform-dotall-regex" "^7.22.5"
+ "@babel/plugin-transform-duplicate-keys" "^7.22.5"
+ "@babel/plugin-transform-dynamic-import" "^7.22.5"
+ "@babel/plugin-transform-exponentiation-operator" "^7.22.5"
+ "@babel/plugin-transform-export-namespace-from" "^7.22.5"
+ "@babel/plugin-transform-for-of" "^7.22.5"
+ "@babel/plugin-transform-function-name" "^7.22.5"
+ "@babel/plugin-transform-json-strings" "^7.22.5"
+ "@babel/plugin-transform-literals" "^7.22.5"
+ "@babel/plugin-transform-logical-assignment-operators" "^7.22.5"
+ "@babel/plugin-transform-member-expression-literals" "^7.22.5"
+ "@babel/plugin-transform-modules-amd" "^7.22.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.22.5"
+ "@babel/plugin-transform-modules-systemjs" "^7.22.5"
+ "@babel/plugin-transform-modules-umd" "^7.22.5"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
+ "@babel/plugin-transform-new-target" "^7.22.5"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5"
+ "@babel/plugin-transform-numeric-separator" "^7.22.5"
+ "@babel/plugin-transform-object-rest-spread" "^7.22.5"
+ "@babel/plugin-transform-object-super" "^7.22.5"
+ "@babel/plugin-transform-optional-catch-binding" "^7.22.5"
+ "@babel/plugin-transform-optional-chaining" "^7.22.5"
+ "@babel/plugin-transform-parameters" "^7.22.5"
+ "@babel/plugin-transform-private-methods" "^7.22.5"
+ "@babel/plugin-transform-private-property-in-object" "^7.22.5"
+ "@babel/plugin-transform-property-literals" "^7.22.5"
+ "@babel/plugin-transform-regenerator" "^7.22.5"
+ "@babel/plugin-transform-reserved-words" "^7.22.5"
+ "@babel/plugin-transform-shorthand-properties" "^7.22.5"
+ "@babel/plugin-transform-spread" "^7.22.5"
+ "@babel/plugin-transform-sticky-regex" "^7.22.5"
+ "@babel/plugin-transform-template-literals" "^7.22.5"
+ "@babel/plugin-transform-typeof-symbol" "^7.22.5"
+ "@babel/plugin-transform-unicode-escapes" "^7.22.5"
+ "@babel/plugin-transform-unicode-property-regex" "^7.22.5"
+ "@babel/plugin-transform-unicode-regex" "^7.22.5"
+ "@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
"@babel/preset-modules" "^0.1.5"
- "@babel/types" "^7.21.5"
- babel-plugin-polyfill-corejs2 "^0.3.3"
- babel-plugin-polyfill-corejs3 "^0.6.0"
- babel-plugin-polyfill-regenerator "^0.4.1"
- core-js-compat "^3.25.1"
+ "@babel/types" "^7.22.5"
+ babel-plugin-polyfill-corejs2 "^0.4.3"
+ babel-plugin-polyfill-corejs3 "^0.8.1"
+ babel-plugin-polyfill-regenerator "^0.5.0"
+ core-js-compat "^3.30.2"
semver "^6.3.0"
"@babel/preset-modules@^0.1.5":
@@ -1011,72 +1102,72 @@
esutils "^2.0.2"
"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d"
- integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6"
+ integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-validator-option" "^7.18.6"
- "@babel/plugin-transform-react-display-name" "^7.18.6"
- "@babel/plugin-transform-react-jsx" "^7.18.6"
- "@babel/plugin-transform-react-jsx-development" "^7.18.6"
- "@babel/plugin-transform-react-pure-annotations" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-transform-react-display-name" "^7.22.5"
+ "@babel/plugin-transform-react-jsx" "^7.22.5"
+ "@babel/plugin-transform-react-jsx-development" "^7.22.5"
+ "@babel/plugin-transform-react-pure-annotations" "^7.22.5"
"@babel/preset-typescript@^7.16.0":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz#68292c884b0e26070b4d66b202072d391358395f"
- integrity sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8"
+ integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.21.5"
- "@babel/helper-validator-option" "^7.21.0"
- "@babel/plugin-syntax-jsx" "^7.21.4"
- "@babel/plugin-transform-modules-commonjs" "^7.21.5"
- "@babel/plugin-transform-typescript" "^7.21.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-syntax-jsx" "^7.22.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.22.5"
+ "@babel/plugin-transform-typescript" "^7.22.5"
"@babel/regjsgen@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
- integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==
+"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec"
+ integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==
dependencies:
regenerator-runtime "^0.13.11"
-"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
- integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
- dependencies:
- "@babel/code-frame" "^7.18.6"
- "@babel/parser" "^7.20.7"
- "@babel/types" "^7.20.7"
-
-"@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133"
- integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==
- dependencies:
- "@babel/code-frame" "^7.21.4"
- "@babel/generator" "^7.21.5"
- "@babel/helper-environment-visitor" "^7.21.5"
- "@babel/helper-function-name" "^7.21.0"
- "@babel/helper-hoist-variables" "^7.18.6"
- "@babel/helper-split-export-declaration" "^7.18.6"
- "@babel/parser" "^7.21.5"
- "@babel/types" "^7.21.5"
+"@babel/template@^7.22.5", "@babel/template@^7.3.3":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
+ integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1"
+ integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/types" "^7.22.5"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
- version "7.21.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6"
- integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==
+"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
+ integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
dependencies:
- "@babel/helper-string-parser" "^7.21.5"
- "@babel/helper-validator-identifier" "^7.19.1"
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
@@ -1084,6 +1175,18 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@choojs/findup@^0.2.0":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@choojs/findup/-/findup-0.2.1.tgz#ac13c59ae7be6e1da64de0779a0a7f03d75615a3"
+ integrity sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==
+ dependencies:
+ commander "^2.15.1"
+
+"@colors/colors@1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
"@csstools/normalize.css@*":
version "12.0.0"
resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4"
@@ -1195,112 +1298,144 @@
resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016"
integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==
-"@emotion/babel-plugin@^11.10.8":
- version "11.10.8"
- resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.8.tgz#bae325c902937665d00684038fd5294223ef9e1d"
- integrity sha512-gxNky50AJL3AlkbjvTARiwAqei6/tNUxDZPSKd+3jqWVM3AmdVTTdpjHorR/an/M0VJqdsuq5oGcFH+rjtyujQ==
+"@cypress/request@^2.88.10":
+ version "2.88.11"
+ resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.11.tgz#5a4c7399bc2d7e7ed56e92ce5acb620c8b187047"
+ integrity sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ http-signature "~1.3.6"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ performance-now "^2.1.0"
+ qs "~6.10.3"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^8.3.2"
+
+"@cypress/xvfb@^1.2.4":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a"
+ integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==
+ dependencies:
+ debug "^3.1.0"
+ lodash.once "^4.1.1"
+
+"@emotion/babel-plugin@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c"
+ integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
"@babel/runtime" "^7.18.3"
- "@emotion/hash" "^0.9.0"
- "@emotion/memoize" "^0.8.0"
- "@emotion/serialize" "^1.1.1"
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/serialize" "^1.1.2"
babel-plugin-macros "^3.1.0"
convert-source-map "^1.5.0"
escape-string-regexp "^4.0.0"
find-root "^1.1.0"
source-map "^0.5.7"
- stylis "4.1.4"
+ stylis "4.2.0"
-"@emotion/cache@^11.10.7", "@emotion/cache@^11.10.8":
- version "11.10.8"
- resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.8.tgz#3b39b4761bea0ae2f4f07f0a425eec8b6977c03e"
- integrity sha512-5fyqGHi51LU95o7qQ/vD1jyvC4uCY5GcBT+UgP4LHdpO9jPDlXqhrRr9/wCKmfoAvh5G/F7aOh4MwQa+8uEqhA==
+"@emotion/cache@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff"
+ integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==
dependencies:
- "@emotion/memoize" "^0.8.0"
- "@emotion/sheet" "^1.2.1"
- "@emotion/utils" "^1.2.0"
- "@emotion/weak-memoize" "^0.3.0"
- stylis "4.1.4"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/sheet" "^1.2.2"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
+ stylis "4.2.0"
-"@emotion/hash@^0.9.0":
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7"
- integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==
+"@emotion/hash@^0.9.1":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43"
+ integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==
-"@emotion/is-prop-valid@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83"
- integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==
+"@emotion/is-prop-valid@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc"
+ integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==
dependencies:
- "@emotion/memoize" "^0.8.0"
+ "@emotion/memoize" "^0.8.1"
-"@emotion/memoize@^0.8.0":
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
- integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
+"@emotion/memoize@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
+ integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
"@emotion/react@^11.10.8":
- version "11.10.8"
- resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.8.tgz#02e274ecb45e03ab9d7a8eb9f0f0c064613eaf7b"
- integrity sha512-ZfGfiABtJ1P1OXqOBsW08EgCDp5fK6C5I8hUJauc/VcJBGSzqAirMnFslhFWnZJ/w5HxPI36XbvMV0l4KZHl+w==
+ version "11.11.1"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157"
+ integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==
dependencies:
"@babel/runtime" "^7.18.3"
- "@emotion/babel-plugin" "^11.10.8"
- "@emotion/cache" "^11.10.8"
- "@emotion/serialize" "^1.1.1"
- "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
- "@emotion/utils" "^1.2.0"
- "@emotion/weak-memoize" "^0.3.0"
+ "@emotion/babel-plugin" "^11.11.0"
+ "@emotion/cache" "^11.11.0"
+ "@emotion/serialize" "^1.1.2"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
hoist-non-react-statics "^3.3.1"
-"@emotion/serialize@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0"
- integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==
+"@emotion/serialize@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51"
+ integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==
dependencies:
- "@emotion/hash" "^0.9.0"
- "@emotion/memoize" "^0.8.0"
- "@emotion/unitless" "^0.8.0"
- "@emotion/utils" "^1.2.0"
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/unitless" "^0.8.1"
+ "@emotion/utils" "^1.2.1"
csstype "^3.0.2"
-"@emotion/sheet@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
- integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==
+"@emotion/sheet@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec"
+ integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
"@emotion/styled@^11.10.8":
- version "11.10.8"
- resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.8.tgz#a3fd68efd90bd7e8a06b82b95adec643d386fa69"
- integrity sha512-gow0lF4Uw/QEdX2REMhI8v6wLOabPKJ+4HKNF0xdJ2DJdznN6fxaXpQOx6sNkyBhSUL558Rmcu1Lq/MYlVo4vw==
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346"
+ integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==
dependencies:
"@babel/runtime" "^7.18.3"
- "@emotion/babel-plugin" "^11.10.8"
- "@emotion/is-prop-valid" "^1.2.0"
- "@emotion/serialize" "^1.1.1"
- "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
- "@emotion/utils" "^1.2.0"
+ "@emotion/babel-plugin" "^11.11.0"
+ "@emotion/is-prop-valid" "^1.2.1"
+ "@emotion/serialize" "^1.1.2"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+ "@emotion/utils" "^1.2.1"
-"@emotion/unitless@^0.8.0":
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db"
- integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
+"@emotion/unitless@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3"
+ integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==
-"@emotion/use-insertion-effect-with-fallbacks@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df"
- integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==
+"@emotion/use-insertion-effect-with-fallbacks@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963"
+ integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==
-"@emotion/utils@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561"
- integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==
+"@emotion/utils@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4"
+ integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==
-"@emotion/weak-memoize@^0.3.0":
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb"
- integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
+"@emotion/weak-memoize@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
+ integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
"@eslint-community/eslint-utils@^4.2.0":
version "4.4.0"
@@ -1314,14 +1449,14 @@
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
-"@eslint/eslintrc@^2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02"
- integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==
+"@eslint/eslintrc@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331"
+ integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
- espree "^9.5.1"
+ espree "^9.5.2"
globals "^13.19.0"
ignore "^5.2.0"
import-fresh "^3.2.1"
@@ -1329,15 +1464,27 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.39.0":
- version "8.39.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b"
- integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==
+"@eslint/js@8.43.0":
+ version "8.43.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0"
+ integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==
+
+"@hapi/hoek@^9.0.0":
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
+ integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
+
+"@hapi/topo@^5.0.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
+ integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
-"@humanwhocodes/config-array@^0.11.8":
- version "0.11.8"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
- integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
+"@humanwhocodes/config-array@^0.11.10":
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
+ integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1"
@@ -1624,7 +1771,7 @@
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
-"@jridgewell/source-map@^0.3.2":
+"@jridgewell/source-map@^0.3.3":
version "0.3.3"
resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
@@ -1655,24 +1802,74 @@
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
-"@mui/base@5.0.0-alpha.127":
- version "5.0.0-alpha.127"
- resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.127.tgz#bc61eaf1fd31094c939b6521cfea21643207c3b4"
- integrity sha512-FoRQd0IOH9MnfyL5yXssyQRnC4vXI+1bwkU1idr+wNkP1ZfxE+JsThHcfl1dy5azLssVUGTtQFD9edQLdbyJog==
+"@mapbox/geojson-rewind@^0.5.0":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a"
+ integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==
dependencies:
- "@babel/runtime" "^7.21.0"
- "@emotion/is-prop-valid" "^1.2.0"
+ get-stream "^6.0.1"
+ minimist "^1.2.6"
+
+"@mapbox/geojson-types@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6"
+ integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
+
+"@mapbox/jsonlint-lines-primitives@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
+ integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==
+
+"@mapbox/mapbox-gl-supported@^1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e"
+ integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==
+
+"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2"
+ integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==
+
+"@mapbox/tiny-sdf@^1.1.1":
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz#424c620a96442b20402552be70a7f62a8407cc59"
+ integrity sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==
+
+"@mapbox/unitbezier@^0.0.0":
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e"
+ integrity sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==
+
+"@mapbox/vector-tile@^1.3.1":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666"
+ integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==
+ dependencies:
+ "@mapbox/point-geometry" "~0.1.0"
+
+"@mapbox/whoots-js@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe"
+ integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==
+
+"@mui/base@5.0.0-beta.5":
+ version "5.0.0-beta.5"
+ resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.5.tgz#b566f3beb1eb2823139eabaf52014cf7be900015"
+ integrity sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==
+ dependencies:
+ "@babel/runtime" "^7.22.5"
+ "@emotion/is-prop-valid" "^1.2.1"
"@mui/types" "^7.2.4"
- "@mui/utils" "^5.12.0"
- "@popperjs/core" "^2.11.7"
+ "@mui/utils" "^5.13.6"
+ "@popperjs/core" "^2.11.8"
clsx "^1.2.1"
prop-types "^15.8.1"
react-is "^18.2.0"
-"@mui/core-downloads-tracker@^5.12.2":
- version "5.12.2"
- resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.12.2.tgz#4a0186d25b01d693171366e1c00de0e7c8c35f6a"
- integrity sha512-Qn7dy8tql6T0hY6gTFPkpWlnqVVFGu5Z6QzEzUSzzmLZpfAx4kf8sFz0PHiB7gU5yrqcZF9picMx1shpRY/rXw==
+"@mui/core-downloads-tracker@^5.13.4":
+ version "5.13.4"
+ resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz#7e4b491d8081b6d45ae51556d82cb16b31315a19"
+ integrity sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==
"@mui/icons-material@^5.11.16":
version "5.11.16"
@@ -1682,52 +1879,52 @@
"@babel/runtime" "^7.21.0"
"@mui/material@^5.12.2":
- version "5.12.2"
- resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.12.2.tgz#c3fcc94e523d9e673e2e045dfad04d12ab454a80"
- integrity sha512-XOVy6fVC0rI2dEwDq/1s4Te2hewTUe6lznzeVnruyATGkdmM06WnHqkZOoLVIWo9hWwAxpcgTDcAIVpFtt1nrw==
- dependencies:
- "@babel/runtime" "^7.21.0"
- "@mui/base" "5.0.0-alpha.127"
- "@mui/core-downloads-tracker" "^5.12.2"
- "@mui/system" "^5.12.1"
+ version "5.13.6"
+ resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.13.6.tgz#caaba1e071e394c415208404ce6964e6c14c16d6"
+ integrity sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==
+ dependencies:
+ "@babel/runtime" "^7.22.5"
+ "@mui/base" "5.0.0-beta.5"
+ "@mui/core-downloads-tracker" "^5.13.4"
+ "@mui/system" "^5.13.6"
"@mui/types" "^7.2.4"
- "@mui/utils" "^5.12.0"
- "@types/react-transition-group" "^4.4.5"
+ "@mui/utils" "^5.13.6"
+ "@types/react-transition-group" "^4.4.6"
clsx "^1.2.1"
csstype "^3.1.2"
prop-types "^15.8.1"
react-is "^18.2.0"
react-transition-group "^4.4.5"
-"@mui/private-theming@^5.12.0":
- version "5.12.0"
- resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.12.0.tgz#5f1e6fd09b1447c387fdac1eef7f23efca5c6d69"
- integrity sha512-w5dwMen1CUm1puAtubqxY9BIzrBxbOThsg2iWMvRJmWyJAPdf3Z583fPXpqeA2lhTW79uH2jajk5Ka4FuGlTPg==
+"@mui/private-theming@^5.13.1":
+ version "5.13.1"
+ resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.13.1.tgz#c3e9a0b44f9c5a51b92cfcfb660536060cb61ed7"
+ integrity sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==
dependencies:
"@babel/runtime" "^7.21.0"
- "@mui/utils" "^5.12.0"
+ "@mui/utils" "^5.13.1"
prop-types "^15.8.1"
-"@mui/styled-engine@^5.12.0":
- version "5.12.0"
- resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.12.0.tgz#44640cad961adcc9413ae32116237cd1c8f7ddb0"
- integrity sha512-frh8L7CRnvD0RDmIqEv6jFeKQUIXqW90BaZ6OrxJ2j4kIsiVLu29Gss4SbBvvrWwwatR72sBmC3w1aG4fjp9mQ==
+"@mui/styled-engine@^5.13.2":
+ version "5.13.2"
+ resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.13.2.tgz#c87bd61c0ab8086d34828b6defe97c02bcd642ef"
+ integrity sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==
dependencies:
"@babel/runtime" "^7.21.0"
- "@emotion/cache" "^11.10.7"
+ "@emotion/cache" "^11.11.0"
csstype "^3.1.2"
prop-types "^15.8.1"
-"@mui/system@^5.12.1":
- version "5.12.1"
- resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.12.1.tgz#8452bc03159f0a6725b96bde1dee1316e308231b"
- integrity sha512-Po+sicdV3bbRYXdU29XZaHPZrW7HUYUqU1qCu77GCCEMbahC756YpeyefdIYuPMUg0OdO3gKIUfDISBrkjJL+w==
+"@mui/system@^5.13.6":
+ version "5.13.6"
+ resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.13.6.tgz#5bf4f84fad0c9ed771458f821e384f61abfa33ca"
+ integrity sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==
dependencies:
- "@babel/runtime" "^7.21.0"
- "@mui/private-theming" "^5.12.0"
- "@mui/styled-engine" "^5.12.0"
+ "@babel/runtime" "^7.22.5"
+ "@mui/private-theming" "^5.13.1"
+ "@mui/styled-engine" "^5.13.2"
"@mui/types" "^7.2.4"
- "@mui/utils" "^5.12.0"
+ "@mui/utils" "^5.13.6"
clsx "^1.2.1"
csstype "^3.1.2"
prop-types "^15.8.1"
@@ -1737,14 +1934,14 @@
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328"
integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==
-"@mui/utils@^5.12.0":
- version "5.12.0"
- resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.12.0.tgz#284db48b36ac26f3d34076379072c1dc8aed1ad0"
- integrity sha512-RmQwgzF72p7Yr4+AAUO6j1v2uzt6wr7SWXn68KBsnfVpdOHyclCzH2lr/Xu6YOw9su4JRtdAIYfJFXsS6Cjkmw==
+"@mui/utils@^5.13.1", "@mui/utils@^5.13.6":
+ version "5.13.6"
+ resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.13.6.tgz#aa29d75de59577585b9f23891b03592d40459ed7"
+ integrity sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==
dependencies:
- "@babel/runtime" "^7.21.0"
+ "@babel/runtime" "^7.22.5"
"@types/prop-types" "^15.7.5"
- "@types/react-is" "^16.7.1 || ^17.0.0"
+ "@types/react-is" "^18.2.0"
prop-types "^15.8.1"
react-is "^18.2.0"
@@ -1776,6 +1973,46 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@plotly/d3-sankey-circular@0.33.1":
+ version "0.33.1"
+ resolved "https://registry.yarnpkg.com/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz#15d1e0337e0e4b1135bdf0e2195c88adacace1a7"
+ integrity sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==
+ dependencies:
+ d3-array "^1.2.1"
+ d3-collection "^1.0.4"
+ d3-shape "^1.2.0"
+ elementary-circuits-directed-graph "^1.0.4"
+
+"@plotly/d3-sankey@0.7.2":
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz#ddd5290d3b02c60037ced018a162644a2ccef33b"
+ integrity sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==
+ dependencies:
+ d3-array "1"
+ d3-collection "1"
+ d3-shape "^1.2.0"
+
+"@plotly/d3@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@plotly/d3/-/d3-3.8.1.tgz#674bf19809ffcc359e0ab388a1051f2dac5e6877"
+ integrity sha512-x49ThEu1FRA00kTso4Jdfyf2byaCPLBGmLjAYQz5OzaPyLUhHesX3/Nfv2OHEhynhdy2UB39DLXq6thYe2L2kg==
+
+"@plotly/point-cluster@^3.1.9":
+ version "3.1.9"
+ resolved "https://registry.yarnpkg.com/@plotly/point-cluster/-/point-cluster-3.1.9.tgz#8ffec77fbf5041bf15401079e4fdf298220291c1"
+ integrity sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==
+ dependencies:
+ array-bounds "^1.0.1"
+ binary-search-bounds "^2.0.4"
+ clamp "^1.0.1"
+ defined "^1.0.0"
+ dtype "^2.0.0"
+ flatten-vertex-data "^1.0.2"
+ is-obj "^1.0.1"
+ math-log2 "^1.0.1"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+
"@pmmmwh/react-refresh-webpack-plugin@^0.5.3":
version "0.5.10"
resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8"
@@ -1791,10 +2028,10 @@
schema-utils "^3.0.0"
source-map "^0.7.3"
-"@popperjs/core@^2.11.7":
- version "2.11.7"
- resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.7.tgz#ccab5c8f7dc557a52ca3288c10075c9ccd37fff7"
- integrity sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==
+"@popperjs/core@^2.11.8":
+ version "2.11.8"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
+ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
"@reduxjs/toolkit@^1.8.1":
version "1.9.5"
@@ -1844,9 +2081,26 @@
picomatch "^2.2.2"
"@rushstack/eslint-patch@^1.1.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
- integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf"
+ integrity sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==
+
+"@sideway/address@^4.1.3":
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
+ integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
+ integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
+
+"@sideway/pinpoint@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
"@sinclair/typebox@^0.24.1":
version "0.24.51"
@@ -1986,17 +2240,17 @@
loader-utils "^2.0.0"
"@testing-library/dom@^8.5.0":
- version "8.20.0"
- resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6"
- integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==
+ version "8.20.1"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f"
+ integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/runtime" "^7.12.5"
"@types/aria-query" "^5.0.1"
- aria-query "^5.0.0"
+ aria-query "5.1.3"
chalk "^4.1.0"
dom-accessibility-api "^0.5.9"
- lz-string "^1.4.4"
+ lz-string "^1.5.0"
pretty-format "^27.0.2"
"@testing-library/jest-dom@^5.16.4":
@@ -2038,15 +2292,51 @@
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+"@turf/area@^6.4.0":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.5.0.tgz#1d0d7aee01d8a4a3d4c91663ed35cc615f36ad56"
+ integrity sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==
+ dependencies:
+ "@turf/helpers" "^6.5.0"
+ "@turf/meta" "^6.5.0"
+
+"@turf/bbox@^6.4.0":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5"
+ integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==
+ dependencies:
+ "@turf/helpers" "^6.5.0"
+ "@turf/meta" "^6.5.0"
+
+"@turf/centroid@^6.0.2":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-6.5.0.tgz#ecaa365412e5a4d595bb448e7dcdacfb49eb0009"
+ integrity sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==
+ dependencies:
+ "@turf/helpers" "^6.5.0"
+ "@turf/meta" "^6.5.0"
+
+"@turf/helpers@^6.5.0":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e"
+ integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==
+
+"@turf/meta@^6.5.0":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca"
+ integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==
+ dependencies:
+ "@turf/helpers" "^6.5.0"
+
"@types/aria-query@^5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc"
integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891"
- integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==
+ version "7.20.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b"
+ integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==
dependencies:
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
@@ -2070,11 +2360,11 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
- version "7.18.5"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.5.tgz#c107216842905afafd3b6e774f6f935da6f5db80"
- integrity sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==
+ version "7.20.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf"
+ integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==
dependencies:
- "@babel/types" "^7.3.0"
+ "@babel/types" "^7.20.7"
"@types/body-parser@*":
version "1.19.2"
@@ -2115,9 +2405,9 @@
"@types/estree" "*"
"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1":
- version "8.37.0"
- resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1"
- integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==
+ version "8.40.2"
+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d"
+ integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
@@ -2133,9 +2423,9 @@
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33":
- version "4.17.34"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz#c119e85b75215178bc127de588e93100698ab4cc"
- integrity sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==
+ version "4.17.35"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f"
+ integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==
dependencies:
"@types/node" "*"
"@types/qs" "*"
@@ -2172,6 +2462,11 @@
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+"@types/http-errors@*":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65"
+ integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
+
"@types/http-proxy@^1.17.8":
version "1.17.11"
resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293"
@@ -2199,9 +2494,9 @@
"@types/istanbul-lib-report" "*"
"@types/jest@*":
- version "29.5.1"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.1.tgz#83c818aa9a87da27d6da85d3378e5a34d2f31a47"
- integrity sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==
+ version "29.5.2"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b"
+ integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==
dependencies:
expect "^29.0.0"
pretty-format "^29.0.0"
@@ -2215,9 +2510,9 @@
pretty-format "^27.0.0"
"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
- version "7.0.11"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
- integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+ version "7.0.12"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
+ integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
"@types/json5@^0.0.29":
version "0.0.29"
@@ -2235,24 +2530,41 @@
integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
"@types/node@*":
- version "18.16.3"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01"
- integrity sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==
+ version "20.3.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898"
+ integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==
+
+"@types/node@^14.14.31":
+ version "14.18.53"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.53.tgz#42855629b8773535ab868238718745bf56c56219"
+ integrity sha512-soGmOpVBUq+gaBMwom1M+krC/NNbWlosh4AtGA03SyWNDiqSKtwp7OulO1M6+mg8YkHMvJ/y0AkCeO8d1hNb7A==
"@types/node@^17.0.25":
version "17.0.45"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+"@types/papaparse@^5.3.10":
+ version "5.3.10"
+ resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.10.tgz#d315347dfafd0458aa25062ec9e3dcebb948b6de"
+ integrity sha512-mS1Fta/xJ9EDYmAvpeWzcV9Gr0cOl1ClpW7di9+wSUNDIDO55tBtyXg97O7K+Syrd9rDEmuejM2iqmJIJ1SO5g==
+ dependencies:
+ "@types/node" "*"
+
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+"@types/plotly.js@*":
+ version "2.12.18"
+ resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-2.12.18.tgz#7a231ce72a73fafe4842096b8c99d10a41b60962"
+ integrity sha512-ff+CIEWnqZNjZqHtQZvkEAVuLs9fkm1f54QnPVmgoET7wMHdSqUka2hasVN4e5yfHD05YwGjsAtCseewJh/BMw==
+
"@types/prettier@^2.1.5":
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0"
- integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
+ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
"@types/prop-types@*", "@types/prop-types@^15.7.5":
version "15.7.5"
@@ -2275,39 +2587,38 @@
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.2":
- version "18.2.1"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.1.tgz#663b2612feb5f6431a70207430d7c04881b87f29"
- integrity sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==
+ version "18.2.6"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.6.tgz#ad621fa71a8db29af7c31b41b2ea3d8a6f4144d1"
+ integrity sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==
dependencies:
"@types/react" "*"
-"@types/react-is@^16.7.1 || ^17.0.0":
- version "17.0.4"
- resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.4.tgz#3cccd02851f7f7a75b21d6e922da26bc7f8f44ad"
- integrity sha512-FLzd0K9pnaEvKz4D1vYxK9JmgQPiGk1lu23o1kqGsLeT0iPbRSF7b76+S5T9fD8aRa0B8bY7I/3DebEj+1ysBA==
+"@types/react-is@^18.2.0":
+ version "18.2.1"
+ resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-18.2.1.tgz#61d01c2a6fc089a53520c0b66996d458fdc46863"
+ integrity sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==
dependencies:
- "@types/react" "^17"
+ "@types/react" "*"
-"@types/react-transition-group@^4.4.5":
- version "4.4.5"
- resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416"
- integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==
+"@types/react-plotly.js@^2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@types/react-plotly.js/-/react-plotly.js-2.6.0.tgz#1b856c2ed1219babda3e95ef3270091f156ff987"
+ integrity sha512-nJJ57U0/CNDAO+F3dpnMgM8PtjLE/O1I3O6gq4+5Q13uKqrPnHGYOttfdzQJ4D7KYgF609miVzEYakUS2zds8w==
dependencies:
+ "@types/plotly.js" "*"
"@types/react" "*"
-"@types/react@*", "@types/react@^18.0.6":
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.0.tgz#15cda145354accfc09a18d2f2305f9fc099ada21"
- integrity sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==
- dependencies:
- "@types/prop-types" "*"
- "@types/scheduler" "*"
- csstype "^3.0.2"
+"@types/react-transition-group@^4.4.6":
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e"
+ integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==
+ dependencies:
+ "@types/react" "*"
-"@types/react@^17":
- version "17.0.58"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.58.tgz#c8bbc82114e5c29001548ebe8ed6c4ba4d3c9fb0"
- integrity sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==
+"@types/react@*", "@types/react@^18.0.6":
+ version "18.2.14"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127"
+ integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -2331,9 +2642,9 @@
integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
"@types/semver@^7.3.12":
- version "7.3.13"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
- integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
+ integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
"@types/send@*":
version "0.17.1"
@@ -2351,13 +2662,24 @@
"@types/express" "*"
"@types/serve-static@*", "@types/serve-static@^1.13.10":
- version "1.15.1"
- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d"
- integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a"
+ integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==
dependencies:
+ "@types/http-errors" "*"
"@types/mime" "*"
"@types/node" "*"
+"@types/sinonjs__fake-timers@8.1.1":
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3"
+ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==
+
+"@types/sizzle@^2.3.2":
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef"
+ integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==
+
"@types/sockjs@^0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
@@ -2371,9 +2693,9 @@
integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
"@types/testing-library__jest-dom@^5.9.1":
- version "5.14.5"
- resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f"
- integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==
+ version "5.14.6"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.6.tgz#4887f6e1af11215428ab02777873bcede98a53b0"
+ integrity sha512-FkHXCb+ikSoUP4Y4rOslzTdX5sqYwMxfefKh1GmZ8ce1GOkEHntSp6b5cGadmNfp5e4BMEWOMx+WSKd5/MqlDA==
dependencies:
"@types/jest" "*"
@@ -2387,10 +2709,10 @@
resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43"
integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==
-"@types/ws@^8.5.1":
- version "8.5.4"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5"
- integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==
+"@types/ws@^8.5.5":
+ version "8.5.5"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
+ integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==
dependencies:
"@types/node" "*"
@@ -2413,15 +2735,22 @@
dependencies:
"@types/yargs-parser" "*"
+"@types/yauzl@^2.9.1":
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+ integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+ dependencies:
+ "@types/node" "*"
+
"@typescript-eslint/eslint-plugin@^5.5.0":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz#684a2ce7182f3b4dac342eef7caa1c2bae476abd"
- integrity sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3"
+ integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==
dependencies:
"@eslint-community/regexpp" "^4.4.0"
- "@typescript-eslint/scope-manager" "5.59.2"
- "@typescript-eslint/type-utils" "5.59.2"
- "@typescript-eslint/utils" "5.59.2"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/type-utils" "5.60.1"
+ "@typescript-eslint/utils" "5.60.1"
debug "^4.3.4"
grapheme-splitter "^1.0.4"
ignore "^5.2.0"
@@ -2430,199 +2759,199 @@
tsutils "^3.21.0"
"@typescript-eslint/experimental-utils@^5.0.0":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.59.2.tgz#c2785247c4c8929cb6946e46280ea44f54d9cf79"
- integrity sha512-JLw2UImsjHDuVukpA8Nt+UK7JKE/LQAeV3tU5f7wJo2/NNYVwcakzkWjoYzu/2qzWY/Z9c7zojngNDfecNt92g==
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.60.1.tgz#d783bb63b9183541019a945eda6a9d96b096d985"
+ integrity sha512-TXUdLxv2t8181nh5yLXl/Gr/zKj1ZofQ7m+ZdmG2+El0TYOHCvlZfc35D4nturemC3RUnf3KmLuFp3bVBjkG5w==
dependencies:
- "@typescript-eslint/utils" "5.59.2"
+ "@typescript-eslint/utils" "5.60.1"
"@typescript-eslint/parser@^5.5.0":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.2.tgz#c2c443247901d95865b9f77332d9eee7c55655e8"
- integrity sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3"
+ integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==
dependencies:
- "@typescript-eslint/scope-manager" "5.59.2"
- "@typescript-eslint/types" "5.59.2"
- "@typescript-eslint/typescript-estree" "5.59.2"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/typescript-estree" "5.60.1"
debug "^4.3.4"
-"@typescript-eslint/scope-manager@5.59.2":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c"
- integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==
+"@typescript-eslint/scope-manager@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb"
+ integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==
dependencies:
- "@typescript-eslint/types" "5.59.2"
- "@typescript-eslint/visitor-keys" "5.59.2"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/visitor-keys" "5.60.1"
-"@typescript-eslint/type-utils@5.59.2":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz#0729c237503604cd9a7084b5af04c496c9a4cdcf"
- integrity sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==
+"@typescript-eslint/type-utils@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4"
+ integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==
dependencies:
- "@typescript-eslint/typescript-estree" "5.59.2"
- "@typescript-eslint/utils" "5.59.2"
+ "@typescript-eslint/typescript-estree" "5.60.1"
+ "@typescript-eslint/utils" "5.60.1"
debug "^4.3.4"
tsutils "^3.21.0"
-"@typescript-eslint/types@5.59.2":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655"
- integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==
+"@typescript-eslint/types@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561"
+ integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==
-"@typescript-eslint/typescript-estree@5.59.2":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936"
- integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==
+"@typescript-eslint/typescript-estree@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834"
+ integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==
dependencies:
- "@typescript-eslint/types" "5.59.2"
- "@typescript-eslint/visitor-keys" "5.59.2"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/visitor-keys" "5.60.1"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
-"@typescript-eslint/utils@5.59.2", "@typescript-eslint/utils@^5.58.0":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.2.tgz#0c45178124d10cc986115885688db6abc37939f4"
- integrity sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==
+"@typescript-eslint/utils@5.60.1", "@typescript-eslint/utils@^5.58.0":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80"
+ integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@types/json-schema" "^7.0.9"
"@types/semver" "^7.3.12"
- "@typescript-eslint/scope-manager" "5.59.2"
- "@typescript-eslint/types" "5.59.2"
- "@typescript-eslint/typescript-estree" "5.59.2"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/typescript-estree" "5.60.1"
eslint-scope "^5.1.1"
semver "^7.3.7"
-"@typescript-eslint/visitor-keys@5.59.2":
- version "5.59.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750"
- integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==
+"@typescript-eslint/visitor-keys@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434"
+ integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==
dependencies:
- "@typescript-eslint/types" "5.59.2"
+ "@typescript-eslint/types" "5.60.1"
eslint-visitor-keys "^3.3.0"
-"@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c"
- integrity sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+ integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
dependencies:
- "@webassemblyjs/helper-numbers" "1.11.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.11.5"
+ "@webassemblyjs/helper-numbers" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
-"@webassemblyjs/floating-point-hex-parser@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz#e85dfdb01cad16b812ff166b96806c050555f1b4"
- integrity sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+ integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
-"@webassemblyjs/helper-api-error@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz#1e82fa7958c681ddcf4eabef756ce09d49d442d1"
- integrity sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==
+"@webassemblyjs/helper-api-error@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+ integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
-"@webassemblyjs/helper-buffer@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz#91381652ea95bb38bbfd270702351c0c89d69fba"
- integrity sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==
+"@webassemblyjs/helper-buffer@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+ integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
-"@webassemblyjs/helper-numbers@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz#23380c910d56764957292839006fecbe05e135a9"
- integrity sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==
+"@webassemblyjs/helper-numbers@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+ integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
dependencies:
- "@webassemblyjs/floating-point-hex-parser" "1.11.5"
- "@webassemblyjs/helper-api-error" "1.11.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+ "@webassemblyjs/helper-api-error" "1.11.6"
"@xtuc/long" "4.2.2"
-"@webassemblyjs/helper-wasm-bytecode@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz#e258a25251bc69a52ef817da3001863cc1c24b9f"
- integrity sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+ integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
-"@webassemblyjs/helper-wasm-section@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz#966e855a6fae04d5570ad4ec87fbcf29b42ba78e"
- integrity sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==
+"@webassemblyjs/helper-wasm-section@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+ integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
dependencies:
- "@webassemblyjs/ast" "1.11.5"
- "@webassemblyjs/helper-buffer" "1.11.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.11.5"
- "@webassemblyjs/wasm-gen" "1.11.5"
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-buffer" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.11.6"
-"@webassemblyjs/ieee754@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz#b2db1b33ce9c91e34236194c2b5cba9b25ca9d60"
- integrity sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==
+"@webassemblyjs/ieee754@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+ integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
dependencies:
"@xtuc/ieee754" "^1.2.0"
-"@webassemblyjs/leb128@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.5.tgz#482e44d26b6b949edf042a8525a66c649e38935a"
- integrity sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==
+"@webassemblyjs/leb128@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+ integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
dependencies:
"@xtuc/long" "4.2.2"
-"@webassemblyjs/utf8@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.5.tgz#83bef94856e399f3740e8df9f63bc47a987eae1a"
- integrity sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==
+"@webassemblyjs/utf8@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+ integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
"@webassemblyjs/wasm-edit@^1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz#93ee10a08037657e21c70de31c47fdad6b522b2d"
- integrity sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==
- dependencies:
- "@webassemblyjs/ast" "1.11.5"
- "@webassemblyjs/helper-buffer" "1.11.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.11.5"
- "@webassemblyjs/helper-wasm-section" "1.11.5"
- "@webassemblyjs/wasm-gen" "1.11.5"
- "@webassemblyjs/wasm-opt" "1.11.5"
- "@webassemblyjs/wasm-parser" "1.11.5"
- "@webassemblyjs/wast-printer" "1.11.5"
-
-"@webassemblyjs/wasm-gen@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz#ceb1c82b40bf0cf67a492c53381916756ef7f0b1"
- integrity sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==
- dependencies:
- "@webassemblyjs/ast" "1.11.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.11.5"
- "@webassemblyjs/ieee754" "1.11.5"
- "@webassemblyjs/leb128" "1.11.5"
- "@webassemblyjs/utf8" "1.11.5"
-
-"@webassemblyjs/wasm-opt@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz#b52bac29681fa62487e16d3bb7f0633d5e62ca0a"
- integrity sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==
- dependencies:
- "@webassemblyjs/ast" "1.11.5"
- "@webassemblyjs/helper-buffer" "1.11.5"
- "@webassemblyjs/wasm-gen" "1.11.5"
- "@webassemblyjs/wasm-parser" "1.11.5"
-
-"@webassemblyjs/wasm-parser@1.11.5", "@webassemblyjs/wasm-parser@^1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz#7ba0697ca74c860ea13e3ba226b29617046982e2"
- integrity sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==
- dependencies:
- "@webassemblyjs/ast" "1.11.5"
- "@webassemblyjs/helper-api-error" "1.11.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.11.5"
- "@webassemblyjs/ieee754" "1.11.5"
- "@webassemblyjs/leb128" "1.11.5"
- "@webassemblyjs/utf8" "1.11.5"
-
-"@webassemblyjs/wast-printer@1.11.5":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz#7a5e9689043f3eca82d544d7be7a8e6373a6fa98"
- integrity sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==
- dependencies:
- "@webassemblyjs/ast" "1.11.5"
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+ integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-buffer" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/helper-wasm-section" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.11.6"
+ "@webassemblyjs/wasm-opt" "1.11.6"
+ "@webassemblyjs/wasm-parser" "1.11.6"
+ "@webassemblyjs/wast-printer" "1.11.6"
+
+"@webassemblyjs/wasm-gen@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+ integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/ieee754" "1.11.6"
+ "@webassemblyjs/leb128" "1.11.6"
+ "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+ integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-buffer" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.11.6"
+ "@webassemblyjs/wasm-parser" "1.11.6"
+
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+ integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-api-error" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/ieee754" "1.11.6"
+ "@webassemblyjs/leb128" "1.11.6"
+ "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+ integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
"@xtuc/long" "4.2.2"
"@xtuc/ieee754@^1.2.0":
@@ -2640,6 +2969,11 @@ abab@^2.0.3, abab@^2.0.5:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+abs-svg-path@^0.1.1, abs-svg-path@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
+ integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==
+
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
@@ -2656,10 +2990,10 @@ acorn-globals@^6.0.0:
acorn "^7.1.1"
acorn-walk "^7.1.1"
-acorn-import-assertions@^1.7.6:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
- integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
+acorn-import-assertions@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+ integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
acorn-jsx@^5.3.2:
version "5.3.2"
@@ -2676,10 +3010,10 @@ acorn@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0:
- version "8.8.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
- integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+acorn@^8.2.4, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2:
+ version "8.9.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
+ integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
address@^1.0.1, address@^1.1.2:
version "1.2.2"
@@ -2701,6 +3035,14 @@ agent-base@6:
dependencies:
debug "4"
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
@@ -2740,7 +3082,17 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0:
require-from-string "^2.0.2"
uri-js "^4.2.2"
-ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
+almost-equal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd"
+ integrity sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==
+
+ansi-colors@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1:
version "4.3.2"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
@@ -2794,6 +3146,11 @@ anymatch@^3.0.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+arch@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+ integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
arg@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
@@ -2811,13 +3168,25 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-aria-query@^5.0.0, aria-query@^5.1.3:
+aria-query@5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
dependencies:
deep-equal "^2.0.5"
+aria-query@^5.0.0, aria-query@^5.1.3:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
+ integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
+ dependencies:
+ dequal "^2.0.3"
+
+array-bounds@^1.0.0, array-bounds@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-bounds/-/array-bounds-1.0.1.tgz#da11356b4e18e075a4f0c86e1f179a67b7d7ea31"
+ integrity sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==
+
array-buffer-byte-length@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
@@ -2826,6 +3195,11 @@ array-buffer-byte-length@^1.0.0:
call-bind "^1.0.2"
is-array-buffer "^3.0.1"
+array-find-index@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -2847,6 +3221,23 @@ array-includes@^3.1.5, array-includes@^3.1.6:
get-intrinsic "^1.1.3"
is-string "^1.0.7"
+array-normalize@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/array-normalize/-/array-normalize-1.1.4.tgz#d75cec57383358af38efdf6a78071aa36ae4174c"
+ integrity sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==
+ dependencies:
+ array-bounds "^1.0.0"
+
+array-range@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-range/-/array-range-1.0.1.tgz#f56e46591843611c6a56f77ef02eda7c50089bfc"
+ integrity sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==
+
+array-rearrange@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/array-rearrange/-/array-rearrange-2.2.2.tgz#fa1a2acf8d02e88dd0c9602aa0e06a79158b2283"
+ integrity sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==
+
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
@@ -2899,12 +3290,29 @@ asap@~2.0.6:
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
+asn1@~0.2.3:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+ integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
ast-types-flow@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
-async@^3.2.3:
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async@^3.2.0, async@^3.2.3:
version "3.2.4"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
@@ -2936,17 +3344,35 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
+
+aws4@^1.8.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3"
+ integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
+
axe-core@^4.6.2:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf"
- integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0"
+ integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==
+
+axios@^0.27.2:
+ version "0.27.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
+ integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
+ dependencies:
+ follow-redirects "^1.14.9"
+ form-data "^4.0.0"
axobject-query@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1"
- integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a"
+ integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==
dependencies:
- deep-equal "^2.0.5"
+ dequal "^2.0.3"
babel-jest@^27.4.2, babel-jest@^27.5.1:
version "27.5.1"
@@ -3007,29 +3433,29 @@ babel-plugin-named-asset-import@^0.3.8:
resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2"
integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==
-babel-plugin-polyfill-corejs2@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122"
- integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==
+babel-plugin-polyfill-corejs2@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd"
+ integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==
dependencies:
"@babel/compat-data" "^7.17.7"
- "@babel/helper-define-polyfill-provider" "^0.3.3"
+ "@babel/helper-define-polyfill-provider" "^0.4.0"
semver "^6.1.1"
-babel-plugin-polyfill-corejs3@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a"
- integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==
+babel-plugin-polyfill-corejs3@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a"
+ integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.3.3"
- core-js-compat "^3.25.1"
+ "@babel/helper-define-polyfill-provider" "^0.4.0"
+ core-js-compat "^3.30.1"
-babel-plugin-polyfill-regenerator@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747"
- integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==
+babel-plugin-polyfill-regenerator@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380"
+ integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.3.3"
+ "@babel/helper-define-polyfill-provider" "^0.4.0"
babel-plugin-transform-react-remove-prop-types@^0.4.24:
version "0.4.24"
@@ -3089,11 +3515,23 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+ dependencies:
+ tweetnacl "^0.14.3"
+
bfj@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
@@ -3114,7 +3552,35 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-bluebird@^3.5.5:
+binary-search-bounds@^2.0.4:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz#125e5bd399882f71e6660d4bf1186384e989fba7"
+ integrity sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==
+
+bit-twiddle@^1.0.0, bit-twiddle@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e"
+ integrity sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==
+
+bitmap-sdf@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz#e87b8b1d84ee846567cfbb29d60eedd34bca5b6f"
+ integrity sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==
+
+bl@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5"
+ integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+blob-util@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb"
+ integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==
+
+bluebird@3.7.2, bluebird@^3.5.5, bluebird@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
@@ -3180,14 +3646,14 @@ browser-process-hrtime@^1.0.0:
integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5:
- version "4.21.5"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
- integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
+ version "4.21.9"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
+ integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
dependencies:
- caniuse-lite "^1.0.30001449"
- electron-to-chromium "^1.4.284"
- node-releases "^2.0.8"
- update-browserslist-db "^1.0.10"
+ caniuse-lite "^1.0.30001503"
+ electron-to-chromium "^1.4.431"
+ node-releases "^2.0.12"
+ update-browserslist-db "^1.0.11"
bser@2.1.1:
version "2.1.1"
@@ -3196,11 +3662,24 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
builtin-modules@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
@@ -3216,6 +3695,11 @@ bytes@3.1.2:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+cachedir@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
+ integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -3262,16 +3746,28 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464:
- version "1.0.30001482"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz#8b3fad73dc35b2674a5c96df2d4f9f1c561435de"
- integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503:
+ version "1.0.30001508"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001508.tgz#4461bbc895c692a96da399639cc1e146e7302a33"
+ integrity sha512-sdQZOJdmt3GJs1UMNpCCCyeuS2IEGLXnHyAo9yIO5JJDjbjoVRij4M1qep6P6gFpptD1PqIYgzM+gwJbOi92mw==
+
+canvas-fit@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/canvas-fit/-/canvas-fit-1.5.0.tgz#ae13be66ade42f5be0e487e345fce30a5e5b5e5f"
+ integrity sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==
+ dependencies:
+ element-size "^1.1.1"
case-sensitive-paths-webpack-plugin@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4"
integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
chalk@^2.0.0, chalk@^2.4.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -3307,6 +3803,11 @@ char-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e"
integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==
+check-more-types@2.24.0, check-more-types@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
+ integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==
+
check-types@^11.1.1:
version "11.2.2"
resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4"
@@ -3338,9 +3839,14 @@ ci-info@^3.2.0:
integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
cjs-module-lexer@^1.0.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
- integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
+ integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
+
+clamp@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634"
+ integrity sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==
clean-css@^5.2.2:
version "5.3.2"
@@ -3349,6 +3855,35 @@ clean-css@^5.2.2:
dependencies:
source-map "~0.6.0"
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-table3@~0.6.1:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2"
+ integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==
+ dependencies:
+ string-width "^4.2.0"
+ optionalDependencies:
+ "@colors/colors" "1.5.0"
+
+cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -3382,6 +3917,20 @@ collect-v8-coverage@^1.0.0:
resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+color-alpha@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/color-alpha/-/color-alpha-1.0.4.tgz#c141dc926e95fc3db647d0e14e5bc3651c29e040"
+ integrity sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==
+ dependencies:
+ color-parse "^1.3.8"
+
+color-alpha@^1.0.4:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-alpha/-/color-alpha-1.1.3.tgz#71250189e9f02bba8261a94d5e7d5f5606d1749a"
+ integrity sha512-krPYBO1RSO5LH4AGb/b6z70O1Ip2o0F0+0cVFN5FN99jfQtZFT08rQyg+9oOBNJYAn3SRwJIFC8jUEOKz7PisA==
+ dependencies:
+ color-parse "^1.4.1"
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -3396,34 +3945,104 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
+color-id@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/color-id/-/color-id-1.1.0.tgz#5e9159b99a73ac98f74820cb98a15fde3d7e034c"
+ integrity sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==
+ dependencies:
+ clamp "^1.0.1"
+
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-color-name@~1.1.4:
+color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-normalize@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/color-normalize/-/color-normalize-1.5.0.tgz#ee610af9acb15daf73e77a945a847b18e40772da"
+ integrity sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==
+ dependencies:
+ clamp "^1.0.1"
+ color-rgba "^2.1.1"
+ dtype "^2.0.0"
+
+color-normalize@^1.5.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/color-normalize/-/color-normalize-1.5.2.tgz#d6c8beb02966849548f91a6ac0274c6f19924509"
+ integrity sha512-yYMIoyFJmUoKbCK6sBShljBWfkt8DXVfaZJn9/zvRJkF9eQJDbZhcYC6LdOVy40p4tfVwYYb9cXl8oqpu7pzBw==
+ dependencies:
+ color-rgba "^2.2.0"
+ dtype "^2.0.0"
+
+color-parse@1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.3.8.tgz#eaf54cd385cb34c0681f18c218aca38478082fa3"
+ integrity sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA==
+ dependencies:
+ color-name "^1.0.0"
+ defined "^1.0.0"
+ is-plain-obj "^1.1.0"
+
+color-parse@^1.3.8, color-parse@^1.4.1, color-parse@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.4.2.tgz#78651f5d34df1a57f997643d86f7f87268ad4eb5"
+ integrity sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==
+ dependencies:
+ color-name "^1.0.0"
+
+color-rgba@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/color-rgba/-/color-rgba-2.1.1.tgz#4633b83817c7406c90b3d7bf4d1acfa48dde5c83"
+ integrity sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==
+ dependencies:
+ clamp "^1.0.1"
+ color-parse "^1.3.8"
+ color-space "^1.14.6"
+
+color-rgba@^2.1.1, color-rgba@^2.2.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/color-rgba/-/color-rgba-2.4.0.tgz#ae85819c530262c29fc2da129fc7c8f9efc57015"
+ integrity sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==
+ dependencies:
+ color-parse "^1.4.2"
+ color-space "^2.0.0"
+
+color-space@^1.14.6:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.16.0.tgz#611781bca41cd8582a1466fd9e28a7d3d89772a2"
+ integrity sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==
+ dependencies:
+ hsluv "^0.0.3"
+ mumath "^3.3.4"
+
+color-space@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-space/-/color-space-2.0.1.tgz#da39871175baf4a5785ba519397df04b8d67e0fa"
+ integrity sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==
+
colord@^2.9.1:
version "2.9.3"
resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
-colorette@^2.0.10:
+colorette@^2.0.10, colorette@^2.0.16:
version "2.0.20"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
-combined-stream@^1.0.8:
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
-commander@^2.20.0:
+commander@2, commander@^2.15.1, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -3433,6 +4052,11 @@ commander@^4.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+commander@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
+ integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
+
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@@ -3483,6 +4107,16 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+concat-stream@^1.5.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
confusing-browser-globals@^1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
@@ -3520,22 +4154,27 @@ cookie@0.5.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
-core-js-compat@^3.25.1:
- version "3.30.1"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe"
- integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==
+core-js-compat@^3.30.1, core-js-compat@^3.30.2:
+ version "3.31.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1"
+ integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==
dependencies:
browserslist "^4.21.5"
core-js-pure@^3.23.3:
- version "3.30.1"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec"
- integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==
+ version "3.31.0"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.0.tgz#052fd9e82fbaaf86457f5db1fadcd06f15966ff2"
+ integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg==
core-js@^3.19.2:
- version "3.30.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba"
- integrity sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==
+ version "3.31.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344"
+ integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==
+
+core-util-is@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
core-util-is@~1.0.0:
version "1.0.3"
@@ -3564,7 +4203,12 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+country-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/country-regex/-/country-regex-1.1.0.tgz#51c333dcdf12927b7e5eeb9c10ac8112a6120896"
+ integrity sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -3590,6 +4234,46 @@ css-declaration-sorter@^6.3.1:
resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad"
integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==
+css-font-size-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb"
+ integrity sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==
+
+css-font-stretch-keywords@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz#50cee9b9ba031fb5c952d4723139f1e107b54b10"
+ integrity sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==
+
+css-font-style-keywords@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz#5c3532813f63b4a1de954d13cea86ab4333409e4"
+ integrity sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==
+
+css-font-weight-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz#9bc04671ac85bc724b574ef5d3ac96b0d604fd97"
+ integrity sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==
+
+css-font@^1.0.0, css-font@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-font/-/css-font-1.2.0.tgz#e73cbdc11fd87c8e6c928ad7098a9771c8c2b6e3"
+ integrity sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==
+ dependencies:
+ css-font-size-keywords "^1.0.0"
+ css-font-stretch-keywords "^1.0.1"
+ css-font-style-keywords "^1.0.1"
+ css-font-weight-keywords "^1.0.0"
+ css-global-keywords "^1.0.1"
+ css-system-font-keywords "^1.0.0"
+ pick-by-alias "^1.2.0"
+ string-split-by "^1.0.0"
+ unquote "^1.1.0"
+
+css-global-keywords@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz#72a9aea72796d019b1d2a3252de4e5aaa37e4a69"
+ integrity sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==
+
css-has-pseudo@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73"
@@ -3598,14 +4282,14 @@ css-has-pseudo@^3.0.4:
postcss-selector-parser "^6.0.9"
css-loader@^6.5.1:
- version "6.7.3"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd"
- integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88"
+ integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==
dependencies:
icss-utils "^5.1.0"
- postcss "^8.4.19"
+ postcss "^8.4.21"
postcss-modules-extract-imports "^3.0.0"
- postcss-modules-local-by-default "^4.0.0"
+ postcss-modules-local-by-default "^4.0.3"
postcss-modules-scope "^3.0.0"
postcss-modules-values "^4.0.0"
postcss-value-parser "^4.2.0"
@@ -3654,6 +4338,11 @@ css-select@^4.1.3:
domutils "^2.8.0"
nth-check "^2.0.1"
+css-system-font-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz#85c6f086aba4eb32c571a3086affc434b84823ed"
+ integrity sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==
+
css-tree@1.0.0-alpha.37:
version "1.0.0-alpha.37"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
@@ -3685,10 +4374,15 @@ css.escape@^1.5.1:
resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==
+csscolorparser@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b"
+ integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==
+
cssdb@^7.1.0:
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.5.4.tgz#e34dafee5184d67634604e345e389ca79ac179ea"
- integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg==
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.6.0.tgz#beac8f7a5f676db62d3c33da517ef4c9eb008f8b"
+ integrity sha512-Nna7rph8V0jC6+JBY4Vk4ndErUmfJfV6NJCaZdurL0omggabiy+QB2HCQtu5c/ACLZ0I7REv7A4QyPIoYzZx0w==
cssesc@^3.0.0:
version "3.0.0"
@@ -3773,11 +4467,172 @@ csstype@^3.0.2, csstype@^3.1.2:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+cypress@^12.16.0:
+ version "12.16.0"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.16.0.tgz#d0dcd0725a96497f4c60cf54742242259847924c"
+ integrity sha512-mwv1YNe48hm0LVaPgofEhGCtLwNIQEjmj2dJXnAkY1b4n/NE9OtgPph4TyS+tOtYp5CKtRmDvBzWseUXQTjbTg==
+ dependencies:
+ "@cypress/request" "^2.88.10"
+ "@cypress/xvfb" "^1.2.4"
+ "@types/node" "^14.14.31"
+ "@types/sinonjs__fake-timers" "8.1.1"
+ "@types/sizzle" "^2.3.2"
+ arch "^2.2.0"
+ blob-util "^2.0.2"
+ bluebird "^3.7.2"
+ buffer "^5.6.0"
+ cachedir "^2.3.0"
+ chalk "^4.1.0"
+ check-more-types "^2.24.0"
+ cli-cursor "^3.1.0"
+ cli-table3 "~0.6.1"
+ commander "^6.2.1"
+ common-tags "^1.8.0"
+ dayjs "^1.10.4"
+ debug "^4.3.4"
+ enquirer "^2.3.6"
+ eventemitter2 "6.4.7"
+ execa "4.1.0"
+ executable "^4.1.1"
+ extract-zip "2.0.1"
+ figures "^3.2.0"
+ fs-extra "^9.1.0"
+ getos "^3.2.1"
+ is-ci "^3.0.0"
+ is-installed-globally "~0.4.0"
+ lazy-ass "^1.6.0"
+ listr2 "^3.8.3"
+ lodash "^4.17.21"
+ log-symbols "^4.0.0"
+ minimist "^1.2.8"
+ ospath "^1.2.2"
+ pretty-bytes "^5.6.0"
+ proxy-from-env "1.0.0"
+ request-progress "^3.0.0"
+ semver "^7.3.2"
+ supports-color "^8.1.1"
+ tmp "~0.2.1"
+ untildify "^4.0.0"
+ yauzl "^2.10.0"
+
+d3-array@1, d3-array@^1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+ integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
+
+d3-collection@1, d3-collection@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
+ integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
+
+"d3-color@1 - 3":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
+ integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
+
+d3-dispatch@1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58"
+ integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==
+
+d3-force@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b"
+ integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==
+ dependencies:
+ d3-collection "1"
+ d3-dispatch "1"
+ d3-quadtree "1"
+ d3-timer "1"
+
+d3-format@^1.4.5:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4"
+ integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==
+
+d3-geo-projection@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz#826db62f748e8ecd67cd00aced4c26a236ec030c"
+ integrity sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==
+ dependencies:
+ commander "2"
+ d3-array "1"
+ d3-geo "^1.12.0"
+ resolve "^1.1.10"
+
+d3-geo@^1.12.0, d3-geo@^1.12.1:
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f"
+ integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==
+ dependencies:
+ d3-array "1"
+
+d3-hierarchy@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83"
+ integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==
+
+d3-interpolate@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
+ integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
+ dependencies:
+ d3-color "1 - 3"
+
+d3-path@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf"
+ integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==
+
+d3-quadtree@1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135"
+ integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==
+
+d3-shape@^1.2.0:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
+ integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==
+ dependencies:
+ d3-path "1"
+
+d3-time-format@^2.2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850"
+ integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==
+ dependencies:
+ d3-time "1"
+
+d3-time@1, d3-time@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1"
+ integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==
+
+d3-timer@1:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5"
+ integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
damerau-levenshtein@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
+ dependencies:
+ assert-plus "^1.0.0"
+
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@@ -3787,21 +4642,26 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
-debug@2.6.9, debug@^2.6.0:
+dayjs@^1.10.4:
+ version "1.11.9"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a"
+ integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==
+
+debug@2, debug@2.6.9, debug@^2.6.0:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
-debug@^3.2.7:
+debug@^3.1.0, debug@^3.2.6, debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
@@ -3847,7 +4707,7 @@ deep-is@^0.1.3, deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-deepmerge@^4.2.2:
+deepmerge@^4.0.0, deepmerge@^4.2.2:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
@@ -3872,6 +4732,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+defined@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf"
+ integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -3887,11 +4752,21 @@ depd@~1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+dequal@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
destroy@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+detect-kerning@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/detect-kerning/-/detect-kerning-2.1.2.tgz#4ecd548e4a5a3fc880fe2a50609312d000fa9fc2"
+ integrity sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==
+
detect-newline@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -4059,11 +4934,52 @@ dotenv@^10.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
-duplexer@^0.1.2:
+draw-svg-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/draw-svg-path/-/draw-svg-path-1.0.0.tgz#6f116d962dd314b99ea534d6f58dd66cdbd69379"
+ integrity sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==
+ dependencies:
+ abs-svg-path "~0.1.1"
+ normalize-svg-path "~0.1.0"
+
+dtype@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dtype/-/dtype-2.0.0.tgz#cd052323ce061444ecd2e8f5748f69a29be28434"
+ integrity sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==
+
+dup@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dup/-/dup-1.0.0.tgz#51fc5ac685f8196469df0b905e934b20af5b4029"
+ integrity sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==
+
+duplexer@^0.1.2, duplexer@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+duplexify@^3.4.5:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+earcut@^2.1.5, earcut@^2.2.2:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a"
+ integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -4076,10 +4992,22 @@ ejs@^3.1.6:
dependencies:
jake "^10.8.5"
-electron-to-chromium@^1.4.284:
- version "1.4.379"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.379.tgz#c9b597e090ce738e7a76db84e5678f27817bd644"
- integrity sha512-eRMq6Cf4PhjB14R9U6QcXM/VRQ54Gc3OL9LKnFugUIh2AXm3KJlOizlSfVIgjH76bII4zHGK4t0PVTE5qq8dZg==
+electron-to-chromium@^1.4.431:
+ version "1.4.441"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.441.tgz#94dd9c1cbf081d83f032a4f1cd9f787e21fc24ce"
+ integrity sha512-LlCgQ8zgYZPymf5H4aE9itwiIWH4YlCiv1HFLmmcBeFYi5E+3eaIFnjHzYtcFQbaKfAW+CqZ9pgxo33DZuoqPg==
+
+element-size@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/element-size/-/element-size-1.1.1.tgz#64e5f159d97121631845bcbaecaf279c39b5e34e"
+ integrity sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==
+
+elementary-circuits-directed-graph@^1.0.4:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz#31c5a1c69517de833127247e5460472168e9e1c1"
+ integrity sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==
+ dependencies:
+ strongly-connected-components "^1.0.1"
emittery@^0.10.2:
version "0.10.2"
@@ -4111,14 +5039,28 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-enhanced-resolve@^5.13.0:
- version "5.13.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275"
- integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^5.15.0:
+ version "5.15.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
+ integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
+enquirer@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
entities@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
@@ -4199,9 +5141,9 @@ es-get-iterator@^1.1.3:
stop-iteration-iterator "^1.0.0"
es-module-lexer@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527"
- integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f"
+ integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==
es-set-tostringtag@^2.0.1:
version "2.0.1"
@@ -4219,14 +5161,50 @@ es-shim-unscopables@^1.0.0:
dependencies:
has "^1.0.3"
-es-to-primitive@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
- integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50:
+ version "0.10.62"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
+ integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
+ dependencies:
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.3"
+ next-tick "^1.1.0"
+
+es6-iterator@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+es6-weak-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.1"
escalade@^3.1.1:
version "3.1.1"
@@ -4253,6 +5231,18 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+escodegen@^1.11.1:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
escodegen@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
@@ -4386,9 +5376,9 @@ eslint-plugin-react@^7.27.1:
string.prototype.matchall "^4.0.8"
eslint-plugin-testing-library@^5.0.1:
- version "5.10.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.3.tgz#e613fbaf9a145e9eef115d080b32cb488fae622e"
- integrity sha512-0yhsKFsjHLud5PM+f2dWr9K3rqYzMy4cSHs3lcmFYMa1CdSzRvHGgXvsFarBjZ41gU8jhTdMIkg8jHLxGJqLqw==
+ version "5.11.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.0.tgz#0bad7668e216e20dd12f8c3652ca353009163121"
+ integrity sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==
dependencies:
"@typescript-eslint/utils" "^5.58.0"
@@ -4413,10 +5403,10 @@ eslint-visitor-keys@^2.1.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
- integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
+ integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
eslint-webpack-plugin@^3.1.1:
version "3.2.0"
@@ -4430,15 +5420,15 @@ eslint-webpack-plugin@^3.1.1:
schema-utils "^4.0.0"
eslint@^8.3.0:
- version "8.39.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1"
- integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==
+ version "8.43.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094"
+ integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.4.0"
- "@eslint/eslintrc" "^2.0.2"
- "@eslint/js" "8.39.0"
- "@humanwhocodes/config-array" "^0.11.8"
+ "@eslint/eslintrc" "^2.0.3"
+ "@eslint/js" "8.43.0"
+ "@humanwhocodes/config-array" "^0.11.10"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
ajv "^6.10.0"
@@ -4448,8 +5438,8 @@ eslint@^8.3.0:
doctrine "^3.0.0"
escape-string-regexp "^4.0.0"
eslint-scope "^7.2.0"
- eslint-visitor-keys "^3.4.0"
- espree "^9.5.1"
+ eslint-visitor-keys "^3.4.1"
+ espree "^9.5.2"
esquery "^1.4.2"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
@@ -4457,13 +5447,12 @@ eslint@^8.3.0:
find-up "^5.0.0"
glob-parent "^6.0.2"
globals "^13.19.0"
- grapheme-splitter "^1.0.4"
+ graphemer "^1.4.0"
ignore "^5.2.0"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
is-path-inside "^3.0.3"
- js-sdsl "^4.1.4"
js-yaml "^4.1.0"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
@@ -4475,14 +5464,14 @@ eslint@^8.3.0:
strip-json-comments "^3.1.0"
text-table "^0.2.0"
-espree@^9.5.1:
- version "9.5.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4"
- integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==
+espree@^9.5.2:
+ version "9.5.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b"
+ integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==
dependencies:
acorn "^8.8.0"
acorn-jsx "^5.3.2"
- eslint-visitor-keys "^3.4.0"
+ eslint-visitor-keys "^3.4.1"
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
@@ -4503,7 +5492,7 @@ esrecurse@^4.3.0:
dependencies:
estraverse "^5.2.0"
-estraverse@^4.1.1:
+estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
@@ -4528,6 +5517,24 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+event-stream@=3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
+ integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==
+ dependencies:
+ duplexer "~0.1.1"
+ from "~0"
+ map-stream "~0.1.0"
+ pause-stream "0.0.11"
+ split "0.3"
+ stream-combiner "~0.0.4"
+ through "~2.3.1"
+
+eventemitter2@6.4.7:
+ version "6.4.7"
+ resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d"
+ integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==
+
eventemitter3@^4.0.0:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
@@ -4538,7 +5545,22 @@ events@^3.2.0:
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-execa@^5.0.0:
+execa@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
+ integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execa@5.1.1, execa@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
@@ -4553,6 +5575,13 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+executable@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
+ integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
+ dependencies:
+ pify "^2.2.0"
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -4616,6 +5645,47 @@ express@^4.17.3:
utils-merge "1.0.1"
vary "~1.1.2"
+ext@^1.1.2:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
+ integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
+ dependencies:
+ type "^2.7.2"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extract-zip@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+ integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+ dependencies:
+ debug "^4.1.1"
+ get-stream "^5.1.0"
+ yauzl "^2.10.0"
+ optionalDependencies:
+ "@types/yauzl" "^2.9.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+
+extsprintf@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+ integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+falafel@^2.1.0:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.5.tgz#3ccb4970a09b094e9e54fead2deee64b4a589d56"
+ integrity sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==
+ dependencies:
+ acorn "^7.1.1"
+ isarray "^2.0.1"
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -4632,6 +5702,13 @@ fast-glob@^3.2.12, fast-glob@^3.2.9:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-isnumeric@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz#e165786ff471c439e9ace2b8c8e66cceb47e2ea4"
+ integrity sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==
+ dependencies:
+ is-string-blank "^1.0.1"
+
fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -4663,6 +5740,20 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+ dependencies:
+ pend "~1.2.0"
+
+figures@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -4678,7 +5769,7 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
-filelist@^1.0.1:
+filelist@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
@@ -4760,11 +5851,32 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
-follow-redirects@^1.0.0:
+flatten-vertex-data@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz#889fd60bea506006ca33955ee1105175fb620219"
+ integrity sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==
+ dependencies:
+ dtype "^2.0.0"
+
+follow-redirects@^1.0.0, follow-redirects@^1.14.9:
version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+font-atlas@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/font-atlas/-/font-atlas-2.1.0.tgz#aa2d6dcf656a6c871d66abbd3dfbea2f77178348"
+ integrity sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==
+ dependencies:
+ css-font "^1.0.0"
+
+font-measure@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/font-measure/-/font-measure-1.2.2.tgz#41dbdac5d230dbf4db08865f54da28a475e83026"
+ integrity sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==
+ dependencies:
+ css-font "^1.2.0"
+
for-each@^0.3.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
@@ -4772,6 +5884,11 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
+
fork-ts-checker-webpack-plugin@^6.5.0:
version "6.5.3"
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3"
@@ -4800,6 +5917,24 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -4815,6 +5950,19 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+from2@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+from@~0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==
+
fs-extra@^10.0.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@@ -4824,7 +5972,7 @@ fs-extra@^10.0.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-extra@^9.0.0, fs-extra@^9.0.1:
+fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@@ -4834,10 +5982,10 @@ fs-extra@^9.0.0, fs-extra@^9.0.1:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-monkey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
- integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
+fs-monkey@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747"
+ integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==
fs.realpath@^1.0.0:
version "1.0.0"
@@ -4874,18 +6022,29 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+geojson-vt@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7"
+ integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==
+
get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+get-canvas-context@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-canvas-context/-/get-canvas-context-1.0.2.tgz#d6e7b50bc4e4c86357cd39f22647a84b73601e93"
+ integrity sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==
+
get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
- integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+ integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
+ has-proto "^1.0.1"
has-symbols "^1.0.3"
get-own-enumerable-property-symbols@^3.0.0:
@@ -4898,7 +6057,14 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-get-stream@^6.0.0:
+get-stream@^5.0.0, get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^6.0.0, get-stream@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
@@ -4911,6 +6077,66 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
+getos@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
+ integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
+ dependencies:
+ async "^3.2.0"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
+ dependencies:
+ assert-plus "^1.0.0"
+
+gl-mat4@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26"
+ integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==
+
+gl-matrix@^3.2.1:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9"
+ integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==
+
+gl-text@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/gl-text/-/gl-text-1.3.1.tgz#f36594464101b5b053178d6d219c3d08fb9144c8"
+ integrity sha512-/f5gcEMiZd+UTBJLTl3D+CkCB/0UFGTx3nflH8ZmyWcLkZhsZ1+Xx5YYkw2rgWAzgPeE35xCqBuHSoMKQVsR+w==
+ dependencies:
+ bit-twiddle "^1.0.2"
+ color-normalize "^1.5.0"
+ css-font "^1.2.0"
+ detect-kerning "^2.1.2"
+ es6-weak-map "^2.0.3"
+ flatten-vertex-data "^1.0.2"
+ font-atlas "^2.1.0"
+ font-measure "^1.2.2"
+ gl-util "^3.1.2"
+ is-plain-obj "^1.1.0"
+ object-assign "^4.1.1"
+ parse-rect "^1.2.0"
+ parse-unit "^1.0.1"
+ pick-by-alias "^1.2.0"
+ regl "^2.0.0"
+ to-px "^1.0.1"
+ typedarray-pool "^1.1.0"
+
+gl-util@^3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/gl-util/-/gl-util-3.1.3.tgz#1e9a724f844b802597c6e30565d4c1e928546861"
+ integrity sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==
+ dependencies:
+ is-browser "^2.0.1"
+ is-firefox "^1.0.3"
+ is-plain-obj "^1.1.0"
+ number-is-integer "^1.0.1"
+ object-assign "^4.1.0"
+ pick-by-alias "^1.2.0"
+ weak-map "^1.0.5"
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -4954,6 +6180,13 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
+ integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==
+ dependencies:
+ ini "2.0.0"
+
global-modules@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -5001,6 +6234,133 @@ globby@^11.0.4, globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
+glsl-inject-defines@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4"
+ integrity sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==
+ dependencies:
+ glsl-token-inject-block "^1.0.0"
+ glsl-token-string "^1.0.1"
+ glsl-tokenizer "^2.0.2"
+
+glsl-resolve@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-resolve/-/glsl-resolve-0.0.1.tgz#894bef73910d792c81b5143180035d0a78af76d3"
+ integrity sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==
+ dependencies:
+ resolve "^0.6.1"
+ xtend "^2.1.2"
+
+glsl-token-assignments@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f"
+ integrity sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==
+
+glsl-token-defines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz#cb892aa959936231728470d4f74032489697fa9d"
+ integrity sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==
+ dependencies:
+ glsl-tokenizer "^2.0.0"
+
+glsl-token-depth@^1.1.0, glsl-token-depth@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz#23c5e30ee2bd255884b4a28bc850b8f791e95d84"
+ integrity sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==
+
+glsl-token-descope@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz#0fc90ab326186b82f597b2e77dc9e21efcd32076"
+ integrity sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==
+ dependencies:
+ glsl-token-assignments "^2.0.0"
+ glsl-token-depth "^1.1.0"
+ glsl-token-properties "^1.0.0"
+ glsl-token-scope "^1.1.0"
+
+glsl-token-inject-block@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz#e1015f5980c1091824adaa2625f1dfde8bd00034"
+ integrity sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==
+
+glsl-token-properties@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz#483dc3d839f0d4b5c6171d1591f249be53c28a9e"
+ integrity sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==
+
+glsl-token-scope@^1.1.0, glsl-token-scope@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz#a1728e78df24444f9cb93fd18ef0f75503a643b1"
+ integrity sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==
+
+glsl-token-string@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/glsl-token-string/-/glsl-token-string-1.0.1.tgz#59441d2f857de7c3449c945666021ece358e48ec"
+ integrity sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==
+
+glsl-token-whitespace-trim@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz#46d1dfe98c75bd7d504c05d7d11b1b3e9cc93b10"
+ integrity sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==
+
+glsl-tokenizer@^2.0.0, glsl-tokenizer@^2.0.2:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a"
+ integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==
+ dependencies:
+ through2 "^0.6.3"
+
+glslify-bundle@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glslify-bundle/-/glslify-bundle-5.1.1.tgz#30d2ddf2e6b935bf44d1299321e3b729782c409a"
+ integrity sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==
+ dependencies:
+ glsl-inject-defines "^1.0.1"
+ glsl-token-defines "^1.0.0"
+ glsl-token-depth "^1.1.1"
+ glsl-token-descope "^1.0.2"
+ glsl-token-scope "^1.1.1"
+ glsl-token-string "^1.0.1"
+ glsl-token-whitespace-trim "^1.0.0"
+ glsl-tokenizer "^2.0.2"
+ murmurhash-js "^1.0.0"
+ shallow-copy "0.0.1"
+
+glslify-deps@^1.2.5:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/glslify-deps/-/glslify-deps-1.3.2.tgz#c09ee945352bfc07ac2d8a1cc9e3de776328c72b"
+ integrity sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==
+ dependencies:
+ "@choojs/findup" "^0.2.0"
+ events "^3.2.0"
+ glsl-resolve "0.0.1"
+ glsl-tokenizer "^2.0.0"
+ graceful-fs "^4.1.2"
+ inherits "^2.0.1"
+ map-limit "0.0.1"
+ resolve "^1.0.0"
+
+glslify@^7.0.0, glslify@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glslify/-/glslify-7.1.1.tgz#454d9172b410cb49864029c86d5613947fefd30b"
+ integrity sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==
+ dependencies:
+ bl "^2.2.1"
+ concat-stream "^1.5.2"
+ duplexify "^3.4.5"
+ falafel "^2.1.0"
+ from2 "^2.3.0"
+ glsl-resolve "0.0.1"
+ glsl-token-whitespace-trim "^1.0.0"
+ glslify-bundle "^5.0.0"
+ glslify-deps "^1.2.5"
+ minimist "^1.2.5"
+ resolve "^1.1.5"
+ stack-trace "0.0.9"
+ static-eval "^2.0.5"
+ through2 "^2.0.1"
+ xtend "^4.0.0"
+
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -5018,6 +6378,16 @@ grapheme-splitter@^1.0.4:
resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+grid-index@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7"
+ integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==
+
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
@@ -5050,6 +6420,20 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+has-hover@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-hover/-/has-hover-1.0.1.tgz#3d97437aeb199c62b8ac08acbdc53d3bc52c17f7"
+ integrity sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==
+ dependencies:
+ is-browser "^2.0.1"
+
+has-passive-events@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-passive-events/-/has-passive-events-1.0.0.tgz#75fc3dc6dada182c58f24ebbdc018276d1ea3515"
+ integrity sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==
+ dependencies:
+ is-browser "^2.0.1"
+
has-property-descriptors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
@@ -5108,6 +6492,11 @@ hpack.js@^2.1.6:
readable-stream "^2.0.1"
wbuf "^1.1.0"
+hsluv@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/hsluv/-/hsluv-0.0.3.tgz#829107dafb4a9f8b52a1809ed02e091eade6754c"
+ integrity sha512-08iL2VyCRbkQKBySkSh6m8zMUa3sADAxGVWs3Z1aPcUkTJeK0ETG4Fc27tEmQBGUAXZjIsXOZqBvacuVNSC/fQ==
+
html-encoding-sniffer@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
@@ -5116,9 +6505,9 @@ html-encoding-sniffer@^2.0.1:
whatwg-encoding "^1.0.5"
html-entities@^2.1.0, html-entities@^2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
- integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
+ integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
html-escaper@^2.0.0:
version "2.0.2"
@@ -5139,9 +6528,9 @@ html-minifier-terser@^6.0.2:
terser "^5.10.0"
html-webpack-plugin@^5.5.0:
- version "5.5.1"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763"
- integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e"
+ integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==
dependencies:
"@types/html-minifier-terser" "^6.0.0"
html-minifier-terser "^6.0.2"
@@ -5199,7 +6588,7 @@ http-proxy-agent@^4.0.1:
agent-base "6"
debug "4"
-http-proxy-middleware@^2.0.3:
+http-proxy-middleware@^2.0.3, http-proxy-middleware@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
@@ -5219,6 +6608,15 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
+http-signature@~1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9"
+ integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^2.0.2"
+ sshpk "^1.14.1"
+
https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
@@ -5227,12 +6625,17 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-iconv-lite@0.4.24:
+iconv-lite@0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -5263,6 +6666,11 @@ identity-obj-proxy@^3.0.0:
dependencies:
harmony-reflect "^1.4.6"
+ieee754@^1.1.12, ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore@^5.2.0:
version "5.2.4"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
@@ -5307,7 +6715,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -5317,6 +6725,11 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
ini@^1.3.5:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
@@ -5337,9 +6750,9 @@ ipaddr.js@1.9.1:
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
ipaddr.js@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
- integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f"
+ integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==
is-arguments@^1.1.1:
version "1.1.1"
@@ -5385,15 +6798,27 @@ is-boolean-object@^1.1.0:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-browser@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9"
+ integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==
+
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+is-ci@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+ integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+ dependencies:
+ ci-info "^3.2.0"
+
is-core-module@^2.11.0, is-core-module@^2.9.0:
- version "2.12.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4"
- integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
+ version "2.12.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+ integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
dependencies:
has "^1.0.3"
@@ -5414,6 +6839,16 @@ is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+is-finite@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
+
+is-firefox@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-firefox/-/is-firefox-1.0.3.tgz#2a2a1567783a417f6e158323108f3861b0918562"
+ integrity sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==
+
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@@ -5431,11 +6866,29 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-iexplorer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-iexplorer/-/is-iexplorer-1.0.0.tgz#1d72bc66d3fe22eaf6170dda8cf10943248cfc76"
+ integrity sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==
+
+is-installed-globally@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+ integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
+ dependencies:
+ global-dirs "^3.0.0"
+ is-path-inside "^3.0.2"
+
is-map@^2.0.1, is-map@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+is-mobile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-4.0.0.tgz#bba396eb9656e2739afde3053d7191da310fc758"
+ integrity sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==
+
is-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
@@ -5463,11 +6916,16 @@ is-obj@^1.0.1:
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
-is-path-inside@^3.0.3:
+is-path-inside@^3.0.2, is-path-inside@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
+
is-plain-obj@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
@@ -5513,6 +6971,11 @@ is-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+is-string-blank@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-string-blank/-/is-string-blank-1.0.1.tgz#866dca066d41d2894ebdfd2d8fe93e586e583a03"
+ integrity sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==
+
is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -5520,6 +6983,11 @@ is-string@^1.0.5, is-string@^1.0.7:
dependencies:
has-tostringtag "^1.0.0"
+is-svg-path@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-svg-path/-/is-svg-path-1.0.2.tgz#77ab590c12b3d20348e5c7a13d0040c87784dda0"
+ integrity sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==
+
is-symbol@^1.0.2, is-symbol@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
@@ -5538,11 +7006,16 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9:
gopd "^1.0.1"
has-tostringtag "^1.0.0"
-is-typedarray@^1.0.0:
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
is-weakmap@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
@@ -5570,7 +7043,12 @@ is-wsl@^2.2.0:
dependencies:
is-docker "^2.0.0"
-isarray@^2.0.5:
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@^2.0.1, isarray@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
@@ -5585,6 +7063,11 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
+
istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
@@ -5628,14 +7111,14 @@ istanbul-reports@^3.1.3:
istanbul-lib-report "^3.0.0"
jake@^10.8.5:
- version "10.8.5"
- resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
- integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
+ version "10.8.7"
+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+ integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
dependencies:
async "^3.2.3"
chalk "^4.0.2"
- filelist "^1.0.1"
- minimatch "^3.0.4"
+ filelist "^1.0.4"
+ minimatch "^3.1.2"
jest-changed-files@^27.5.1:
version "27.5.1"
@@ -6176,10 +7659,16 @@ jiti@^1.18.2:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
-js-sdsl@^4.1.4:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430"
- integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==
+joi@^17.7.0:
+ version "17.9.2"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690"
+ integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+ "@hapi/topo" "^5.0.0"
+ "@sideway/address" "^4.1.3"
+ "@sideway/formula" "^3.0.1"
+ "@sideway/pinpoint" "^2.0.0"
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
@@ -6201,6 +7690,11 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -6259,7 +7753,7 @@ json-schema-traverse@^1.0.0:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-json-schema@^0.4.0:
+json-schema@0.4.0, json-schema@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
@@ -6269,6 +7763,11 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
json5@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
@@ -6295,6 +7794,16 @@ jsonpointer@^5.0.0:
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
+jsprim@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d"
+ integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.4.0"
+ verror "1.10.0"
+
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
@@ -6303,6 +7812,11 @@ jsonpointer@^5.0.0:
array-includes "^3.1.5"
object.assign "^4.1.3"
+kdbush@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0"
+ integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==
+
kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
@@ -6338,6 +7852,11 @@ launch-editor@^2.6.0:
picocolors "^1.0.0"
shell-quote "^1.7.3"
+lazy-ass@1.6.0, lazy-ass@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
+ integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==
+
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -6369,6 +7888,25 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+listr2@^3.8.3:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
+ integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==
+ dependencies:
+ cli-truncate "^2.1.0"
+ colorette "^2.0.16"
+ log-update "^4.0.0"
+ p-map "^4.0.0"
+ rfdc "^1.3.0"
+ rxjs "^7.5.1"
+ through "^2.3.8"
+ wrap-ansi "^7.0.0"
+
+load-script@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4"
+ integrity sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==
+
loader-runner@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
@@ -6425,6 +7963,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+lodash.once@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
+
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@@ -6440,6 +7983,24 @@ lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+log-symbols@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+log-update@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
+ integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
+ dependencies:
+ ansi-escapes "^4.3.0"
+ cli-cursor "^3.1.0"
+ slice-ansi "^4.0.0"
+ wrap-ansi "^6.2.0"
+
loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -6468,7 +8029,7 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-lz-string@^1.4.4:
+lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
@@ -6494,6 +8055,52 @@ makeerror@1.0.12:
dependencies:
tmpl "1.0.5"
+map-limit@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38"
+ integrity sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==
+ dependencies:
+ once "~1.3.0"
+
+map-stream@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
+ integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==
+
+mapbox-gl@1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.10.1.tgz#7dbd53bdf2f78e45e125c1115e94dea286ef663c"
+ integrity sha512-0aHt+lFUpYfvh0kMIqXqNXqoYMuhuAsMlw87TbhWrw78Tx2zfuPI0Lx31/YPUgJ+Ire0tzQ4JnuBL7acDNXmMg==
+ dependencies:
+ "@mapbox/geojson-rewind" "^0.5.0"
+ "@mapbox/geojson-types" "^1.0.2"
+ "@mapbox/jsonlint-lines-primitives" "^2.0.2"
+ "@mapbox/mapbox-gl-supported" "^1.5.0"
+ "@mapbox/point-geometry" "^0.1.0"
+ "@mapbox/tiny-sdf" "^1.1.1"
+ "@mapbox/unitbezier" "^0.0.0"
+ "@mapbox/vector-tile" "^1.3.1"
+ "@mapbox/whoots-js" "^3.1.0"
+ csscolorparser "~1.0.3"
+ earcut "^2.2.2"
+ geojson-vt "^3.2.1"
+ gl-matrix "^3.2.1"
+ grid-index "^1.1.0"
+ minimist "^1.2.5"
+ murmurhash-js "^1.0.0"
+ pbf "^3.2.1"
+ potpack "^1.0.1"
+ quickselect "^2.0.0"
+ rw "^1.3.3"
+ supercluster "^7.0.0"
+ tinyqueue "^2.0.3"
+ vt-pbf "^3.1.1"
+
+math-log2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/math-log2/-/math-log2-1.0.1.tgz#fb8941be5f5ebe8979e718e6273b178e58694565"
+ integrity sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==
+
mdn-data@2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
@@ -6510,11 +8117,16 @@ media-typer@0.3.0:
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
memfs@^3.1.2, memfs@^3.4.3:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.1.tgz#f0cd1e2bfaef58f6fe09bfb9c2288f07fea099ec"
- integrity sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6"
+ integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==
dependencies:
- fs-monkey "^1.0.3"
+ fs-monkey "^1.0.4"
+
+memoize-one@^5.1.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
+ integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
merge-descriptors@1.0.1:
version "1.0.1"
@@ -6549,7 +8161,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -6572,9 +8184,9 @@ min-indent@^1.0.0:
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
mini-css-extract-plugin@^2.4.5:
- version "2.7.5"
- resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5"
- integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==
+ version "2.7.6"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d"
+ integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==
dependencies:
schema-utils "^4.0.0"
@@ -6597,7 +8209,7 @@ minimatch@^5.0.1:
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.6:
+minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7, minimist@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@@ -6609,6 +8221,32 @@ mkdirp@~0.5.1:
dependencies:
minimist "^1.2.6"
+mouse-change@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/mouse-change/-/mouse-change-1.4.0.tgz#c2b77e5bfa34a43ce1445c8157a4e4dc9895c14f"
+ integrity sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==
+ dependencies:
+ mouse-event "^1.0.0"
+
+mouse-event-offset@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz#dfd86a6e248c6ba8cad53b905d5037a2063e9984"
+ integrity sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==
+
+mouse-event@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/mouse-event/-/mouse-event-1.0.5.tgz#b3789edb7109997d5a932d1d01daa1543a501732"
+ integrity sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==
+
+mouse-wheel@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mouse-wheel/-/mouse-wheel-1.2.0.tgz#6d2903b1ea8fb48e61f1b53b9036773f042cdb5c"
+ integrity sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==
+ dependencies:
+ right-now "^1.0.0"
+ signum "^1.0.0"
+ to-px "^1.0.1"
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -6632,6 +8270,18 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
+mumath@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.4.tgz#48d4a0f0fd8cad4e7b32096ee89b161a63d30bbf"
+ integrity sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==
+ dependencies:
+ almost-equal "^1.1.0"
+
+murmurhash-js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51"
+ integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==
+
mz@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
@@ -6646,6 +8296,11 @@ nanoid@^3.3.6:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+native-promise-only@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11"
+ integrity sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==
+
natural-compare-lite@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
@@ -6656,6 +8311,15 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+needle@^2.5.2:
+ version "2.9.1"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
+ integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
negotiator@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
@@ -6666,6 +8330,11 @@ neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+next-tick@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
+ integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
+
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -6684,10 +8353,10 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-node-releases@^2.0.8:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f"
- integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==
+node-releases@^2.0.12:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+ integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@@ -6699,12 +8368,24 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+normalize-svg-path@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c"
+ integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==
+ dependencies:
+ svg-arc-to-cubic-bezier "^3.0.0"
+
+normalize-svg-path@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz#456360e60ece75fbef7b5d7e160480e7ffd16fe5"
+ integrity sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==
+
normalize-url@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-npm-run-path@^4.0.1:
+npm-run-path@^4.0.0, npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
@@ -6725,12 +8406,19 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
+number-is-integer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-integer/-/number-is-integer-1.0.1.tgz#e59bca172ffed27318e79c7ceb6cb72c095b2152"
+ integrity sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==
+ dependencies:
+ is-finite "^1.0.1"
+
nwsapi@^2.2.0:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5"
- integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2"
+ integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==
-object-assign@^4.0.1, object-assign@^4.1.1:
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -6831,14 +8519,21 @@ on-headers@~1.0.2:
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-once@^1.3.0:
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
wrappy "1"
-onetime@^5.1.2:
+once@~1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.0, onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -6878,6 +8573,11 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+ospath@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b"
+ integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==
+
p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -6913,6 +8613,13 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
p-retry@^4.5.0:
version "4.6.2"
resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
@@ -6926,6 +8633,11 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+papaparse@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.4.1.tgz#f45c0f871853578bd3a30f92d96fdcfb6ebea127"
+ integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==
+
param-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
@@ -6941,6 +8653,11 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+parenthesis@^3.1.5:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.8.tgz#3457fccb8f05db27572b841dad9d2630b912f125"
+ integrity sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==
+
parse-json@^5.0.0, parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -6951,6 +8668,23 @@ parse-json@^5.0.0, parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-rect@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parse-rect/-/parse-rect-1.2.0.tgz#e0a5b0dbaaaee637a0a1eb9779969e19399d8dec"
+ integrity sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==
+ dependencies:
+ pick-by-alias "^1.2.0"
+
+parse-svg-path@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
+ integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==
+
+parse-unit@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-unit/-/parse-unit-1.0.1.tgz#7e1bb6d5bef3874c28e392526a2541170291eecf"
+ integrity sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==
+
parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
@@ -7004,11 +8738,36 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pause-stream@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==
+ dependencies:
+ through "~2.3"
+
+pbf@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a"
+ integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==
+ dependencies:
+ ieee754 "^1.1.12"
+ resolve-protobuf-schema "^2.1.0"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+pick-by-alias@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pick-by-alias/-/pick-by-alias-1.2.0.tgz#5f7cb2b1f21a6e1e884a0c87855aa4a37361107b"
+ integrity sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==
+
picocolors@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
@@ -7024,15 +8783,15 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pify@^2.3.0:
+pify@^2.2.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
pirates@^4.0.1, pirates@^4.0.4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
- integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
pkg-dir@^4.1.0, pkg-dir@^4.2.0:
version "4.2.0"
@@ -7048,6 +8807,71 @@ pkg-up@^3.1.0:
dependencies:
find-up "^3.0.0"
+plotly.js@^2.23.2:
+ version "2.24.2"
+ resolved "https://registry.yarnpkg.com/plotly.js/-/plotly.js-2.24.2.tgz#2145028c48c6527f2069b2ff4a6f1fdc616473a8"
+ integrity sha512-4Sx0bjEO2K8kdt0lvsne7/b2bc9h45SVEDGoA7hnoyZ6tU58aGMJTwXl+nmbE7P1jTVaPF3FmBy7w0NUCR1qtQ==
+ dependencies:
+ "@plotly/d3" "3.8.1"
+ "@plotly/d3-sankey" "0.7.2"
+ "@plotly/d3-sankey-circular" "0.33.1"
+ "@turf/area" "^6.4.0"
+ "@turf/bbox" "^6.4.0"
+ "@turf/centroid" "^6.0.2"
+ canvas-fit "^1.5.0"
+ color-alpha "1.0.4"
+ color-normalize "1.5.0"
+ color-parse "1.3.8"
+ color-rgba "2.1.1"
+ country-regex "^1.1.0"
+ d3-force "^1.2.1"
+ d3-format "^1.4.5"
+ d3-geo "^1.12.1"
+ d3-geo-projection "^2.9.0"
+ d3-hierarchy "^1.1.9"
+ d3-interpolate "^3.0.1"
+ d3-time "^1.1.0"
+ d3-time-format "^2.2.3"
+ fast-isnumeric "^1.1.4"
+ gl-mat4 "^1.2.0"
+ gl-text "^1.3.1"
+ glslify "^7.1.1"
+ has-hover "^1.0.1"
+ has-passive-events "^1.0.0"
+ is-mobile "^4.0.0"
+ mapbox-gl "1.10.1"
+ mouse-change "^1.4.0"
+ mouse-event-offset "^3.0.2"
+ mouse-wheel "^1.2.0"
+ native-promise-only "^0.8.1"
+ parse-svg-path "^0.1.2"
+ point-in-polygon "^1.1.0"
+ polybooljs "^1.2.0"
+ probe-image-size "^7.2.3"
+ regl "npm:@plotly/regl@^2.1.2"
+ regl-error2d "^2.0.12"
+ regl-line2d "^3.1.2"
+ regl-scatter2d "^3.2.9"
+ regl-splom "^1.0.14"
+ strongly-connected-components "^1.0.1"
+ superscript-text "^1.0.0"
+ svg-path-sdf "^1.1.3"
+ tinycolor2 "^1.4.2"
+ to-px "1.0.1"
+ topojson-client "^3.1.0"
+ webgl-context "^2.2.0"
+ world-calendars "^1.0.3"
+
+point-in-polygon@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz#b0af2616c01bdee341cbf2894df643387ca03357"
+ integrity sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==
+
+polybooljs@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/polybooljs/-/polybooljs-1.2.0.tgz#b4390c2e079d4c262d3b2504c6288d95ba7a4758"
+ integrity sha512-mKjR5nolISvF+q2BtC1fi/llpxBPTQ3wLWN8+ldzdw2Hocpc8C72ZqnamCM4Z6z+68GVVjkeM01WJegQmZ8MEQ==
+
postcss-attribute-case-insensitive@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741"
@@ -7324,10 +9148,10 @@ postcss-modules-extract-imports@^3.0.0:
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
-postcss-modules-local-by-default@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
- integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
+postcss-modules-local-by-default@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524"
+ integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==
dependencies:
icss-utils "^5.0.0"
postcss-selector-parser "^6.0.2"
@@ -7556,9 +9380,9 @@ postcss-selector-not@^6.0.1:
postcss-selector-parser "^6.0.10"
postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9:
- version "6.0.12"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz#2efae5ffab3c8bfb2b7fbf0c426e3bca616c4abb"
- integrity sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==
+ version "6.0.13"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
+ integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
@@ -7591,15 +9415,20 @@ postcss@^7.0.35:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.23, postcss@^8.4.4:
- version "8.4.23"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab"
- integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==
+postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.4:
+ version "8.4.24"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
+ integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
+potpack@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14"
+ integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -7610,7 +9439,7 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
-pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
+pretty-bytes@^5.3.0, pretty-bytes@^5.4.1, pretty-bytes@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
@@ -7651,6 +9480,15 @@ pretty-format@^29.0.0, pretty-format@^29.5.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+probe-image-size@^7.2.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-7.2.3.tgz#d49c64be540ec8edea538f6f585f65a9b3ab4309"
+ integrity sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==
+ dependencies:
+ lodash.merge "^4.6.2"
+ needle "^2.5.2"
+ stream-parser "~0.3.1"
+
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -7671,7 +9509,7 @@ prompts@^2.0.1, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.6.2, prop-types@^15.8.1:
+prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7680,6 +9518,11 @@ prop-types@^15.6.2, prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
+protocol-buffers-schema@^3.3.1:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03"
+ integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==
+
proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@@ -7688,11 +9531,31 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
-psl@^1.1.33:
+proxy-from-env@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
+ integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==
+
+ps-tree@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd"
+ integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==
+ dependencies:
+ event-stream "=3.3.4"
+
+psl@^1.1.28, psl@^1.1.33:
version "1.9.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
punycode@^2.1.0, punycode@^2.1.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
@@ -7710,6 +9573,13 @@ qs@6.11.0:
dependencies:
side-channel "^1.0.4"
+qs@~6.10.3:
+ version "6.10.5"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4"
+ integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==
+ dependencies:
+ side-channel "^1.0.4"
+
querystringify@^2.1.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
@@ -7720,6 +9590,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+quickselect@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018"
+ integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==
+
raf@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
@@ -7804,10 +9679,15 @@ react-error-overlay@^6.0.11:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
+react-fast-compare@^3.0.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
+ integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
+
react-hook-form@^7.43.9:
- version "7.43.9"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.43.9.tgz#84b56ac2f38f8e946c6032ccb760e13a1037c66d"
- integrity sha512-AUDN3Pz2NSeoxQ7Hs6OhQhDr6gtF9YRuutGDwPQqhSUAHJSgGl2VeY3qN19MG0SucpjgDiuMJ4iC5T5uB+eaNQ==
+ version "7.47.0"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.47.0.tgz#a42f07266bd297ddf1f914f08f4b5f9783262f31"
+ integrity sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
@@ -7824,10 +9704,28 @@ react-is@^18.0.0, react-is@^18.2.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+react-player@^2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.13.0.tgz#b6fb252bf70574608ac711f6c83d7057c8fb0c14"
+ integrity sha512-gkY7ZdbVFztlKFFhCPcnDrFQm+L399b8fhWsKatZ+b2wpKJwfUHBXQFMRxqYQGT0ic1/wQ7D7EZEWy7ZBqk2pw==
+ dependencies:
+ deepmerge "^4.0.0"
+ load-script "^1.0.0"
+ memoize-one "^5.1.1"
+ prop-types "^15.7.2"
+ react-fast-compare "^3.0.1"
+
+react-plotly.js@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/react-plotly.js/-/react-plotly.js-2.6.0.tgz#ad6b68ee64f1b5cfa142ee92c59687f9c2c09209"
+ integrity sha512-g93xcyhAVCSt9kV1svqG1clAEdL6k3U+jjuSzfTV7owaSU9Go6Ph8bl25J+jKfKvIGAEYpe4qj++WHJuc9IaeA==
+ dependencies:
+ prop-types "^15.8.1"
+
react-redux@^8.0.1:
- version "8.0.5"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd"
- integrity sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.1.tgz#8e740f3fd864a4cd0de5ba9cdc8ad39cc9e7c81a"
+ integrity sha512-5W0QaKtEhj+3bC0Nj0NkqkhIv8gLADH/2kYFMTHxCVqQILiWzLv6MaLuV5wJU3BQEdHKzTfcvPN0WMS6SC1oyA==
dependencies:
"@babel/runtime" "^7.12.1"
"@types/hoist-non-react-statics" "^3.3.1"
@@ -7920,7 +9818,17 @@ read-cache@^1.0.0:
dependencies:
pify "^2.3.0"
-readable-stream@^2.0.1:
+"readable-stream@>=1.0.33-1 <1.1.0-0":
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
@@ -8033,6 +9941,82 @@ regjsparser@^0.9.1:
dependencies:
jsesc "~0.5.0"
+regl-error2d@^2.0.12:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/regl-error2d/-/regl-error2d-2.0.12.tgz#3b976e13fe641d5242a154fcacc80aecfa0a9881"
+ integrity sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==
+ dependencies:
+ array-bounds "^1.0.1"
+ color-normalize "^1.5.0"
+ flatten-vertex-data "^1.0.2"
+ object-assign "^4.1.1"
+ pick-by-alias "^1.2.0"
+ to-float32 "^1.1.0"
+ update-diff "^1.1.0"
+
+regl-line2d@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/regl-line2d/-/regl-line2d-3.1.2.tgz#2bedef7f44c1f7fae75c90f9918258723ca84c1c"
+ integrity sha512-nmT7WWS/WxmXAQMkgaMKWXaVmwJ65KCrjbqHGOUjjqQi6shfT96YbBOvelXwO9hG7/hjvbzjtQ2UO0L3e7YaXQ==
+ dependencies:
+ array-bounds "^1.0.1"
+ array-find-index "^1.0.2"
+ array-normalize "^1.1.4"
+ color-normalize "^1.5.0"
+ earcut "^2.1.5"
+ es6-weak-map "^2.0.3"
+ flatten-vertex-data "^1.0.2"
+ glslify "^7.0.0"
+ object-assign "^4.1.1"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+ to-float32 "^1.1.0"
+
+regl-scatter2d@^3.2.3, regl-scatter2d@^3.2.9:
+ version "3.2.9"
+ resolved "https://registry.yarnpkg.com/regl-scatter2d/-/regl-scatter2d-3.2.9.tgz#cd27b014c355e80d96fb2f273b563fd8f1b094f0"
+ integrity sha512-PNrXs+xaCClKpiB2b3HZ2j3qXQXhC5kcTh/Nfgx9rLO0EpEhab0BSQDqAsbdbpdf+pSHSJvbgitB7ulbGeQ+Fg==
+ dependencies:
+ "@plotly/point-cluster" "^3.1.9"
+ array-range "^1.0.1"
+ array-rearrange "^2.2.2"
+ clamp "^1.0.1"
+ color-id "^1.1.0"
+ color-normalize "^1.5.0"
+ color-rgba "^2.1.1"
+ flatten-vertex-data "^1.0.2"
+ glslify "^7.0.0"
+ is-iexplorer "^1.0.0"
+ object-assign "^4.1.1"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+ to-float32 "^1.1.0"
+ update-diff "^1.1.0"
+
+regl-splom@^1.0.14:
+ version "1.0.14"
+ resolved "https://registry.yarnpkg.com/regl-splom/-/regl-splom-1.0.14.tgz#58800b7bbd7576aa323499a1966868a6c9ea1456"
+ integrity sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==
+ dependencies:
+ array-bounds "^1.0.1"
+ array-range "^1.0.1"
+ color-alpha "^1.0.4"
+ flatten-vertex-data "^1.0.2"
+ parse-rect "^1.2.0"
+ pick-by-alias "^1.2.0"
+ raf "^3.4.1"
+ regl-scatter2d "^3.2.3"
+
+regl@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/regl/-/regl-2.1.0.tgz#7dae71e9ff20f29c4f42f510c70cd92ebb6b657c"
+ integrity sha512-oWUce/aVoEvW5l2V0LK7O5KJMzUSKeiOwFuJehzpSFd43dO5spP9r+sSUfhKtsky4u6MCqWJaRL+abzExynfTg==
+
+"regl@npm:@plotly/regl@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@plotly/regl/-/regl-2.1.2.tgz#fd31e3e820ed8824d59a67ab5e766bb101b810b6"
+ integrity sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==
+
relateurl@^0.2.7:
version "0.2.7"
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
@@ -8049,6 +10033,13 @@ renderkid@^3.0.0:
lodash "^4.17.21"
strip-ansi "^6.0.1"
+request-progress@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe"
+ integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==
+ dependencies:
+ throttleit "^1.0.0"
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -8086,6 +10077,13 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-protobuf-schema@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758"
+ integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==
+ dependencies:
+ protocol-buffers-schema "^3.3.1"
+
resolve-url-loader@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57"
@@ -8102,7 +10100,12 @@ resolve.exports@^1.1.0:
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999"
integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==
-resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2:
+resolve@^0.6.1:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46"
+ integrity sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==
+
+resolve@^1.0.0, resolve@^1.1.10, resolve@^1.1.5, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2:
version "1.22.2"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
@@ -8120,6 +10123,14 @@ resolve@^2.0.0-next.4:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
retry@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
@@ -8130,6 +10141,16 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+rfdc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
+ integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
+
+right-now@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/right-now/-/right-now-1.0.0.tgz#6e89609deebd7dcdaf8daecc9aea39cf585a0918"
+ integrity sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==
+
rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -8161,6 +10182,18 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+rw@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+ integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
+
+rxjs@^7.5.1, rxjs@^7.8.0:
+ version "7.8.1"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
+ integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
+ dependencies:
+ tslib "^2.1.0"
+
safe-array-concat@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060"
@@ -8176,7 +10209,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -8190,7 +10223,7 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -8208,7 +10241,7 @@ sass-loader@^12.3.0:
klona "^2.0.4"
neo-async "^2.6.2"
-sax@~1.2.4:
+sax@^1.2.4, sax@~1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@@ -8245,19 +10278,19 @@ schema-utils@^2.6.5:
ajv "^6.12.4"
ajv-keywords "^3.5.2"
-schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99"
- integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==
+schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
+ integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
dependencies:
"@types/json-schema" "^7.0.8"
ajv "^6.12.5"
ajv-keywords "^3.5.2"
schema-utils@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d"
- integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b"
+ integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==
dependencies:
"@types/json-schema" "^7.0.9"
ajv "^8.9.0"
@@ -8282,9 +10315,9 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0"
- integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==
+ version "7.5.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
+ integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
dependencies:
lru-cache "^6.0.0"
@@ -8354,6 +10387,11 @@ setprototypeof@1.2.0:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+shallow-copy@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170"
+ integrity sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -8385,6 +10423,11 @@ signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+signum@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/signum/-/signum-1.0.0.tgz#74a7d2bf2a20b40eba16a92b152124f1d559fa77"
+ integrity sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -8400,6 +10443,24 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
sockjs@^0.3.24:
version "0.3.24"
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
@@ -8486,16 +10547,43 @@ spdy@^4.0.2:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
+split@0.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
+ integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==
+ dependencies:
+ through "2"
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+sshpk@^1.14.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+ integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
stable@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+stack-trace@0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695"
+ integrity sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==
+
stack-utils@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
@@ -8508,6 +10596,27 @@ stackframe@^1.3.4:
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
+start-server-and-test@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-2.0.0.tgz#0644809d63036a8a001efb70582f3e37ebfdd33d"
+ integrity sha512-UqKLw0mJbfrsG1jcRLTUlvuRi9sjNuUiDOLI42r7R5fA9dsFoywAy9DoLXNYys9B886E4RCKb+qM1Gzu96h7DQ==
+ dependencies:
+ arg "^5.0.2"
+ bluebird "3.7.2"
+ check-more-types "2.24.0"
+ debug "4.3.4"
+ execa "5.1.1"
+ lazy-ass "1.6.0"
+ ps-tree "1.2.0"
+ wait-on "7.0.1"
+
+static-eval@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.1.0.tgz#a16dbe54522d7fa5ef1389129d813fd47b148014"
+ integrity sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==
+ dependencies:
+ escodegen "^1.11.1"
+
statuses@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
@@ -8525,6 +10634,25 @@ stop-iteration-iterator@^1.0.0:
dependencies:
internal-slot "^1.0.4"
+stream-combiner@~0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
+ integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==
+ dependencies:
+ duplexer "~0.1.1"
+
+stream-parser@~0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773"
+ integrity sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==
+ dependencies:
+ debug "2"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
@@ -8546,6 +10674,13 @@ string-natural-compare@^3.0.1:
resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
+string-split-by@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812"
+ integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==
+ dependencies:
+ parenthesis "^3.1.5"
+
string-width@^4.1.0, string-width@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -8603,6 +10738,11 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -8627,9 +10767,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
ansi-regex "^5.0.1"
strip-ansi@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
- integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
dependencies:
ansi-regex "^6.0.1"
@@ -8665,10 +10805,15 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+strongly-connected-components@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz#0920e2b4df67c8eaee96c6b6234fe29e873dba99"
+ integrity sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==
+
style-loader@^3.3.1:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.2.tgz#eaebca714d9e462c19aa1e3599057bc363924899"
- integrity sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff"
+ integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==
stylehacks@^5.1.1:
version "5.1.1"
@@ -8678,10 +10823,10 @@ stylehacks@^5.1.1:
browserslist "^4.21.4"
postcss-selector-parser "^6.0.4"
-stylis@4.1.4:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.4.tgz#9cb60e7153d8ac6d02d773552bf51c7a0344535b"
- integrity sha512-USf5pszRYwuE6hg9by0OkKChkQYEXfkeTtm0xKw+jqQhwyjCVLdYyMBK7R+n7dhzsblAWJnGxju4vxq5eH20GQ==
+stylis@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
+ integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
sucrase@^3.32.0:
version "3.32.0"
@@ -8696,6 +10841,18 @@ sucrase@^3.32.0:
pirates "^4.0.1"
ts-interface-checker "^0.1.9"
+supercluster@^7.0.0:
+ version "7.1.5"
+ resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.5.tgz#65a6ce4a037a972767740614c19051b64b8be5a3"
+ integrity sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==
+ dependencies:
+ kdbush "^3.0.0"
+
+superscript-text@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/superscript-text/-/superscript-text-1.0.0.tgz#e7cb2752567360df50beb0610ce8df3d71d8dfd8"
+ integrity sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==
+
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -8710,7 +10867,7 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
-supports-color@^8.0.0:
+supports-color@^8.0.0, supports-color@^8.1.1:
version "8.1.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
@@ -8730,11 +10887,37 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+svg-arc-to-cubic-bezier@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6"
+ integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==
+
svg-parser@^2.0.2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+svg-path-bounds@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz#00312f672b08afc432a66ddfbd06db40cec8d0d0"
+ integrity sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==
+ dependencies:
+ abs-svg-path "^0.1.1"
+ is-svg-path "^1.0.1"
+ normalize-svg-path "^1.0.0"
+ parse-svg-path "^0.1.2"
+
+svg-path-sdf@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz#92957a31784c0eaf68945472c8dc6bf9e6d126fc"
+ integrity sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==
+ dependencies:
+ bitmap-sdf "^1.0.0"
+ draw-svg-path "^1.0.0"
+ is-svg-path "^1.0.1"
+ parse-svg-path "^0.1.2"
+ svg-path-bounds "^1.0.1"
+
svgo@^1.2.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
@@ -8835,23 +11018,23 @@ terminal-link@^2.0.0:
supports-hyperlinks "^2.0.0"
terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7:
- version "5.3.7"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7"
- integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==
+ version "5.3.9"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+ integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
dependencies:
"@jridgewell/trace-mapping" "^0.3.17"
jest-worker "^27.4.5"
schema-utils "^3.1.1"
serialize-javascript "^6.0.1"
- terser "^5.16.5"
+ terser "^5.16.8"
-terser@^5.0.0, terser@^5.10.0, terser@^5.16.5:
- version "5.17.1"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.1.tgz#948f10830454761e2eeedc6debe45c532c83fd69"
- integrity sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==
+terser@^5.0.0, terser@^5.10.0, terser@^5.16.8:
+ version "5.18.1"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460"
+ integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==
dependencies:
- "@jridgewell/source-map" "^0.3.2"
- acorn "^8.5.0"
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.8.2"
commander "^2.20.0"
source-map-support "~0.5.20"
@@ -8888,11 +11071,54 @@ throat@^6.0.1:
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe"
integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+ integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==
+
+through2@^0.6.3:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+ integrity sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==
+ dependencies:
+ readable-stream ">=1.0.33-1 <1.1.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
+
+through2@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@2, through@^2.3.8, through@~2.3, through@~2.3.1:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+tinycolor2@^1.4.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
+ integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
+
+tinyqueue@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08"
+ integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==
+
+tmp@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+ integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+ dependencies:
+ rimraf "^3.0.0"
+
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -8903,6 +11129,25 @@ to-fast-properties@^2.0.0:
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+to-float32@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/to-float32/-/to-float32-1.1.0.tgz#39bd3b11eadccd490c08f5f9171da5127b6f3946"
+ integrity sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==
+
+to-px@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.0.1.tgz#5bbaed5e5d4f76445bcc903c293a2307dd324646"
+ integrity sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==
+ dependencies:
+ parse-unit "^1.0.1"
+
+to-px@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.1.0.tgz#b6b269ed5db0cc9aefc15272a4c8bcb2ca1e99ca"
+ integrity sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw==
+ dependencies:
+ parse-unit "^1.0.1"
+
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -8915,16 +11160,31 @@ toidentifier@1.0.1:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+topojson-client@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99"
+ integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==
+ dependencies:
+ commander "2"
+
tough-cookie@^4.0.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
- integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
dependencies:
psl "^1.1.33"
punycode "^2.1.1"
universalify "^0.2.0"
url-parse "^1.5.3"
+tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
tr46@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
@@ -8964,10 +11224,10 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.3:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
- integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
+tslib@^2.0.3, tslib@^2.1.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+ integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
tsutils@^3.21.0:
version "3.21.0"
@@ -8976,6 +11236,18 @@ tsutils@^3.21.0:
dependencies:
tslib "^1.8.1"
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -9018,6 +11290,16 @@ type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.7.2:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
+ integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
+
typed-array-length@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
@@ -9027,6 +11309,14 @@ typed-array-length@^1.0.4:
for-each "^0.3.3"
is-typed-array "^1.1.9"
+typedarray-pool@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/typedarray-pool/-/typedarray-pool-1.2.0.tgz#e7e90720144ba02b9ed660438af6f3aacfe33ac3"
+ integrity sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==
+ dependencies:
+ bit-twiddle "^1.0.0"
+ dup "^1.0.0"
+
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
@@ -9034,6 +11324,11 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
typescript@^4.6.0:
version "4.9.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
@@ -9094,17 +11389,22 @@ unpipe@1.0.0, unpipe@~1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-unquote@~1.1.1:
+unquote@^1.1.0, unquote@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==
+untildify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
+ integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+
upath@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
-update-browserslist-db@^1.0.10:
+update-browserslist-db@^1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
@@ -9112,6 +11412,11 @@ update-browserslist-db@^1.0.10:
escalade "^3.1.1"
picocolors "^1.0.0"
+update-diff@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/update-diff/-/update-diff-1.1.0.tgz#f510182d81ee819fb82c3a6b22b62bbdeda7808f"
+ integrity sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==
+
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -9176,6 +11481,24 @@ vary@~1.1.2:
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vt-pbf@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac"
+ integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==
+ dependencies:
+ "@mapbox/point-geometry" "0.1.0"
+ "@mapbox/vector-tile" "^1.3.1"
+ pbf "^3.2.1"
+
w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
@@ -9190,6 +11513,17 @@ w3c-xmlserializer@^2.0.0:
dependencies:
xml-name-validator "^3.0.0"
+wait-on@7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9"
+ integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==
+ dependencies:
+ axios "^0.27.2"
+ joi "^17.7.0"
+ lodash "^4.17.21"
+ minimist "^1.2.7"
+ rxjs "^7.8.0"
+
walker@^1.0.7:
version "1.0.8"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
@@ -9212,11 +11546,23 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
+weak-map@^1.0.5:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.8.tgz#394c18a9e8262e790544ed8b55c6a4ddad1cb1a3"
+ integrity sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==
+
web-vitals@^2.1.0:
version "2.1.4"
resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c"
integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==
+webgl-context@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/webgl-context/-/webgl-context-2.2.0.tgz#8f37d7257cf6df1cd0a49e6a7b1b721b94cc86a0"
+ integrity sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==
+ dependencies:
+ get-canvas-context "^1.0.1"
+
webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -9244,9 +11590,9 @@ webpack-dev-middleware@^5.3.1:
schema-utils "^4.0.0"
webpack-dev-server@^4.6.0:
- version "4.13.3"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz#9feb740b8b56b886260bae1360286818a221bae8"
- integrity sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==
+ version "4.15.1"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7"
+ integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==
dependencies:
"@types/bonjour" "^3.5.9"
"@types/connect-history-api-fallback" "^1.3.5"
@@ -9254,7 +11600,7 @@ webpack-dev-server@^4.6.0:
"@types/serve-index" "^1.9.1"
"@types/serve-static" "^1.13.10"
"@types/sockjs" "^0.3.33"
- "@types/ws" "^8.5.1"
+ "@types/ws" "^8.5.5"
ansi-html-community "^0.0.8"
bonjour-service "^1.0.11"
chokidar "^3.5.3"
@@ -9309,9 +11655,9 @@ webpack-sources@^3.2.3:
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack@^5.64.4:
- version "5.81.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.81.0.tgz#27a2e8466c8b4820d800a8d90f06ef98294f9956"
- integrity sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q==
+ version "5.88.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.0.tgz#a07aa2f8e7a64a8f1cec0c6c2e180e3cb34440c8"
+ integrity sha512-O3jDhG5e44qIBSi/P6KpcCcH7HD+nYIHVBhdWFxcLOcIGN8zGo5nqF3BjyNCxIh4p1vFdNnreZv2h2KkoAw3lw==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^1.0.0"
@@ -9319,10 +11665,10 @@ webpack@^5.64.4:
"@webassemblyjs/wasm-edit" "^1.11.5"
"@webassemblyjs/wasm-parser" "^1.11.5"
acorn "^8.7.1"
- acorn-import-assertions "^1.7.6"
+ acorn-import-assertions "^1.9.0"
browserslist "^4.14.5"
chrome-trace-event "^1.0.2"
- enhanced-resolve "^5.13.0"
+ enhanced-resolve "^5.15.0"
es-module-lexer "^1.2.1"
eslint-scope "5.1.1"
events "^3.2.0"
@@ -9332,7 +11678,7 @@ webpack@^5.64.4:
loader-runner "^4.2.0"
mime-types "^2.1.27"
neo-async "^2.6.2"
- schema-utils "^3.1.2"
+ schema-utils "^3.2.0"
tapable "^2.1.1"
terser-webpack-plugin "^5.3.7"
watchpack "^2.4.0"
@@ -9439,25 +11785,25 @@ word-wrap@^1.2.3, word-wrap@~1.2.3:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-workbox-background-sync@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9"
- integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==
+workbox-background-sync@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f"
+ integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg==
dependencies:
idb "^7.0.1"
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-broadcast-update@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66"
- integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==
+workbox-broadcast-update@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e"
+ integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ==
dependencies:
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-build@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389"
- integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==
+workbox-build@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0"
+ integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw==
dependencies:
"@apideck/better-ajv-errors" "^0.3.1"
"@babel/core" "^7.11.1"
@@ -9481,132 +11827,148 @@ workbox-build@6.5.4:
strip-comments "^2.0.1"
tempy "^0.6.0"
upath "^1.2.0"
- workbox-background-sync "6.5.4"
- workbox-broadcast-update "6.5.4"
- workbox-cacheable-response "6.5.4"
- workbox-core "6.5.4"
- workbox-expiration "6.5.4"
- workbox-google-analytics "6.5.4"
- workbox-navigation-preload "6.5.4"
- workbox-precaching "6.5.4"
- workbox-range-requests "6.5.4"
- workbox-recipes "6.5.4"
- workbox-routing "6.5.4"
- workbox-strategies "6.5.4"
- workbox-streams "6.5.4"
- workbox-sw "6.5.4"
- workbox-window "6.5.4"
-
-workbox-cacheable-response@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137"
- integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==
- dependencies:
- workbox-core "6.5.4"
-
-workbox-core@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba"
- integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==
-
-workbox-expiration@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539"
- integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==
+ workbox-background-sync "6.6.1"
+ workbox-broadcast-update "6.6.1"
+ workbox-cacheable-response "6.6.1"
+ workbox-core "6.6.1"
+ workbox-expiration "6.6.1"
+ workbox-google-analytics "6.6.1"
+ workbox-navigation-preload "6.6.1"
+ workbox-precaching "6.6.1"
+ workbox-range-requests "6.6.1"
+ workbox-recipes "6.6.1"
+ workbox-routing "6.6.1"
+ workbox-strategies "6.6.1"
+ workbox-streams "6.6.1"
+ workbox-sw "6.6.1"
+ workbox-window "6.6.1"
+
+workbox-cacheable-response@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9"
+ integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag==
+ dependencies:
+ workbox-core "6.6.1"
+
+workbox-core@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265"
+ integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw==
+
+workbox-expiration@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739"
+ integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A==
dependencies:
idb "^7.0.1"
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-google-analytics@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d"
- integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==
+workbox-google-analytics@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d"
+ integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA==
dependencies:
- workbox-background-sync "6.5.4"
- workbox-core "6.5.4"
- workbox-routing "6.5.4"
- workbox-strategies "6.5.4"
+ workbox-background-sync "6.6.1"
+ workbox-core "6.6.1"
+ workbox-routing "6.6.1"
+ workbox-strategies "6.6.1"
-workbox-navigation-preload@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212"
- integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==
+workbox-navigation-preload@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059"
+ integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA==
dependencies:
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-precaching@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72"
- integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==
+workbox-precaching@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2"
+ integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A==
dependencies:
- workbox-core "6.5.4"
- workbox-routing "6.5.4"
- workbox-strategies "6.5.4"
+ workbox-core "6.6.1"
+ workbox-routing "6.6.1"
+ workbox-strategies "6.6.1"
-workbox-range-requests@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399"
- integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==
+workbox-range-requests@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39"
+ integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g==
dependencies:
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-recipes@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb"
- integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==
+workbox-recipes@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae"
+ integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g==
dependencies:
- workbox-cacheable-response "6.5.4"
- workbox-core "6.5.4"
- workbox-expiration "6.5.4"
- workbox-precaching "6.5.4"
- workbox-routing "6.5.4"
- workbox-strategies "6.5.4"
+ workbox-cacheable-response "6.6.1"
+ workbox-core "6.6.1"
+ workbox-expiration "6.6.1"
+ workbox-precaching "6.6.1"
+ workbox-routing "6.6.1"
+ workbox-strategies "6.6.1"
-workbox-routing@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da"
- integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==
+workbox-routing@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581"
+ integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg==
dependencies:
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-strategies@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d"
- integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==
+workbox-strategies@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf"
+ integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw==
dependencies:
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
-workbox-streams@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69"
- integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==
+workbox-streams@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26"
+ integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q==
dependencies:
- workbox-core "6.5.4"
- workbox-routing "6.5.4"
+ workbox-core "6.6.1"
+ workbox-routing "6.6.1"
-workbox-sw@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736"
- integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==
+workbox-sw@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c"
+ integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ==
workbox-webpack-plugin@^6.4.1:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7"
- integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.1.tgz#4f81cc1ad4e5d2cd7477a86ba83c84ee2d187531"
+ integrity sha512-zpZ+ExFj9NmiI66cFEApyjk7hGsfJ1YMOaLXGXBoZf0v7Iu6hL0ZBe+83mnDq3YYWAfA3fnyFejritjOHkFcrA==
dependencies:
fast-json-stable-stringify "^2.1.0"
pretty-bytes "^5.4.1"
upath "^1.2.0"
webpack-sources "^1.4.3"
- workbox-build "6.5.4"
+ workbox-build "6.6.1"
-workbox-window@6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91"
- integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==
+workbox-window@6.6.1:
+ version "6.6.1"
+ resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e"
+ integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ==
dependencies:
"@types/trusted-types" "^2.0.2"
- workbox-core "6.5.4"
+ workbox-core "6.6.1"
+
+world-calendars@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/world-calendars/-/world-calendars-1.0.3.tgz#b25c5032ba24128ffc41d09faf4a5ec1b9c14335"
+ integrity sha512-sAjLZkBnsbHkHWVhrsCU5Sa/EVuf9QqgvrN8zyJ2L/F9FR9Oc6CvVK0674+PGAtmmmYQMH98tCUSO4QLQv3/TQ==
+ dependencies:
+ object-assign "^4.1.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
wrap-ansi@^7.0.0:
version "7.0.0"
@@ -9652,6 +12014,16 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xtend@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9"
+ integrity sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==
+
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@@ -9673,9 +12045,9 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
yaml@^2.1.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073"
- integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
+ integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
yargs-parser@^20.2.2:
version "20.2.9"
@@ -9695,6 +12067,14 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
diff --git a/frontend/src/features/login/loginSlice.js b/frontend/src/features/login/loginSlice.js
index ab81c34f..fa7447f2 100644
--- a/frontend/src/features/login/loginSlice.js
+++ b/frontend/src/features/login/loginSlice.js
@@ -42,23 +42,24 @@ function isResponseOk(response) {
}
}
+
+
export const login = createAsyncThunk(
"login/login",
async ({username, password}, { getState, dispatch }) => {
const csrf = getState().login.csrf;
- const response = await fetch("/api/login/", {
- method: "POST",
- credentials: "include",
- headers: {
- "Content-Type": "application/json",
- "X-CSRFToken": csrf,
- },
- body: JSON.stringify({username: username, password: password}),
-
- })
+ const response = fetch("/api/login/", {
+ method: "POST",
+ credentials: "include",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRFToken": csrf,
+ },
+ body: JSON.stringify({username: username, password: password}),
+ })
.then(isResponseOk)
.then((data) => {
- dispatch(fetchCsrf());
+ //dispatch(fetchCsrf());
return {isAuthenticated: true, user: data.user, error: null}
})
.catch((err) => {
diff --git a/nginx.default.template b/nginx.default.template
index 6a8f0d44..e8e91819 100644
--- a/nginx.default.template
+++ b/nginx.default.template
@@ -57,4 +57,18 @@ server {
proxy_read_timeout 20d;
proxy_buffering off;
}
+
+ # or /backend -> /static
+ location /backend {
+ proxy_pass http://app_server/static;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $remote_addr;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_redirect http://app_server/static $scheme://$http_host;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_read_timeout 20d;
+ proxy_buffering off;
+ }
}
diff --git a/pkpdapp/pkpdapp/api/__init__.py b/pkpdapp/pkpdapp/api/__init__.py
index bcf14eb0..1b41d03c 100644
--- a/pkpdapp/pkpdapp/api/__init__.py
+++ b/pkpdapp/pkpdapp/api/__init__.py
@@ -6,10 +6,10 @@
# flake8: noqa F401
from .views import (
- DatasetView, UserView, ProjectView,
- PharmacokineticView, DosedPharmacokineticView,
+ DatasetView, UserView, ProjectView, CompoundView,
+ PharmacokineticView, CombinedModelView,
PharmacodynamicView, DoseView,
- ProtocolView, SimulatePkView, SimulatePdView,
+ ProtocolView, SimulateCombinedView, SimulatePdView,
UnitView, BiomarkerTypeView, VariableView, SubjectView,
ProjectAccessView, NcaView, AuceView,
InferenceView, InferenceChainView,
@@ -17,4 +17,5 @@
StopInferenceView,
LogLikelihoodView, InferenceWizardView,
login_view, logout_view, get_csrf, SessionView, WhoAmIView,
+ SimulationViewSet,
)
diff --git a/pkpdapp/pkpdapp/api/serializers/__init__.py b/pkpdapp/pkpdapp/api/serializers/__init__.py
index ff9d9a66..1b540956 100644
--- a/pkpdapp/pkpdapp/api/serializers/__init__.py
+++ b/pkpdapp/pkpdapp/api/serializers/__init__.py
@@ -15,9 +15,11 @@
from .auce import AuceSerializer
from .biomarker_type import BiomarkerTypeSerializer
from .dose import DoseSerializer
+from .efficacy_experiment import EfficacySerializer
+from .compound import CompoundSerializer
from .models import (
PharmacokineticSerializer,
- DosedPharmacokineticSerializer,
+ CombinedModelSerializer,
PharmacodynamicSerializer,
PharmacodynamicSbmlSerializer,
)
@@ -38,5 +40,11 @@
from .subject import SubjectSerializer
from .unit import UnitSerializer
from .user import UserSerializer
+from .simulation import (
+ SimulationSerializer,
+ SimulationYAxisSerializer,
+ SimulationCxLineSerializer,
+ SimulationSliderSerializer,
+)
diff --git a/pkpdapp/pkpdapp/api/serializers/biomarker_type.py b/pkpdapp/pkpdapp/api/serializers/biomarker_type.py
index 9199d58e..7a862fea 100644
--- a/pkpdapp/pkpdapp/api/serializers/biomarker_type.py
+++ b/pkpdapp/pkpdapp/api/serializers/biomarker_type.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+from typing import Dict, List
from rest_framework import serializers
from pkpdapp.models import (
BiomarkerType
@@ -19,11 +20,11 @@ class Meta:
model = BiomarkerType
fields = '__all__'
- def get_data(self, bt):
+ def get_data(self, bt) -> Dict[str, List] | None:
return bt.data().to_dict(orient='list')
- def get_is_categorical(self, bt):
+ def get_is_categorical(self, bt) -> bool:
return bt.is_categorical()
- def get_is_continuous(self, bt):
+ def get_is_continuous(self, bt) -> bool:
return bt.is_continuous()
diff --git a/pkpdapp/pkpdapp/api/serializers/compound.py b/pkpdapp/pkpdapp/api/serializers/compound.py
new file mode 100644
index 00000000..2de12fb6
--- /dev/null
+++ b/pkpdapp/pkpdapp/api/serializers/compound.py
@@ -0,0 +1,64 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from rest_framework import serializers
+from pkpdapp.models import (
+ Compound
+)
+from pkpdapp.api.serializers import EfficacySerializer
+
+
+class BaseCompoundSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Compound
+ fields = '__all__'
+
+
+class CompoundSerializer(serializers.ModelSerializer):
+ efficacy_experiments = EfficacySerializer(many=True)
+
+ class Meta:
+ model = Compound
+ fields = '__all__'
+
+ def create(self, validated_data):
+ # save method of log_likelihood will create its own parameters,
+ # so ignore any parameters that are given
+ experiments = validated_data.pop('efficacy_experiments')
+ compound = BaseCompoundSerializer().create(
+ validated_data
+ )
+ for exp in experiments:
+ exp['compound'] = compound
+ serializer = EfficacySerializer()
+ serializer.create(exp)
+ return compound
+
+ def update(self, instance, validated_data):
+ experiments = validated_data.pop('efficacy_experiments')
+ old_experiments = list(instance.efficacy_experiments.all())
+ project = BaseCompoundSerializer().update(
+ instance, validated_data
+ )
+ for exp in experiments:
+ exp['compound'] = instance
+ serializer = EfficacySerializer()
+ try:
+ old_experiment = old_experiments.pop(0)
+ new_exp = serializer.update(
+ old_experiment, exp
+ )
+ new_exp.save()
+ except IndexError:
+ new_exp = serializer.create(exp)
+
+ # delete any old accesses
+ for old_exp in old_experiments:
+ old_exp.delete()
+
+ project.refresh_from_db()
+
+ return project
diff --git a/pkpdapp/pkpdapp/api/serializers/dataset.py b/pkpdapp/pkpdapp/api/serializers/dataset.py
index 4e561d03..5dc9baec 100644
--- a/pkpdapp/pkpdapp/api/serializers/dataset.py
+++ b/pkpdapp/pkpdapp/api/serializers/dataset.py
@@ -6,6 +6,7 @@
from pkpdapp.utils import DataParser
from rest_framework import serializers
+from drf_spectacular.utils import extend_schema_field
import codecs
from pkpdapp.models import (
Dataset, Protocol,
@@ -26,6 +27,7 @@ class Meta:
model = Dataset
fields = '__all__'
+ @extend_schema_field(ProtocolSerializer(many=True))
def get_protocols(self, dataset):
protocols = [
Protocol.objects.get(pk=p['protocol'])
diff --git a/pkpdapp/pkpdapp/api/serializers/dose.py b/pkpdapp/pkpdapp/api/serializers/dose.py
index e7a45916..cf96a79a 100644
--- a/pkpdapp/pkpdapp/api/serializers/dose.py
+++ b/pkpdapp/pkpdapp/api/serializers/dose.py
@@ -13,4 +13,4 @@
class DoseSerializer(serializers.ModelSerializer):
class Meta:
model = Dose
- fields = '__all__'
+ exclude = ['protocol']
diff --git a/pkpdapp/pkpdapp/api/serializers/efficacy_experiment.py b/pkpdapp/pkpdapp/api/serializers/efficacy_experiment.py
new file mode 100644
index 00000000..d9657d33
--- /dev/null
+++ b/pkpdapp/pkpdapp/api/serializers/efficacy_experiment.py
@@ -0,0 +1,16 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from rest_framework import serializers
+from pkpdapp.models import (
+ EfficacyExperiment
+)
+
+
+class EfficacySerializer(serializers.ModelSerializer):
+ class Meta:
+ model = EfficacyExperiment
+ fields = '__all__'
diff --git a/pkpdapp/pkpdapp/api/serializers/likelihoods.py b/pkpdapp/pkpdapp/api/serializers/likelihoods.py
index 84ef7799..7e19bc88 100644
--- a/pkpdapp/pkpdapp/api/serializers/likelihoods.py
+++ b/pkpdapp/pkpdapp/api/serializers/likelihoods.py
@@ -3,6 +3,8 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+from django.db.models import Q
+from typing import Tuple
from rest_framework import serializers
from pkpdapp.models import (
LogLikelihood, LogLikelihoodParameter,
@@ -36,23 +38,23 @@ class Meta:
fields = '__all__'
read_only_fields = ("inference", )
- def get_time_variable(self, instance):
+ def get_time_variable(self, instance) -> int | None:
model = instance.get_model()
if model is not None:
time_variable = model.variables.get(
- name='time'
+ Q(name='time') | Q(name='t')
)
return time_variable.id
- def get_is_a_prior(self, instance):
+ def get_is_a_prior(self, instance) -> bool:
return instance.is_a_prior()
- def get_model(self, instance):
+ def get_model(self, instance) -> Tuple[str, int] | None:
model = instance.get_model()
if model is not None:
return (model._meta.db_table, model.id)
- def get_dataset(self, instance):
+ def get_dataset(self, instance) -> int | None:
if instance.biomarker_type:
return instance.biomarker_type.dataset.id
diff --git a/pkpdapp/pkpdapp/api/serializers/models.py b/pkpdapp/pkpdapp/api/serializers/models.py
index 17abd889..66558668 100644
--- a/pkpdapp/pkpdapp/api/serializers/models.py
+++ b/pkpdapp/pkpdapp/api/serializers/models.py
@@ -6,95 +6,142 @@
from rest_framework import serializers
from pkpdapp.models import (
PharmacokineticModel,
- DosedPharmacokineticModel,
- PharmacodynamicModel, PkpdMapping,
+ CombinedModel,
+ PharmacodynamicModel,
+ PkpdMapping,
MyokitModelMixin,
+ DerivedVariable,
+ Variable,
)
-from pkpdapp.api.serializers import (
- ValidSbml, ValidMmt
-)
+from pkpdapp.api.serializers import ValidSbml, ValidMmt
class PkpdMappingSerializer(serializers.ModelSerializer):
- datetime = serializers.DateField(read_only=True)
- read_only = serializers.BooleanField(read_only=True)
+ datetime = serializers.DateField(read_only=True, required=False)
+ read_only = serializers.BooleanField(read_only=True, required=False)
class Meta:
model = PkpdMapping
- fields = '__all__'
+ fields = "__all__"
+
+
+class DerivedVariableSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = DerivedVariable
+ fields = "__all__"
class BaseDosedPharmacokineticSerializer(serializers.ModelSerializer):
class Meta:
- model = DosedPharmacokineticModel
- fields = '__all__'
+ model = CombinedModel
+ fields = "__all__"
-class DosedPharmacokineticSerializer(serializers.ModelSerializer):
+class CombinedModelSerializer(serializers.ModelSerializer):
mappings = PkpdMappingSerializer(many=True)
- components = serializers.SerializerMethodField('get_components')
- variables = serializers.PrimaryKeyRelatedField(
- many=True, read_only=True
- )
- mmt = serializers.SerializerMethodField('get_mmt')
+ derived_variables = DerivedVariableSerializer(many=True)
+ components = serializers.SerializerMethodField("get_components")
+ variables = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
+ mmt = serializers.SerializerMethodField("get_mmt", read_only=True)
+ time_unit = serializers.SerializerMethodField("get_time_unit")
+ is_library_model = serializers.SerializerMethodField("get_is_library_model")
class Meta:
- model = DosedPharmacokineticModel
- fields = '__all__'
+ model = CombinedModel
+ fields = "__all__"
- def get_mmt(self, m):
+ def get_is_library_model(self, m) -> bool:
+ return m.is_library_model
+
+ def get_mmt(self, m) -> str:
return m.get_mmt()
+ def get_time_unit(self, m) -> int:
+ unit = m.get_time_unit()
+ if unit is None:
+ return -1
+ else:
+ return unit.id
+
def get_components(self, m):
model = m.get_myokit_model()
- return [
- _serialize_component(m, c, model)
- for c in model.components(sort=True)
- ]
+ return [_serialize_component(m, c, model) for c in model.components(sort=True)]
def create(self, validated_data):
- mappings_data = validated_data.pop('mappings')
- new_pkpd_model = BaseDosedPharmacokineticSerializer().create(
- validated_data
- )
+ mappings_data = validated_data.pop("mappings", [])
+ derived_variables_data = validated_data.pop("derived_variables", [])
+ new_pkpd_model = BaseDosedPharmacokineticSerializer().create(validated_data)
for field_datas, Serializer in [
- (mappings_data, PkpdMappingSerializer),
+ (mappings_data, PkpdMappingSerializer),
+ (derived_variables_data, DerivedVariableSerializer),
]:
for field_data in field_datas:
serializer = Serializer()
- field_data['pkpd_model'] = new_pkpd_model
+ field_data["pkpd_model"] = new_pkpd_model
serializer.create(field_data)
return new_pkpd_model
def update(self, instance, validated_data):
- mappings_data = validated_data.pop('mappings')
+ mappings_data = validated_data.pop("mappings", [])
+ derived_var_data = validated_data.pop("derived_variables", [])
old_mappings = list((instance.mappings).all())
- for i in range(len(mappings_data), len(old_mappings)):
- old_mappings[i].delete()
- del old_mappings[i]
+ old_derived_vars = list((instance.derived_variables).all())
+
+ pk_model_changed = False
+ if "pk_model" in validated_data:
+ pk_model_changed = instance.pk_model != validated_data.get("pk_model")
+ pd_model_changed = False
+ if "pd_model" in validated_data:
+ pd_model_changed = instance.pd_model != validated_data.get("pd_model")
new_pkpd_model = BaseDosedPharmacokineticSerializer().update(
instance, validated_data
)
+ # if pd model has changed, update effect variable
+ if pd_model_changed:
+ for mapping in mappings_data:
+ try:
+ mapping["pd_variable"] = new_pkpd_model.variables.get(
+ qname=mapping["pd_variable"].qname
+ )
+ except Variable.DoesNotExist:
+ mapping["pd_variable"] = None
+
+ mappings_data = [m for m in mappings_data if m["pd_variable"] is not None]
+
# don't update mappings if read_only
- if not instance.read_only:
- for field_datas, old_models, Serializer in [
- (mappings_data,
- old_mappings, PkpdMappingSerializer)
- ]:
- for field_data in field_datas:
- serializer = Serializer()
- try:
- old_model = old_models.pop(0)
- new_model = serializer.update(
- old_model, field_data
- )
- except IndexError:
- field_data['pkpd_model'] = new_pkpd_model
- new_model = serializer.create(field_data)
+ # don't update mapping or derived variables if pk model has changed
+ if not (instance.read_only or pk_model_changed):
+ for derived_var in derived_var_data:
+ serializer = DerivedVariableSerializer()
+ try:
+ old_model = old_derived_vars.pop(0)
+ new_model = serializer.update(old_model, derived_var)
+ new_model.save()
+ except IndexError:
+ derived_var["pkpd_model"] = new_pkpd_model
+ new_model = serializer.create(derived_var)
+
+ for mapping in mappings_data:
+ serializer = PkpdMappingSerializer()
+ try:
+ old_model = old_mappings.pop(0)
+ new_model = serializer.update(old_model, mapping)
new_model.save()
+ except IndexError:
+ mapping["pkpd_model"] = new_pkpd_model
+ new_model = serializer.create(mapping)
+
+ # delete any remaining old mappings and derived variables
+ for old_model in old_mappings:
+ old_model.delete()
+ for old_model in old_derived_vars:
+ old_model.delete()
+
+ # update model since mappings might have changed
+ new_pkpd_model.update_model()
return new_pkpd_model
@@ -102,11 +149,10 @@ def update(self, instance, validated_data):
class PharmacokineticSerializer(serializers.ModelSerializer):
class Meta:
model = PharmacokineticModel
- fields = '__all__'
+ fields = "__all__"
def _serialize_component(model, component, myokit_model):
-
states = [
v.pk
for v in model.variables.filter(state=True)
@@ -130,31 +176,26 @@ def _serialize_component(model, component, myokit_model):
for e in component.equations(bound=False, const=False)
]
return {
- 'name': component.name(),
- 'states': states,
- 'variables': variables,
- 'outputs': outputs,
- 'equations': equations,
+ "name": component.name(),
+ "states": states,
+ "variables": variables,
+ "outputs": outputs,
+ "equations": equations,
}
class PharmacodynamicSerializer(serializers.ModelSerializer):
- components = serializers.SerializerMethodField('get_components')
- variables = serializers.PrimaryKeyRelatedField(
- many=True, read_only=True
- )
+ components = serializers.SerializerMethodField("get_components")
+ variables = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
mmt = serializers.CharField(validators=[ValidMmt()], required=False)
def get_components(self, m):
model = m.get_myokit_model()
- return [
- _serialize_component(m, c, model)
- for c in model.components(sort=True)
- ]
+ return [_serialize_component(m, c, model) for c in model.components(sort=True)]
class Meta:
model = PharmacodynamicModel
- fields = '__all__'
+ fields = "__all__"
class PharmacodynamicSbmlSerializer(serializers.ModelSerializer):
@@ -162,17 +203,17 @@ class PharmacodynamicSbmlSerializer(serializers.ModelSerializer):
class Meta:
model = PharmacodynamicModel
- fields = ['sbml']
- extra_kwargs = {'sbml': {'write_only': True}}
+ fields = ["sbml"]
+ extra_kwargs = {"sbml": {"write_only": True}}
def create(self, validated_data):
- sbml = validated_data.pop('sbml')
+ sbml = validated_data.pop("sbml")
mmt = MyokitModelMixin.sbml_string_to_mmt(sbml)
- validated_data['mmt'] = mmt
+ validated_data["mmt"] = mmt
return PharmacodynamicModel(**validated_data)
def update(self, instance, validated_data):
- sbml = validated_data.get('sbml')
+ sbml = validated_data.get("sbml")
mmt = MyokitModelMixin.sbml_string_to_mmt(sbml)
instance.mmt = mmt
instance.save()
diff --git a/pkpdapp/pkpdapp/api/serializers/project.py b/pkpdapp/pkpdapp/api/serializers/project.py
index 238976b7..0c388e3b 100644
--- a/pkpdapp/pkpdapp/api/serializers/project.py
+++ b/pkpdapp/pkpdapp/api/serializers/project.py
@@ -26,10 +26,14 @@ class ProjectSerializer(serializers.ModelSerializer):
user_access = ProjectAccessSerializer(
source='projectaccess_set', many=True
)
+ protocols = serializers.PrimaryKeyRelatedField(
+ many=True, read_only=True
+ )
class Meta:
model = Project
fields = '__all__'
+ read_only_fields = ("created", )
def create(self, validated_data):
# save method of log_likelihood will create its own parameters,
@@ -45,6 +49,7 @@ def create(self, validated_data):
return project
def update(self, instance, validated_data):
+ print('project update', validated_data)
users = validated_data.pop('projectaccess_set')
old_accesses = list(instance.projectaccess_set.all())
project = BaseProjectSerializer().update(
diff --git a/pkpdapp/pkpdapp/api/serializers/protocol.py b/pkpdapp/pkpdapp/api/serializers/protocol.py
index 79accca9..fc02a9dc 100644
--- a/pkpdapp/pkpdapp/api/serializers/protocol.py
+++ b/pkpdapp/pkpdapp/api/serializers/protocol.py
@@ -12,17 +12,12 @@
class ProtocolSerializer(serializers.ModelSerializer):
doses = DoseSerializer(
- many=True, read_only=True
- )
- dose_ids = serializers.PrimaryKeyRelatedField(
- queryset=Dose.objects.all(),
- source='doses',
- many=True, write_only=True,
+ many=True
)
- dosed_pk_models = serializers.PrimaryKeyRelatedField(
+ dataset = serializers.SerializerMethodField('get_dataset')
+ variables = serializers.PrimaryKeyRelatedField(
many=True, read_only=True
)
- dataset = serializers.SerializerMethodField('get_dataset')
subjects = serializers.PrimaryKeyRelatedField(
many=True, read_only=True
)
@@ -33,3 +28,18 @@ class Meta:
def get_dataset(self, protocol):
return protocol.get_dataset()
+
+ def create(self, validated_data):
+ doses = validated_data.pop('doses')
+ protocol = Protocol.objects.create(**validated_data)
+ for dose in doses:
+ Dose.objects.create(protocol=protocol, **dose)
+ return protocol
+
+ def update(self, instance, validated_data):
+ doses = validated_data.pop('doses')
+ Dose.objects.filter(protocol=instance).delete()
+ for dose in doses:
+ dose['protocol'] = instance
+ DoseSerializer.create(DoseSerializer(), dose)
+ return super().update(instance, validated_data)
diff --git a/pkpdapp/pkpdapp/api/serializers/simulation.py b/pkpdapp/pkpdapp/api/serializers/simulation.py
new file mode 100644
index 00000000..c2ea3624
--- /dev/null
+++ b/pkpdapp/pkpdapp/api/serializers/simulation.py
@@ -0,0 +1,100 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from rest_framework import serializers
+from pkpdapp.models import (
+ Simulation, SimulationYAxis, SimulationSlider,
+ SimulationCxLine, SimulationPlot
+)
+
+
+class SimulationYAxisSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = SimulationYAxis
+ exclude = ['plot']
+
+
+class SimulationSliderSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = SimulationSlider
+ exclude = ['simulation']
+
+
+class SimulationCxLineSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = SimulationCxLine
+ exclude = ['plot']
+
+
+class SimulationPlotSerializer(serializers.ModelSerializer):
+ y_axes = SimulationYAxisSerializer(
+ many=True
+ )
+ cx_lines = SimulationCxLineSerializer(
+ many=True
+ )
+
+ class Meta:
+ model = SimulationPlot
+ # fields = '__all__'
+ exclude = ['simulation']
+
+ def create(self, validated_data):
+ y_axes_data = validated_data.pop('y_axes')
+ cx_lines_data = validated_data.pop('cx_lines')
+ plot = SimulationPlot.objects.create(**validated_data)
+ for y_axis in y_axes_data:
+ SimulationYAxis.objects.create(plot=plot, **y_axis)
+ for cx_line in cx_lines_data:
+ SimulationCxLine.objects.create(plot=plot, **cx_line)
+ return plot
+
+ def update(self, instance, validated_data):
+ y_axes_data = validated_data.pop('y_axes')
+ cx_lines_data = validated_data.pop('cx_lines')
+ SimulationYAxis.objects.filter(plot=instance).delete()
+ SimulationCxLine.objects.filter(plot=instance).delete()
+ for y_axis in y_axes_data:
+ SimulationYAxis.objects.create(plot=instance, **y_axis)
+ for cx_line in cx_lines_data:
+ SimulationCxLine.objects.create(plot=instance, **cx_line)
+ return super().update(instance, validated_data)
+
+
+class SimulationSerializer(serializers.ModelSerializer):
+ sliders = SimulationSliderSerializer(
+ many=True
+ )
+ plots = SimulationPlotSerializer(
+ many=True
+ )
+
+ class Meta:
+ model = Simulation
+ fields = '__all__'
+
+ def create(self, validated_data):
+ slider_data = validated_data.pop('sliders')
+ plot_data = validated_data.pop('plots')
+ simulation = Simulation.objects.create(**validated_data)
+ for slider in slider_data:
+ SimulationSlider.objects.create(simulation=simulation, **slider)
+ for plot in plot_data:
+ plot['simulation'] = simulation
+ SimulationPlotSerializer.create(SimulationPlotSerializer(), plot)
+ return simulation
+
+ def update(self, instance, validated_data):
+ slider_data = validated_data.pop('sliders')
+ plot_data = validated_data.pop('plots')
+ SimulationSlider.objects.filter(simulation=instance).delete()
+ SimulationPlot.objects.filter(simulation=instance).delete()
+ for slider in slider_data:
+ SimulationSlider.objects.create(simulation=instance, **slider)
+ for plot in plot_data:
+ plot['simulation'] = instance
+ SimulationPlotSerializer.create(SimulationPlotSerializer(), plot)
+ return super().update(instance, validated_data)
diff --git a/pkpdapp/pkpdapp/api/serializers/unit.py b/pkpdapp/pkpdapp/api/serializers/unit.py
index 22a3a758..f131ce3e 100644
--- a/pkpdapp/pkpdapp/api/serializers/unit.py
+++ b/pkpdapp/pkpdapp/api/serializers/unit.py
@@ -3,24 +3,42 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+from pkpdapp.models import Unit
+from rest_framework.schemas.openapi import AutoSchema
from rest_framework import serializers
-from pkpdapp.models import (
- Unit
-)
+from typing import Dict, List
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+class UnitSchema(AutoSchema):
+ """
+ AutoSchema subclass that knows how to use extra_info.
+ """
+
+ ...
class UnitSerializer(serializers.ModelSerializer):
- compatible_units = \
- serializers.SerializerMethodField('get_compatible_units')
+ compatible_units = serializers.SerializerMethodField("get_compatible_units")
class Meta:
model = Unit
- fields = '__all__'
+ fields = "__all__"
- def get_compatible_units(self, unit):
+ def get_compatible_units(self, unit) -> List[Dict[str, str]]:
+ compound = self.context.get("compound")
return [
{
- 'id': u.id,
- 'symbol': u.symbol,
- } for u in unit.get_compatible_units()
+ "id": u.id,
+ "symbol": u.symbol,
+ "conversion_factor": unit.convert_to(
+ u, compound=compound, is_target=False
+ ),
+ "target_conversion_factor": unit.convert_to(
+ u, compound=compound, is_target=True
+ ),
+ }
+ for u in unit.get_compatible_units(compound=compound)
]
diff --git a/pkpdapp/pkpdapp/api/serializers/variables.py b/pkpdapp/pkpdapp/api/serializers/variables.py
index 0a55265f..59fc4be0 100644
--- a/pkpdapp/pkpdapp/api/serializers/variables.py
+++ b/pkpdapp/pkpdapp/api/serializers/variables.py
@@ -12,4 +12,14 @@
class VariableSerializer(serializers.ModelSerializer):
class Meta:
model = Variable
- fields = '__all__'
+ fields = "__all__"
+
+ def to_internal_value(self, data):
+ optional_fields = [
+ "lower_bound",
+ "upper_bound",
+ ]
+ for field in optional_fields:
+ if data.get(field, None) == "":
+ data[field] = None
+ return super(VariableSerializer, self).to_internal_value(data)
diff --git a/pkpdapp/pkpdapp/api/views/__init__.py b/pkpdapp/pkpdapp/api/views/__init__.py
index eeddeb36..f51fe248 100644
--- a/pkpdapp/pkpdapp/api/views/__init__.py
+++ b/pkpdapp/pkpdapp/api/views/__init__.py
@@ -19,15 +19,19 @@
NotADatasetProtocol,
CheckAccessToProject,
)
+from .simulation import (
+ SimulationViewSet,
+)
from .auce import AuceView
from .biomarker_type import BiomarkerTypeView
from .dataset import DatasetView
from .dose import DoseView
+from .compound import CompoundView
from .models import (
PharmacokineticView,
PharmacodynamicView,
- DosedPharmacokineticView,
+ CombinedModelView,
)
from .nca import NcaView
from .project import ProjectView, ProjectAccessView
@@ -37,7 +41,7 @@
StopInferenceView, InferenceWizardView,
)
from .simulate import (
- SimulatePkView,
+ SimulateCombinedView,
SimulatePdView,
)
from .subject import SubjectView
diff --git a/pkpdapp/pkpdapp/api/views/compound.py b/pkpdapp/pkpdapp/api/views/compound.py
new file mode 100644
index 00000000..b9b2cfac
--- /dev/null
+++ b/pkpdapp/pkpdapp/api/views/compound.py
@@ -0,0 +1,20 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+from rest_framework import viewsets
+from pkpdapp.api.serializers import CompoundSerializer
+from pkpdapp.models import Compound
+from pkpdapp.api.views import (
+ CheckAccessToProject
+)
+from rest_framework.permissions import IsAuthenticated
+
+
+class CompoundView(viewsets.ModelViewSet):
+ queryset = Compound.objects.all()
+ serializer_class = CompoundSerializer
+ permission_classes = [
+ IsAuthenticated & CheckAccessToProject
+ ]
diff --git a/pkpdapp/pkpdapp/api/views/efficacy_experiment.py b/pkpdapp/pkpdapp/api/views/efficacy_experiment.py
new file mode 100644
index 00000000..9b89074c
--- /dev/null
+++ b/pkpdapp/pkpdapp/api/views/efficacy_experiment.py
@@ -0,0 +1,21 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+from rest_framework import viewsets
+from rest_framework.permissions import IsAuthenticated
+from pkpdapp.api.views import (
+ NotADatasetDose,
+ CheckAccessToProject,
+)
+from pkpdapp.api.serializers import EfficacySerializer
+from pkpdapp.models import EfficacyExperiment
+
+
+class DoseView(viewsets.ModelViewSet):
+ queryset = EfficacyExperiment.objects.all()
+ serializer_class = EfficacySerializer
+ permission_classes = [
+ IsAuthenticated & NotADatasetDose & CheckAccessToProject
+ ]
diff --git a/pkpdapp/pkpdapp/api/views/filters.py b/pkpdapp/pkpdapp/api/views/filters.py
index 93d9e3d8..1d6193a5 100644
--- a/pkpdapp/pkpdapp/api/views/filters.py
+++ b/pkpdapp/pkpdapp/api/views/filters.py
@@ -11,7 +11,7 @@
from pkpdapp.models import (
Dataset, Project,
PharmacodynamicModel,
- DosedPharmacokineticModel,
+ CombinedModel,
Protocol,
Unit,
BiomarkerType,
@@ -19,6 +19,7 @@
Subject,
Inference, InferenceChain,
LogLikelihood,
+ Simulation,
)
@@ -28,7 +29,6 @@ class UserAccessFilter(filters.BaseFilterBackend):
"""
def filter_queryset(self, request, queryset, view):
-
if request.user.is_superuser:
return queryset
@@ -50,7 +50,7 @@ def filter_queryset(self, request, queryset, view):
request.query_params.get('dosed_pk_model_id')
if dosed_pk_model_id is not None:
try:
- dosed_pk_model = DosedPharmacokineticModel.objects.get(
+ dosed_pk_model = CombinedModel.objects.get(
id=dosed_pk_model_id
)
if queryset.model == Variable:
@@ -63,7 +63,7 @@ def filter_queryset(self, request, queryset, view):
queryset = Unit.objects.filter(id__in=unit_ids)
else:
raise RuntimeError('queryset model {} not recognised')
- except DosedPharmacokineticModel.DoesNotExist:
+ except CombinedModel.DoesNotExist:
queryset = queryset.model.objects.none()
return queryset
@@ -143,9 +143,11 @@ def filter_queryset(self, request, queryset, view):
)
if queryset.model == Dataset:
queryset = project.datasets
+ elif queryset.model == Simulation:
+ queryset = project.simulations
elif queryset.model == PharmacodynamicModel:
queryset = project.pd_models
- elif queryset.model == DosedPharmacokineticModel:
+ elif queryset.model == CombinedModel:
queryset = project.pk_models
elif queryset.model == Protocol:
queryset = project.protocols
diff --git a/pkpdapp/pkpdapp/api/views/inference.py b/pkpdapp/pkpdapp/api/views/inference.py
index 6a4fe863..ea4e16bd 100644
--- a/pkpdapp/pkpdapp/api/views/inference.py
+++ b/pkpdapp/pkpdapp/api/views/inference.py
@@ -24,12 +24,11 @@
Algorithm,
BiomarkerType,
Dataset,
- DosedPharmacokineticModel,
+ CombinedModel,
Inference,
InferenceChain,
LogLikelihood,
LogLikelihoodParameter,
- PharmacodynamicModel,
Project,
Protocol,
)
@@ -495,10 +494,7 @@ def post(self, request, format=None):
model_id = None
if 'model' in data:
if 'form' in data['model']:
- if data['model']['form'] == 'PK':
- model_table = DosedPharmacokineticModel
- else:
- model_table = PharmacodynamicModel
+ model_table = CombinedModel
else:
errors.get('model', {})['form'] = 'field required'
if 'id' in data['model']:
diff --git a/pkpdapp/pkpdapp/api/views/login.py b/pkpdapp/pkpdapp/api/views/login.py
index 6cb4fbf8..99e25299 100644
--- a/pkpdapp/pkpdapp/api/views/login.py
+++ b/pkpdapp/pkpdapp/api/views/login.py
@@ -32,14 +32,12 @@ def login_view(request):
data = json.loads(request.body)
username = data.get('username')
password = data.get('password')
-
if username is None or password is None:
return JsonResponse({
'detail': 'Please provide username and password.'
}, status=400)
user = authenticate(username=username, password=password)
-
if user is None:
return JsonResponse({'detail': 'Invalid credentials.'}, status=400)
@@ -51,6 +49,7 @@ def login_view(request):
})
+@ensure_csrf_cookie
def logout_view(request):
if not request.user.is_authenticated:
return JsonResponse({'detail': 'You\'re not logged in.'}, status=400)
diff --git a/pkpdapp/pkpdapp/api/views/models.py b/pkpdapp/pkpdapp/api/views/models.py
index 9995603e..41600985 100644
--- a/pkpdapp/pkpdapp/api/views/models.py
+++ b/pkpdapp/pkpdapp/api/views/models.py
@@ -3,25 +3,22 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-from rest_framework import (
- viewsets, response, parsers, status, decorators
-)
+from rest_framework import viewsets, response, parsers, status, decorators
+from drf_spectacular.utils import extend_schema, OpenApiParameter
+from drf_spectacular.types import OpenApiTypes
from rest_framework.permissions import IsAuthenticated
from pkpdapp.api.serializers import (
PharmacokineticSerializer,
PharmacodynamicSerializer,
- DosedPharmacokineticSerializer,
+ CombinedModelSerializer,
PharmacodynamicSbmlSerializer,
)
-from pkpdapp.api.views import (
- ProjectFilter,
- CheckAccessToProject
-)
+from pkpdapp.api.views import ProjectFilter, CheckAccessToProject
from pkpdapp.models import (
PharmacokineticModel,
PharmacodynamicModel,
- DosedPharmacokineticModel,
+ CombinedModel,
Inference,
)
@@ -29,90 +26,119 @@
class PharmacokineticView(viewsets.ModelViewSet):
queryset = PharmacokineticModel.objects.all()
serializer_class = PharmacokineticSerializer
- permission_classes = [
- IsAuthenticated & CheckAccessToProject
- ]
+ permission_classes = [IsAuthenticated & CheckAccessToProject]
-class DosedPharmacokineticView(viewsets.ModelViewSet):
- queryset = DosedPharmacokineticModel.objects.all()
- serializer_class = DosedPharmacokineticSerializer
+class CombinedModelView(viewsets.ModelViewSet):
+ queryset = CombinedModel.objects.all()
+ serializer_class = CombinedModelSerializer
filter_backends = [ProjectFilter]
- permission_classes = [
- IsAuthenticated & CheckAccessToProject
- ]
+ permission_classes = [IsAuthenticated & CheckAccessToProject]
+
+ @extend_schema(
+ parameters=[
+ OpenApiParameter(
+ name="project_id",
+ description="Filter results by project ID",
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY,
+ ),
+ ],
+ )
+ def list(self, request, *args, **kwargs):
+ return super().list(request, *args, **kwargs)
@decorators.action(
detail=True,
- methods=['PUT'],
- serializer_class=DosedPharmacokineticSerializer,
+ methods=["PUT"],
+ serializer_class=CombinedModelSerializer,
)
def set_variables_from_inference(self, request, pk):
obj = self.get_object()
try:
- inference = Inference.objects.get(id=request.data['inference_id'])
+ inference = Inference.objects.get(id=request.data["inference_id"])
except Inference.DoesNotExist:
- return response.Response({'inference_id': 'inference not found'},
- status.HTTP_400_BAD_REQUEST)
+ return response.Response(
+ {"inference_id": "inference not found"}, status.HTTP_400_BAD_REQUEST
+ )
obj.set_variables_from_inference(inference)
serializer = self.serializer_class(obj)
return response.Response(serializer.data)
+ @decorators.action(
+ detail=True,
+ methods=["PUT"],
+ serializer_class=CombinedModelSerializer,
+ )
+ def set_params_to_defaults(self, request, pk):
+ obj = self.get_object()
+ project = obj.get_project()
+ if project is None:
+ return response.Response(
+ {"project": "project not found"}, status.HTTP_400_BAD_REQUEST
+ )
+ compound = project.compound
+ if compound is None:
+ return response.Response(
+ {"compound": "compound not found"}, status.HTTP_400_BAD_REQUEST
+ )
+ print("setting params to defaults", project.species, compound.compound_type)
+ obj.reset_params_to_defaults(project.species, compound.compound_type)
+ serializer = self.serializer_class(obj)
+ return response.Response(serializer.data)
+
class PharmacodynamicView(viewsets.ModelViewSet):
queryset = PharmacodynamicModel.objects.all()
serializer_class = PharmacodynamicSerializer
filter_backends = [ProjectFilter]
- permission_classes = [
- IsAuthenticated & CheckAccessToProject
- ]
+ permission_classes = [IsAuthenticated & CheckAccessToProject]
@decorators.action(
detail=True,
- methods=['PUT'],
+ methods=["PUT"],
serializer_class=PharmacodynamicSbmlSerializer,
parser_classes=[parsers.MultiPartParser],
)
def sbml(self, request, pk):
obj = self.get_object()
- serializer = self.serializer_class(obj, data=request.data,
- partial=True)
+ serializer = self.serializer_class(obj, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return response.Response(serializer.data)
- return response.Response(serializer.errors,
- status.HTTP_400_BAD_REQUEST)
+ print("xXXXXXx", serializer.errors)
+ return response.Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
@decorators.action(
detail=True,
- methods=['PUT'],
+ methods=["PUT"],
serializer_class=PharmacodynamicSerializer,
parser_classes=[parsers.MultiPartParser],
)
def mmt(self, request, pk):
obj = self.get_object()
- serializer = self.serializer_class(obj, data=request.data,
- partial=True)
+ serializer = self.serializer_class(obj, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return response.Response(serializer.data)
- return response.Response(serializer.errors,
- status.HTTP_400_BAD_REQUEST)
+ return response.Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
@decorators.action(
detail=True,
- methods=['PUT'],
+ methods=["PUT"],
serializer_class=PharmacodynamicSerializer,
)
def set_variables_from_inference(self, request, pk):
obj = self.get_object()
try:
- print('got request', request.data)
- inference = Inference.objects.get(id=request.data['inference_id'])
+ print("got request", request.data)
+ inference = Inference.objects.get(id=request.data["inference_id"])
except Inference.DoesNotExist:
- return response.Response({'inference_id': 'inference not found'},
- status.HTTP_400_BAD_REQUEST)
+ return response.Response(
+ {"inference_id": "inference not found"}, status.HTTP_400_BAD_REQUEST
+ )
obj.set_variables_from_inference(inference)
serializer = self.serializer_class(obj)
diff --git a/pkpdapp/pkpdapp/api/views/protocol.py b/pkpdapp/pkpdapp/api/views/protocol.py
index 3bd9b7be..4ed3b826 100644
--- a/pkpdapp/pkpdapp/api/views/protocol.py
+++ b/pkpdapp/pkpdapp/api/views/protocol.py
@@ -5,6 +5,8 @@
#
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
+from drf_spectacular.utils import extend_schema, OpenApiParameter
+from drf_spectacular.types import OpenApiTypes
from pkpdapp.api.serializers import ProtocolSerializer
from pkpdapp.api.views import (
ProjectFilter,
@@ -21,3 +23,17 @@ class ProtocolView(viewsets.ModelViewSet):
permission_classes = [
IsAuthenticated & NotADatasetProtocol & CheckAccessToProject
]
+
+ @extend_schema(
+ parameters=[
+ OpenApiParameter(
+ name='project_id',
+ description='Filter results by project ID',
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY
+ ),
+ ],
+ )
+ def list(self, request, *args, **kwargs):
+ return super().list(request, *args, **kwargs)
diff --git a/pkpdapp/pkpdapp/api/views/simulate.py b/pkpdapp/pkpdapp/api/views/simulate.py
index 13d9c90f..716dc1c7 100644
--- a/pkpdapp/pkpdapp/api/views/simulate.py
+++ b/pkpdapp/pkpdapp/api/views/simulate.py
@@ -5,11 +5,52 @@
#
from rest_framework import views, status
from rest_framework.response import Response
+from rest_framework import serializers
+from drf_spectacular.utils import extend_schema
+import myokit
from pkpdapp.models import (
- DosedPharmacokineticModel, PharmacodynamicModel,
+ CombinedModel, PharmacodynamicModel, Variable
)
+class SimulateSerializer(serializers.Serializer):
+ outputs = serializers.ListField(child=serializers.CharField())
+ variables = serializers.DictField(child=serializers.FloatField())
+ time_max = serializers.FloatField(required=False)
+
+
+class SimulateResponseSerializer(serializers.Serializer):
+ time = serializers.ListField(child=serializers.FloatField())
+ outputs = serializers.DictField(
+ child=serializers.ListField(child=serializers.FloatField()))
+
+ def to_representation(self, instance):
+ outputs = {}
+ times = []
+ for var_id, values in instance.items():
+ variable = Variable.objects.get(pk=var_id)
+ if variable.name == 'time' or variable.name == 't':
+ times = values
+ outputs[var_id] = values
+ return {
+ 'outputs': outputs,
+ 'time': times,
+ }
+
+
+class ErrorResponseSerializer(serializers.Serializer):
+ error = serializers.CharField()
+
+
+@extend_schema(
+ request=SimulateSerializer,
+ responses={
+ 200: SimulateResponseSerializer,
+ 400: ErrorResponseSerializer,
+ 404: None,
+ },
+
+)
class SimulateBaseView(views.APIView):
def post(self, request, pk, format=None):
try:
@@ -17,14 +58,21 @@ def post(self, request, pk, format=None):
except self.model.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
outputs = request.data.get('outputs', None)
- initial_conditions = request.data.get('initial_conditions', None)
variables = request.data.get('variables', None)
- result = m.simulate(outputs, initial_conditions, variables)
- return Response(result)
+ time_max = request.data.get('time_max', None)
+ try:
+ result = m.simulate(outputs, variables, time_max)
+ except myokit.SimulationError as e:
+ serialized_result = ErrorResponseSerializer({'error': str(e)})
+ return Response(
+ serialized_result.data, status=status.HTTP_400_BAD_REQUEST
+ )
+ serialized_result = SimulateResponseSerializer(result)
+ return Response(serialized_result.data)
-class SimulatePkView(SimulateBaseView):
- model = DosedPharmacokineticModel
+class SimulateCombinedView(SimulateBaseView):
+ model = CombinedModel
class SimulatePdView(SimulateBaseView):
diff --git a/pkpdapp/pkpdapp/api/views/simulation.py b/pkpdapp/pkpdapp/api/views/simulation.py
new file mode 100644
index 00000000..6e3bb7f4
--- /dev/null
+++ b/pkpdapp/pkpdapp/api/views/simulation.py
@@ -0,0 +1,42 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from rest_framework import viewsets
+from rest_framework.permissions import IsAuthenticated
+
+from drf_spectacular.utils import extend_schema, OpenApiParameter
+from drf_spectacular.types import OpenApiTypes
+from pkpdapp.models import Simulation
+from pkpdapp.api.serializers import (
+ SimulationSerializer
+)
+from pkpdapp.api.views import (
+ ProjectFilter,
+ CheckAccessToProject
+)
+
+
+class SimulationViewSet(viewsets.ModelViewSet):
+ queryset = Simulation.objects.all()
+ serializer_class = SimulationSerializer
+ filter_backends = [ProjectFilter]
+ permission_classes = [
+ IsAuthenticated & CheckAccessToProject
+ ]
+
+ @extend_schema(
+ parameters=[
+ OpenApiParameter(
+ name='project_id',
+ description='Filter results by project ID',
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY
+ ),
+ ],
+ )
+ def list(self, request, *args, **kwargs):
+ return super().list(request, *args, **kwargs)
diff --git a/pkpdapp/pkpdapp/api/views/unit.py b/pkpdapp/pkpdapp/api/views/unit.py
index 5e270b97..af101503 100644
--- a/pkpdapp/pkpdapp/api/views/unit.py
+++ b/pkpdapp/pkpdapp/api/views/unit.py
@@ -9,10 +9,61 @@
PdModelFilter,
)
from pkpdapp.api.serializers import UnitSerializer
-from pkpdapp.models import Unit
+from pkpdapp.models import Unit, Compound
+from drf_spectacular.utils import extend_schema, OpenApiParameter
+from drf_spectacular.types import OpenApiTypes
class UnitView(viewsets.ModelViewSet):
queryset = Unit.objects.all()
serializer_class = UnitSerializer
filter_backends = [DosedPkModelFilter, PdModelFilter]
+
+ def get_serializer_context(self):
+ context = super().get_serializer_context()
+
+ request = self.request
+ compound_id = None
+ compound = None
+
+ if request is not None:
+ compound_id = self.request.query_params.get("compound_id")
+
+ if compound_id is not None:
+ try:
+ compound = Compound.objects.get(pk=compound_id)
+ except Compound.DoesNotExist:
+ pass
+
+ if compound is not None:
+ context["compound"] = compound
+
+ return context
+
+ @extend_schema(
+ parameters=[
+ OpenApiParameter(
+ name="compound_id",
+ description="Enable conversions based on compound information",
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY,
+ ),
+ ],
+ )
+ def list(self, request, *args, **kwargs):
+ return super().list(request, *args, **kwargs)
+
+ @extend_schema(
+ parameters=[
+ OpenApiParameter(
+ name="compound_id",
+ description="Enable conversions based on compound information",
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY,
+ ),
+ ],
+ )
+ def retrieve(self, request, *args, **kwargs):
+ return super().retrieve(request, *args, **kwargs)
diff --git a/pkpdapp/pkpdapp/api/views/variable.py b/pkpdapp/pkpdapp/api/views/variable.py
index ed3dfa66..f6a989cd 100644
--- a/pkpdapp/pkpdapp/api/views/variable.py
+++ b/pkpdapp/pkpdapp/api/views/variable.py
@@ -5,6 +5,8 @@
#
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
+from drf_spectacular.utils import extend_schema, OpenApiParameter
+from drf_spectacular.types import OpenApiTypes
from pkpdapp.api.views import (
ProjectFilter,
CheckAccessToProject,
@@ -26,3 +28,31 @@ class VariableView(viewsets.ModelViewSet):
permission_classes = [
IsAuthenticated & CheckAccessToProject
]
+
+ @extend_schema(
+ parameters=[
+ OpenApiParameter(
+ name='project_id',
+ description='Filter results by project ID',
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY
+ ),
+ OpenApiParameter(
+ name='dosed_pk_model_id',
+ description='Filter results by dosed_pk_model ID',
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY
+ ),
+ OpenApiParameter(
+ name='pd_model_id',
+ description='Filter results by pd_model ID',
+ required=False,
+ type=OpenApiTypes.INT,
+ location=OpenApiParameter.QUERY
+ ),
+ ],
+ )
+ def list(self, request, *args, **kwargs):
+ return super().list(request, *args, **kwargs)
diff --git a/pkpdapp/pkpdapp/migrations/0001_initial.py b/pkpdapp/pkpdapp/migrations/0001_initial.py
index 7871d3bd..19eaf324 100644
--- a/pkpdapp/pkpdapp/migrations/0001_initial.py
+++ b/pkpdapp/pkpdapp/migrations/0001_initial.py
@@ -9,6 +9,7 @@
from django.conf import settings
+import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import jsonfield.fields
@@ -63,13 +64,43 @@ class Migration(migrations.Migration):
('value', models.CharField(help_text='category name', max_length=100)),
],
),
+ migrations.CreateModel(
+ name='CombinedModel',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('read_only', models.BooleanField(default=False, help_text='true if object has been stored')),
+ ('datetime', models.DateTimeField(blank=True, help_text='datetime the object was stored.', null=True)),
+ ('name', models.CharField(help_text='name of the model', max_length=100)),
+ ('species', models.CharField(choices=[('H', 'human'), ('R', 'rat'), ('N', 'non-human primate'), ('M', 'mouse')], default='H', help_text='species', max_length=1)),
+ ('has_saturation', models.BooleanField(default=False, help_text='whether the pk model has saturation')),
+ ('has_effect', models.BooleanField(default=False, help_text='whether the pk model has effect compartment')),
+ ('has_lag', models.BooleanField(default=False, help_text='whether the pk model has lag')),
+ ('has_bioavailability', models.BooleanField(default=False, help_text='whether the pk model has bioavailability')),
+ ('has_hill_coefficient', models.BooleanField(default=False, help_text='whether the pd model has hill coefficient')),
+ ('time_max', models.FloatField(default=30, help_text='suggested time to simulate after the last dose (in the time units specified by the mmt model)')),
+ ],
+ options={
+ 'abstract': False,
+ },
+ bases=(pkpdapp.models.myokit_model_mixin.MyokitModelMixin, models.Model),
+ ),
migrations.CreateModel(
name='Compound',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='name of the compound', max_length=100)),
- ('description', models.TextField(help_text='short description of the compound')),
- ('molecular_mass', models.FloatField(blank=True, help_text='molecular mass for compound for conversion from mol to grams', null=True)),
+ ('description', models.TextField(blank=True, default='', help_text='short description of the compound')),
+ ('molecular_mass', models.FloatField(default=500.0, help_text='molecular mass for compound for conversion from mol to grams')),
+ ('compound_type', models.CharField(choices=[('SM', 'Small Molecule'), ('LM', 'Large Molecule')], default='SM', max_length=2)),
+ ('fraction_unbound_plasma', models.FloatField(blank=True, default=0.02, help_text='fraction unbound plasma (unitless)', null=True)),
+ ('blood_to_plasma_ratio', models.FloatField(blank=True, default=1.0, help_text='blood to plasma ratio (unitless)', null=True)),
+ ('intrinsic_clearance', models.FloatField(blank=True, help_text='intrinsic clearance', null=True)),
+ ('intrinsic_clearance_assay', models.CharField(choices=[('MS', 'Microsomes'), ('HC', 'Hepatocytes')], default='MS', max_length=2)),
+ ('fraction_unbound_including_cells', models.FloatField(blank=True, default=1.0, help_text='fraction unbound in plasma and red blood cells (unitless)', null=True)),
+ ('target_molecular_mass', models.FloatField(default=25000.0, help_text='molecular mass for target for conversion from mol to grams')),
+ ('target_concentration', models.FloatField(blank=True, default=1.0, help_text='target concentration', null=True)),
+ ('dissociation_constant', models.FloatField(blank=True, help_text='dissociation constant', null=True)),
+ ('is_soluble', models.BooleanField(default=True, help_text='is the compound target soluble')),
],
),
migrations.CreateModel(
@@ -82,28 +113,27 @@ class Migration(migrations.Migration):
],
),
migrations.CreateModel(
- name='DoseBase',
- fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('start_time', models.FloatField(help_text='starting time point of dose, see protocol for units')),
- ('amount', models.FloatField(help_text='amount of compound administered over the duration, see protocol for units. Rate of administration is assumed constant')),
- ('duration', models.FloatField(default=1.0, help_text='Duration of dose administration, see protocol for units. Duration must be greater than 0.', validators=[pkpdapp.models.dose.validate_duration])),
- ],
- ),
- migrations.CreateModel(
- name='DosedPharmacokineticModel',
+ name='DerivedVariable',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('read_only', models.BooleanField(default=False, help_text='true if object has been stored')),
('datetime', models.DateTimeField(blank=True, help_text='datetime the object was stored.', null=True)),
- ('name', models.CharField(help_text='name of the model', max_length=100)),
- ('dose_compartment', models.CharField(blank=True, default='central', help_text='compartment name to be dosed', max_length=100, null=True)),
- ('time_max', models.FloatField(default=30, help_text='suggested time to simulate after the last dose (in the time units specified by the mmt model)')),
+ ('type', models.CharField(choices=[('RO', 'receptor occupancy'), ('FUP', 'faction unbound plasma'), ('BPR', 'blood plasma ratio')], help_text='type of derived variable', max_length=3)),
],
options={
'abstract': False,
},
- bases=(pkpdapp.models.myokit_model_mixin.MyokitModelMixin, models.Model),
+ ),
+ migrations.CreateModel(
+ name='DoseBase',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('start_time', models.FloatField(help_text='starting time point of dose, see protocol for units')),
+ ('amount', models.FloatField(help_text='amount of compound administered over the duration, see protocol for units. Rate of administration is assumed constant')),
+ ('duration', models.FloatField(default=1.0, help_text='Duration of dose administration, see protocol for units. Duration must be greater than 0.', validators=[pkpdapp.models.dose.validate_duration])),
+ ('repeats', models.IntegerField(default=1, help_text='Number of times to repeat the dose. ')),
+ ('repeat_interval', models.FloatField(default=1.0, help_text='Interval between repeated doses. See protocol for units. ')),
+ ],
),
migrations.CreateModel(
name='Inference',
@@ -159,6 +189,7 @@ class Migration(migrations.Migration):
('description', models.TextField(blank=True, default='', help_text='short description of the model')),
('mmt', models.TextField(default='[[model]]\n\n[myokit]\ntime = 0 bind time', help_text='the model represented using mmt (see https://myokit.readthedocs)')),
('time_max', models.FloatField(default=30, help_text='suggested maximum time to simulate for this model (in the time units specified by the mmt model)')),
+ ('is_library_model', models.BooleanField(default=False, help_text='whether this model is a library model (i.e. it is not an uploaded user model)')),
],
options={
'abstract': False,
@@ -175,6 +206,7 @@ class Migration(migrations.Migration):
('description', models.TextField(blank=True, default='', help_text='short description of the model')),
('mmt', models.TextField(default='[[model]]\n\n[myokit]\ntime = 0 bind time', help_text='the model represented using mmt (see https://myokit.readthedocs)')),
('time_max', models.FloatField(default=30, help_text='suggested maximum time to simulate for this model (in the time units specified by the mmt model)')),
+ ('is_library_model', models.BooleanField(default=False, help_text='whether this model is a library model (i.e. it is not an uploaded user model)')),
],
options={
'abstract': False,
@@ -187,6 +219,9 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='name of the project', max_length=100)),
('description', models.TextField(blank=True, default='', help_text='short description of the project')),
+ ('created', models.DateTimeField(auto_now_add=True)),
+ ('species', models.CharField(choices=[('M', 'Mouse'), ('R', 'Rat'), ('H', 'Human'), ('K', 'Monkey'), ('O', 'Other')], default='O', help_text='subject species', max_length=1)),
+ ('compound', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='pkpdapp.compound')),
],
),
migrations.CreateModel(
@@ -202,6 +237,34 @@ class Migration(migrations.Migration):
'abstract': False,
},
),
+ migrations.CreateModel(
+ name='Simulation',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(help_text='name of the simulation', max_length=100)),
+ ('nrows', models.IntegerField(default=1, help_text='number of subplot rows')),
+ ('ncols', models.IntegerField(default=1, help_text='number of subplot columns')),
+ ('time_max', models.FloatField(default=30, help_text='maximum time for the simulation', validators=[django.core.validators.MinValueValidator(0)])),
+ ('abs_tolerance', models.FloatField(default=1e-06, help_text='absolute tolerance for the simulation', validators=[django.core.validators.MinValueValidator(0)])),
+ ('rel_tolerance', models.FloatField(default=1e-06, help_text='relative tolerance for the simulation', validators=[django.core.validators.MinValueValidator(0)])),
+ ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='simulations', to='pkpdapp.project')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='SimulationPlot',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('index', models.IntegerField(help_text='index of the plot in the simulation')),
+ ('x_scale', models.CharField(choices=[('lin', 'Linear'), ('lg2', 'Log2'), ('lg10', 'Log10'), ('ln', 'Ln')], default='lin', help_text='scale for x axis', max_length=4)),
+ ('y_scale', models.CharField(choices=[('lin', 'Linear'), ('lg2', 'Log2'), ('lg10', 'Log10'), ('ln', 'Ln')], default='lin', help_text='scale for y axis', max_length=4)),
+ ('y2_scale', models.CharField(choices=[('lin', 'Linear'), ('lg2', 'Log2'), ('lg10', 'Log10'), ('ln', 'Ln')], default='lin', help_text='scale for rhs y axis', max_length=4)),
+ ('min', models.FloatField(blank=True, help_text='lower bound for the y axis', null=True)),
+ ('max', models.FloatField(blank=True, help_text='upper bound for the y axis', null=True)),
+ ('min2', models.FloatField(blank=True, help_text='lower bound for the rhs y axis', null=True)),
+ ('max2', models.FloatField(blank=True, help_text='upper bound for the rhs y axis', null=True)),
+ ('simulation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='plots', to='pkpdapp.simulation')),
+ ],
+ ),
migrations.CreateModel(
name='Unit',
fields=[
@@ -236,21 +299,24 @@ class Migration(migrations.Migration):
('read_only', models.BooleanField(default=False, help_text='true if object has been stored')),
('datetime', models.DateTimeField(blank=True, help_text='datetime the object was stored.', null=True)),
('is_public', models.BooleanField(default=False)),
- ('lower_bound', models.FloatField(default=1e-06, help_text='lowest possible value for this variable')),
- ('upper_bound', models.FloatField(default=2, help_text='largest possible value for this variable')),
+ ('lower_bound', models.FloatField(blank=True, help_text='lowest possible value for this variable', null=True)),
+ ('upper_bound', models.FloatField(blank=True, help_text='largest possible value for this variable', null=True)),
('default_value', models.FloatField(default=1, help_text='default value for this variable')),
('is_log', models.BooleanField(default=False, help_text='True if default_value is stored as the log of this value')),
('name', models.CharField(help_text='name of the variable', max_length=100)),
+ ('description', models.TextField(blank=True, help_text='description of the variable', null=True)),
('binding', models.CharField(blank=True, help_text='myokit binding of the variable (e.g. time)', max_length=100, null=True)),
('qname', models.CharField(help_text='fully qualitifed name of the variable', max_length=200)),
+ ('unit_symbol', models.CharField(blank=True, help_text='if unit is None then this is the unit of this variable as a string', max_length=20, null=True)),
('constant', models.BooleanField(default=True, help_text='True for a constant variable of the model, i.e. a parameter. False if non-constant, i.e. an output of the model (default is True)')),
- ('state', models.BooleanField(default=False, help_text='True for a state variable of the model (default is False)')),
+ ('state', models.BooleanField(default=False, help_text='True if it is a state variable of the model and has an initial condition parameter (default is False)')),
('color', models.IntegerField(default=0, help_text='Color index associated with this variable. For display purposes in the frontend')),
('display', models.BooleanField(default=True, help_text='True if this variable will be displayed in the frontend, False otherwise')),
('axis', models.BooleanField(default=False, help_text='False/True if biomarker type displayed on LHS/RHS axis')),
- ('dosed_pk_model', models.ForeignKey(blank=True, help_text='dosed pharmacokinetic model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='variables', to='pkpdapp.dosedpharmacokineticmodel')),
+ ('dosed_pk_model', models.ForeignKey(blank=True, help_text='dosed pharmacokinetic model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='variables', to='pkpdapp.combinedmodel')),
('pd_model', models.ForeignKey(blank=True, help_text='pharmacodynamic model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='variables', to='pkpdapp.pharmacodynamicmodel')),
('pk_model', models.ForeignKey(blank=True, help_text='pharmacokinetic model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='variables', to='pkpdapp.pharmacokineticmodel')),
+ ('protocol', models.ForeignKey(blank=True, help_text='dosing protocol', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='variables', to='pkpdapp.protocol')),
('unit', models.ForeignKey(blank=True, help_text='variable values are in this unit (note this might be different from the unit in the stored sbml)', null=True, on_delete=django.db.models.deletion.PROTECT, to='pkpdapp.unit')),
],
),
@@ -266,6 +332,51 @@ class Migration(migrations.Migration):
('protocol', models.ForeignKey(blank=True, help_text='dosing protocol for this subject.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subjects', to='pkpdapp.protocol')),
],
),
+ migrations.CreateModel(
+ name='SimulationYAxis',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('right', models.BooleanField(default=False, help_text='True if the variable is plotted on the right y axis')),
+ ('plot', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='y_axes', to='pkpdapp.simulationplot')),
+ ('variable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='y_axes', to='pkpdapp.variable')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='SimulationSlider',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('simulation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sliders', to='pkpdapp.simulation')),
+ ('variable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sliders', to='pkpdapp.variable')),
+ ],
+ ),
+ migrations.AddField(
+ model_name='simulationplot',
+ name='x_unit',
+ field=models.ForeignKey(help_text='unit for x axis', on_delete=django.db.models.deletion.PROTECT, related_name='simulation_plots', to='pkpdapp.unit'),
+ ),
+ migrations.AddField(
+ model_name='simulationplot',
+ name='y_unit',
+ field=models.ForeignKey(blank=True, help_text='unit for y axis', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='simulation_plots_y', to='pkpdapp.unit'),
+ ),
+ migrations.AddField(
+ model_name='simulationplot',
+ name='y_unit2',
+ field=models.ForeignKey(blank=True, help_text='unit for rhs y axis', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='simulation_plots_y2', to='pkpdapp.unit'),
+ ),
+ migrations.CreateModel(
+ name='SimulationCxLine',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('value', models.FloatField(help_text='value of the line')),
+ ('plot', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cx_lines', to='pkpdapp.simulationplot')),
+ ],
+ ),
+ migrations.AddField(
+ model_name='simulation',
+ name='time_max_unit',
+ field=models.ForeignKey(help_text='unit for maximum time', on_delete=django.db.models.deletion.PROTECT, related_name='simulation_time_max', to='pkpdapp.unit'),
+ ),
migrations.AddField(
model_name='protocol',
name='amount_unit',
@@ -315,7 +426,7 @@ class Migration(migrations.Migration):
('datetime', models.DateTimeField(blank=True, help_text='datetime the object was stored.', null=True)),
('pd_variable', models.ForeignKey(help_text='variable in PD part of model', on_delete=django.db.models.deletion.CASCADE, related_name='pd_mappings', to='pkpdapp.variable')),
('pk_variable', models.ForeignKey(help_text='variable in PK part of model', on_delete=django.db.models.deletion.CASCADE, related_name='pk_mappings', to='pkpdapp.variable')),
- ('pkpd_model', models.ForeignKey(help_text='PKPD model that this mapping is for', on_delete=django.db.models.deletion.CASCADE, related_name='mappings', to='pkpdapp.dosedpharmacokineticmodel')),
+ ('pkpd_model', models.ForeignKey(help_text='PKPD model that this mapping is for', on_delete=django.db.models.deletion.CASCADE, related_name='mappings', to='pkpdapp.combinedmodel')),
],
options={
'abstract': False,
@@ -342,7 +453,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='loglikelihood',
name='children',
- field=models.ManyToManyField(blank=True, null=True, related_name='parents', through='pkpdapp.LogLikelihoodParameter', to='pkpdapp.LogLikelihood'),
+ field=models.ManyToManyField(related_name='parents', through='pkpdapp.LogLikelihoodParameter', to='pkpdapp.LogLikelihood'),
),
migrations.AddField(
model_name='loglikelihood',
@@ -398,39 +509,85 @@ class Migration(migrations.Migration):
name='project',
field=models.ForeignKey(help_text='Project that "owns" this inference object', on_delete=django.db.models.deletion.CASCADE, to='pkpdapp.project'),
),
- migrations.AddField(
- model_name='dosedpharmacokineticmodel',
- name='pd_model',
- field=models.ForeignKey(blank=True, help_text='PD part of model', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pkpd_models', to='pkpdapp.pharmacodynamicmodel'),
+ migrations.CreateModel(
+ name='EfficacyExperiment',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(blank=True, default='', help_text='name of the experiment', max_length=100)),
+ ('c50', models.FloatField(help_text='half maximal effective concentration')),
+ ('hill_coefficient', models.FloatField(default=1.0, help_text='Hill coefficient measure of binding')),
+ ('c50_unit', models.ForeignKey(help_text='unit for c50', on_delete=django.db.models.deletion.PROTECT, related_name='efficacy_experiments', to='pkpdapp.unit')),
+ ('compound', models.ForeignKey(help_text='compound for efficacy experiment', on_delete=django.db.models.deletion.CASCADE, related_name='efficacy_experiments', to='pkpdapp.compound')),
+ ],
),
- migrations.AddField(
- model_name='dosedpharmacokineticmodel',
- name='pk_model',
- field=models.ForeignKey(blank=True, default=1, help_text='model', null=True, on_delete=django.db.models.deletion.PROTECT, to='pkpdapp.pharmacokineticmodel'),
+ migrations.AddConstraint(
+ model_name='dosebase',
+ constraint=models.CheckConstraint(check=models.Q(('duration__gt', 0)), name='Duration must be greater than 0'),
),
migrations.AddField(
- model_name='dosedpharmacokineticmodel',
- name='project',
- field=models.ForeignKey(blank=True, help_text='Project that "owns" this model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pk_models', to='pkpdapp.project'),
+ model_name='derivedvariable',
+ name='pk_variable',
+ field=models.ForeignKey(help_text='base variable in PK part of model', on_delete=django.db.models.deletion.CASCADE, related_name='derived_variables', to='pkpdapp.variable'),
),
migrations.AddField(
- model_name='dosedpharmacokineticmodel',
- name='protocol',
- field=models.ForeignKey(blank=True, help_text='dosing protocol', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='dosed_pk_models', to='pkpdapp.protocol'),
- ),
- migrations.AddConstraint(
- model_name='dosebase',
- constraint=models.CheckConstraint(check=models.Q(('duration__gt', 0)), name='Duration must be greater than 0'),
+ model_name='derivedvariable',
+ name='pkpd_model',
+ field=models.ForeignKey(help_text='PKPD model that this derived variable is for', on_delete=django.db.models.deletion.CASCADE, related_name='derived_variables', to='pkpdapp.combinedmodel'),
),
migrations.AddField(
model_name='dataset',
name='project',
field=models.ForeignKey(blank=True, help_text='Project that "owns" this model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='datasets', to='pkpdapp.project'),
),
+ migrations.AddField(
+ model_name='compound',
+ name='dissociation_unit',
+ field=models.ForeignKey(default=pkpdapp.models.compound.get_dissociation_constant_unit, help_text='unit for dissociation constant', on_delete=django.db.models.deletion.PROTECT, related_name='compounds_kd', to='pkpdapp.unit'),
+ ),
+ migrations.AddField(
+ model_name='compound',
+ name='intrinsic_clearance_unit',
+ field=models.ForeignKey(default=pkpdapp.models.compound.get_intrinsic_clearence_unit, help_text='unit for intrinsic clearance', on_delete=django.db.models.deletion.PROTECT, related_name='compounds_clint', to='pkpdapp.unit'),
+ ),
migrations.AddField(
model_name='compound',
name='molecular_mass_unit',
- field=models.ForeignKey(default=pkpdapp.models.compound.get_mol_mass_unit, help_text='unit for molecular mass (e.g. g/mol)', on_delete=django.db.models.deletion.PROTECT, related_name='compounds', to='pkpdapp.unit'),
+ field=models.ForeignKey(default=pkpdapp.models.compound.get_mol_mass_unit, help_text='unit for molecular mass (e.g. g/mol)', on_delete=django.db.models.deletion.PROTECT, related_name='compound_mol_mass', to='pkpdapp.unit'),
+ ),
+ migrations.AddField(
+ model_name='compound',
+ name='target_concentration_unit',
+ field=models.ForeignKey(default=pkpdapp.models.compound.get_target_concentration_unit, help_text='unit for target concentration', on_delete=django.db.models.deletion.PROTECT, related_name='compounds_target_conc', to='pkpdapp.unit'),
+ ),
+ migrations.AddField(
+ model_name='compound',
+ name='target_molecular_mass_unit',
+ field=models.ForeignKey(default=pkpdapp.models.compound.get_mol_mass_unit, help_text='unit for target molecular mass (e.g. g/mol)', on_delete=django.db.models.deletion.PROTECT, related_name='compounds_target_mol_mass', to='pkpdapp.unit'),
+ ),
+ migrations.AddField(
+ model_name='compound',
+ name='use_efficacy',
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='compound_using', to='pkpdapp.efficacyexperiment'),
+ ),
+ migrations.AddField(
+ model_name='combinedmodel',
+ name='pd_model',
+ field=models.ForeignKey(blank=True, help_text='PD part of model', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pkpd_models', to='pkpdapp.pharmacodynamicmodel'),
+ ),
+ migrations.AddField(
+ model_name='combinedmodel',
+ name='pd_model2',
+ field=models.ForeignKey(blank=True, help_text='second PD part of model', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pkpd_models2', to='pkpdapp.pharmacodynamicmodel'),
+ ),
+ migrations.AddField(
+ model_name='combinedmodel',
+ name='pk_model',
+ field=models.ForeignKey(blank=True, help_text='model', null=True, on_delete=django.db.models.deletion.PROTECT, to='pkpdapp.pharmacokineticmodel'),
+ ),
+ migrations.AddField(
+ model_name='combinedmodel',
+ name='project',
+ field=models.ForeignKey(blank=True, help_text='Project that "owns" this model', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pk_models', to='pkpdapp.project'),
),
migrations.AddField(
model_name='categoricalbiomarker',
diff --git a/pkpdapp/pkpdapp/migrations/0003_initial_users_and_projects.py b/pkpdapp/pkpdapp/migrations/0003_initial_users_and_projects.py
index e733b217..4799f84c 100644
--- a/pkpdapp/pkpdapp/migrations/0003_initial_users_and_projects.py
+++ b/pkpdapp/pkpdapp/migrations/0003_initial_users_and_projects.py
@@ -9,6 +9,24 @@
def load_users_and_projects(apps, schema_editor):
+ compound = {
+ 'name': 'demoCompound',
+ 'description': '''This is an example compound demonstrating
+ some of the capabilities of pkpdapp''',
+ 'molecular_mass': 100,
+ 'molecular_mass_unit': 'g/mol',
+ 'compound_type': 'SM',
+ 'intrinsic_clearance_unit': 'µL/min/mg',
+ 'intrinsic_clearance_assay': 'MS',
+ 'fraction_unbound_plasma': 1.0,
+ 'fraction_unbound_including_cells': 1.0,
+ 'target_molecular_mass': 100,
+ 'target_molecular_mass_unit': 'g/mol',
+ 'target_concentration': 1e-9,
+ 'target_concentration_unit': 'nmol/L',
+ 'dissociation_constant_unit': 'nmol/L',
+ 'is_soluble': True,
+ }
users = [
{
'username': 'demo',
@@ -38,7 +56,31 @@ def load_users_and_projects(apps, schema_editor):
Project = apps.get_model("pkpdapp", "Project")
Profile = apps.get_model("pkpdapp", "Profile")
+ Unit = apps.get_model("pkpdapp", "Unit")
User = apps.get_model("auth", "User")
+ Compound = apps.get_model("pkpdapp", "Compound")
+ compound = Compound.objects.create(
+ name=compound['name'],
+ description=compound['description'],
+ molecular_mass=compound['molecular_mass'],
+ compound_type=compound['compound_type'],
+ molecular_mass_unit=Unit.objects.get(
+ symbol=compound['molecular_mass_unit']),
+ intrinsic_clearance_unit=Unit.objects.get(
+ symbol=compound['intrinsic_clearance_unit']),
+ intrinsic_clearance_assay='MS',
+ fraction_unbound_plasma=1.0,
+ fraction_unbound_including_cells=1.0,
+ target_molecular_mass=100,
+ target_molecular_mass_unit=Unit.objects.get(
+ symbol=compound['target_molecular_mass_unit']),
+ target_concentration=1e-9,
+ target_concentration_unit=Unit.objects.get(
+ symbol=compound['target_concentration_unit']),
+ dissociation_unit=Unit.objects.get(
+ symbol=compound['dissociation_constant_unit']),
+ is_soluble=True,
+ )
for u in users:
user = User.objects.create(
username=u['username'],
@@ -54,7 +96,9 @@ def load_users_and_projects(apps, schema_editor):
project = Project.objects.create(
name=p['name'],
description=p['description'],
+ compound=compound,
)
+
project.users.add(
user,
through_defaults={'read_only': p['read_only']}
diff --git a/pkpdapp/pkpdapp/migrations/0005_initial_datasets.py b/pkpdapp/pkpdapp/migrations/0005_initial_datasets.py
index 42948648..ee7826e5 100644
--- a/pkpdapp/pkpdapp/migrations/0005_initial_datasets.py
+++ b/pkpdapp/pkpdapp/migrations/0005_initial_datasets.py
@@ -21,6 +21,8 @@
'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/usecase1/usecase1.csv', # noqa: E501
]
+datafile_urls = []
+
datafile_names = [
'lxf_control_growth',
'lxf_medium_erlotinib_dose',
@@ -55,8 +57,6 @@
'time': myokit.Unit.parse_simple('h'),
'amount': myokit.Unit.parse_simple('ng'),
},
-
-
]
datafile_descriptions = [
@@ -99,6 +99,7 @@
''', # noqa: W605
]
+
biomarkers_for_datasets = [
[
{
@@ -277,10 +278,10 @@ def load_datasets(apps, schema_editor):
symbol=b['unit']
),
stored_time_unit=Unit.objects.get(
- symbol=b['time']
+ symbol=b['time'] if b['time'] != 'd' else 'day'
),
display_time_unit=Unit.objects.get(
- symbol=b['time']
+ symbol=b['time'] if b['time'] != 'd' else 'day'
),
dataset=dataset,
color=i,
@@ -363,7 +364,7 @@ def load_datasets(apps, schema_editor):
if TIME_UNIT_COLUMN is None:
time_unit = Unit.objects.get(symbol='h')
else:
- time_unit = Unit.objects.get(symbol=row[TIME_UNIT_COLUMN])
+ time_unit = Unit.objects.get(symbol=row[TIME_UNIT_COLUMN] if row[TIME_UNIT_COLUMN] != 'd' else 'day') # noqa: E501
subject_id = row[SUBJECT_ID_COLUMN]
try:
@@ -470,10 +471,19 @@ def load_datasets(apps, schema_editor):
compound = Compound.objects.create(
name=compound_str,
# TODO how to get molecular_mass?
- molecular_mass=1.0,
- molecular_mass_unit=Unit.objects.get(
- symbol='g/mol'
- )
+ molecular_mass=100,
+ compound_type='SM',
+ molecular_mass_unit=Unit.objects.get(symbol='g/mol'), # noqa: E501
+ intrinsic_clearance_unit=Unit.objects.get(symbol='µL/min/mg'), # noqa: E501
+ intrinsic_clearance_assay='MS',
+ fraction_unbound_plasma=1.0,
+ fraction_unbound_including_cells=1.0,
+ target_molecular_mass=100,
+ target_molecular_mass_unit=Unit.objects.get(symbol='g/mol'), # noqa: E501
+ target_concentration=1e-9,
+ target_concentration_unit=Unit.objects.get(symbol='nmol/L'), # noqa: E501
+ dissociation_unit=Unit.objects.get(symbol='nmol/L'), # noqa: E501
+ is_soluble=True,
)
if subject.id in protocols:
protocol = protocols[subject.id]
diff --git a/pkpdapp/pkpdapp/migrations/0006_initial_pkpd_models.py b/pkpdapp/pkpdapp/migrations/0006_initial_pkpd_models.py
index 331eae27..2f711768 100644
--- a/pkpdapp/pkpdapp/migrations/0006_initial_pkpd_models.py
+++ b/pkpdapp/pkpdapp/migrations/0006_initial_pkpd_models.py
@@ -8,6 +8,7 @@
import urllib.request
import codecs
from myokit.formats.sbml import SBMLParser
+import myokit
from pkpdapp.models import MyokitModelMixin
@@ -93,59 +94,290 @@ def load_pkpd_models(apps, schema_editor):
'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/models/tgi_Koch_2009_reparametrised.xml' # noqa: E501
},
]
+ models_pd = []
+ models_pd_mmt = [
+ {
+ 'name': 'indirect_effects_stimulation_elimination',
+ 'description': 'Indirect effects model with stimulation and elimination', # noqa: E501
+ 'mmt_filename': 'pkpdapp/migrations/models/IE_StimulationElimination_Emax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'indirect_effects_inhibition_elimination',
+ 'description': 'Indirect effects model with inhibition and elimination', # noqa: E501
+ 'mmt_filename': 'pkpdapp/migrations/models/IE_InhibitionElimination_Imax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'indirect_effects_stimulation_production',
+ 'description': 'Indirect effects model with stimulation and production', # noqa: E501
+ 'mmt_filename': 'pkpdapp/migrations/models/IE_StimulationProduction_Emax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'indirect_effects_inhibition_production',
+ 'description': 'Indirect effects model with inhibition and production', # noqa: E501
+ 'mmt_filename': 'pkpdapp/migrations/models/IE_InhibitionProduction_Imax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'indirect_effects_precursor_inhibition_production',
+ 'description': 'Indirect effects precursor model with inhibition and production', # noqa: E501
+ 'mmt_filename': 'pkpdapp/migrations/models/IE_Precursor_InhibitionElimination_Emax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'indirect_effects_precursor_stimulation_production',
+ 'description': 'Indirect effects precursor model with stimulatino and production', # noqa: E501
+ 'mmt_filename': 'pkpdapp/migrations/models/IE_Precursor_StimulationElimination_Emax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'direct_effects_emax',
+ 'description': 'Direct effects model with Emax',
+ 'mmt_filename': 'pkpdapp/migrations/models/DE_Emax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'direct_effects_imax',
+ 'description': 'Direct effects model with Imax',
+ 'mmt_filename': 'pkpdapp/migrations/models/DE_Imax.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_gompertz',
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TG_Gompertz_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_simeoni_logistic',
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TG_Simeoni_logistic_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_simeoni',
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TG_Simeoni_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_inhibition_delay_cell_distribution_conc_prop_kill', # noqa: E501
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TGI_Delay_CellDistribution_ConcPropKill_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_inhibition_delay_cell_distribution_emax_kill', # noqa: E501
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TGI_Delay_CellDistribution_EmaxKill_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_inhibition_delay_cell_distribution_exp_conc_kill', # noqa: E501
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TGI_Delay_CellDistribution_expConcPropKill_PDModel.mmt' # noqa: E501
+ },
+
+ {
+ 'name': 'tumour_growth_inhibition_delay_signal_distribution_conc_prop_kill', # noqa: E501
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TGI_Delay_SignalDistribution_ConcPropKill_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_inhibition_delay_signal_distribution_emax_kill', # noqa: E501
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TGI_Delay_SignalDistribution_EmaxKill_PDModel.mmt' # noqa: E501
+ },
+ {
+ 'name': 'tumour_growth_inhibition_delay_signal_distribution_exp_conc_kill', # noqa: E501
+ 'description': '',
+ 'mmt_filename': 'pkpdapp/migrations/models/TGI_Delay_SignalDistribution_expConcPropKill_PDModel.mmt' # noqa: E501
+ },
+ ]
+
models_pk = [
{
'name':
- 'one_compartment_pk_model',
+ 'one_compartment_clinical',
'description':
"""
-In this model the distribution of the drug is modelled by one
-compartment with a linear elimination rate \(k_e\)
-
-$$
- \\frac{\\text{d}A}{\\text{d}t} = -k_e A \\quad C = \\frac{A}{V}.
-$$
-
-Here, \(A\) and \(C\) are the amount and the concentration of
-the drug in the body, respectively. \(V\) is the effective volume
-of distribution of the drug in the compartment.
-
-This model may be interpreted as modelling the blood plasma
-concentration of the drug, with the assumption that the clearance of
-the drug through the liver may be approximated by an exponential decay
-with the rate \(k_e\).
-
-With a :class:`erlotinib.PharmacokineticModel` the drug may be either
-directly administered to \(A$ or indirectly through a dosing
-compartment.
+Description of a clinical one compartment PK model here.
""", # noqa: W605
- 'sbml_url':
- 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/models/PK_one_comp.xml' # noqa: E501
+ 'mmt_filename':
+ 'pkpdapp/migrations/models/1cmpt_PK_Model_Clinical.mmt' # noqa: E501
},
{
'name':
- 'two_compartment_pk_model',
+ 'one_compartment_preclinical',
'description':
"""
-Description of a two compartment PK model here.
+Description of a preclinical one compartment PK model here.
""", # noqa: W605
- 'sbml_url':
- 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/models/PK_two_comp.xml' # noqa: E501
+ 'mmt_filename':
+ 'pkpdapp/migrations/models/1cmpt_PK_Model_Preclinical.mmt' # noqa: E501
},
{
'name':
- 'three_compartment_pk_model',
+ 'two_compartment_clinical',
'description':
"""
-Description of a three compartment PK model here.
+Description of a clinical two compartment PK model here.
""", # noqa: W605
- 'sbml_url':
- 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/models/PK_three_comp.xml' # noqa: E501
+ 'mmt_filename':
+ 'pkpdapp/migrations/models/2cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name':
+ 'two_compartment_preclinical',
+ 'description':
+ """
+Description of a preclinical two compartment PK model here.
+""", # noqa: W605
+ 'mmt_filename':
+ 'pkpdapp/migrations/models/2cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name':
+ 'three_compartment_clinical',
+ 'description':
+ """
+Description of a clinical three compartment PK model here.
+""", # noqa: W605
+ 'mmt_filename':
+ 'pkpdapp/migrations/models/3cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name':
+ 'three_compartment_preclinical',
+ 'description':
+ """
+Description of a preclinical three compartment PK model here.
+""", # noqa: W605
+ 'mmt_filename':
+ 'pkpdapp/migrations/models/3cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_full_clinical',
+ 'description':
+ """
+Description of a clinical one compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_full_preclinical',
+ 'description':
+ """
+Description of a clinical one compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_QSS_clinical',
+ 'description':
+ """
+Description of a clinical one compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_QSS_preclinical',
+ 'description':
+ """
+Description of a clinical two compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_full_clinical',
+ 'description':
+ """
+Description of a clinical two compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_full_preclinical',
+ 'description':
+ """
+Description of a clinical two compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_QSS_clinical',
+ 'description':
+ """
+Description of a clinical two compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_QSS_preclinical',
+ 'description':
+ """
+Description of a clinical two compartment TMDD model here.
+""", # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_full_constant_target_clinical',
+ 'description':
+ """
+ Description of a clinical one compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_full_constant_target_clinical',
+ 'description':
+ """
+ Description of a clinical two compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_full_constant_target_preclinical',
+ 'description':
+ """
+ Description of a preclinical one compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_full_constant_target_preclinical',
+ 'description':
+ """
+ Description of a preclinical two compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_qss_constant_target_clinical',
+ 'description':
+ """
+ Description of a clinical one compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_qss_constant_target_clinical',
+ 'description':
+ """
+ Description of a clinical two compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_clinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'one_compartment_tmdd_qss_constant_target_preclinical',
+ 'description':
+ """
+ Description of a preclinical one compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Preclinical.mmt' # noqa: E501
+ },
+ {
+ 'name': 'two_compartment_tmdd_qss_constant_target_preclinical',
+ 'description':
+ """
+ Description of a preclinical two compartment TMDD model here.
+ """, # noqa: W605
+ 'mmt_filename': 'pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_preclinical.mmt' # noqa: E501
},
]
PharmacodynamicModel = apps.get_model("pkpdapp", "PharmacodynamicModel")
PharmacokineticModel = apps.get_model("pkpdapp", "PharmacokineticModel")
+ CombinedModel = apps.get_model("pkpdapp", "CombinedModel")
Unit = apps.get_model("pkpdapp", "Unit")
Variable = apps.get_model("pkpdapp", "Variable")
Project = apps.get_model("pkpdapp", "Project")
@@ -158,7 +390,8 @@ def load_pkpd_models(apps, schema_editor):
name=m['name'],
description=m['description'],
mmt=MyokitModelMixin.sbml_string_to_mmt(sbml_string),
- project=demo_project
+ project=demo_project,
+ is_library_model=True,
)
myokit_model = SBMLParser().parse_string(
@@ -229,19 +462,42 @@ def load_pkpd_models(apps, schema_editor):
except urllib.error.URLError:
print('WARNING: urlopen timed-out, no data loaded')
+ for m in models_pd_mmt:
+ try:
+ # check myokit can parse the model
+ mmt_string = open(m['mmt_filename'], 'r').read()
+ myokit_model = myokit.parse(mmt_string)[0]
+ print('loading', m['mmt_filename'], myokit_model.meta['name'])
+ myokit_model.validate()
+ model = PharmacodynamicModel.objects.create(
+ name=m['name'],
+ description=myokit_model.meta['name'],
+ mmt=mmt_string,
+ )
+ except urllib.error.URLError:
+ print('WARNING: urlopen timed-out, no data loaded')
+
for m in models_pk:
try:
- with urllib.request.urlopen(m['sbml_url'], timeout=5) as f:
- # parse as csv file
- sbml_string = codecs.decode(f.read(), 'utf-8')
- model = PharmacokineticModel.objects.create(
- name=m['name'],
- description=m['description'],
- mmt=MyokitModelMixin.sbml_string_to_mmt(sbml_string),
- )
+ # check myokit can parse the model
+ mmt_string = open(m['mmt_filename'], 'r').read()
+ myokit_model = myokit.parse(mmt_string)[0]
+ print('loading', m['mmt_filename'], myokit_model.meta['name'])
+ myokit_model.validate()
+ model = PharmacokineticModel.objects.create(
+ name=m['name'],
+ description=myokit_model.meta['name'],
+ mmt=mmt_string,
+ is_library_model=True,
+ )
except urllib.error.URLError:
print('WARNING: urlopen timed-out, no data loaded')
+ model = CombinedModel.objects.create(
+ name='demo',
+ project=demo_project,
+ )
+
# three_comp_model = PharmacokineticModel.objects.get(
# name='three_compartment_pk_model'
# )
diff --git a/pkpdapp/pkpdapp/migrations/0007_initial_units.py b/pkpdapp/pkpdapp/migrations/0007_initial_units.py
index 88259b2b..57e55c4c 100644
--- a/pkpdapp/pkpdapp/migrations/0007_initial_units.py
+++ b/pkpdapp/pkpdapp/migrations/0007_initial_units.py
@@ -10,132 +10,313 @@
def load_units(apps, schema_editor):
Unit = apps.get_model("pkpdapp", "Unit")
- m = myokit.Unit.parse_simple('m')
- L = myokit.Unit.parse_simple('L')
- cL = myokit.Unit.parse_simple('cL')
- h = myokit.Unit.parse_simple('h')
- g = myokit.Unit.parse_simple('g')
- mol = myokit.Unit.parse_simple('mol')
+ L = myokit.Unit.parse_simple("L")
+ cL = myokit.Unit.parse_simple("cL")
+ h = myokit.Unit.parse_simple("h")
+ g = myokit.Unit.parse_simple("g")
+ mol = myokit.Unit.parse_simple("mol")
dimensionless = myokit.Unit()
units = [
{
- 'symbol': 'h',
- 'unit': h,
+ "symbol": "nmol/L",
+ "unit": 1e-9 * mol / L,
},
{
- 'symbol': 'mg',
- 'unit': 1e-3 * g,
+ "symbol": "mol",
+ "unit": mol,
},
{
- 'symbol': 'd',
- 'unit': 24 * h,
+ "symbol": "nmol",
+ "unit": 1e-9 * mol,
},
{
- 'symbol': '1/d',
- 'unit': 1 / (24 * h),
+ "symbol": "pmol",
+ "unit": 1e-12 * mol,
},
{
- 'symbol': '1/h',
- 'unit': 1 / h,
+ "symbol": "µmol",
+ "unit": 1e-6 * mol,
},
{
- 'symbol': 'L/mg/d',
- 'unit': L / (1e-3 * g * 24 * h),
+ "symbol": "pmol/L",
+ "unit": 1e-12 * mol / L,
},
{
- 'symbol': 'L',
- 'unit': L
+ "symbol": "µmol/L",
+ "unit": 1e-6 * mol / L,
},
{
- 'symbol': 'L/h',
- 'unit': L / h
+ "symbol": "nmol/L",
+ "unit": 1e-9 * mol / L,
},
{
- 'symbol': '1/L',
- 'unit': 1 / L
+ "symbol": "µL/min/mg",
+ "unit": 1e-6 * L / (60 * h * 1e-3 * g),
},
{
- 'symbol': 'cm^3',
- 'unit': (1e-2 * m)**3,
+ "symbol": "h",
+ "unit": h,
},
{
- 'symbol': 'cm^3/d',
- 'unit': (1e-2 * m)**3 / (24 * h),
+ "symbol": "1/h",
+ "unit": 1 / h,
},
{
- 'symbol': 'g',
- 'unit': g,
+ "symbol": "mg",
+ "unit": 1e-3 * g,
},
{
- 'symbol': 'ng',
- 'unit': 1e-9 * g,
+ "symbol": "day",
+ "unit": 24 * h,
},
{
- 'symbol': 'ng/mL',
- 'unit': 1e-9 * g / (1e-3 * L),
+ "symbol": "1/day",
+ "unit": 1 / (24 * h),
},
{
- 'symbol': 'mg/L',
- 'unit': 1e-3 * g / L,
+ "symbol": "week",
+ "unit": 7 * 24 * h,
},
{
- 'symbol': 'ng/L',
- 'unit': 1e-9 * g / L,
+ "symbol": "1/week",
+ "unit": 1 / (7 * 24 * h),
},
{
- 'symbol': 'g/L',
- 'unit': g / L,
+ "symbol": "min",
+ "unit": h / 60,
},
{
- 'symbol': '10^6/mcL',
- 'unit': 1e6 / (1e-3 * cL),
+ "symbol": "s",
+ "unit": h / 3600,
},
{
- 'symbol': '10^3/mcL',
- 'unit': 1e3 / (1e-3 * cL),
+ "symbol": "L/mg/day",
+ "unit": L / (1e-3 * g * 24 * h),
},
{
- 'symbol': 'g/dL',
- 'unit': g / (10 * cL),
+ "symbol": "L/h/kg",
+ "unit": L / (h * 1e3 * g),
},
{
- 'symbol': '',
- 'unit': dimensionless,
+ "symbol": "mL/h/kg",
+ "unit": 1e-3 * L / (h * 1e3 * g),
},
{
- 'symbol': 'g/mol',
- 'unit': g / mol,
+ "symbol": "L/day/kg",
+ "unit": L / (24 * h * 1e3 * g),
},
{
- 'symbol': 'g/nmol',
- 'unit': g / (1e-6 * mol),
+ "symbol": "mL/day/kg",
+ "unit": 1e-3 * L / (24 * h * 1e3 * g),
},
{
- 'symbol': 'nmol',
- 'unit': 1e-6 * mol,
+ "symbol": "L/h/pmol",
+ "unit": L / (h * 1e-12 * mol),
+ },
+ {
+ "symbol": "L/day/pmol",
+ "unit": L / (24 * h * 1e-12 * mol),
+ },
+ {
+ "symbol": "mL/day/pmol",
+ "unit": 1e-3 * L / (24 * h * 1e-12 * mol),
+ },
+ {
+ "symbol": "L/h/nmol",
+ "unit": L / (h * 1e-9 * mol),
+ },
+ {
+ "symbol": "L/day/nmol",
+ "unit": L / (24 * h * 1e-9 * mol),
+ },
+ {
+ "symbol": "mL/day/nmol",
+ "unit": 1e-3 * L / (24 * h * 1e-9 * mol),
+ },
+ {
+ "symbol": "L/h/µmol",
+ "unit": L / (h * 1e-6 * mol),
+ },
+ {
+ "symbol": "L/day/µmol",
+ "unit": L / (24 * h * 1e-6 * mol),
+ },
+ {
+ "symbol": "mL/day/µmol",
+ "unit": 1e-3 * L / (24 * h * 1e-6 * mol),
+ },
+ {"symbol": "L", "unit": L},
+ {"symbol": "mL", "unit": 1e-3 * L},
+ {"symbol": "L/kg", "unit": L / (1e3 * g)},
+ {"symbol": "L/h", "unit": L / h},
+ {"symbol": "L/day", "unit": L / (24 * h)},
+ {"symbol": "mL/day", "unit": 1e-3 * L / (24 * h)},
+ {"symbol": "mL/h", "unit": 1e-3 * L / h},
+ {"symbol": "µL/h", "unit": 1e-6 * L / h},
+ {"symbol": "1/L", "unit": 1 / L},
+ {
+ "symbol": "kg",
+ "unit": 1e3 * g,
+ },
+ {
+ "symbol": "g",
+ "unit": g,
+ },
+ {
+ "symbol": "ng",
+ "unit": 1e-9 * g,
+ },
+ {
+ "symbol": "ng/mL",
+ "unit": 1e-9 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "mg/L",
+ "unit": 1e-3 * g / L,
+ },
+ {
+ "symbol": "ng/L",
+ "unit": 1e-9 * g / L,
+ },
+ {
+ "symbol": "g/L",
+ "unit": g / L,
+ },
+ {
+ "symbol": "pg/mL",
+ "unit": 1e-12 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "ng/mL",
+ "unit": 1e-9 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "µg/mL",
+ "unit": 1e-6 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "10^6/mcL",
+ "unit": 1e6 / (1e-3 * cL),
+ },
+ {
+ "symbol": "10^3/mcL",
+ "unit": 1e3 / (1e-3 * cL),
+ },
+ {
+ "symbol": "g/dL",
+ "unit": g / (10 * cL),
+ },
+ {
+ "symbol": "",
+ "unit": dimensionless,
+ },
+ {
+ "symbol": "g/mol",
+ "unit": g / mol,
+ },
+ {
+ "symbol": "g/nmol",
+ "unit": g / (1e-6 * mol),
+ },
+ {
+ "symbol": "h*pmol/L",
+ "unit": h * 1e-12 * mol / L,
+ },
+ {
+ "symbol": "h*nmol/L",
+ "unit": h * 1e-9 * mol / L,
+ },
+ {
+ "symbol": "h*µmol/L",
+ "unit": h * 1e-6 * mol / L,
+ },
+ {
+ "symbol": "h*ng/mL",
+ "unit": h * 1e-9 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "h*µg/mL",
+ "unit": h * 1e-6 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "day*pmol/L",
+ "unit": 24 * h * 1e-12 * mol / L,
+ },
+ {
+ "symbol": "day*nmol/L",
+ "unit": 24 * h * 1e-9 * mol / L,
+ },
+ {
+ "symbol": "day*µmol/L",
+ "unit": 24 * h * 1e-6 * mol / L,
+ },
+ {
+ "symbol": "day*ng/mL",
+ "unit": 24 * h * 1e-9 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "day*µg/mL",
+ "unit": 24 * h * 1e-6 * g / (1e-3 * L),
+ },
+ {
+ "symbol": "mg/kg",
+ "unit": 1e-3 * g / (1e3 * g),
+ },
+ {
+ "symbol": "pg/kg",
+ "unit": 1e-12 * g / (1e3 * g),
+ },
+ {
+ "symbol": "ng/kg",
+ "unit": 1e-9 * g / (1e3 * g),
+ },
+ {
+ "symbol": "µg/kg",
+ "unit": 1e-6 * g / (1e3 * g),
+ },
+ {
+ "symbol": "pmol/kg",
+ "unit": 1e-12 * mol / (1e3 * g),
+ },
+ {
+ "symbol": "nmol/kg",
+ "unit": 1e-9 * mol / (1e3 * g),
+ },
+ {
+ "symbol": "µmol/kg",
+ "unit": 1e-6 * mol / (1e3 * g),
+ },
+ {
+ "symbol": "mL/kg",
+ "unit": 1e-3 * L / (1e3 * g),
+ },
+ {
+ "symbol": "L/kg",
+ "unit": L / (1e3 * g),
},
-
]
for u in units:
- Unit.objects.create(
- symbol=u['symbol'],
- g=u['unit'].exponents()[0],
- m=u['unit'].exponents()[1],
- s=u['unit'].exponents()[2],
- A=u['unit'].exponents()[3],
- K=u['unit'].exponents()[4],
- cd=u['unit'].exponents()[5],
- mol=u['unit'].exponents()[6],
- multiplier=u['unit'].multiplier_log_10(),
- )
+ try:
+ Unit.objects.get(symbol=u["symbol"])
+ except Unit.DoesNotExist:
+ Unit.objects.create(
+ symbol=u["symbol"],
+ g=u["unit"].exponents()[0],
+ m=u["unit"].exponents()[1],
+ s=u["unit"].exponents()[2],
+ A=u["unit"].exponents()[3],
+ K=u["unit"].exponents()[4],
+ cd=u["unit"].exponents()[5],
+ mol=u["unit"].exponents()[6],
+ multiplier=u["unit"].multiplier_log_10(),
+ )
class Migration(migrations.Migration):
-
dependencies = [
- ('pkpdapp', '0001_initial'),
+ ("pkpdapp", "0001_initial"),
]
operations = [
diff --git a/pkpdapp/pkpdapp/migrations/models/1cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/1cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..3e252ba8
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/1cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,64 @@
+[[model]]
+name: 1-compartment PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1 = 0
+PKCompartment.AUC1 = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: Absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: First order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: Fraction absorbed/ bioavailability
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CLmax = 0 in [L/h]
+ desc: Maximum nonlinear Michaelis-Menten clearance; CLmax = Vmax/Km
+
+Km = 1 in [pmol/L]
+ desc: Michaelis-Menten constant
+
+ke0 = 1 in [1/h]
+ desc: Equilibration rate constant effect compartment
+
+Kpu = 1 in [dimensionless]
+ desc: Unbound effect compartment to total plasma partitioning coefficient
+
+C1= A1/V1 in [pmol/L]
+ desc: Concentration of drug in the central compartment
+
+CL_t = CL+CLmax*(1/(1+(C1/Km))) in [L/h]
+ desc: Total clearance as a function of time
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1) = ka*Aa*F -CL*C1 -CLmax*(1/(1+(C1/Km)))*C1 in [pmol]
+ desc: Amount of drug in central compartment
+
+dot(Ce) = ke0*(C1*Kpu - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1) = C1 in [pmol/L*h]
+ desc: AUC of drug in the central compartment
+
+dot(AUCe) = Ce in [pmol/L*h]
+ desc: AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/1cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/1cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..6a827872
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/1cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,64 @@
+[[model]]
+name: 1-compartment PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1 = 0
+PKCompartment.AUC1 = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: Absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: First order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: Fraction absorbed/ bioavailability
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CLmax = 0 in [L/h/kg]
+ desc: Maximum nonlinear Michaelis-Menten clearance; CLmax = Vmax/Km
+
+Km = 1 in [pmol/L]
+ desc: Michaelis-Menten constant
+
+ke0 = 1 in [1/h]
+ desc: Equilibration rate constant effect compartment
+
+Kpu = 1 in [dimensionless]
+ desc: Unbound effect compartment to total plasma partitioning coefficient
+
+C1= A1/V1 in [pmol/L]
+ desc: Concentration of drug in the central compartment
+
+CL_t = CL+CLmax*(1/(1+(C1/Km))) in [L/h/kg]
+ desc: Total clearance as a function of time
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1) = ka*Aa*F -CL*C1 -CLmax*(1/(1+(C1/Km)))*C1 in [pmol/kg]
+ desc: Amount of drug in central compartment
+
+dot(Ce) = ke0*(C1*Kpu - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1) = C1 in [pmol/L*h]
+ desc: AUC of drug in the central compartment
+
+dot(AUCe) = Ce in [pmol/L*h]
+ desc: AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/2cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/2cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..588b925e
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/2cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,77 @@
+[[model]]
+name: 2-compartment PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1 = 0
+PKCompartment.A2 = 0
+PKCompartment.AUC1 = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: Absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: First order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: Fraction absorbed/ bioavailability
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L]
+ desc: Volume of the first peripheral compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+Q1 = 1 in [L/h]
+ desc: Intercompartmental clearance between central compartment and first peripheral compartment
+
+CLmax = 0 in [L/h]
+ desc: Maximum nonlinear Michaelis-Menten clearance; CLmax = Vmax/Km
+
+Km = 1 in [pmol/L]
+ desc: Michaelis-Menten constant
+
+ke0 = 1 in [1/h]
+ desc: Equilibration rate constant effect compartment
+
+Kpu = 1 in [dimensionless]
+ desc: Unbound effect compartment to total plasma partitioning coefficient
+
+C1= A1/V1 in [pmol/L]
+ desc: Concentration of drug in the central compartment
+
+C2= A2/V2 in [pmol/L]
+ desc: Concentration of drug in the 1st peripheral compartment
+
+CL_t = CL+CLmax*(1/(1+(C1/Km))) in [L/h]
+ desc: Total clearance as a function of time
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1) = ka*Aa*F - Q1*(C1 - C2) -CL*C1 -CLmax*(1/(1+(C1/Km)))*C1 in [pmol]
+ desc: Amount of drug in central compartment
+
+dot(A2) = Q1*(C1 - C2) in [pmol]
+ desc: Amount of drug in first peripheral compartment
+
+dot(Ce) = ke0*(C1*Kpu - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1) = C1 in [pmol/L*h]
+ desc: AUC of drug in the central compartment
+
+dot(AUCe) = Ce in [pmol/L*h]
+ desc: AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/2cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/2cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..4768ff2d
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/2cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,77 @@
+[[model]]
+name: 2-compartment PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1 = 0
+PKCompartment.A2 = 0
+PKCompartment.AUC1 = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: Absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: First order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: Fraction absorbed/ bioavailability
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L/kg]
+ desc: Volume of the first peripheral compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+Q1 = 1 in [L/h/kg]
+ desc: Intercompartmental clearance between central compartment and first peripheral compartment
+
+CLmax = 0 in [L/h/kg]
+ desc: Maximum nonlinear Michaelis-Menten clearance; CLmax = Vmax/Km
+
+Km = 1 in [pmol/L]
+ desc: Michaelis-Menten constant
+
+ke0 = 1 in [1/h]
+ desc: Equilibration rate constant effect compartment
+
+Kpu = 1 in [dimensionless]
+ desc: Unbound effect compartment to total plasma partitioning coefficient
+
+C1= A1/V1 in [pmol/L]
+ desc: Concentration of drug in the central compartment
+
+C2= A2/V2 in [pmol/L]
+ desc: Concentration of drug in the 1st peripheral compartment
+
+CL_t = CL+CLmax*(1/(1+(C1/Km))) in [L/h/kg]
+ desc: Total clearance as a function of time
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1) = ka*Aa*F - Q1*(C1 - C2) -CL*C1 -CLmax*(1/(1+(C1/Km)))*C1 in [pmol/kg]
+ desc: Amount of drug in central compartment
+
+dot(A2) = Q1*(C1 - C2) in [pmol/kg]
+ desc: Amount of drug in first peripheral compartment
+
+dot(Ce) = ke0*(C1*Kpu - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1) = C1 in [pmol/L*h]
+ desc: AUC of drug in the central compartment
+
+dot(AUCe) = Ce in [pmol/L*h]
+ desc: AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/3cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/3cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..150b13b4
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/3cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,90 @@
+[[model]]
+name: 3-compartment PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1 = 0
+PKCompartment.A2 = 0
+PKCompartment.A3 = 0
+PKCompartment.AUC1 = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: Fraction absorbed/ bioavailability
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L]
+ desc: Volume of the first peripheral compartment
+
+V3 = 1 in [L]
+ desc: Volume of the second peripheral compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+Q1 = 1 in [L/h]
+ desc: Intercompartmental clearance between central compartment and first peripheral compartment
+
+Q2 = 1 in [L/h]
+ desc: Intercompartmental clearance between central compartment and second peripheral compartment
+
+CLmax = 0 in [L/h]
+ desc: Maximum nonlinear Michaelis-Menten clearance; CLmax = Vmax/Km
+
+Km = 1 in [pmol/L]
+ desc: Michaelis-Menten constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kpu = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+C1= A1/V1 in [pmol/L]
+ desc: Concentration of drug in the central compartment
+
+C2= A2/V2 in [pmol/L]
+ desc: Concentration of drug in the 1st peripheral compartment
+
+C3= A3/V3 in [pmol/L]
+ desc: Concentration of drug in the 2nd peripheral compartment
+
+CL_t = CL+CLmax*(1/(1+(C1/Km))) in [L/h/kg]
+ desc: total clearance as function of time
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1) = ka*Aa*F -Q1*(C1 - C2) -Q2*(C1 - C3) -CL*C1 -CLmax*(1/(1+(C1/Km)))*C1 in [pmol]
+ desc: Amount of drug in central compartment
+
+dot(A2) = Q1*(C1 - C2) in [pmol]
+ desc: Amount of drug in first peripheral compartment
+
+dot(A3) = Q2*(C1 - C3) in [pmol]
+ desc: Amount of drug in second peripheral compartment
+
+dot(Ce) = ke0*(C1*Kpu - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1)= C1 in [pmol/L*h]
+ desc: AUC of the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: AUC of the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/3cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/3cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..2f58ffcd
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/3cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,90 @@
+[[model]]
+name: 3-compartment PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1 = 0
+PKCompartment.A2 = 0
+PKCompartment.A3 = 0
+PKCompartment.AUC1 = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: Absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: First order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: Fraction absorbed/ bioavailability
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L/kg]
+ desc: Volume of the first peripheral compartment
+
+V3 = 1 in [L/kg]
+ desc: Volume of the second peripheral compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+Q1 = 1 in [L/h/kg]
+ desc: Intercompartmental clearance between central compartment and first peripheral compartment
+
+Q2 = 1 in [L/h/kg]
+ desc: Intercompartmental clearance between central compartment and second peripheral compartment
+
+CLmax = 0 in [L/h/kg]
+ desc: Maximum nonlinear Michaelis-Menten clearance; CLmax = Vmax/Km
+
+Km = 1 in [pmol/L]
+ desc: Michaelis-Menten constant
+
+ke0 = 1 in [1/h]
+ desc: Equilibration rate constant effect compartment
+
+Kpu = 1 in [dimensionless]
+ desc: Effect compartment to plasma partitioning coefficient
+
+C1= A1/V1 in [pmol/L]
+ desc: Concentration of drug in the central compartment
+
+C2= A2/V2 in [pmol/L]
+ desc: Concentration of drug in the 1st peripheral compartment
+
+C3= A3/V3 in [pmol/L]
+ desc: Concentration of drug in the 2nd peripheral compartment
+
+CL_t = CL+CLmax*(1/(1+(C1/Km))) in [L/h/kg]
+ desc: Total clearance as a function of time
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1) = ka*Aa*F -Q1*(C1 - C2) -Q2*(C1 - C3) -CL*C1 -CLmax*(1/(1+(C1/Km)))*C1 in [pmol/kg]
+ desc: Amount of drug in central compartment
+
+dot(A2) = Q1*(C1 - C2) in [pmol/kg]
+ desc: Amount of drug in first peripheral compartment
+
+dot(A3) = Q2*(C1 - C3) in [pmol/kg]
+ desc: Amount of drug in second peripheral compartment
+
+dot(Ce) = ke0*(C1*Kpu - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1)= C1 in [pmol/L*h]
+ desc: AUC of drug in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/DE_Emax.mmt b/pkpdapp/pkpdapp/migrations/models/DE_Emax.mmt
new file mode 100644
index 00000000..1bdbed8a
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/DE_Emax.mmt
@@ -0,0 +1,32 @@
+[[model]]
+name: Stimulatory direct effects model (symmetrical Emax model)
+author: Michael Gertz
+
+# Initial values:
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Emax = 5 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 1 (no effect) to inf)
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+
+STIM = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+
+E = if(E0 <= 0 ,
+ +Emax*STIM ,
+ E0 * (1+(Emax-1)*STIM)) in [dimensionless]
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/DE_Imax.mmt b/pkpdapp/pkpdapp/migrations/models/DE_Imax.mmt
new file mode 100644
index 00000000..24e32294
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/DE_Imax.mmt
@@ -0,0 +1,32 @@
+[[model]]
+name: Inhibitory direct effects model (symmetrical Imax model)
+author: Michael Gertz
+
+# Initial values:
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Imax = 0.80 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 0 (no effect) to 1 (complete inhibition))
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+
+INH = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+
+E = if(E0 <= 0 ,
+ -Imax*INH ,
+ E0 * (1-Imax*INH)) in [dimensionless]
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/IE_InhibitionElimination_Imax.mmt b/pkpdapp/pkpdapp/migrations/models/IE_InhibitionElimination_Imax.mmt
new file mode 100644
index 00000000..375f1635
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/IE_InhibitionElimination_Imax.mmt
@@ -0,0 +1,36 @@
+[[model]]
+name: Indirect effects model - inhibition of elimination
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.E = PDCompartment.E0
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+kdeg = 0.05 in [1/h]
+ desc: degradation rate constant of the effect
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Imax = 0.80 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 0 (no effect) to 1 (complete inhibition))
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+
+INH = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+ desc: Inhibition
+
+dot(E) = kdeg*(E0-E*(1-Imax*INH)) in [dimensionless]
+ desc: PD effect
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/IE_InhibitionProduction_Imax.mmt b/pkpdapp/pkpdapp/migrations/models/IE_InhibitionProduction_Imax.mmt
new file mode 100644
index 00000000..a35227c4
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/IE_InhibitionProduction_Imax.mmt
@@ -0,0 +1,36 @@
+[[model]]
+name: Indirect effects model - inhibition of production
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.E = PDCompartment.E0
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+kdeg = 0.05 in [1/h]
+ desc: degradation rate constant of the effect
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Imax = 0.80 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 0 (no effect) to 1 (complete inhibition))
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+
+INH = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+ desc: Inhibition
+
+dot(E) = kdeg*(E0*(1-Imax*INH)-E) in [dimensionless]
+ desc: PD effect
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/IE_Precursor_InhibitionElimination_Emax.mmt b/pkpdapp/pkpdapp/migrations/models/IE_Precursor_InhibitionElimination_Emax.mmt
new file mode 100644
index 00000000..d387c0ec
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/IE_Precursor_InhibitionElimination_Emax.mmt
@@ -0,0 +1,50 @@
+[[model]]
+name: Indirect effects model with precursor (for rebound/ tolerance) - inhibition of precursor elimination
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.P = PDCompartment.E0*PDCompartment.kdeg/(PDCompartment.kdegP*PDCompartment.FE)
+PDCompartment.E = PDCompartment.E0
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+kdegP = 0.1 in [1/h]
+ desc: degradation rate constant of precursor
+
+FE = 1 in [dimensionless]
+ desc: fraction of precursor that is converted to effect
+
+kdeg = 2 in [1/h]
+ desc: degradation rate constant of the effect
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Imax = 0.80 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 0 (no effect) to 1 (complete inhibition))
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+ desc: drug concentration driving the PD effect
+
+P0 = E0*kdeg/(kdegP*FE) in [dimensionless]
+ desc: baseline of precursor
+
+INH = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+ desc: Inhibition
+
+dot(P) = kdegP*P0 - kdegP*P*(FE*(1-Imax*INH) + (1-FE)) in [dimensionless]
+ desc: Precursor
+
+dot(E) = kdegP*P*(FE*(1-Imax*INH)) -kdeg*E in [dimensionless]
+ desc: PD effect
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/IE_Precursor_StimulationElimination_Emax.mmt b/pkpdapp/pkpdapp/migrations/models/IE_Precursor_StimulationElimination_Emax.mmt
new file mode 100644
index 00000000..bcb5e056
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/IE_Precursor_StimulationElimination_Emax.mmt
@@ -0,0 +1,50 @@
+[[model]]
+name: Indirect effects model with precursor (for rebound/ tolerance) - stimulation of precursor elimination
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.P = PDCompartment.E0*PDCompartment.kdeg/(PDCompartment.kdegP*PDCompartment.FE)
+PDCompartment.E = PDCompartment.E0
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+kdegP = 0.1 in [1/h]
+ desc: degradation rate constant of precursor
+
+FE = 1 in [dimensionless]
+ desc: fraction of precursor that is converted to effect
+
+kdeg = 2 in [1/h]
+ desc: degradation rate constant of the effect
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Emax = 5 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 1 (no effect) to infinity)
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+ desc: drug concentration driving the PD effect
+
+P0 = E0*kdeg/(kdegP*FE) in [dimensionless]
+ desc: baseline of precursor
+
+STIM = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+ desc: Stimulation
+
+dot(P) = kdegP*P0 - kdegP*P*(FE*(1+(Emax-1)*STIM) + (1-FE)) in [dimensionless]
+ desc: Precursor
+
+dot(E) = kdegP*P*(FE*(1+(Emax-1)*STIM)) -kdeg*E in [dimensionless]
+ desc: PD effect
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/IE_StimulationElimination_Emax.mmt b/pkpdapp/pkpdapp/migrations/models/IE_StimulationElimination_Emax.mmt
new file mode 100644
index 00000000..2d79ab0c
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/IE_StimulationElimination_Emax.mmt
@@ -0,0 +1,36 @@
+[[model]]
+name: Indirect effects model - stimulation of elimination
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.E = PDCompartment.E0
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+kdeg = 0.05 in [1/h]
+ desc: degradation rate constant of the effect
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Emax = 5 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 1 (no effect) to infinity)
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+
+STIM = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+ desc: Stimulation
+
+dot(E) = kdeg*(E0-E*(1+(Emax-1)*STIM)) in [dimensionless]
+ desc: PD effect
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/IE_StimulationProduction_Emax.mmt b/pkpdapp/pkpdapp/migrations/models/IE_StimulationProduction_Emax.mmt
new file mode 100644
index 00000000..8df025ee
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/IE_StimulationProduction_Emax.mmt
@@ -0,0 +1,36 @@
+[[model]]
+name: Indirect effects model - stimulation of production
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.E = PDCompartment.E0
+
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PDCompartment]
+
+kdeg = 0.05 in [1/h]
+ desc: degradation rate constant of the effect
+
+E0 = 100 in [dimensionless]
+ desc: baseline effect
+
+Emax = 5 in [dimensionless]
+ desc: maximal fold change from baseline (value range: 1 (no effect) to infinity)
+
+C50 = 100000 in [pmol/L]
+ desc: concentration that produces half-maximal effects
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+C_Drug = 1 in [pmol/L]
+
+STIM = C_Drug^HC/(C_Drug^HC+C50^HC) in [dimensionless]
+ desc: Stimulation
+
+dot(E) = kdeg*(E0*(1+(Emax-1)*STIM)-E) in [dimensionless]
+ desc: PD effect
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/ParametersValue_Species.xlsx b/pkpdapp/pkpdapp/migrations/models/ParametersValue_Species.xlsx
new file mode 100644
index 00000000..3919d993
Binary files /dev/null and b/pkpdapp/pkpdapp/migrations/models/ParametersValue_Species.xlsx differ
diff --git a/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_ConcPropKill_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_ConcPropKill_PDModel.mmt
new file mode 100644
index 00000000..2488603c
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_ConcPropKill_PDModel.mmt
@@ -0,0 +1,46 @@
+[[model]]
+name: Tumor growth inhbition model: growth-independent, delayed response (Cell Distribution Model), proportional to concentration
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+PDCompartment.TS1 = 0
+PDCompartment.TS2 = 0
+PDCompartment.TS3 = 0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kKill = 0.00000001 in [1/h*L/pmol]
+ desc: kill rate constant
+
+Mtt = 72 in [h]
+ desc: average life span
+
+tau = Mtt/3 in [h]
+
+C_Drug = 1 in [pmol/L]
+
+Kill = kKill * C_Drug in [1/h]
+
+dot(TS) = -Kill*TS in [mL]
+ desc: Tumor volume
+
+dot(TS1) = Kill*TS-TS1/tau in [mL]
+ desc: Transit compartment 1 (delay due to cell distribution > dying cells)
+
+dot(TS2) = (TS1-TS2)/tau in [mL]
+ desc: Transit compartment 2 (delay due to cell distribution > dying cells)
+
+dot(TS3) = (TS2-TS3)/tau in [mL]
+ desc: Transit compartment 3 (delay due to cell distribution > dying cells)
+
+TSTotal = TS1 + TS2 + TS3 + TS in [mL]
+ desc: Total tumor volume
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_EmaxKill_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_EmaxKill_PDModel.mmt
new file mode 100644
index 00000000..4aaa7396
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_EmaxKill_PDModel.mmt
@@ -0,0 +1,52 @@
+[[model]]
+name: Tumor growth inhbition model: growth-independent, delayed response (Cell Distribution Model), Kmax model
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+PDCompartment.TS1 = 0
+PDCompartment.TS2 = 0
+PDCompartment.TS3 = 0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kmax = 0.05 in [1/h]
+ desc: maximal kill rate constant
+
+C50 = 1000000 in [pmol/L]
+ desc: concentration of half-maximal effect
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+Mtt = 72 in [h]
+ desc: average life span
+
+tau = Mtt/3 in [h]
+
+C_Drug = 1 in [pmol/L]
+
+Kill = kmax * C_Drug^HC / (C50^HC + C_Drug^HC) in [1/h]
+
+dot(TS) = -Kill*TS in [mL]
+ desc: Tumor volume
+
+dot(TS1) = Kill*TS-TS1/tau in [mL]
+ desc: Transit compartment 1 (delay due to cell distribution)
+
+dot(TS2) = (TS1-TS2)/tau in [mL]
+ desc: Transit compartment 2 (delay due to cell distribution)
+
+dot(TS3) = (TS2-TS3)/tau in [mL]
+ desc: Transit compartment 3 (delay due to cell distribution)
+
+TSTotal = TS1 + TS2 + TS3 + TS in [mL]
+ desc: Total tumor volume
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_expConcPropKill_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_expConcPropKill_PDModel.mmt
new file mode 100644
index 00000000..5616eefa
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_CellDistribution_expConcPropKill_PDModel.mmt
@@ -0,0 +1,49 @@
+[[model]]
+name: Tumor growth inhbition model: growth-independent, delayed response (Cell Distribution Model), proportional to exp(concentration)
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+PDCompartment.TS1 = 0
+PDCompartment.TS2 = 0
+PDCompartment.TS3 = 0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kmax = 0.015 in [1/h]
+ desc: maximal kill rate constant
+
+C50 = 1000000 in [pmol/L]
+ desc: concentration of half-maximal effect
+
+Mtt = 72 in [h]
+ desc: average life span
+
+tau = Mtt/3 in [h]
+
+C_Drug = 1 in [pmol/L]
+
+Kill = kmax * (1 - exp(-log(2)/C50 * C_Drug)) in [1/h]
+
+dot(TS) = -Kill*TS in [mL]
+ desc: Tumor volume
+
+dot(TS1) = Kill*TS-TS1/tau in [mL]
+ desc: Transit compartment 1 (delay due to cell distribution)
+
+dot(TS2) = (TS1-TS2)/tau in [mL]
+ desc: Transit compartment 2 (delay due to cell distribution)
+
+dot(TS3) = (TS2-TS3)/tau in [mL]
+ desc: Transit compartment 3 (delay due to cell distribution)
+
+TSTotal = TS1 + TS2 + TS3 + TS in [mL]
+ desc: Total tumor volume
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_ConcPropKill_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_ConcPropKill_PDModel.mmt
new file mode 100644
index 00000000..ac9ec4c0
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_ConcPropKill_PDModel.mmt
@@ -0,0 +1,43 @@
+[[model]]
+name: Tumor growth inhbition model: growth-independent, proportional to concentration
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+PDCompartment.K1 = 0
+PDCompartment.K2 = 0
+PDCompartment.K3 = 0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kKill = 0.00000001 in [1/h*L/pmol]
+ desc: kill rate constant
+
+Mtt = 72 in [h]
+ desc: average life span
+
+tau = Mtt/3 in [h]
+
+C_Drug = 1 in [pmol/L]
+
+Kill = kKill * C_Drug in [1/h]
+
+dot(TS) = -K3*TS in [mL]
+ desc: Tumor volume
+
+dot(K1) = (Kill-K1)/tau in [1/h]
+ desc: Transit compartment 1 (delay due to signal transduction)
+
+dot(K2) = (K1-K2)/tau in [1/h]
+ desc: Transit compartment 2 (delay due to signal transduction)
+
+dot(K3) = (K2-K3)/tau in [1/h]
+ desc: Transit compartment 3 (delay due to signal transduction)
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_EmaxKill_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_EmaxKill_PDModel.mmt
new file mode 100644
index 00000000..8d96b898
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_EmaxKill_PDModel.mmt
@@ -0,0 +1,49 @@
+[[model]]
+name: Tumor growth inhbition model: growth-independent, delayed response (Signal Distribution Model), Kmax model
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+PDCompartment.K1 = 0
+PDCompartment.K2 = 0
+PDCompartment.K3 = 0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kmax = 0.05 in [1/h]
+ desc: maximal kill rate constant
+
+C50 = 1000000 in [pmol/L]
+ desc: concentration of half-maximal effect
+
+HC = 1 in [dimensionless]
+ desc: Hill coefficient
+
+Mtt = 72 in [h]
+ desc: average duration of transduction
+
+tau = Mtt/3 in [h]
+
+C_Drug = 1 in [pmol/L]
+
+Kill = kmax * C_Drug^HC / (C50^HC + C_Drug^HC) in [1/h]
+
+dot(TS) = -K3*TS in [mL]
+ desc: Tumor volume
+
+dot(K1) = (Kill-K1)/tau in [1/h]
+ desc: Transit compartment 1 (delay due to signal distribution)
+
+dot(K2) = (K1-K2)/tau in [1/h]
+ desc: Transit compartment 2 (delay due to signal distribution)
+
+dot(K3) = (K2-K3)/tau in [1/h]
+ desc: Transit compartment 3 (delay due to signal distribution)
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_expConcPropKill_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_expConcPropKill_PDModel.mmt
new file mode 100644
index 00000000..a473902b
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TGI_Delay_SignalDistribution_expConcPropKill_PDModel.mmt
@@ -0,0 +1,46 @@
+[[model]]
+name: Tumor growth inhibition model: growth-independent, delayed response (Signal Distribution Model), proportional to exp(concentration)
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+PDCompartment.K1 = 0
+PDCompartment.K2 = 0
+PDCompartment.K3 = 0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kmax = 0.015 in [1/h]
+ desc: maximal kill rate constant
+
+C50 = 1000000 in [pmol/L]
+ desc: concentration of half-maximal effect
+
+Mtt = 72 in [h]
+ desc: average duration of transduction
+
+tau = Mtt/3 in [h]
+
+C_Drug = 1 in [pmol/L]
+
+Kill = kmax * (1 - exp(-log(2)/C50 * C_Drug)) in [1/h]
+
+dot(TS) = -K3*TS in [mL]
+ desc: Tumor size
+
+dot(K1) = (Kill-K1)/tau in [1/h]
+ desc: Transit compartment 1 (delay due to signal distribution)
+
+dot(K2) = (K1-K2)/tau in [1/h]
+ desc: Transit compartment 2 (delay due to signal distribution)
+
+dot(K3) = (K2-K3)/tau in [1/h]
+ desc: Transit compartment 3 (delay due to signal distribution)
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TG_Gompertz_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TG_Gompertz_PDModel.mmt
new file mode 100644
index 00000000..85a76d81
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TG_Gompertz_PDModel.mmt
@@ -0,0 +1,29 @@
+[[model]]
+name: Tumor growth model - exponential/ linear w/ saturation (Gompertz-logistic)
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+TSmax = 10 in [mL]
+ desc: maximal tumor size
+
+beta = 0.002 in [1/h]
+ desc: growth rate constant
+
+Growth = if(TS > 1e12,
+ 0,
+ TS*beta*log(TSmax/TS))
+
+dot(TS) = Growth in [mL]
+ desc: Tumor size
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TG_Simeoni_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TG_Simeoni_PDModel.mmt
new file mode 100644
index 00000000..184e5fdc
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TG_Simeoni_PDModel.mmt
@@ -0,0 +1,32 @@
+[[model]]
+name: Tumor growth model - exponential/ linear w/o saturation (Simeoni)
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.1 in [mL]
+ desc: initial tumor size
+
+kgl = 0.01 in [mL/h]
+ desc: growth rate constant linear
+
+kge = 0.005 in [1/h]
+ desc: growth rate constant exponential
+
+psi = 20 [dimensionless]
+ desc: set to a value of 20 for a rapid switch between exponential and linear phase
+
+Growth = if(TS > 1e12,
+ 0,
+ kge*TS/((1+(kge/kgl*TS)^psi)^(1/psi)))
+
+dot(TS) = Growth in [mL]
+ desc: Tumor size
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TG_Simeoni_logistic_PDModel.mmt b/pkpdapp/pkpdapp/migrations/models/TG_Simeoni_logistic_PDModel.mmt
new file mode 100644
index 00000000..188b212d
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TG_Simeoni_logistic_PDModel.mmt
@@ -0,0 +1,35 @@
+[[model]]
+name: Tumor growth model - exponential/ linear w/ saturation (Simeoni-logistic)
+author: Michael Gertz
+
+# Initial values:
+PDCompartment.TS = PDCompartment.TS0
+
+
+[environment]
+t = 0 bind time
+
+
+[PDCompartment]
+
+TS0 = 0.10 in [mL]
+ desc: initial tumor size
+
+TSmax = 10 in [mL]
+ desc: maximal tumor size
+
+kgl = 0.01 in [mL/h]
+ desc: growth rate constant linear
+
+kge = 0.005 in [1/h]
+ desc: growth rate constant exponential
+
+psi = 20 in [dimensionless]
+ desc: set to a value of 20 for a rapid switch between exponential and linear phase
+
+Growth = if(TS > 1e12,
+ 0,
+ kge*TS*(1-TS/TSmax)/((1+(kge/kgl*TS)^psi)^(1/psi)))
+
+dot(TS) = Growth in [mL]
+ desc: Tumor size
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..1e83bcda
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,126 @@
+[[model]]
+name: 1-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1000 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+kint = 0.05 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 0.10 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy unit %
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of free target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol]
+ desc: Amount of bound drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment unit
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..fedc9cc4
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_1cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,126 @@
+[[model]]
+name: 1-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1000 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+kint = 0.05 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 0.10 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Concentration of FREE drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Concentration of BOUND drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Concentration of TOTAL drug in the central compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Concentration of FREE target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Concentration of BOUND target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Concentration of TOTAL target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to TOTAL target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state concentrations of target
+
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of FREE drug in central compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of FREE target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol/kg]
+ desc: Amount of BOUND drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of FREE drug in effect compartment unit
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: AUC of FREE drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: AUC of BOUND drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: AUC of TOTAL drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: AUC of FREE target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: AUC of BOUND target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: AUC of TOTAL target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: AUC of FREE drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..7ed1b137
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,139 @@
+[[model]]
+name: 2-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.A2 = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+kint = 1 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of free target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol]
+ desc: Amount of bound drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..eb8fc75f
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_2cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,139 @@
+[[model]]
+name: 2-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.A2 = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L/kg]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h/kg]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+kint = 1 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol/kg]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of free target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol/kg]
+ desc: Amount of bound drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..c67c17ee
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,126 @@
+[[model]]
+name: 1-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1000 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 0.10 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Concentration of FREE drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Concentration of BOUND drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Concentration of TOTAL drug in the central compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Concentration of FREE target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Concentration of BOUND target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Concentration of TOTAL target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to TOTAL target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state concentrations of target
+
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of FREE drug in central compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of FREE target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol]
+ desc: Amount of BOUND drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of FREE drug in effect compartment unit
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: AUC of FREE drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: AUC of BOUND drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: AUC of TOTAL drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: AUC of FREE target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: AUC of BOUND target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: AUC of TOTAL target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: AUC of FREE drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..204b5a72
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_1cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,126 @@
+[[model]]
+name: 1-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 0 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1000 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 0.10 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Concentration of FREE drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Concentration of BOUND drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Concentration of TOTAL drug in the central compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Concentration of FREE target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Concentration of BOUND target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Concentration of TOTAL target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to TOTAL target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state concentrations of target
+
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of FREE drug in central compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of FREE target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol/kg]
+ desc: Amount of BOUND drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of FREE drug in effect compartment unit
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: AUC of FREE drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: AUC of BOUND drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: AUC of TOTAL drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: AUC of FREE target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: AUC of BOUND target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: AUC of TOTAL target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: AUC of FREE drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_clinical.mmt
new file mode 100644
index 00000000..0610333d
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_clinical.mmt
@@ -0,0 +1,139 @@
+[[model]]
+name: 2-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.A2 = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol]
+ desc: Amount of free target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol]
+ desc: Amount of bound drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_preclinical.mmt
new file mode 100644
index 00000000..f7e0da78
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_Full_ConstTarget_2cmpt_PK_Model_preclinical.mmt
@@ -0,0 +1,139 @@
+[[model]]
+name: 2-compartment Full TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_f = 0
+PKCompartment.A2 = 0
+PKCompartment.AT1_f = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.ADT1 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L/kg]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h/kg]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KD = 1 in [pmol/L]
+ desc: Dissociation constant
+
+koff = 1 in [1/h]
+ desc: dissociation rate constant
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kon = koff/KD in [1/h*L/pmol]
+ desc: secondary parameter associate rate constant (2nd order)
+
+C1_f = A1_f/V1 in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C1_t = (A1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+CT1_f = AT1_f/V1 in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+CT1_b = ADT1/V1 in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_t = (AT1_f + ADT1)/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_f) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol/kg]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(AT1_f) = kdeg*V1*(CT1_0 - CT1_f) -kon*C1_f*CT1_f*V1 +koff*ADT1 in [pmol/kg]
+ desc: Amount of free target in central compartment
+
+dot(ADT1) = kon*C1_f*CT1_f*V1 -(koff+kint)*ADT1 in [pmol/kg]
+ desc: Amount of bound drug/ target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..3b59e7cd
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,123 @@
+[[model]]
+name: 1-compartment QSS TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.AT1_t = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment (implementation tbd)
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1000 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+kint = 0.05 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 0.1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+
+b_term = C1_t - KSS - CT1_t in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L*pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = AT1_t/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_t-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -kint*CT1_b*V1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(AT1_t) = kdeg*V1*(CT1_0 - CT1_f) -kint*CT1_b*V1 in [pmol]
+ desc: Amount of free target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..5b6dd026
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_1cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,123 @@
+[[model]]
+name: 1-compartment QSS TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.AT1_t = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment (implementation tbd)
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1000 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+kint = 0.05 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 0.1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+
+b_term = C1_t - KSS - CT1_t in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L*pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Concentration of TOTAL drug in the central compartment
+
+CT1_t = AT1_t/V1 in [pmol/L]
+ desc: Concentration of TOTAL target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Concentration of FREE drug in the central compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Concentration of BOUND drug in the central compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Concentration of BOUND target in the central compartment
+
+CT1_f = CT1_t-CT1_b in [pmol/L]
+ desc: Concentration of FREE target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy from TMDD model
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to TOTAL target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state concentrations of target
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -kint*CT1_b*V1 in [pmol/kg]
+ desc: Amount of TOTAL drug in central compartment
+
+dot(AT1_t) = kdeg*V1*(CT1_0 - CT1_f) -kint*CT1_b*V1 in [pmol/kg]
+ desc: Amount of TOTAL target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of FREE drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: AUC of FREE drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: AUC of BOUND drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: AUC of TOTAL drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: AUC of FREE target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: AUC of BOUND target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: AUC of TOTAL target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: AUC of FREE drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..e61e8db1
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,136 @@
+[[model]]
+name: 2-compartment QSS TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.A2 = 0
+PKCompartment.AT1_t = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+kint = 1 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+
+b_term = C1_t - KSS - CT1_t in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L*pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = AT1_t/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_t-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kint*CT1_b*V1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(AT1_t) = kdeg*V1*(CT1_0 - CT1_f) -kint*CT1_b*V1 in [pmol]
+ desc: Amount of free target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..ccab14ad
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_2cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,136 @@
+[[model]]
+name: 2-compartment QSS TMDD PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.A2 = 0
+PKCompartment.AT1_t = PKCompartment.CT1_0*PKCompartment.V1
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L/kg]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h/kg]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+kint = 1 in [1/h]
+ desc: complex internalization rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+
+b_term = C1_t - KSS - CT1_t in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L*pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = AT1_t/V1 in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_t-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kint*CT1_b*V1 in [pmol/kg]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol/kg]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(AT1_t) = kdeg*V1*(CT1_0 - CT1_f) -kint*CT1_b*V1 in [pmol/kg]
+ desc: Amount of free target in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Clinical.mmt
new file mode 100644
index 00000000..b064b492
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Clinical.mmt
@@ -0,0 +1,118 @@
+[[model]]
+name: 1-compartment QSS Constant Target Concentration (Wagner) PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1000 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+ke0 = 0.1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+
+b_term = C1_t - KSS - CT1_0 in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L*pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = CT1_b + CT1_f in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_0-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -kint*CT1_b*V1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Preclinical.mmt
new file mode 100644
index 00000000..50260312
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_1cmpt_PK_Model_Preclinical.mmt
@@ -0,0 +1,119 @@
+[[model]]
+name: 1-compartment QSS Constant Target Concentration (Wagner) PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 100 in [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1000 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 0.05 in [1/h]
+ desc: target degradation rate constant
+
+ke0 = 0.1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+
+b_term = C1_t - KSS - CT1_0 in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L*pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = CT1_b + CT1_f in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_0-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -kint*CT1_b*V1 in [pmol/kg]
+ desc: Amount of free drug in central compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_clinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_clinical.mmt
new file mode 100644
index 00000000..27df8b01
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_clinical.mmt
@@ -0,0 +1,132 @@
+[[model]]
+name: 1-compartment QSS Constant Target Concentration (Wagner) PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.A2 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+
+b_term = C1_t - KSS - CT1_0 in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L * pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = CT1_b + CT1_f in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_0-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kint*CT1_b*V1 in [pmol]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_preclinical.mmt b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_preclinical.mmt
new file mode 100644
index 00000000..f0965b89
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/TMDD_QSS_ConstTarget_2cmpt_PK_Model_preclinical.mmt
@@ -0,0 +1,132 @@
+[[model]]
+name: 1-compartment QSS Constant Target Concentration (Wagner) PK Model + effect compartment
+author: Michael Gertz
+
+# Initial values:
+PKCompartment.Aa = 0
+PKCompartment.A1_t = 0
+PKCompartment.A2 = 0
+PKCompartment.AUC1_f = 0
+PKCompartment.AUC1_b = 0
+PKCompartment.AUC1_t = 0
+PKCompartment.AUCT1_f = 0
+PKCompartment.AUCT1_b = 0
+PKCompartment.AUCT1_t = 0
+PKCompartment.AUCe = 0
+PKCompartment.Ce = 0
+
+[environment]
+t = 0 in [h] bind time
+
+
+[PKCompartment]
+
+tlag = 1 in [h]
+ desc: absorption lag time from extravasc compartment
+
+ka = 1 in [1/h]
+ desc: first order absorption rate constant
+
+F = 1 in [dimensionless]
+ desc: fraction absorbed
+
+V1 = 1 in [L/kg]
+ desc: Volume of the central compartment
+
+V2 = 1 in [L/kg]
+ desc: Volume of the peripheral compartment
+
+Q1 = 1 in [L/h/kg]
+ desc: intercompartmental clearance between central and peripheral compartment
+
+CL = 1 in [L/h/kg]
+ desc: Linear clearance from central compartment
+
+CT1_0 = 1 [pmol/L]
+ desc: baseline concentration of the target in the central compartment
+
+KSS = 1 in [pmol/L]
+ desc: Apparent dissociation constant [KSS = (kint+koff)/kon], if kint << koff KSS ~= KD and if kint >> koff KSS > KD
+
+kdeg = 1 in [1/h]
+ desc: target degradation rate constant
+
+ke0 = 1 in [1/h]
+ desc: equilibration rate constant effect compartment
+
+Kp = 1 in [dimensionless]
+ desc: effect compartment to plasma partitioning coefficient
+
+kint = kdeg in [1/h]
+ desc: complex internalization rate constant
+
+
+b_term = C1_t - KSS - CT1_0 in [pmol/L]
+ desc: b term of quadratic equation
+
+c_term = C1_t * KSS in [pmol/L * pmol/L]
+ desc: c term of quadratic equation
+
+C1_t = A1_t/V1 in [pmol/L]
+ desc: Total concentration of drug in the central compartment
+
+CT1_t = CT1_b + CT1_f in [pmol/L]
+ desc: Total concentration of target in the central compartment
+
+C1_f = 0.5 * (b_term + (b_term^2+4*c_term)^0.5) in [pmol/L]
+ desc: Free concentration of drug in the central compartment
+
+C1_b = C1_t-C1_f in [pmol/L]
+ desc: Bound concentration of drug in the central compartment
+
+C2 = A2/V2 in [pmol/L]
+ desc: free concentration of drug in the peripheral compartment
+
+CT1_b = C1_b in [pmol/L]
+ desc: Bound concentration of target in the central compartment
+
+CT1_f = CT1_0-CT1_b in [pmol/L]
+ desc: Free concentration of target in the central compartment
+
+
+RO_Model = CT1_b/CT1_t*100 in [dimensionless]
+ desc: Receptor (Target) occupancy
+
+PerInh = (1-CT1_f/CT1_t)*100 in [dimensionless]
+ desc: Percent inhbition relative to total target
+
+PerInh_Baseline = (1-CT1_f/CT1_0)*100 in [dimensionless]
+ desc: Percent inhibition relative to the initial steady-state level of target
+
+dot(Aa) = -ka*Aa in [pmol/kg]
+ desc: Amount of drug in 'depo' compartment
+
+dot(A1_t) = ka*Aa*F -CL*C1_f -Q1*(C1_f - C2) -kint*CT1_b*V1 in [pmol/kg]
+ desc: Amount of free drug in central compartment
+
+dot(A2) = Q1*(C1_f - C2) in [pmol/kg]
+ desc: Amount of free drug in the peripheral compartment
+
+dot(Ce) = ke0*(C1_f*Kp - Ce) in [pmol/L]
+ desc: Concentration of drug in effect compartment
+
+dot(AUC1_f)= C1_f in [pmol/L*h]
+ desc: Free AUC of drug in central the compartment
+
+dot(AUC1_b)= C1_b in [pmol/L*h]
+ desc: Bound AUC of drug in the central compartment
+
+dot(AUC1_t)= C1_t in [pmol/L*h]
+ desc: Total AUC of drug in central the central compartment
+
+dot(AUCT1_f)= CT1_f in [pmol/L*h]
+ desc: Free AUC of the target in the central compartment
+
+dot(AUCT1_b)= CT1_b in [pmol/L*h]
+ desc: Bound AUC of the target in the central compartment
+
+dot(AUCT1_t)= CT1_t in [pmol/L*h]
+ desc: Total AUC of the target in the central compartment
+
+dot(AUCe)= Ce in [pmol/L*h]
+ desc: Free AUC of drug in the effect compartment
\ No newline at end of file
diff --git a/pkpdapp/pkpdapp/migrations/models/readParamFile.py b/pkpdapp/pkpdapp/migrations/models/readParamFile.py
new file mode 100644
index 00000000..fa33e486
--- /dev/null
+++ b/pkpdapp/pkpdapp/migrations/models/readParamFile.py
@@ -0,0 +1,67 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+import openpyxl
+
+
+# Load the workbook
+workbook = openpyxl.load_workbook(
+ 'pkpdapp/migrations/models/ParametersValue_Species.xlsx', data_only=True)
+
+sheet_names = ['1cmpt_PK_Model', '2cmpt_PK_Model',
+ '3cmpt_PK_Model', '1cmpt_TMDD_Model',
+ '2cmpt_TMDD_Model']
+model_names = ['one_compartment', 'two_compartment',
+ 'three_compartment', 'one_compartment_tmdd',
+ 'two_compartment_tmdd']
+species_list = ['M', 'R', 'K', 'H']
+compound_type = ['SM', 'LM']
+clinical = [False, False, False, True]
+
+entry = ''
+for sheet_name, model_name in zip(sheet_names, model_names):
+ worksheet = workbook[sheet_name]
+
+ model_entry = ''
+ for row in worksheet.iter_rows():
+ parameter = row[0].value
+ if parameter is None:
+ continue
+ param_entry = ''
+ for i, species in enumerate(species_list):
+ species_entry = ''
+ for j, ctype in enumerate(compound_type):
+ rowi = i * 4 + j * 2 + 1
+ value = row[rowi].value
+ unit = row[rowi + 1].value
+ if_clinical = clinical[i]
+ species_entry += f"""{ctype}: {{
+ value: {value},
+ unit: '{unit}',
+ }},"""
+ if j != len(compound_type) - 1:
+ species_entry += """
+ """
+ param_entry += f"""{species}: {{
+ {species_entry}
+ }},
+ """
+ model_entry += f"""{parameter}: {{
+ {param_entry}
+ }},
+ """
+ entry += f"""
+ {model_name}: {{
+ {model_entry}
+ }},"""
+type = '{[key: string]: {[key: string]: {[key: string]: {[key: string]: { value: number, unit: string}}}}}' # noqa: E501
+final_entry = f"""export const param_default: {type} = {{{entry}
+}};"""
+
+# save entry to param_default.ts
+with open('pkpdapp/migrations/models/param_default.ts', 'w') as f:
+ f.write(final_entry)
+
+print(final_entry)
diff --git a/pkpdapp/pkpdapp/models/__init__.py b/pkpdapp/pkpdapp/models/__init__.py
index 15933ee7..67e991b0 100644
--- a/pkpdapp/pkpdapp/models/__init__.py
+++ b/pkpdapp/pkpdapp/models/__init__.py
@@ -8,6 +8,7 @@
from .stored import StoredModel
from .units import Unit
from .compound import Compound
+from .efficacy_experiment import EfficacyExperiment
from .project import Project, ProjectAccess
from .protocol import Protocol
from .dose import Dose
@@ -22,9 +23,11 @@
)
from .pharmacokinetic_model import (
PharmacokineticModel,
- DosedPharmacokineticModel,
+)
+from .combined_model import (
+ CombinedModel,
PkpdMapping,
- set_administration,
+ DerivedVariable
)
from .dataset import Dataset
from .variable import Variable
@@ -40,6 +43,13 @@
InferenceFunctionResult,
InferenceOutputResult,
)
+from .simulation import (
+ Simulation,
+ SimulationYAxis,
+ SimulationCxLine,
+ SimulationSlider,
+ SimulationPlot,
+)
from .inference import (
Inference,
Algorithm,
diff --git a/pkpdapp/pkpdapp/models/combined_model.py b/pkpdapp/pkpdapp/models/combined_model.py
new file mode 100644
index 00000000..1e972f3e
--- /dev/null
+++ b/pkpdapp/pkpdapp/models/combined_model.py
@@ -0,0 +1,703 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from pkpdapp.models import (
+ MyokitModelMixin,
+ Project,
+ StoredModel,
+ PharmacodynamicModel,
+ PharmacokineticModel,
+ Unit,
+)
+import myokit
+from django.db import models
+from django.urls import reverse
+import logging
+from pkpdapp.utils.default_params import defaults
+
+logger = logging.getLogger(__name__)
+
+
+class CombinedModel(MyokitModelMixin, StoredModel):
+ """
+ PK model plus dosing and protocol information
+ """
+
+ name = models.CharField(max_length=100, help_text="name of the model")
+ project = models.ForeignKey(
+ Project,
+ on_delete=models.CASCADE,
+ related_name="pk_models",
+ blank=True,
+ null=True,
+ help_text='Project that "owns" this model',
+ )
+
+ class SpeciesType(models.TextChoices):
+ HUMAN = "H", "human"
+ RAT = "R", "rat"
+ NHP = "N", "non-human primate"
+ MOUSE = "M", "mouse"
+
+ species = models.CharField(
+ max_length=1,
+ choices=SpeciesType.choices,
+ default=SpeciesType.HUMAN,
+ help_text="species",
+ )
+
+ pk_model = models.ForeignKey(
+ PharmacokineticModel,
+ on_delete=models.PROTECT,
+ blank=True,
+ null=True,
+ help_text="model",
+ )
+
+ has_saturation = models.BooleanField(
+ default=False, help_text="whether the pk model has saturation"
+ )
+ has_effect = models.BooleanField(
+ default=False, help_text="whether the pk model has effect compartment"
+ )
+ has_lag = models.BooleanField(
+ default=False, help_text="whether the pk model has lag"
+ )
+
+ has_bioavailability = models.BooleanField(
+ default=False, help_text="whether the pk model has bioavailability"
+ )
+
+ pd_model = models.ForeignKey(
+ PharmacodynamicModel,
+ on_delete=models.PROTECT,
+ related_name="pkpd_models",
+ blank=True,
+ null=True,
+ help_text="PD part of model",
+ )
+
+ has_hill_coefficient = models.BooleanField(
+ default=False, help_text="whether the pd model has hill coefficient"
+ )
+
+ pd_model2 = models.ForeignKey(
+ PharmacodynamicModel,
+ on_delete=models.PROTECT,
+ related_name="pkpd_models2",
+ blank=True,
+ null=True,
+ help_text="second PD part of model",
+ )
+
+ time_max = models.FloatField(
+ default=30,
+ help_text=(
+ "suggested time to simulate after the last dose (in the time "
+ "units specified by the mmt model)"
+ ),
+ )
+ __original_pk_model = None
+ __original_pd_model = None
+ __original_pd_model2 = None
+ __original_species = None
+ __original_has_saturation = None
+ __original_has_effect = None
+ __original_has_lag = None
+ __original_has_hill_coefficient = None
+ __original_has_bioavailability = None
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ @classmethod
+ def from_db(cls, db, field_names, values):
+ instance = super().from_db(db, field_names, values)
+ # fix for infinite recursion when deleting project
+ if "pk_model_id" in field_names:
+ instance.__original_pk_model = instance.pk_model
+ if "pd_model_id" in field_names:
+ instance.__original_pd_model = instance.pd_model
+ if "pd_model2_id" in field_names:
+ instance.__original_pd_model2 = instance.pd_model2
+ if "species" in field_names:
+ instance.__original_species = instance.species
+ if "has_saturation" in field_names:
+ instance.__original_has_saturation = instance.has_saturation
+ if "has_effect" in field_names:
+ instance.__original_has_effect = instance.has_effect
+ if "has_lag" in field_names:
+ instance.__original_has_lag = instance.has_lag
+ if "has_bioavailability" in field_names:
+ instance.__original_has_bioavailability = instance.has_bioavailability
+ if "has_hill_coefficient" in field_names:
+ instance.__original_has_hill_coefficient = instance.has_hill_coefficient
+ return instance
+
+ def get_project(self):
+ return self.project
+
+ @property
+ def is_library_model(self):
+ is_library_model = False
+ if self.pk_model:
+ is_library_model = self.pk_model.is_library_model
+ return is_library_model
+
+ def get_time_max(self):
+ time_max = self.time_max
+ if self.pd_model:
+ time_max = max(time_max, self.pd_model.time_max)
+ return time_max
+
+ def get_time_unit(self):
+ from pkpdapp.models import Variable
+
+ try:
+ time_var = self.variables.get(binding="time")
+ return time_var.unit
+ except Variable.DoesNotExist:
+ return None
+
+ def get_mmt(self):
+ myokit_model = self.get_myokit_model()
+ return myokit_model.code()
+
+ def create_stored_model(self):
+ stored_model_kwargs = {
+ "name": self.name,
+ "project": self.project,
+ "pk_model": self.pk_model,
+ "pd_model": self.pd_model,
+ "time_max": self.time_max,
+ "read_only": True,
+ }
+ stored_model = CombinedModel.objects.create(**stored_model_kwargs)
+
+ new_variables = {}
+ for variable in self.variables.all():
+ new_variable = variable.create_stored_variable(stored_model)
+ new_variables[new_variable.qname] = new_variable
+
+ for mapping in self.mappings.all():
+ mapping.create_stored_mapping(stored_model, new_variables)
+
+ return stored_model
+
+ def create_myokit_model(self):
+ if self.pk_model is None:
+ pk_model = myokit.Model()
+ else:
+ pk_model = self.pk_model.create_myokit_model()
+ if self.pd_model is None:
+ pd_model = myokit.Model()
+ else:
+ pd_model = self.pd_model.create_myokit_model()
+ if self.pd_model2 is None:
+ pd_model2 = myokit.Model()
+ else:
+ pd_model2 = self.pd_model2.create_myokit_model()
+
+ have_both_models = self.pk_model is not None and self.pd_model is not None
+ have_no_models = self.pk_model is None and self.pd_model is None
+
+ # combine the two pd models. If any constants overlap prefer the
+ # pd_model (remove the constant from pd_model2) If any state variables
+ # overlap then add the rhs terms
+
+ if self.pd_model2 is not None:
+ pd2_time_var = pd_model2.binding("time")
+ pd2_time_var.set_binding(None)
+ pd2_time_component = pd2_time_var.parent()
+ pd2_time_component.remove_variable(pd2_time_var)
+ if pd2_time_component.count_variables() == 0:
+ pd_model2.remove_component(pd2_time_component)
+
+ pd2_components = list(pd_model2.components())
+ pd2_names = [
+ c.name().replace("PDCompartment", "PDCompartment2")
+ for c in pd2_components
+ ]
+ pd_model.import_component(
+ pd2_components,
+ new_name=pd2_names,
+ )
+
+ # deal with any state variables that overlap
+ for old_pd2_var in pd_model2.variables(state=True):
+ if pd_model.has_variable(old_pd2_var.qname()):
+ pd_var = pd_model.get(old_pd2_var.qname())
+ pd2_var = pd_model.get(
+ pd_var.qname().replace("PDCompartment", "PDCompartment2")
+ )
+ pd_var.set_rhs(
+ myokit.Plus(
+ pd_var.rhs(),
+ pd2_var.rhs().clone(
+ {myokit.Name(pd2_var): myokit.Name(pd_var)}
+ ),
+ )
+ )
+ for eqn in pd_model.get("PDCompartment2").equations():
+ if eqn.rhs.depends_on(myokit.Name(pd2_var)):
+ lhs_var = eqn.lhs.var()
+ lhs_var.set_rhs(
+ eqn.rhs.clone(
+ {myokit.Name(pd2_var): myokit.Name(pd_var)}
+ )
+ )
+ pd2_var.parent().remove_variable(pd2_var)
+
+ # deal with any constants that overlap
+ for old_pd2_var in pd_model2.variables(const=True):
+ if pd_model.has_variable(old_pd2_var.qname()):
+ pd2_var = pd_model.get(
+ old_pd2_var.qname().replace("PDCompartment", "PDCompartment2")
+ )
+ pd2_var.parent().remove_variable(pd2_var)
+
+ # use pk model as the base and import the pd model
+ pkpd_model = pk_model
+
+ # default model is one with just time
+ if have_no_models:
+ pkpd_model = myokit.parse_model(
+ """
+ [[model]]
+ [myokit]
+ time = 0 [s] bind time
+ in [s]
+ """
+ )
+
+ # remove time binding and variable from pd model
+ if have_both_models:
+ time_var = pd_model.binding("time")
+ time_var.set_binding(None)
+ time_component = time_var.parent()
+ time_component.remove_variable(time_var)
+ if time_component.count_variables() == 0:
+ pd_model.remove_component(time_component)
+
+ pd_components = list(pd_model.components())
+ pd_names = [c.name().replace("myokit", "PD") for c in pd_components]
+
+ if pd_components:
+ pkpd_model.import_component(
+ pd_components,
+ new_name=pd_names,
+ )
+
+ # do derived variables
+ for derived_variable in self.derived_variables.all():
+ try:
+ myokit_var = pkpd_model.get(derived_variable.pk_variable.qname)
+ except KeyError:
+ continue
+ myokit_compartment = myokit_var.parent()
+ var_name = derived_variable.pk_variable.name
+ if (
+ derived_variable.type == DerivedVariable.Type.RECEPTOR_OCCUPANCY
+ ): # noqa: E501
+ new_names = [f"calc_{var_name}_RO"]
+ has_name = any(
+ [
+ myokit_compartment.has_variable(new_name)
+ for new_name in new_names
+ ]
+ ) # noqa: E501
+ if has_name:
+ continue
+ var = myokit_compartment.add_variable(new_names[0])
+ var.meta[
+ "desc"
+ ] = f'Receptor occupancy for {myokit_var.meta["desc"]}' # noqa: E501
+ kd_name = "KD_ud"
+ if myokit_compartment.has_variable(kd_name):
+ kd = myokit_compartment.get(kd_name)
+ else:
+ kd = myokit_compartment.add_variable(kd_name)
+ kd.meta[
+ "desc"
+ ] = "User-defined Dissociation Constant (Drug Target Tab) used to calculate Receptor occupancy" # noqa: E501
+ target_conc_name = "CT1_0_ud"
+ if myokit_compartment.has_variable(target_conc_name):
+ target_conc = myokit_compartment.get(target_conc_name)
+ else:
+ target_conc = myokit_compartment.add_variable(target_conc_name)
+ target_conc.meta[
+ "desc"
+ ] = "User-defined Target Concentration (Drug Target Tab) used to calculate Receptor occupancy" # noqa: E501
+ var.set_unit(myokit.Unit())
+ kd_unit = myokit_var.unit()
+ compound = self.project.compound
+ kd_unit_conversion_factor = compound.dissociation_unit.convert_to(
+ kd_unit, compound=compound
+ )
+ kd.set_rhs(compound.dissociation_constant * kd_unit_conversion_factor)
+ kd.set_unit(kd_unit)
+ target_conc_unit = myokit_var.unit()
+ target_conc_unit_conversion_factor = (
+ compound.target_concentration_unit.convert_to(
+ target_conc_unit, compound=compound, is_target=True
+ )
+ )
+ target_conc.set_rhs(
+ compound.target_concentration * target_conc_unit_conversion_factor
+ )
+ target_conc.set_unit(target_conc_unit)
+
+ b = var.add_variable("b")
+ b.set_rhs(
+ myokit.Plus(
+ myokit.Plus(myokit.Name(kd), myokit.Name(target_conc)),
+ myokit.Name(myokit_var),
+ )
+ )
+ c = var.add_variable("c")
+ c.set_rhs(
+ myokit.Multiply(
+ myokit.Multiply(myokit.Number(4), myokit.Name(target_conc)),
+ myokit.Name(myokit_var),
+ )
+ )
+
+ var.set_rhs(
+ myokit.Multiply(
+ myokit.Number(100),
+ myokit.Divide(
+ myokit.Minus(
+ myokit.Name(b),
+ myokit.Sqrt(
+ myokit.Minus(
+ myokit.Power(myokit.Name(b), myokit.Number(2)),
+ myokit.Name(c),
+ )
+ ),
+ ),
+ myokit.Multiply(myokit.Number(2), myokit.Name(target_conc)),
+ ),
+ )
+ )
+ elif (
+ derived_variable.type == DerivedVariable.Type.FRACTION_UNBOUND_PLASMA
+ ): # noqa: E501
+ new_names = [f"calc_{var_name}_f", "FUP_ud"]
+ has_name = any(
+ [
+ myokit_compartment.has_variable(new_name)
+ for new_name in new_names
+ ]
+ ) # noqa: E501
+ if has_name:
+ continue
+ var = myokit_compartment.add_variable(new_names[0])
+ var.meta[
+ "desc"
+ ] = f'Unbound Concentration for {myokit_var.meta["desc"]}' # noqa: E501
+ fup = myokit_compartment.add_variable(new_names[1])
+ fup.meta[
+ "desc"
+ ] = "User-defined Fraction Unbound Plasma (Drug Target Tab)" # noqa: E501
+ var.set_unit(myokit_var.unit())
+ fup.set_rhs(self.project.compound.fraction_unbound_plasma)
+ fup.set_unit(myokit.units.dimensionless)
+ var.set_rhs(myokit.Multiply(myokit.Name(fup), myokit.Name(myokit_var)))
+ elif (
+ derived_variable.type == DerivedVariable.Type.BLOOD_PLASMA_RATIO
+ ): # noqa: E501
+ new_names = [f"calc_{var_name}_bl", "BP_ud"]
+ has_name = any(
+ [
+ myokit_compartment.has_variable(new_name)
+ for new_name in new_names
+ ]
+ ) # noqa: E501
+ if has_name:
+ continue
+ var = myokit_compartment.add_variable(new_names[0])
+ bpr = myokit_compartment.add_variable(new_names[1])
+ bpr.meta[
+ "desc"
+ ] = "User-defined Blood to Plasma Ratio (Drug Target Tab)" # noqa: E501
+ var.meta["desc"] = f'Blood Concentration for {myokit_var.meta["desc"]}'
+ var.set_unit(myokit_var.unit())
+ bpr.set_rhs(self.project.compound.blood_to_plasma_ratio)
+ bpr.set_unit(myokit.units.dimensionless)
+ var.set_rhs(myokit.Multiply(myokit.Name(bpr), myokit.Name(myokit_var)))
+ elif derived_variable.type == DerivedVariable.Type.TLAG: # noqa: E501
+ new_names = [f"{var_name}_tlag_ud"]
+ has_name = any(
+ [
+ myokit_compartment.has_variable(new_name)
+ for new_name in new_names
+ ]
+ ) # noqa: E501
+ if has_name:
+ continue
+ var = myokit_compartment.add_variable(new_names[0])
+ var.meta[
+ "desc"
+ ] = "User-defined absorption lag time from specified compartment"
+ time_var = pkpd_model.binding("time")
+ var.set_unit(time_var.unit())
+ var.set_rhs(myokit.Number(0))
+ else:
+ raise ValueError(
+ f"Unknown derived variable type {derived_variable.type}"
+ )
+
+ # do mappings
+ for mapping in self.mappings.all():
+ try:
+ pd_var = pkpd_model.get(
+ mapping.pd_variable.qname.replace("myokit", "PD")
+ )
+ pk_var = pkpd_model.get(mapping.pk_variable.qname)
+ except KeyError:
+ continue
+
+ pk_to_pd_conversion_multiplier = Unit.convert_between_myokit_units(
+ pk_var.unit(), pd_var.unit(), compound=self.project.compound
+ )
+ pd_to_pk_conversion_multiplier = Unit.convert_between_myokit_units(
+ pk_var.unit(), pd_var.unit(), compound=self.project.compound
+ )
+
+ # pd var will be an intermediary variable driven by pk_var
+ if pd_var.is_state():
+ # add pd_var rate equation to pk_var
+ pk_var.set_rhs(
+ myokit.Plus(
+ pk_var.rhs(),
+ myokit.Multiply(
+ myokit.Number(pd_to_pk_conversion_multiplier), pd_var.rhs()
+ ),
+ )
+ )
+
+ # demote pd_var to an intermediary variable
+ pd_var.demote()
+
+ pd_var.set_rhs(
+ myokit.Multiply(
+ myokit.Number(pk_to_pd_conversion_multiplier), myokit.Name(pk_var)
+ )
+ )
+
+ pkpd_model.validate()
+ return pkpd_model
+
+ def get_absolute_url(self):
+ return reverse("dosed_pk_model-detail", kwargs={"pk": self.pk})
+
+ def save(self, force_insert=False, force_update=False, *args, **kwargs):
+ created = not self.pk
+
+ super().save(force_insert, force_update, *args, **kwargs)
+
+ # don't update a stored model
+ if self.read_only:
+ return
+
+ # if the pk or pd models have changed then remove the mappings and
+ # derived variables
+ if (
+ self.pk_model != self.__original_pk_model
+ or self.pd_model != self.__original_pd_model
+ or self.pd_model2 != self.__original_pd_model2
+ ):
+ self.mappings.all().delete()
+ self.derived_variables.all().delete()
+
+ if (
+ created
+ or self.pk_model != self.__original_pk_model
+ or self.pd_model != self.__original_pd_model
+ or self.pd_model2 != self.__original_pd_model2
+ or self.has_saturation != self.__original_has_saturation
+ or self.has_effect != self.__original_has_effect
+ or self.has_lag != self.__original_has_lag
+ or self.has_bioavailability != self.__original_has_bioavailability
+ or self.has_hill_coefficient != self.__original_has_hill_coefficient
+ ):
+ self.update_model()
+
+ self.__original_pd_model = self.pd_model
+ self.__original_pd_model2 = self.pd_model2
+ self.__original_pk_model = self.pk_model
+ self.__original_species = self.species
+ self.__original_has_saturation = self.has_saturation
+ self.__original_has_effect = self.has_effect
+ self.__original_has_lag = self.has_lag
+ self.__original_has_hill_coefficient = self.has_hill_coefficient
+ self.__original_has_bioavailability = self.has_bioavailability
+
+ def reset_params_to_defaults(self, species, compoundType, variables=None):
+ if self.is_library_model:
+ model_name = (
+ self.pk_model.name.replace("_clinical", "")
+ .replace("_preclinical", "")
+ .replace("tmdd_full_constant_target", "tmdd")
+ .replace("tmdd_qss_constant_target", "tmdd")
+ .replace("tmdd_full", "tmdd")
+ .replace("tmdd_QSS", "tmdd")
+ .replace("production", "")
+ .replace("elimination", "")
+ )
+ print(
+ "resetting params to defaults",
+ model_name,
+ species,
+ compoundType,
+ self.pk_model.name,
+ )
+ if variables is None:
+ variables = self.variables.all()
+ for v in variables:
+ varName = v.name
+ defaultVal = (
+ defaults.get(model_name, {})
+ .get(varName, {})
+ .get(species, {})
+ .get(compoundType, None)
+ )
+ if defaultVal is None:
+ continue
+ if defaultVal.get("unit", "") == "dimensionless":
+ defaultVal["unit"] = ""
+ unit = Unit.objects.filter(symbol=defaultVal.get("unit", "")).first()
+ value = defaultVal.get("value", None)
+ if value is None or unit is None:
+ continue
+ v.default_value = value
+ v.unit = unit
+ v.save()
+
+
+class PkpdMapping(StoredModel):
+ pkpd_model = models.ForeignKey(
+ CombinedModel,
+ on_delete=models.CASCADE,
+ related_name="mappings",
+ help_text="PKPD model that this mapping is for",
+ )
+ pk_variable = models.ForeignKey(
+ "Variable",
+ on_delete=models.CASCADE,
+ related_name="pk_mappings",
+ help_text="variable in PK part of model",
+ )
+ pd_variable = models.ForeignKey(
+ "Variable",
+ on_delete=models.CASCADE,
+ related_name="pd_mappings",
+ help_text="variable in PD part of model",
+ )
+
+ __original_pk_variable = None
+ __original_pd_variable = None
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.__original_pk_variable = self.pk_variable
+ self.__original_pd_variable = self.pd_variable
+
+ def save(self, force_insert=False, force_update=False, *args, **kwargs):
+ created = not self.pk
+
+ super().save(force_insert, force_update, *args, **kwargs)
+
+ # don't update a stored model
+ if self.read_only:
+ return
+
+ if (
+ created
+ or self.pk_variable != self.__original_pk_variable
+ or self.pd_variable != self.__original_pd_variable
+ ):
+ self.pkpd_model.update_model()
+
+ self.__original_pk_variable = self.pk_variable
+ self.__original_pd_variable = self.pd_variable
+
+ def delete(self):
+ pkpd_model = self.pkpd_model
+ super().delete()
+ pkpd_model.update_model()
+
+ def create_stored_mapping(self, new_pkpd_model, new_variables):
+ new_pk_variable = new_variables[self.pk_variable.qname]
+ new_pd_variable = new_variables[self.pd_variable.qname]
+ stored_kwargs = {
+ "pkpd_model": new_pkpd_model,
+ "pk_variable": new_pk_variable,
+ "pd_variable": new_pd_variable,
+ "read_only": True,
+ }
+ stored_mapping = PkpdMapping.objects.create(**stored_kwargs)
+ return stored_mapping
+
+
+class DerivedVariable(StoredModel):
+ pkpd_model = models.ForeignKey(
+ CombinedModel,
+ on_delete=models.CASCADE,
+ related_name="derived_variables",
+ help_text="PKPD model that this derived variable is for",
+ )
+ pk_variable = models.ForeignKey(
+ "Variable",
+ on_delete=models.CASCADE,
+ related_name="derived_variables",
+ help_text="base variable in PK part of model",
+ )
+
+ class Type(models.TextChoices):
+ RECEPTOR_OCCUPANCY = "RO", "receptor occupancy"
+ FRACTION_UNBOUND_PLASMA = "FUP", "faction unbound plasma"
+ BLOOD_PLASMA_RATIO = "BPR", "blood plasma ratio"
+ TLAG = "TLG", "dosing lag time"
+
+ type = models.CharField(
+ max_length=3, choices=Type.choices, help_text="type of derived variable"
+ )
+
+ __original_pk_variable = None
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.__original_pk_variable = self.pk_variable
+
+ def save(self, force_insert=False, force_update=False, *args, **kwargs):
+ created = not self.pk
+
+ super().save(force_insert, force_update, *args, **kwargs)
+
+ # don't update a stored model
+ if self.read_only:
+ return
+
+ if created or self.pk_variable != self.__original_pk_variable:
+ self.pkpd_model.update_model()
+
+ self.__original_pk_variable = self.pk_variable
+
+ def delete(self):
+ pkpd_model = self.pkpd_model
+ super().delete()
+ pkpd_model.update_model()
+
+ def create_stored_mapping(self, new_pkpd_model, new_variables):
+ new_pk_variable = new_variables[self.pk_variable.qname]
+ stored_kwargs = {
+ "pkpd_model": new_pkpd_model,
+ "pk_variable": new_pk_variable,
+ "read_only": True,
+ }
+ stored_mapping = DerivedVariable.objects.create(**stored_kwargs)
+ return stored_mapping
diff --git a/pkpdapp/pkpdapp/models/compound.py b/pkpdapp/pkpdapp/models/compound.py
index 845d4090..19bb3d01 100644
--- a/pkpdapp/pkpdapp/models/compound.py
+++ b/pkpdapp/pkpdapp/models/compound.py
@@ -17,6 +17,27 @@ def get_mol_mass_unit():
return None
+def get_intrinsic_clearence_unit():
+ try:
+ return Unit.objects.get(symbol='µL/min/mg')
+ except Unit.DoesNotExist:
+ return None
+
+
+def get_target_concentration_unit():
+ try:
+ return Unit.objects.get(symbol='nmol/L')
+ except Unit.DoesNotExist:
+ return None
+
+
+def get_dissociation_constant_unit():
+ try:
+ return Unit.objects.get(symbol='nmol/L')
+ except Unit.DoesNotExist:
+ return None
+
+
class Compound(models.Model):
"""
"""
@@ -25,10 +46,16 @@ class Compound(models.Model):
max_length=100, help_text='name of the compound'
)
description = models.TextField(
- help_text='short description of the compound'
+ help_text='short description of the compound',
+ blank=True, default=''
+ )
+ use_efficacy = models.ForeignKey(
+ 'EfficacyExperiment', on_delete=models.SET_NULL,
+ null=True,
+ related_name='compound_using',
)
molecular_mass = models.FloatField(
- blank=True, null=True,
+ default=500.0,
help_text=(
'molecular mass for compound for conversion from mol to grams'
)
@@ -36,20 +63,110 @@ class Compound(models.Model):
molecular_mass_unit = models.ForeignKey(
Unit, on_delete=models.PROTECT,
default=get_mol_mass_unit,
- related_name='compounds',
+ related_name='compound_mol_mass',
help_text='unit for molecular mass (e.g. g/mol)'
)
+
class CompoundType(models.TextChoices):
SMALL_MOLECULE = 'SM', 'Small Molecule'
LARGE_MOLECULE = 'LM', 'Large Molecule'
-
+
compound_type = models.CharField(
max_length=2,
choices=CompoundType.choices,
default=CompoundType.SMALL_MOLECULE,
)
+ fraction_unbound_plasma = models.FloatField(
+ default=0.02,
+ blank=True, null=True,
+ help_text='fraction unbound plasma (unitless)'
+ )
+
+ blood_to_plasma_ratio = models.FloatField(
+ default=1.0,
+ blank=True, null=True,
+ help_text='blood to plasma ratio (unitless)'
+ )
+
+ intrinsic_clearance = models.FloatField(
+ blank=True, null=True,
+ help_text='intrinsic clearance'
+ )
+
+ intrinsic_clearance_unit = models.ForeignKey(
+ Unit, on_delete=models.PROTECT,
+ default=get_intrinsic_clearence_unit,
+ related_name='compounds_clint',
+ help_text='unit for intrinsic clearance'
+ )
+
+ class AssayType(models.TextChoices):
+ MICROSOMES = 'MS', 'Microsomes'
+ HEPATOCYTES = 'HC', 'Hepatocytes'
+
+ intrinsic_clearance_assay = models.CharField(
+ max_length=2,
+ choices=AssayType.choices,
+ default=AssayType.MICROSOMES,
+ )
+
+ fraction_unbound_including_cells = models.FloatField(
+ default=1.0,
+ blank=True, null=True,
+ help_text='fraction unbound in plasma and red blood cells (unitless)'
+ )
+
+ # -------
+ # Target
+ # -------
+
+ target_molecular_mass = models.FloatField(
+ default=25000.0,
+ help_text=(
+ 'molecular mass for target for conversion from mol to grams'
+ ),
+ )
+
+ target_molecular_mass_unit = models.ForeignKey(
+ Unit, on_delete=models.PROTECT,
+ default=get_mol_mass_unit,
+ related_name='compounds_target_mol_mass',
+ help_text='unit for target molecular mass (e.g. g/mol)'
+ )
+
+ target_concentration = models.FloatField(
+ default=1.0,
+ blank=True, null=True,
+ help_text='target concentration'
+ )
+
+ target_concentration_unit = models.ForeignKey(
+ Unit, on_delete=models.PROTECT,
+ default=get_target_concentration_unit,
+ related_name='compounds_target_conc',
+ help_text='unit for target concentration'
+ )
+
+ dissociation_constant = models.FloatField(
+ blank=True, null=True,
+ help_text='dissociation constant'
+ )
+
+ dissociation_unit = models.ForeignKey(
+ Unit, on_delete=models.PROTECT,
+ related_name='compounds_kd',
+ default=get_dissociation_constant_unit,
+ help_text='unit for dissociation constant'
+ )
+
+ is_soluble = models.BooleanField(
+ default=True,
+ help_text='is the compound target soluble'
+ )
+ def get_project(self):
+ return self.project
def __str__(self):
return str(self.name)
diff --git a/pkpdapp/pkpdapp/models/dataset.py b/pkpdapp/pkpdapp/models/dataset.py
index 7430d174..96429278 100644
--- a/pkpdapp/pkpdapp/models/dataset.py
+++ b/pkpdapp/pkpdapp/models/dataset.py
@@ -9,7 +9,7 @@
from pkpdapp.models import Project
from pkpdapp.models import (
Dose, Biomarker, BiomarkerType, Subject, Protocol, Unit,
- Compound, CategoricalBiomarker,
+ CategoricalBiomarker,
)
from pkpdapp.utils import DataParser
@@ -88,39 +88,24 @@ def replace_data(self, data: pd.DataFrame):
shape=i,
)
- # create compounds
- compounds = {}
- for compound in data['COMPOUND'].drop_duplicates():
- # create compound if not already in database
- try:
- compounds[compound] = Compound.objects.get(name=compound)
- except Compound.DoesNotExist:
- compounds[compound] = Compound.objects.create(
- name=compound
- )
-
# create subject protocol
for i, row in data[
- ['SUBJECT_ID', 'COMPOUND', 'ROUTE', "AMOUNT_UNIT"]
+ ['SUBJECT_ID', 'ROUTE', "AMOUNT_UNIT"]
].drop_duplicates().iterrows():
subject_id = row['SUBJECT_ID']
- compound = row['COMPOUND']
route = row['ROUTE']
amount_unit = Unit.objects.get(symbol=row['AMOUNT_UNIT'])
subject = subjects[subject_id]
- compound = compounds[compound]
if route == 'IV':
route = Protocol.DoseType.DIRECT
else:
route = Protocol.DoseType.INDIRECT
if not subject.protocol:
subject.protocol = Protocol.objects.create(
- name='{}-{}-{}'.format(
+ name='{}-{}'.format(
self.name,
- compound.name,
subject
),
- compound=compound,
time_unit=time_unit,
amount_unit=amount_unit,
dose_type=route
@@ -154,7 +139,6 @@ def replace_data(self, data: pd.DataFrame):
amount_unit = row["AMOUNT_UNIT"]
observation = row["OBSERVATION"]
observation_name = row["OBSERVATION_NAME"]
- compound = row['COMPOUND']
route = row['ROUTE']
infusion_time = row['INFUSION_TIME']
@@ -181,7 +165,6 @@ def replace_data(self, data: pd.DataFrame):
else:
route = Protocol.DoseType.INDIRECT
- compound = compounds[compound]
protocol = subject.protocol
start_time = float(time)
amount = float(amount)
diff --git a/pkpdapp/pkpdapp/models/dose.py b/pkpdapp/pkpdapp/models/dose.py
index 19aefdcc..6b6f8af7 100644
--- a/pkpdapp/pkpdapp/models/dose.py
+++ b/pkpdapp/pkpdapp/models/dose.py
@@ -44,6 +44,21 @@ class DoseBase(models.Model):
validators=[validate_duration]
)
+ repeats = models.IntegerField(
+ default=1,
+ help_text=(
+ 'Number of times to repeat the dose. '
+ ),
+ )
+
+ repeat_interval = models.FloatField(
+ default=1.0,
+ help_text=(
+ 'Interval between repeated doses. '
+ 'See protocol for units. '
+ ),
+ )
+
class Meta:
constraints = [
models.CheckConstraint(
@@ -58,8 +73,13 @@ def get_project(self):
def save(self, force_insert=False, force_update=False, *args, **kwargs):
super().save(force_insert, force_update, *args, **kwargs)
- for dosed_pk_model in self.protocol.dosed_pk_models.all():
- dosed_pk_model.update_simulator()
+ models = set()
+ for v in self.protocol.variables.all().select_related(
+ 'dosed_pk_model'
+ ):
+ models.add(v.dosed_pk_model)
+ for m in models:
+ m.update_simulator()
def is_same_as(self, other_dose):
if self.duration != other_dose.duration:
diff --git a/pkpdapp/pkpdapp/models/efficacy_experiment.py b/pkpdapp/pkpdapp/models/efficacy_experiment.py
new file mode 100644
index 00000000..45e84318
--- /dev/null
+++ b/pkpdapp/pkpdapp/models/efficacy_experiment.py
@@ -0,0 +1,42 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from django.db import models
+from pkpdapp.models import (
+ Compound
+)
+
+
+class EfficacyExperiment(models.Model):
+ name = models.CharField(
+ max_length=100, help_text='name of the experiment',
+ blank=True, default=''
+ )
+
+ c50 = models.FloatField(
+ help_text=(
+ 'half maximal effective concentration'
+ )
+ )
+
+ c50_unit = models.ForeignKey(
+ 'Unit', on_delete=models.PROTECT,
+ related_name='efficacy_experiments',
+ help_text='unit for c50'
+ )
+
+ hill_coefficient = models.FloatField(
+ default=1.0,
+ help_text=(
+ 'Hill coefficient measure of binding'
+ )
+ )
+
+ compound = models.ForeignKey(
+ Compound, on_delete=models.CASCADE,
+ related_name='efficacy_experiments',
+ help_text='compound for efficacy experiment'
+ )
diff --git a/pkpdapp/pkpdapp/models/inference.py b/pkpdapp/pkpdapp/models/inference.py
index dfe10a86..0ffb193d 100644
--- a/pkpdapp/pkpdapp/models/inference.py
+++ b/pkpdapp/pkpdapp/models/inference.py
@@ -8,7 +8,7 @@
from pkpdapp.celery import app
from pkpdapp.models import (
Project, PharmacodynamicModel,
- DosedPharmacokineticModel,
+ CombinedModel,
StoredModel, LogLikelihoodParameter,
InferenceFunctionResult, InferenceResult
)
@@ -146,7 +146,7 @@ def store_inference(self):
variables__log_likelihoods__inference=self
).distinct())
- old_pk_models = list(DosedPharmacokineticModel.objects.filter(
+ old_pk_models = list(CombinedModel.objects.filter(
variables__log_likelihoods__inference=self
).distinct())
# old_models += list(PkpdModel.objects.filter(
diff --git a/pkpdapp/pkpdapp/models/likelihoods.py b/pkpdapp/pkpdapp/models/likelihoods.py
index f3306c88..a654cab6 100644
--- a/pkpdapp/pkpdapp/models/likelihoods.py
+++ b/pkpdapp/pkpdapp/models/likelihoods.py
@@ -13,8 +13,10 @@
import numpy as np
import scipy.stats as sps
from pkpdapp.models import (
- Variable, BiomarkerType,
- MyokitForwardModel, Protocol,
+ Variable,
+ BiomarkerType,
+ MyokitForwardModel,
+ Protocol,
)
@@ -66,26 +68,30 @@ def __init__(self, name, ode_model, sensitivities=False):
self._cached_ode_model = self._ode_model.simulate
if sensitivities:
+
def function(x):
- state, = self._cached_ode_model(np.array(x, dtype=np.float64))
+ (state,) = self._cached_ode_model(np.array(x, dtype=np.float64))
return state
+
else:
+
def function(x):
state = self._cached_ode_model(np.array(x, dtype=np.float64))
return state
+
self._function = function
if sensitivities:
+
def vjp(x, gs):
- _, sens = self._cached_ode_model(
- np.array(x, dtype=np.float64)
- )
- return [
- s.T.dot(g) for s, g in zip(sens, gs)
- ]
+ _, sens = self._cached_ode_model(np.array(x, dtype=np.float64))
+ return [s.T.dot(g) for s, g in zip(sens, gs)]
+
else:
+
def vjp(x, g):
- raise NotImplementedError('sensitivities have been turned off')
+ raise NotImplementedError("sensitivities have been turned off")
+
self._vjp = vjp
def infer_shape(self, fgraph, node, input_shapes):
@@ -93,9 +99,7 @@ def infer_shape(self, fgraph, node, input_shapes):
def make_node(self, x):
x = theano.tensor.as_tensor_variable(x)
- outputs = [
- theano.tensor.vector() for _ in range(self._n_outputs)
- ]
+ outputs = [theano.tensor.vector() for _ in range(self._n_outputs)]
return theano.tensor.Apply(self, [x], outputs)
def perform(self, node, inputs_storage, output_storage):
@@ -108,7 +112,7 @@ def grad(self, inputs, output_grads):
x = inputs[0]
# pass the VSP when asked for gradient
- grad_op = ODEGradop('grad of ' + self.name, self._vjp, self._n_outputs)
+ grad_op = ODEGradop("grad of " + self.name, self._vjp, self._n_outputs)
grad_op_apply = grad_op(x, *output_grads)
return [grad_op_apply]
@@ -120,45 +124,39 @@ class LogLikelihoodParameter(models.Model):
This model stores data on which input parameter this relationship
referres to
"""
+
name = models.CharField(
- max_length=100,
- help_text='name of log_likelihood parameter.'
+ max_length=100, help_text="name of log_likelihood parameter."
)
parent = models.ForeignKey(
- 'LogLikelihood',
- related_name='parameters',
- on_delete=models.CASCADE
+ "LogLikelihood", related_name="parameters", on_delete=models.CASCADE
)
parent_index = models.IntegerField(
- blank=True, null=True,
+ blank=True,
+ null=True,
help_text=(
- 'parameter index for distribution and equation parameters. '
- 'blank for models (variable is used instead)'
- )
+ "parameter index for distribution and equation parameters. "
+ "blank for models (variable is used instead)"
+ ),
)
child = models.ForeignKey(
- 'LogLikelihood',
- related_name='outputs',
- on_delete=models.CASCADE
+ "LogLikelihood", related_name="outputs", on_delete=models.CASCADE
)
child_index = models.IntegerField(
- default=0,
- help_text=(
- 'output index for all log_likelihoods. '
- )
+ default=0, help_text=("output index for all log_likelihoods. ")
)
variable = models.ForeignKey(
Variable,
- related_name='log_likelihood_parameters',
- blank=True, null=True,
+ related_name="log_likelihood_parameters",
+ blank=True,
+ null=True,
on_delete=models.PROTECT,
- help_text='input model variable for this parameter.'
+ help_text="input model variable for this parameter.",
)
length = models.IntegerField(
- blank=True, null=True,
- help_text=(
- 'length of array representing parameter. null for scalar'
- )
+ blank=True,
+ null=True,
+ help_text=("length of array representing parameter. null for scalar"),
)
def set_fixed(self, value):
@@ -177,14 +175,10 @@ def set_uniform_prior(self, lower, upper, biomarker_type=None):
_, _, subjects = child.get_data()
self.length = len(subjects)
self.save()
- lower_param = LogLikelihoodParameter.objects.get(
- parent=child, parent_index=0
- )
+ lower_param = LogLikelihoodParameter.objects.get(parent=child, parent_index=0)
lower_param.child.value = lower
lower_param.child.save()
- upper_param = LogLikelihoodParameter.objects.get(
- parent=child, parent_index=1
- )
+ upper_param = LogLikelihoodParameter.objects.get(parent=child, parent_index=1)
upper_param.child.value = upper
upper_param.child.save()
@@ -195,99 +189,93 @@ class LogLikelihood(models.Model):
"""
inference = models.ForeignKey(
- 'Inference',
- related_name='log_likelihoods',
+ "Inference",
+ related_name="log_likelihoods",
on_delete=models.CASCADE,
- help_text=(
- 'Log_likelihood belongs to this inference object. '
- )
+ help_text=("Log_likelihood belongs to this inference object. "),
)
- name = models.CharField(
- max_length=100,
- help_text='name of log_likelihood.'
- )
+ name = models.CharField(max_length=100, help_text="name of log_likelihood.")
description = models.TextField(
- blank=True, null=True,
+ blank=True,
+ null=True,
help_text=(
- 'description of log_likelihood. For equations will be the '
- 'code of that equation using Python syntax: arg1 * arg2^arg3'
- )
+ "description of log_likelihood. For equations will be the "
+ "code of that equation using Python syntax: arg1 * arg2^arg3"
+ ),
)
value = models.FloatField(
- help_text='set if a fixed value is required',
- blank=True, null=True,
+ help_text="set if a fixed value is required",
+ blank=True,
+ null=True,
)
children = models.ManyToManyField(
- 'LogLikelihood',
- related_name='parents',
+ "LogLikelihood",
+ related_name="parents",
symmetrical=False,
through=LogLikelihoodParameter,
- through_fields=('parent', 'child'),
+ through_fields=("parent", "child"),
)
variable = models.ForeignKey(
Variable,
- related_name='log_likelihoods',
- blank=True, null=True,
+ related_name="log_likelihoods",
+ blank=True,
+ null=True,
on_delete=models.PROTECT,
- help_text=(
- 'If form=MODEL, a variable (any) in the deterministic model. '
- )
+ help_text=("If form=MODEL, a variable (any) in the deterministic model. "),
)
biomarker_type = models.ForeignKey(
BiomarkerType,
on_delete=models.PROTECT,
- blank=True, null=True,
+ blank=True,
+ null=True,
help_text=(
- 'data associated with this log_likelihood. '
- 'This is used for measurement data (observed=True) '
- 'or for covariates (observed=False). '
- 'The random variable associated with this log_likelihood '
- 'has the same shape as this data. '
- 'For covariates the subject ids in the data correspond '
- 'to the values of the random variable at that location.'
- )
+ "data associated with this log_likelihood. "
+ "This is used for measurement data (observed=True) "
+ "or for covariates (observed=False). "
+ "The random variable associated with this log_likelihood "
+ "has the same shape as this data. "
+ "For covariates the subject ids in the data correspond "
+ "to the values of the random variable at that location."
+ ),
)
time_independent_data = models.BooleanField(
default=True,
help_text=(
- 'True if biomarker_type refers to time-independent data. '
- 'If there are multiple timepoints in biomarker_type then only '
- 'the first is taken '
- )
+ "True if biomarker_type refers to time-independent data. "
+ "If there are multiple timepoints in biomarker_type then only "
+ "the first is taken "
+ ),
)
observed = models.BooleanField(
- default=False,
- help_text=(
- 'True if this log_likelihood is observed '
- )
+ default=False, help_text=("True if this log_likelihood is observed ")
)
protocol_filter = models.ForeignKey(
Protocol,
on_delete=models.PROTECT,
- blank=True, null=True,
+ blank=True,
+ null=True,
help_text=(
- 'filter subject data on this protocol'
- '(null implies all subjects)'
- )
+ "filter subject data on this protocol" "(null implies all subjects)"
+ ),
)
class Form(models.TextChoices):
- NORMAL = 'N', 'Normal'
- UNIFORM = 'U', 'Uniform'
- LOGNORMAL = 'LN', 'Log-Normal'
- FIXED = 'F', 'Fixed'
- SUM = 'S', 'Sum'
- EQUATION = 'E', 'Equation'
- MODEL = 'M', 'Model'
+ NORMAL = "N", "Normal"
+ UNIFORM = "U", "Uniform"
+ LOGNORMAL = "LN", "Log-Normal"
+ FIXED = "F", "Fixed"
+ SUM = "S", "Sum"
+ EQUATION = "E", "Equation"
+ MODEL = "M", "Model"
form = models.CharField(
max_length=2,
@@ -300,37 +288,29 @@ class Meta:
models.CheckConstraint(
check=(
~(
- Q(form='F') &
- Q(value__isnull=True) &
- Q(biomarker_type__isnull=True)
+ Q(form="F")
+ & Q(value__isnull=True)
+ & Q(biomarker_type__isnull=True)
)
),
name=(
- '%(class)s: fixed log_likelihood must have a value '
- 'or biomarker_type'
- )
+ "%(class)s: fixed log_likelihood must have a value "
+ "or biomarker_type"
+ ),
),
models.CheckConstraint(
- check=(
- ~(Q(form='M') & Q(variable__isnull=True))
- ),
- name=(
- '%(class)s: model log_likelihood must have a variable'
- )
+ check=(~(Q(form="M") & Q(variable__isnull=True))),
+ name=("%(class)s: model log_likelihood must have a variable"),
),
models.CheckConstraint(
check=(
~(
- (
- Q(form='F') | Q(form='S') | Q(form='M')
- ) &
- Q(biomarker_type__isnull=False) &
- Q(protocol_filter=False)
+ (Q(form="F") | Q(form="S") | Q(form="M"))
+ & Q(biomarker_type__isnull=False)
+ & Q(protocol_filter=False)
)
),
- name=(
- '%(class)s: deterministic log_likelihoods cannot have data'
- )
+ name=("%(class)s: deterministic log_likelihoods cannot have data"),
),
]
@@ -344,9 +324,9 @@ def __init__(self, *args, **kwargs):
def from_db(cls, db, field_names, values):
instance = super().from_db(db, field_names, values)
# fix for infinite recursion when deleting inference
- if 'form' in field_names:
+ if "form" in field_names:
instance.__original_form = instance.form
- if 'variable' in field_names:
+ if "variable" in field_names:
instance.__original_variable = instance.variable
return instance
@@ -365,19 +345,16 @@ def is_random(self):
def is_a_distribution(self):
return (
- self.form == self.Form.NORMAL or
- self.form == self.Form.UNIFORM or
- self.form == self.Form.LOGNORMAL
+ self.form == self.Form.NORMAL
+ or self.form == self.Form.UNIFORM
+ or self.form == self.Form.LOGNORMAL
)
def is_a_prior(self):
"""
True for distributions
"""
- return (
- self.is_a_distribution() and
- not self.observed
- )
+ return self.is_a_distribution() and not self.observed
def has_data(self):
"""
@@ -395,29 +372,21 @@ def sample(self):
return values
elif self.form == self.Form.EQUATION:
params = self.get_noise_log_likelihoods()
- param_values = [
- p.sample() for p in params
- ]
+ param_values = [p.sample() for p in params]
- args = [
- 'arg{}'.format(i)
- for i, _ in enumerate(param_values)
- ]
- args = ','.join(args)
+ args = ["arg{}".format(i) for i, _ in enumerate(param_values)]
+ args = ",".join(args)
code = (
- 'import numpy as np\n'
- 'def fun({}):\n'
- ' return {}\n'
- 'result = np.vectorize(fun)({})\n'
+ "import numpy as np\n"
+ "def fun({}):\n"
+ " return {}\n"
+ "result = np.vectorize(fun)({})\n"
).format(args, self.description, args)
- lcls = {
- 'arg{}'.format(i): param
- for i, param in enumerate(param_values)
- }
+ lcls = {"arg{}".format(i): param for i, param in enumerate(param_values)}
exec(code, None, lcls)
- return lcls['result']
+ return lcls["result"]
# otherwise must be a distribtion
@@ -455,30 +424,25 @@ def add_noise(self, output_values, noise_params=None):
noise_params = self.get_noise_params()
if self.form == self.Form.NORMAL:
output_values += np.random.normal(
- loc=noise_params[0],
- scale=noise_params[1],
- size=output_values.shape
+ loc=noise_params[0], scale=noise_params[1], size=output_values.shape
)
elif self.form == self.Form.LOGNORMAL:
- output_values += (
- np.random.lognormal(
- mean=noise_params[0],
- sigma=noise_params[1],
- size=output_values.shape
- )
+ output_values += np.random.lognormal(
+ mean=noise_params[0], sigma=noise_params[1], size=output_values.shape
)
return output_values
def get_length_by_index(self):
- outputs = list(self.outputs.order_by('child_index'))
+ outputs = list(self.outputs.order_by("child_index"))
if len(outputs) == 0:
n_distinct_outputs = 0
else:
n_distinct_outputs = outputs[-1].child_index + 1
length_by_index = [()] * n_distinct_outputs
for output in outputs:
- length_by_index[output.child_index] = \
+ length_by_index[output.child_index] = (
1 if output.length is None else output.length
+ )
return length_by_index
def get_total_length(self):
@@ -491,10 +455,14 @@ def get_results(self, chain=None, iteration=None):
get inference results, respecting order of subjects
defined by this log_likelihood
"""
- return self.inference_results.filter(
- chain=chain,
- iteration=iteration,
- ).order_by('subject').values_list('value', flat=True)
+ return (
+ self.inference_results.filter(
+ chain=chain,
+ iteration=iteration,
+ )
+ .order_by("subject")
+ .values_list("value", flat=True)
+ )
def noise_range(self, output_values, noise_params=None):
"""
@@ -507,19 +475,17 @@ def noise_range(self, output_values, noise_params=None):
if self.form == self.Form.NORMAL:
for i in range(len(output_values)):
dist = sps.norm(
- loc=output_values[i] + noise_params[0],
- scale=noise_params[1]
+ loc=output_values[i] + noise_params[0], scale=noise_params[1]
)
- output_values_min[i] = dist.ppf(.1)
- output_values_max[i] = dist.ppf(.9)
+ output_values_min[i] = dist.ppf(0.1)
+ output_values_max[i] = dist.ppf(0.9)
elif self.form == self.Form.LOGNORMAL:
for i in range(len(output_values)):
dist = sps.lognorm(
- loc=output_values[i] + noise_params[0],
- scale=noise_params[1]
+ loc=output_values[i] + noise_params[0], scale=noise_params[1]
)
- output_values_min[i] = dist.ppf(.1)
- output_values_max[i] = dist.ppf(.9)
+ output_values_min[i] = dist.ppf(0.1)
+ output_values_max[i] = dist.ppf(0.9)
return output_values_min, output_values_max
@@ -530,10 +496,7 @@ def _create_pymc3_model(self, pm_model, parent, ops):
# sure to choose the right one
if parent is not None:
- param = LogLikelihoodParameter.objects.get(
- parent=parent,
- child=self
- )
+ param = LogLikelihoodParameter.objects.get(parent=parent, child=self)
# outputs for models are assumed to be unique and ordered
# by parent id, outputs for the rest can be non-unique, so use
@@ -555,7 +518,7 @@ def _create_pymc3_model(self, pm_model, parent, ops):
values, times, subjects = self.get_data()
- outputs = list(self.outputs.order_by('child_index'))
+ outputs = list(self.outputs.order_by("child_index"))
if len(outputs) == 0:
n_distinct_outputs = 0
else:
@@ -566,8 +529,9 @@ def _create_pymc3_model(self, pm_model, parent, ops):
if self.is_a_distribution():
length_by_index = [()] * n_distinct_outputs
for output in outputs:
- length_by_index[output.child_index] = \
+ length_by_index[output.child_index] = (
1 if output.length is None else output.length
+ )
total_length = sum(length_by_index)
# set shape and check total length of outputs is < this shape
@@ -575,15 +539,15 @@ def _create_pymc3_model(self, pm_model, parent, ops):
shape = ()
if total_length > 1:
raise RuntimeError(
- 'log_likelihood {} is scalar but total length of '
- 'outputs is {}'.format(self.name, total_length)
+ "log_likelihood {} is scalar but total length of "
+ "outputs is {}".format(self.name, total_length)
)
else:
shape = (len(values),)
if total_length > shape[0]:
raise RuntimeError(
- 'log_likelihood {} has data of length {} but total '
- 'length of outputs is {}'.format(
+ "log_likelihood {} has data of length {} but total "
+ "length of outputs is {}".format(
self.name, shape[0], total_length
)
)
@@ -599,23 +563,17 @@ def _create_pymc3_model(self, pm_model, parent, ops):
mean, sigma = self.get_noise_log_likelihoods()
mean = mean._create_pymc3_model(pm_model, self, ops)
sigma = sigma._create_pymc3_model(pm_model, self, ops)
- op = pm.Normal(
- name, mean, sigma, observed=observed, shape=shape
- )
+ op = pm.Normal(name, mean, sigma, observed=observed, shape=shape)
elif self.form == self.Form.LOGNORMAL:
mean, sigma = self.get_noise_log_likelihoods()
mean = mean._create_pymc3_model(pm_model, self, ops)
sigma = sigma._create_pymc3_model(pm_model, self, ops)
- op = pm.LogNormal(
- name, mean, sigma, observed=observed, shape=shape
- )
+ op = pm.LogNormal(name, mean, sigma, observed=observed, shape=shape)
elif self.form == self.Form.UNIFORM:
lower, upper = self.get_noise_log_likelihoods()
lower = lower._create_pymc3_model(pm_model, self, ops)
upper = upper._create_pymc3_model(pm_model, self, ops)
- op = pm.Uniform(
- name, lower, upper, observed=observed, shape=shape
- )
+ op = pm.Uniform(name, lower, upper, observed=observed, shape=shape)
elif self.form == self.Form.MODEL:
# ASSUMPTIONS / LIMITATIONS: - parents of models must be observed
# random variables (e.g. can't have equation to, say, measure 2 *
@@ -628,9 +586,7 @@ def _create_pymc3_model(self, pm_model, parent, ops):
subjects = []
all_subjects = set()
for parent in parents:
- output = LogLikelihoodParameter.objects.get(
- parent=parent, child=self
- )
+ output = LogLikelihoodParameter.objects.get(parent=parent, child=self)
_, this_times, this_subjects = parent.get_data()
output_names.append(output.variable.qname)
times.append(this_times)
@@ -644,10 +600,7 @@ def _create_pymc3_model(self, pm_model, parent, ops):
# scalar values then we can just run 1 sim, if any are vector
# values then each value is a different parameter for each subject,
# so we need to run a sim for every subject
- all_params_scalar = all([
- p.length is None
- for p in self.parameters.all()
- ])
+ all_params_scalar = all([p.length is None for p in self.parameters.all()])
if all_params_scalar:
subjects = None
@@ -671,14 +624,16 @@ def _create_pymc3_model(self, pm_model, parent, ops):
# max_length and create a 2d tensor to pass to the model with
# shape (n_params, max_length)
if not all_params_scalar:
- max_length = max([
- param.length if param.length is not None else 1
- for param in fitted_parameters
- ])
+ max_length = max(
+ [
+ param.length if param.length is not None else 1
+ for param in fitted_parameters
+ ]
+ )
if max_length != n_subjects:
raise RuntimeError(
- 'Error: n_subjects given by params is '
- 'different to n_subjects given by output data.'
+ "Error: n_subjects given by params is "
+ "different to n_subjects given by output data."
)
for index in range(len(all_params)):
param = fitted_parameters[index]
@@ -707,14 +662,9 @@ def _create_pymc3_model(self, pm_model, parent, ops):
params = self.get_noise_log_likelihoods()
pymc3_params = []
for param in params:
- param = param._create_pymc3_model(
- pm_model, self, ops
- )
+ param = param._create_pymc3_model(pm_model, self, ops)
pymc3_params.append(param)
- lcls = {
- 'arg{}'.format(i): param
- for i, param in enumerate(pymc3_params)
- }
+ lcls = {"arg{}".format(i): param for i, param in enumerate(pymc3_params)}
op = eval(self.description, None, lcls)
elif self.form == self.Form.FIXED:
if self.biomarker_type is None:
@@ -722,7 +672,7 @@ def _create_pymc3_model(self, pm_model, parent, ops):
else:
op = theano.shared(np.array(values))
else:
- raise RuntimeError('unrecognised form', self.form)
+ raise RuntimeError("unrecognised form", self.form)
# split the op into its distinct outputs
if self.form == self.Form.MODEL:
@@ -733,9 +683,7 @@ def _create_pymc3_model(self, pm_model, parent, ops):
indexed_list = []
current_index = 0
for length in length_by_index:
- indexed_list.append(
- op[current_index:current_index + length]
- )
+ indexed_list.append(op[current_index : current_index + length])
ops[name] = indexed_list
# if no parent then we don't need to return anything
@@ -751,23 +699,19 @@ def create_pymc3_model(self, *other_log_likelihoods):
ll._create_pymc3_model(pm_model, None, ops)
return pm_model
- def create_forward_model(
- self, output_names, output_times, output_subjects=None
- ):
+ def create_forward_model(self, output_names, output_times, output_subjects=None):
"""
create pints forwards model for this log_likelihood.
"""
model = self.get_model()
myokit_model = model.get_myokit_model()
+ print(myokit_model.code())
myokit_simulator = model.get_myokit_simulator()
fixed_parameters_dict = {
param.variable.qname: param.child.value
for param in self.parameters.all()
- if (
- not param.child.is_random() and
- param.variable is not None
- )
+ if (not param.child.is_random() and param.variable is not None)
}
conversion_factors = []
@@ -776,29 +720,29 @@ def create_forward_model(
myokit_variable_sbml = myokit_model.get(name)
conversion_factor = myokit.Unit.conversion_factor(
- myokit_variable_sbml.unit(),
- variable.unit.get_myokit_unit()
+ myokit_variable_sbml.unit(), variable.unit.get_myokit_unit()
).value()
conversion_factors.append(conversion_factor)
pints_model = MyokitForwardModel(
- myokit_simulator, myokit_model,
- output_names, conversion_factors, output_times,
- output_subjects, fixed_parameters_dict
+ myokit_simulator,
+ myokit_model,
+ output_names,
+ conversion_factors,
+ output_times,
+ output_subjects,
+ fixed_parameters_dict,
)
fitted_parameters = [
- self.get_param(name)
- for name in pints_model.variable_parameter_names()
+ self.get_param(name) for name in pints_model.variable_parameter_names()
]
return pints_model, fitted_parameters
def get_param(self, qname):
- param = LogLikelihoodParameter.objects.get(
- parent=self, variable__qname=qname
- )
+ param = LogLikelihoodParameter.objects.get(parent=self, variable__qname=qname)
return param
def filter_data_by_protocol(self, df):
@@ -811,9 +755,9 @@ def filter_data_by_protocol(self, df):
return df
else:
filtered_subjects = self.protocol_filter.subjects.values_list(
- 'id', flat=True
+ "id", flat=True
)
- return df.loc[df['subjects'].isin(filtered_subjects)]
+ return df.loc[df["subjects"].isin(filtered_subjects)]
def get_data(self, fake=False):
"""
@@ -822,18 +766,16 @@ def get_data(self, fake=False):
"""
if self.biomarker_type:
df = self.filter_data_by_protocol(
- self.biomarker_type.data(
- first_time_only=self.time_independent_data
- )
+ self.biomarker_type.data(first_time_only=self.time_independent_data)
)
if df is None or len(df) == 0:
return None, None, None
return (
- df['values'].tolist(),
- df['times'].tolist(),
- df['subjects'].tolist()
+ df["values"].tolist(),
+ df["times"].tolist(),
+ df["subjects"].tolist(),
)
else:
return None, None, None
@@ -844,11 +786,9 @@ def get_noise_names(self):
"""
noise_parameters = self.parameters.filter(
parent_index__isnull=False,
- ).order_by('parent_index')
+ ).order_by("parent_index")
- return [
- p.name for p in noise_parameters
- ]
+ return [p.name for p in noise_parameters]
def get_noise_log_likelihoods(self):
"""
@@ -856,11 +796,9 @@ def get_noise_log_likelihoods(self):
"""
noise_parameters = self.parameters.filter(
parent_index__isnull=False,
- ).order_by('parent_index')
+ ).order_by("parent_index")
- return [
- p.child for p in noise_parameters
- ]
+ return [p.child for p in noise_parameters]
def get_noise_params(self):
"""
@@ -868,9 +806,7 @@ def get_noise_params(self):
if any noise params have a prior on them then
this is sampled
"""
- return [
- child.sample() for child in self.get_noise_log_likelihoods()
- ]
+ return [child.sample() for child in self.get_noise_log_likelihoods()]
def create_pints_transform(self):
if False:
@@ -901,20 +837,21 @@ def create_pints_log_likelihood(self):
noise_param = self.parameters.get(index=1)
if noise_param.child.form == noise_param.child.Form.FIXED:
value = noise_param.value
- return pints.GaussianKnownSigmaLogLikelihood(
- problem, value
- ), fitted_children
+ return (
+ pints.GaussianKnownSigmaLogLikelihood(problem, value),
+ fitted_children,
+ )
else:
- return pints.GaussianLogLikelihood(
- problem
- ), fitted_children + [noise_param.child]
+ return pints.GaussianLogLikelihood(problem), fitted_children + [
+ noise_param.child
+ ]
elif self.form == LogLikelihood.Form.LOGNORMAL:
noise_param = self.parameters.get(index=1)
- return pints.LogNormalLogLikelihood(
- problem
- ), fitted_children + [noise_param.child]
+ return pints.LogNormalLogLikelihood(problem), fitted_children + [
+ noise_param.child
+ ]
- raise RuntimeError('unknown log_likelihood form')
+ raise RuntimeError("unknown log_likelihood form")
def get_model(self, variable=None):
"""
@@ -937,9 +874,9 @@ def get_model_variables(self):
if model is None:
return []
else:
- return model.variables.filter(
- Q(constant=True) | Q(state=True)
- ).exclude(name="time")
+ return model.variables.filter(Q(constant=True) | Q(state=True)).exclude(
+ name="time"
+ )
def get_model_outputs(self):
"""
@@ -950,17 +887,15 @@ def get_model_outputs(self):
if model is None:
return []
else:
- return model.variables.filter(
- Q(constant=False)
- ).exclude(name="time")
+ return model.variables.filter(Q(constant=False)).exclude(name="time")
def save(self, force_insert=False, force_update=False, *args, **kwargs):
created = not self.pk
set_defaults = (
- created or
- self.get_model() != self.get_model(self.__original_variable) or
- self.form != self.__original_form
+ created
+ or self.get_model() != self.get_model(self.__original_variable)
+ or self.form != self.__original_form
)
if set_defaults:
@@ -992,10 +927,9 @@ def save(self, force_insert=False, force_update=False, *args, **kwargs):
def create_model_family(self):
for model_variable in self.get_model_variables():
- if model_variable.constant:
- name = model_variable.qname
- else:
- name = 'initial ' + model_variable.qname
+ if not model_variable.constant:
+ continue
+ name = model_variable.qname
child = LogLikelihood.objects.create(
name=name,
inference=self.inference,
@@ -1004,7 +938,8 @@ def create_model_family(self):
form=self.Form.FIXED,
)
LogLikelihoodParameter.objects.create(
- parent=self, child=child,
+ parent=self,
+ child=child,
variable=model_variable,
name=model_variable.qname,
)
@@ -1049,9 +984,17 @@ def create_noise_children(self):
]
if variable is not None:
+ mean = variable.get_default_value()
+ if (
+ variable.lower_bound is not None
+ and variable.upper_bound is not None
+ ):
+ sigma = 0.1 * (variable.upper_bound - variable.lower_bound)
+ else:
+ sigma = 0.1 * mean
defaults = [
- variable.get_default_value(),
- 0.1 * (variable.upper_bound - variable.lower_bound),
+ mean,
+ sigma,
]
else:
defaults = [0.0, 1.0]
@@ -1062,9 +1005,17 @@ def create_noise_children(self):
]
if variable is not None:
+ mean = variable.get_default_value()
+ if (
+ variable.lower_bound is not None
+ and variable.upper_bound is not None
+ ):
+ sigma = 0.1 * (variable.upper_bound - variable.lower_bound)
+ else:
+ sigma = 0.1 * mean
defaults = [
- variable.get_default_value(),
- 0.1 * (variable.upper_bound - variable.lower_bound),
+ mean,
+ sigma,
]
else:
defaults = [0.0, 1.0]
@@ -1075,18 +1026,24 @@ def create_noise_children(self):
]
if variable is not None:
+ if variable.lower_bound is not None:
+ lower = variable.lower_bound
+ else:
+ lower = 0.1 * variable.get_default_value()
+ if variable.upper_bound is not None:
+ upper = variable.upper_bound
+ else:
+ upper = 10.0 * variable.get_default_value()
defaults = [
- variable.lower_bound,
- variable.upper_bound,
+ lower,
+ upper,
]
else:
defaults = [0.0, 1.0]
else:
names = []
defaults = []
- for param_index, (name, default) in enumerate(
- zip(names, defaults)
- ):
+ for param_index, (name, default) in enumerate(zip(names, defaults)):
child = LogLikelihood.objects.create(
name=name,
inference=self.inference,
@@ -1094,7 +1051,8 @@ def create_noise_children(self):
form=self.Form.FIXED,
)
LogLikelihoodParameter.objects.create(
- parent=self, child=child,
+ parent=self,
+ child=child,
parent_index=param_index,
name=name,
)
@@ -1103,26 +1061,24 @@ def create_stored_log_likelihood(self, inference, new_models):
"""
create stored log_likelihood, ignoring children for now
"""
- print('create_stored_log_likelihood', self.name)
+ print("create_stored_log_likelihood", self.name)
new_variable = None
if self.variable is not None:
old_model = self.variable.get_model()
new_model = new_models[old_model.id]
variable_qname = self.variable.qname
- new_variable = new_model.variables.get(
- qname=variable_qname
- )
+ new_variable = new_model.variables.get(qname=variable_qname)
stored_log_likelihood_kwargs = {
- 'inference': inference,
- 'name': self.name,
- 'value': self.value,
- 'variable': new_variable,
- 'biomarker_type': self.biomarker_type,
- 'observed': self.observed,
- 'protocol_filter': self.protocol_filter,
- 'form': self.form,
+ "inference": inference,
+ "name": self.name,
+ "value": self.value,
+ "variable": new_variable,
+ "biomarker_type": self.biomarker_type,
+ "observed": self.observed,
+ "protocol_filter": self.protocol_filter,
+ "form": self.form,
}
# this will create default children
diff --git a/pkpdapp/pkpdapp/models/mechanistic_model.py b/pkpdapp/pkpdapp/models/mechanistic_model.py
index fdfe2e62..74c97d40 100644
--- a/pkpdapp/pkpdapp/models/mechanistic_model.py
+++ b/pkpdapp/pkpdapp/models/mechanistic_model.py
@@ -13,42 +13,44 @@ class MechanisticModel(models.Model, MyokitModelMixin):
"""
A PK or PD model, represented using mmt
"""
- DEFAULT_MMT = (
- '[[model]]\n'
- '\n'
- '[myokit]\n'
- 'time = 0 bind time'
- )
+
+ DEFAULT_MMT = "[[model]]\n" "\n" "[myokit]\n" "time = 0 bind time"
DEFAULT_SBML = (
''
- ''
+ ">"
''
- ''
- ''
+ ""
+ ""
)
- name = models.CharField(max_length=100, help_text='name of the model')
+ name = models.CharField(max_length=100, help_text="name of the model")
description = models.TextField(
- help_text='short description of the model',
- blank=True, default=''
+ help_text="short description of the model", blank=True, default=""
)
mmt = models.TextField(
help_text=(
- 'the model represented using mmt '
- '(see https://myokit.readthedocs)'
+ "the model represented using mmt " "(see https://myokit.readthedocs)"
),
default=DEFAULT_MMT,
)
time_max = models.FloatField(
default=30,
help_text=(
- 'suggested maximum time to simulate for this model (in the time '
- 'units specified by the mmt model)'
- )
+ "suggested maximum time to simulate for this model (in the time "
+ "units specified by the mmt model)"
+ ),
+ )
+
+ is_library_model = models.BooleanField(
+ default=False,
+ help_text=(
+ "whether this model is a library model (i.e. it is not an "
+ "uploaded user model)"
+ ),
)
class Meta:
@@ -61,4 +63,4 @@ def clean(self):
try:
self.create_myokit_model()
except Exception as e:
- raise ValidationError({'mmt': str(e)})
+ raise ValidationError({"mmt": str(e)})
diff --git a/pkpdapp/pkpdapp/models/myokit_forward_model.py b/pkpdapp/pkpdapp/models/myokit_forward_model.py
index 9aece0cc..9915a67f 100644
--- a/pkpdapp/pkpdapp/models/myokit_forward_model.py
+++ b/pkpdapp/pkpdapp/models/myokit_forward_model.py
@@ -105,9 +105,8 @@ def __init__(
var.qname() for var in model.variables(const=True)
]
- # parameters are all const variables plus the number of states
- # (for initial conditions)
- self._all_parameter_names = self._state_names + self._const_names
+ # parameters are all const variables
+ self._all_parameter_names = self._const_names
self._n_all_parameters = len(self._all_parameter_names)
if fixed_parameter_dict is None:
@@ -173,6 +172,17 @@ def _set_const(self, parameters):
for id_var, var in enumerate(self._const_names):
self._sim.set_constant(var, float(parameters[id_var]))
+ def _set_init(self, parameters):
+ """
+ Sets initial conditions of model.
+ """
+ model = self._sim._model
+ for id_var, var in enumerate(self._const_names):
+ model.get(var).set_rhs(float(parameters[id_var]))
+ states = model.initial_values(as_floats=True)
+
+ self._sim.set_state(states)
+
def simulate(self, parameters):
"""
Returns the numerical solution of the model outputs for specified
@@ -225,11 +235,11 @@ def simulate(self, parameters):
# Reset simulation
self._sim.reset()
- # Set initial conditions
- self._sim.set_state(full_parameters[:self._n_states])
-
# Set constant model parameters
- self._set_const(full_parameters[self._n_states:])
+ self._set_const(full_parameters)
+
+ # Set initial conditions
+ self._set_init(full_parameters)
# Simulate: need +100*epsilon for times to ensure simulation
# surpasses last time
@@ -271,11 +281,11 @@ def simulate(self, parameters):
# Reset simulation
self._sim.reset()
- # Set initial conditions
- self._sim.set_state(full_parameters[:self._n_states, s])
-
# Set constant model parameters
- self._set_const(full_parameters[self._n_states:, s])
+ self._set_const(full_parameters[:, s])
+
+ # Set initial conditions
+ self._set_init(full_parameters[:, s])
# Simulate: need +100*epsilon for times to ensure simulation
# surpasses last time
diff --git a/pkpdapp/pkpdapp/models/myokit_model_mixin.py b/pkpdapp/pkpdapp/models/myokit_model_mixin.py
index a43546f4..9f824b3a 100644
--- a/pkpdapp/pkpdapp/models/myokit_model_mixin.py
+++ b/pkpdapp/pkpdapp/models/myokit_model_mixin.py
@@ -4,26 +4,26 @@
# copyright notice and full license details.
#
+import pkpdapp
+import numpy as np
+from myokit.formats.mathml import MathMLExpressionWriter
+from myokit.formats.sbml import SBMLParser
+import myokit
import threading
from django.core.cache import cache
-import myokit
-from myokit.formats.sbml import SBMLParser
-from myokit.formats.mathml import MathMLExpressionWriter
-import numpy as np
+import logging
+
+logger = logging.getLogger(__name__)
lock = threading.Lock()
class MyokitModelMixin:
def _get_myokit_model_cache_key(self):
- return 'myokit_model_{}_{}'.format(
- self._meta.db_table, self.id
- )
+ return "myokit_model_{}_{}".format(self._meta.db_table, self.id)
def _get_myokit_simulator_cache_key(self):
- return 'myokit_simulator_{}_{}'.format(
- self._meta.db_table, self.id
- )
+ return "myokit_simulator_{}_{}".format(self._meta.db_table, self.id)
@staticmethod
def sbml_string_to_mmt(sbml):
@@ -33,9 +33,7 @@ def sbml_string_to_mmt(sbml):
@staticmethod
def parse_sbml_string(sbml):
with lock:
- model = SBMLParser().parse_string(
- str.encode(sbml)
- ).myokit_model()
+ model = SBMLParser().parse_string(str.encode(sbml)).myokit_model()
return model
@staticmethod
@@ -47,10 +45,100 @@ def parse_mmt_string(mmt):
def create_myokit_model(self):
return self.parse_mmt_string(self.mmt)
- def create_myokit_simulator(self):
- model = self.get_myokit_model()
+ def create_myokit_simulator(self, override_tlag=None, model=None, time_max=None):
+ if override_tlag is None:
+ override_tlag = {}
+
+ if model is None:
+ model = self.get_myokit_model()
+
+ from pkpdapp.models import Variable
+
+ if override_tlag is None:
+ try:
+ tlag_value = self.variables.get(
+ qname="PKCompartment.tlag"
+ ).default_value
+ except Variable.DoesNotExist:
+ tlag_value = 0.0
+ else:
+ tlag_value = override_tlag
+
+ # add a dose_rate variable to the model for each
+ # dosed variable
+ for v in self.variables.filter(state=True):
+ if v.protocol:
+ myokit_v = model.get(v.qname)
+ set_administration(model, myokit_v)
+
+ protocols = {}
+ project = self.get_project()
+ if project is None:
+ compound = None
+ else:
+ compound = project.compound
+ for v in self.variables.filter(state=True):
+ if v.protocol:
+ # get tlag value default to 0
+ derived_param = v.qname + "_tlag_ud"
+ try:
+ tlag_value = self.variables.get(qname=derived_param).default_value
+ except Variable.DoesNotExist:
+ tlag_value = 0.0
+
+ # override tlag if set
+ if v.qname in override_tlag:
+ tlag_value = override_tlag[v.qname]
+
+ amount_var = model.get(v.qname)
+ time_var = model.binding("time")
+
+ is_target = False
+ if self.is_library_model:
+ is_target = "CT1" in v.qname or "AT1" in v.qname
+
+ amount_conversion_factor = v.protocol.amount_unit.convert_to(
+ amount_var.unit(), compound=compound, is_target=is_target
+ )
+
+ time_conversion_factor = v.protocol.time_unit.convert_to(
+ time_var.unit(), compound=compound
+ )
+
+ dosing_events = []
+ last_dose_time = tlag_value
+ for d in v.protocol.doses.all():
+ if d.repeat_interval <= 0:
+ continue
+ start_times = np.arange(
+ d.start_time + last_dose_time,
+ d.start_time + last_dose_time + d.repeat_interval * d.repeats,
+ d.repeat_interval,
+ )
+ if len(start_times) == 0:
+ continue
+ last_dose_time = start_times[-1]
+ dosing_events += [
+ (
+ (amount_conversion_factor / time_conversion_factor)
+ * (d.amount / d.duration),
+ time_conversion_factor * start_time,
+ time_conversion_factor * d.duration,
+ )
+ for start_time in start_times
+ ]
+ # if any dosing events are close to time_max,
+ # make them equal to time_max
+ if time_max is not None:
+ for i, (level, start, duration) in enumerate(dosing_events):
+ if abs(start - time_max) < 1e-6:
+ dosing_events[i] = (level, time_max, duration)
+ elif abs(start + duration - time_max) < 1e-6:
+ dosing_events[i] = (level, start, time_max - start)
+ protocols[_get_pacing_label(amount_var)] = get_protocol(dosing_events)
+
with lock:
- sim = myokit.Simulation(model)
+ sim = myokit.Simulation(model, protocol=protocols)
return sim
def get_myokit_simulator(self):
@@ -59,9 +147,7 @@ def get_myokit_simulator(self):
myokit_simulator = cache.get(key)
if myokit_simulator is None:
myokit_simulator = self.create_myokit_simulator()
- cache.set(
- key, myokit_simulator, timeout=None
- )
+ cache.set(key, myokit_simulator, timeout=None)
return myokit_simulator
def get_myokit_model(self):
@@ -70,9 +156,7 @@ def get_myokit_model(self):
myokit_model = cache.get(key)
if myokit_model is None:
myokit_model = self.create_myokit_model()
- cache.set(
- key, myokit_model, timeout=None
- )
+ cache.set(key, myokit_model, timeout=None)
return myokit_model
def is_variables_out_of_date(self):
@@ -82,9 +166,7 @@ def is_variables_out_of_date(self):
# TODO: is this sufficient, we are also updating on save
# so I think it should be ok....?
all_const_variables = self.variables.filter(constant=True)
- myokit_variable_count = sum(
- 1 for _ in model.variables(const=True, sort=True)
- )
+ myokit_variable_count = sum(1 for _ in model.variables(const=True, sort=True))
# check if variables need updating
return len(all_const_variables) != myokit_variable_count
@@ -93,36 +175,74 @@ def update_simulator(self):
cache.delete(self._get_myokit_simulator_cache_key())
def update_model(self):
- print('UPDATE MODEL')
+ logger.info("UPDATE MODEL")
# delete model and simulators from cache
cache.delete(self._get_myokit_simulator_cache_key())
cache.delete(self._get_myokit_model_cache_key())
# update the variables of the model
from pkpdapp.models import Variable
+
+ removed_variables = []
+ if self.is_library_model:
+ removed_variables += [
+ "PKCompartment.b_term",
+ "PKCompartment.c_term",
+ ]
+ if not getattr(self, "has_saturation", True):
+ removed_variables += ["PKCompartment.Km", "PKCompartment.CLmax"]
+ if not getattr(self, "has_effect", True):
+ removed_variables += [
+ "PKCompartment.Ce",
+ "PKCompartment.AUCe",
+ "PKCompartment.ke0",
+ "PKCompartment.Kpu",
+ "PKCompartment.Kp",
+ ]
+ if not getattr(self, "has_hill_coefficient", True):
+ removed_variables += ["PDCompartment.HC"]
+ # tlag now on per variable basis
+ removed_variables += ["PKCompartment.tlag"]
+ if not getattr(self, "has_bioavailability", True):
+ removed_variables += ["PKCompartment.F"]
+
model = self.get_myokit_model()
new_variables = [
Variable.get_variable(self, v)
for v in model.variables(const=True, sort=True)
- if v.is_literal()
+ if v.is_literal() and v.qname() not in removed_variables
]
+
# parameters could originally be outputs
for v in new_variables:
if not v.constant:
v.constant = True
v.save()
- for eqn in model.inits():
- print(eqn.lhs.var(), eqn.rhs.is_literal(), eqn.rhs)
new_states = [
- Variable.get_variable(self, eqn.lhs.var())
- for eqn in model.inits()
- if eqn.rhs.is_literal()
+ Variable.get_variable(self, v)
+ for v in model.variables(state=True, sort=True)
+ if v.qname() not in removed_variables
]
- print([s.qname for s in new_states])
new_outputs = [
Variable.get_variable(self, v)
- for v in self.get_myokit_model().variables(const=False, sort=True)
+ for v in model.variables(const=False, state=False, sort=True)
+ if v.qname() not in removed_variables
]
+ logger.debug("ALL NEW OUTPUTS")
+ for v in new_outputs:
+ if v.unit is not None:
+ logger.debug(
+ f"{v.qname} [{v.unit.symbol}], "
+ f"id = {v.id} constant = {v.constant}, "
+ f"state = {v.state}"
+ )
+ else:
+ logger.debug(
+ f"{v.qname}, id = {v.id} "
+ f"constant = {v.constant}, "
+ f"state = {v.state}"
+ )
+
for v in new_outputs:
# if output not in states set state false
# so only states with initial conditions as
@@ -137,88 +257,107 @@ def update_model(self):
v.save()
all_new_variables = new_variables + new_states + new_outputs
- print([s.qname for s in all_new_variables])
+ logger.debug("ALL NEW VARIABLES")
+ for v in all_new_variables:
+ if v.unit is not None:
+ logger.debug(
+ f"{v.qname} [{v.unit.symbol}], id = {v.id} "
+ f"constant = {v.constant}, state = {v.state}"
+ )
+ else:
+ logger.debug(
+ f"{v.qname}, id = {v.id} "
+ f"constant = {v.constant}, state = {v.state}"
+ )
+
+ # for library models: set new variables to defaults
+ if self.is_library_model and hasattr(self, "reset_params_to_defaults"):
+ project = self.get_project()
+ if project is not None:
+ species = project.species
+ compound_type = project.compound.compound_type
+ self.reset_params_to_defaults(species, compound_type, all_new_variables)
# delete all variables that are not in new
for variable in self.variables.all():
if variable not in all_new_variables:
- print('DELETING VARIABLE', variable.qname)
+ logger.debug(f"DELETING VARIABLE {variable.qname} (id = {variable.id})")
variable.delete()
+ else:
+ logger.debug(
+ f"RETAINING VARIABLE {variable.qname} (id = {variable.id}, value = {variable.default_value})" # noqa: E501
+ )
self.variables.set(all_new_variables)
def set_variables_from_inference(self, inference):
results_for_mle = inference.get_maximum_likelihood()
for result in results_for_mle:
- inference_var = (
- result.log_likelihood.outputs.first().variable
- )
+ inference_var = result.log_likelihood.outputs.first().variable
# noise variables won't have a model variable
if inference_var is not None:
- model_var = self.variables.filter(
- qname=inference_var.qname
- ).first()
+ model_var = self.variables.filter(qname=inference_var.qname).first()
else:
model_var = None
if model_var is not None:
model_var.default_value = result.value
- if model_var.lower_bound > model_var.default_value:
+ if (
+ model_var.lower_bound
+ and model_var.lower_bound > model_var.default_value
+ ):
model_var.lower_bound = model_var.default_value
- if model_var.upper_bound < model_var.default_value:
+ if (
+ model_var.upper_bound
+ and model_var.upper_bound < model_var.default_value
+ ):
model_var.upper_bound = model_var.default_value
model_var.save()
- @ staticmethod
+ @staticmethod
def _serialise_equation(equ):
writer = MathMLExpressionWriter()
writer.set_mode(presentation=True)
return writer.eq(equ)
- @ staticmethod
+ @staticmethod
def _serialise_variable(var):
return {
- 'name': var.name(),
- 'qname': var.qname(),
- 'unit': str(var.unit()),
- 'default_value': float(var.value()),
- 'lower_bound': 0.0,
- 'upper_bound': 2.0,
- 'scale': 'LN',
+ "name": var.name(),
+ "qname": var.qname(),
+ "unit": str(var.unit()),
+ "default_value": float(var.value()),
+ "lower_bound": 0.0,
+ "upper_bound": 2.0,
+ "scale": "LN",
}
- @ classmethod
+ @classmethod
def _serialise_component(cls, c):
states = [
- cls._serialise_variable(s)
- for s in c.variables(state=True, sort=True)
+ cls._serialise_variable(s) for s in c.variables(state=True, sort=True)
]
variables = [
- cls._serialise_variable(v)
- for v in c.variables(const=True, sort=True)
+ cls._serialise_variable(v) for v in c.variables(const=True, sort=True)
]
outputs = [
- cls._serialise_variable(o)
- for o in c.variables(const=False, sort=True)
+ cls._serialise_variable(o) for o in c.variables(const=False, sort=True)
]
equations = [
- cls._serialise_equation(e)
- for e in c.equations(bound=False, const=False)
+ cls._serialise_equation(e) for e in c.equations(bound=False, const=False)
]
return {
- 'name': c.name(),
- 'states': states,
- 'variables': variables,
- 'outputs': outputs,
- 'equations': equations,
+ "name": c.name(),
+ "states": states,
+ "variables": variables,
+ "outputs": outputs,
+ "equations": equations,
}
def states(self):
- """ states are dependent variables of the model to be solved """
+ """states are dependent variables of the model to be solved"""
model = self.get_myokit_model()
states = model.variables(state=True, sort=True)
- return [
- self._serialise_variable(s) for s in states
- ]
+ return [self._serialise_variable(s) for s in states]
def components(self):
"""
@@ -226,10 +365,7 @@ def components(self):
variables of the model to be solved
"""
model = self.get_myokit_model()
- return [
- self._serialise_component(c)
- for c in model.components(sort=True)
- ]
+ return [self._serialise_component(c) for c in model.components(sort=True)]
def outputs(self):
"""
@@ -238,9 +374,7 @@ def outputs(self):
"""
model = self.get_myokit_model()
outpts = model.variables(const=False, sort=True)
- return [
- self._serialise_variable(o) for o in outpts
- ]
+ return [self._serialise_variable(o) for o in outpts]
def myokit_variables(self):
"""
@@ -249,25 +383,30 @@ def myokit_variables(self):
"""
model = self.get_myokit_model()
variables = model.variables(const=True, sort=True)
- return [
- self._serialise_variable(v) for v in variables
- ]
+ return [self._serialise_variable(v) for v in variables]
def _convert_unit(self, variable, myokit_variable_sbml, value):
+ is_target = False
+ if self.is_library_model:
+ is_target = "CT1" in variable.qname or "AT1" in variable.qname
if variable.unit is None:
conversion_factor = 1.0
else:
- conversion_factor = myokit.Unit.conversion_factor(
- variable.unit.get_myokit_unit(),
- myokit_variable_sbml.unit()
- ).value()
+ project = self.get_project()
+ compound = None
+ if project is not None:
+ compound = project.compound
+ conversion_factor = variable.unit.convert_to(
+ myokit_variable_sbml.unit(), compound=compound, is_target=is_target
+ )
return conversion_factor * value
def _convert_unit_qname(self, qname, value, myokit_model):
variable = self.variables.get(qname=qname)
myokit_variable_sbml = myokit_model.get(qname)
- return self._convert_unit(variable, myokit_variable_sbml, value)
+ new_value = self._convert_unit(variable, myokit_variable_sbml, value)
+ return new_value
def _convert_bound_unit(self, binding, value, myokit_model):
myokit_variable_sbml = myokit_model.binding(binding)
@@ -278,8 +417,7 @@ def _convert_bound_unit(self, binding, value, myokit_model):
conversion_factor = 1.0
else:
conversion_factor = myokit.Unit.conversion_factor(
- variable.unit.get_myokit_unit(),
- myokit_variable_sbml.unit()
+ variable.unit.get_myokit_unit(), myokit_variable_sbml.unit()
).value()
return conversion_factor * value
@@ -294,29 +432,26 @@ def serialize_datalog(self, datalog, myokit_model):
conversion_factor = 1.0
else:
conversion_factor = myokit.Unit.conversion_factor(
- myokit_variable_sbml.unit(),
- variable.unit.get_myokit_unit()
+ myokit_variable_sbml.unit(), variable.unit.get_myokit_unit()
).value()
- result[variable.id] = (
- conversion_factor * np.frombuffer(v)
- ).tolist()
+ result[variable.id] = (conversion_factor * np.frombuffer(v)).tolist()
return result
def get_time_max(self):
return self.time_max
- def simulate(self, outputs=None, initial_conditions=None, variables=None):
+ def simulate(self, outputs=None, variables=None, time_max=None):
"""
Arguments
---------
outputs: list
list of output names to return
- initial_conditions: dict
- dict mapping state names to values for initial conditions
variables: dict
dict mapping variable names to values for model parameters
+ time_max: float
+ maximum time to simulate to
Returns
-------
@@ -325,58 +460,215 @@ def simulate(self, outputs=None, initial_conditions=None, variables=None):
mapping output names to arrays of values
"""
+ if time_max is None:
+ time_max = self.get_time_max()
+
if outputs is None:
- outputs = [
- o.qname
- for o in self.variables.filter(constant=False)
- ]
- if initial_conditions is None:
- initial_conditions = {
- s.qname: s.get_default_value()
- for s in self.variables.filter(state=True)
- }
+ outputs = []
+
+ default_variables = {
+ v.qname: v.get_default_value() for v in self.variables.filter(constant=True)
+ }
if variables is None:
+ variables = default_variables
+ else:
variables = {
- v.qname: v.get_default_value()
- for v in self.variables.filter(constant=True)
+ **default_variables,
+ **variables,
}
model = self.get_myokit_model()
- sim = self.get_myokit_simulator()
-
- # convert units for variables, initial_conditions
- # and time_max
- initial_conditions = {
- qname: self._convert_unit_qname(qname, value, model)
- for qname, value in initial_conditions.items()
- }
+ # Convert units
variables = {
qname: self._convert_unit_qname(qname, value, model)
for qname, value in variables.items()
}
-
- time_max = self._convert_bound_unit(
- 'time', self.get_time_max(), model
- )
-
- # override initial conditions
- default_state = sim.default_state()
- for i, state in enumerate(model.states()):
- if state.qname() in initial_conditions:
- default_state[i] = myokit.Number(
- initial_conditions[state.qname()])
- sim.set_default_state(default_state)
+ time_max = self._convert_bound_unit("time", time_max, model)
# Set constants in model
for var_name, var_value in variables.items():
- sim.set_constant(var_name, float(var_value))
+ model.get(var_name).set_rhs(float(var_value))
- # Reset simulation back to t=0, the state will be set to the default
- # state (set above)
- sim.reset()
+ # create simulator
+
+ # get tlag vars
+ override_tlag = {}
+ if isinstance(self, pkpdapp.models.CombinedModel):
+ for dv in self.derived_variables.all():
+ if dv.type == "TLG":
+ derived_param = dv.pk_variable.qname + "_tlag_ud"
+ if derived_param in variables:
+ override_tlag[dv.pk_variable.qname] = variables[derived_param]
+
+ sim = self.create_myokit_simulator(
+ override_tlag=override_tlag, model=model, time_max=time_max
+ )
+ # TODO: take these from simulation model
+ sim.set_tolerance(abs_tol=1e-06, rel_tol=1e-08)
# Simulate, logging only state variables given by `outputs`
- return self.serialize_datalog(
- sim.run(time_max, log=outputs), model
+ return self.serialize_datalog(sim.run(time_max, log=outputs), model)
+
+
+def set_administration(model, drug_amount, direct=True):
+ r"""
+ Sets the route of administration of the compound.
+
+ The compound is administered to the selected compartment either
+ directly or indirectly. If it is administered directly, a dose rate
+ variable is added to the drug amount's rate of change expression
+
+ .. math ::
+
+ \frac{\text{d}A}{\text{d}t} = \text{RHS} + r_d,
+
+ where :math:`A` is the drug amount in the selected compartment, RHS is
+ the rate of change of :math:`A` prior to adding the dose rate, and
+ :math:`r_d` is the dose rate.
+
+ The dose rate can be set by :meth:`set_dosing_regimen`.
+
+ If the route of administration is indirect, a dosing compartment
+ is added to the model, which is connected to the selected compartment.
+ The dose rate variable is then added to the rate of change expression
+ of the dose amount variable in the dosing compartment. The drug amount
+ in the dosing compartment flows at a linear absorption rate into the
+ selected compartment
+
+ .. math ::
+
+ \frac{\text{d}A_d}{\text{d}t} = -k_aA_d + r_d \\
+ \frac{\text{d}A}{\text{d}t} = \text{RHS} + k_aA_d,
+
+ where :math:`A_d` is the amount of drug in the dose compartment and
+ :math:`k_a` is the absorption rate.
+
+ Setting an indirect administration route changes the number of
+ parameters of the model, and resets the parameter names to their
+ defaults.
+
+ Parameters
+ ----------
+ compartment
+ Compartment to which doses are either directly or indirectly
+ administered.
+ amount_var
+ Drug amount variable in the compartment. By default the drug amount
+ variable is assumed to be 'drug_amount'.
+ direct
+ A boolean flag that indicates whether the dose is administered
+ directly or indirectly to the compartment.
+ """
+ if not drug_amount.is_state():
+ raise ValueError(
+ "The variable <" + str(drug_amount) + "> is not a state "
+ "variable, and can therefore not be dosed."
)
+
+ # If administration is indirect, add a dosing compartment and update
+ # the drug amount variable to the one in the dosing compartment
+ time_unit = _get_time_unit(model)
+ if not direct:
+ drug_amount = _add_dose_compartment(model, drug_amount, time_unit)
+
+ # Add dose rate variable to the right hand side of the drug amount
+ _add_dose_rate(drug_amount, time_unit)
+
+
+def get_protocol(events):
+ """
+
+ Parameters
+ ----------
+ events
+ list of (level, start, duration)
+ """
+ myokit_protocol = myokit.Protocol()
+ for e in events:
+ myokit_protocol.schedule(e[0], e[1], e[2])
+
+ return myokit_protocol
+
+
+def _get_pacing_label(variable):
+ return f'pace_{variable.qname().replace(".", "_")}'
+
+
+def _add_dose_rate(drug_amount, time_unit):
+ """
+ Adds a dose rate variable to the state variable, which is bound to the
+ dosing regimen.
+ """
+ # Register a dose rate variable to the compartment and bind it to
+ # pace, i.e. tell myokit that its value is set by the dosing regimen/
+ # myokit.Protocol
+ compartment = drug_amount.parent()
+ dose_rate = compartment.add_variable_allow_renaming(str("dose_rate"))
+ dose_rate.set_binding(_get_pacing_label(drug_amount))
+
+ # Set initial value to 0 and unit to unit of drug amount over unit of
+ # time
+ dose_rate.set_rhs(0)
+ drug_amount_unit = drug_amount.unit()
+ if drug_amount_unit is not None and time_unit is not None:
+ dose_rate.set_unit(drug_amount.unit() / time_unit)
+
+ # Add the dose rate to the rhs of the drug amount variable
+ rhs = drug_amount.rhs()
+ drug_amount.set_rhs(myokit.Plus(rhs, myokit.Name(dose_rate)))
+
+
+def _get_time_unit(model):
+ """
+ Gets the model's time unit.
+ """
+ # Get bound variables
+ bound_variables = [var for var in model.variables(bound=True)]
+
+ # Get the variable that is bound to time
+ # (only one can exist in myokit.Model)
+ for var in bound_variables:
+ if var._binding == "time":
+ return var.unit()
+
+
+def _add_dose_compartment(model, drug_amount, time_unit):
+ """
+ Adds a dose compartment to the model with a linear absorption rate to
+ the connected compartment.
+ """
+ # Add a dose compartment to the model
+ dose_comp = model.add_component_allow_renaming("dose")
+
+ # Create a state variable for the drug amount in the dose compartment
+ dose_drug_amount = dose_comp.add_variable("drug_amount")
+ dose_drug_amount.set_rhs(0)
+ dose_drug_amount.set_unit(drug_amount.unit())
+ dose_drug_amount.promote()
+
+ # Create an absorption rate variable
+ absorption_rate = dose_comp.add_variable("absorption_rate")
+ absorption_rate.set_rhs(1)
+ absorption_rate.set_unit(1 / time_unit)
+
+ # Add outflow expression to dose compartment
+ dose_drug_amount.set_rhs(
+ myokit.Multiply(
+ myokit.PrefixMinus(myokit.Name(absorption_rate)),
+ myokit.Name(dose_drug_amount),
+ )
+ )
+
+ # Add inflow expression to connected compartment
+ rhs = drug_amount.rhs()
+ drug_amount.set_rhs(
+ myokit.Plus(
+ rhs,
+ myokit.Multiply(
+ myokit.Name(absorption_rate), myokit.Name(dose_drug_amount)
+ ),
+ )
+ )
+
+ return dose_drug_amount
diff --git a/pkpdapp/pkpdapp/models/pharmacokinetic_model.py b/pkpdapp/pkpdapp/models/pharmacokinetic_model.py
index 0b042aba..10d97295 100644
--- a/pkpdapp/pkpdapp/models/pharmacokinetic_model.py
+++ b/pkpdapp/pkpdapp/models/pharmacokinetic_model.py
@@ -4,17 +4,11 @@
# copyright notice and full license details.
#
-from django.db import models
from django.urls import reverse
from pkpdapp.models import (
- MyokitModelMixin,
MechanisticModel,
- Protocol,
- Project, StoredModel,
- PharmacodynamicModel,
+ StoredModel,
)
-import myokit
-from .myokit_model_mixin import lock
class PharmacokineticModel(MechanisticModel, StoredModel):
@@ -61,546 +55,3 @@ def create_stored_model(self):
# no need to store variables as they will be stored with the dosed pk
# model
return stored_model
-
-
-class DosedPharmacokineticModel(MyokitModelMixin, StoredModel):
- """
- PK model plus dosing and protocol information
- """
- DEFAULT_PK_MODEL = 1
- name = models.CharField(max_length=100, help_text='name of the model')
- project = models.ForeignKey(
- Project, on_delete=models.CASCADE,
- related_name='pk_models',
- blank=True, null=True,
- help_text='Project that "owns" this model'
- )
- pk_model = models.ForeignKey(
- PharmacokineticModel,
- default=DEFAULT_PK_MODEL,
- on_delete=models.PROTECT,
- blank=True, null=True,
- help_text='model'
- )
- pd_model = models.ForeignKey(
- PharmacodynamicModel, on_delete=models.PROTECT,
- related_name='pkpd_models',
- blank=True, null=True,
- help_text='PD part of model'
- )
- dose_compartment = models.CharField(
- max_length=100,
- default='central',
- blank=True, null=True,
- help_text='compartment name to be dosed'
- )
- protocol = models.ForeignKey(
- Protocol,
- on_delete=models.PROTECT,
- related_name='dosed_pk_models',
- blank=True, null=True,
- help_text='dosing protocol'
- )
- time_max = models.FloatField(
- default=30,
- help_text=(
- 'suggested time to simulate after the last dose (in the time '
- 'units specified by the mmt model)'
- )
- )
- __original_pk_model = None
- __original_protocol = None
- __original_dose_compartment = None
- __original_pd_model = None
-
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.__original_pk_model = self.pk_model
- self.__original_protocol = self.protocol
- self.__original_dose_compartment = self.dose_compartment
- self.__original_pd_model = self.pd_model
-
- def get_project(self):
- return self.project
-
- def get_time_max(self):
- time_max = self.time_max
- if self.pd_model:
- time_max = max(time_max, self.pd_model.time_max)
- return time_max
-
- def get_mmt(self):
- myokit_model = self.get_myokit_model()
- return myokit_model.code()
-
- def create_stored_model(self, new_pd_model=None):
- stored_model_kwargs = {
- 'name': self.name,
- 'project': self.project,
- 'pk_model': self.pk_model,
- 'pd_model': new_pd_model,
- 'dose_compartment': self.dose_compartment,
- 'protocol': (
- self.protocol.create_stored_protocol()
- if self.protocol is not None else None
- ),
- 'time_max': self.time_max,
- 'read_only': True,
- }
- stored_model = DosedPharmacokineticModel.objects.create(
- **stored_model_kwargs)
-
- new_variables = {}
- for variable in self.variables.all():
- new_variable = variable.create_stored_variable(stored_model)
- new_variables[new_variable.qname] = new_variable
-
- for mapping in self.mappings.all():
- mapping.create_stored_mapping(stored_model, new_variables)
-
- return stored_model
-
- def create_myokit_model(self):
- if self.pk_model is None:
- pk_model = myokit.Model()
- else:
- pk_model = self.pk_model.create_myokit_model()
- if self.pd_model is None:
- pd_model = myokit.Model()
- else:
- pd_model = self.pd_model.create_myokit_model()
- have_both_models = (
- self.pk_model is not None and
- self.pd_model is not None
- )
- have_no_models = (
- self.pk_model is None and
- self.pd_model is None
- )
-
- # use pk model as the base and import the pd model
- pkpd_model = pk_model
-
- # default model is one with just time
- if have_no_models:
- pkpd_model = myokit.parse_model('''
- [[model]]
- [myokit]
- time = 0 [s] bind time
- in [s]
- ''')
-
- # remove time binding if
- if have_both_models:
- time_var = pd_model.binding('time')
- time_var.set_binding(None)
-
- pd_components = list(pd_model.components())
- pd_names = [
- c.name().replace('myokit', 'PD') for c in pd_components
- ]
-
- if pd_components:
- pkpd_model.import_component(
- pd_components,
- new_name=pd_names,
- )
-
- # remove imported time var
- if have_both_models:
- imported_pd_component = pkpd_model.get('PD')
- imported_time = imported_pd_component.get('time')
- imported_pd_component.remove_variable(imported_time)
-
- # do mappings
- for mapping in self.mappings.all():
- pd_var = pkpd_model.get(
- mapping.pd_variable.qname.replace('myokit', 'PD')
- )
- pk_var = pkpd_model.get(
- mapping.pk_variable.qname
- )
-
- helpers = None
-
- # if pd unit is in mol, then use the compound listed in the
- # protocol to convert to grams
- if pd_var.unit().exponents()[-1] != 0:
- compound = self.protocol.compound
- if compound is None:
- raise RuntimeError(
- 'PD unit is in mol, but no compound listed for '
- 'protocol to convert to grams'
- )
- if compound.molecular_mass is None:
- raise RuntimeError(
- 'PD unit is in mol, but no molecular mass '
- 'is listed for compound '
- '{}'.format(compound.name)
- )
- if compound.molecular_mass_unit is None:
- raise RuntimeError(
- 'PD unit is in mol, but no molecular mass unit '
- 'is listed for compound '
- '{}'.format(compound.name)
- )
-
- mol_mass = myokit.Quantity(
- compound.molecular_mass,
- compound.molecular_mass_unit.get_myokit_unit()
- )
- helpers = [mol_mass]
-
- pk_to_pd_conversion_multiplier = myokit.Unit.conversion_factor(
- pk_var.unit(), pd_var.unit(), helpers=helpers
- )
- pd_to_pk_conversion_multiplier = myokit.Unit.conversion_factor(
- pd_var.unit(), pk_var.unit(), helpers=helpers
- )
-
- # pd var will be an intermediary variable driven by pk_var
- if pd_var.is_state():
- # add pd_var rate equation to pk_var
- pk_var.set_rhs(
- myokit.Plus(
- pk_var.rhs(),
- myokit.Multiply(
- myokit.Number(pd_to_pk_conversion_multiplier),
- pd_var.rhs()
- )
- )
- )
-
- # demote pd_var to an intermediary variable
- pd_var.demote()
-
- pd_var.set_rhs(
- myokit.Multiply(
- myokit.Number(pk_to_pd_conversion_multiplier),
- myokit.Name(pk_var)
- )
- )
-
- if self.protocol:
- compartment = self.dose_compartment
- amount_var = None
- for v in pk_model.variables(state=True):
- if compartment + '.' in v.qname():
- amount_var = v
-
- direct = self.protocol.dose_type == Protocol.DoseType.DIRECT
-
- if amount_var is not None:
- set_administration(
- pk_model, compartment, direct=direct,
- amount_var=amount_var.name()
- )
-
- pkpd_model.validate()
- return pkpd_model
-
- def create_myokit_simulator(self):
- model = self.get_myokit_model()
- with lock:
- sim = myokit.Simulation(model)
- if self.protocol:
- compartment = self.dose_compartment
- amount_var = None
- for v in model.variables(state=True):
- if compartment + '.' in v.qname():
- amount_var = v
-
- time_var = model.binding('time')
-
- if amount_var.unit() is None:
- amount_conversion_factor = 1.0
- else:
- amount_conversion_factor = \
- myokit.Unit.conversion_factor(
- self.protocol.amount_unit.get_myokit_unit(),
- amount_var.unit(),
- ).value()
-
- if time_var.unit() is None:
- time_conversion_factor = 1.0
- else:
- time_conversion_factor = \
- myokit.Unit.conversion_factor(
- self.protocol.time_unit.get_myokit_unit(),
- time_var.unit(),
- ).value()
-
- dosing_events = [
- (
- (amount_conversion_factor /
- time_conversion_factor) *
- (d.amount / d.duration),
- time_conversion_factor * d.start_time,
- time_conversion_factor * d.duration
- )
- for d in self.protocol.doses.all()
- ]
-
- set_dosing_events(sim, dosing_events)
-
- return sim
-
- def get_absolute_url(self):
- return reverse('dosed_pk_model-detail', kwargs={'pk': self.pk})
-
- def save(self, force_insert=False, force_update=False, *args, **kwargs):
- created = not self.pk
-
- super().save(force_insert, force_update, *args, **kwargs)
-
- # don't update a stored model
- if self.read_only:
- return
-
- print('saving model')
- if (
- created or
- self.protocol != self.__original_protocol or
- self.pk_model != self.__original_pk_model or
- self.pd_model != self.__original_pd_model or
- self.dose_compartment != self.__original_dose_compartment
- ):
- print('update model')
- self.update_model()
-
- self.__original_pd_model = self.pd_model
- self.__original_pk_model = self.pk_model
- self.__original_protocol = self.protocol
- self.__original_dose_compartment = self.dose_compartment
-
-
-class PkpdMapping(StoredModel):
- pkpd_model = models.ForeignKey(
- DosedPharmacokineticModel, on_delete=models.CASCADE,
- related_name='mappings',
- help_text='PKPD model that this mapping is for'
- )
- pk_variable = models.ForeignKey(
- 'Variable', on_delete=models.CASCADE,
- related_name='pk_mappings',
- help_text='variable in PK part of model'
- )
- pd_variable = models.ForeignKey(
- 'Variable', on_delete=models.CASCADE,
- related_name='pd_mappings',
- help_text='variable in PD part of model'
- )
-
- __original_pk_variable = None
- __original_pd_variable = None
-
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.__original_pk_variable = self.pk_variable
- self.__original_pd_variable = self.pd_variable
-
- def save(self, force_insert=False, force_update=False, *args, **kwargs):
- created = not self.pk
-
- super().save(force_insert, force_update, *args, **kwargs)
-
- # don't update a stored model
- if self.read_only:
- return
-
- if (
- created or
- self.pk_variable != self.__original_pk_variable or
- self.pd_variable != self.__original_pd_variable
- ):
- self.pkpd_model.update_model()
-
- self.__original_pk_variable = self.pk_variable
- self.__original_pd_variable = self.pd_variable
-
- def delete(self):
- pkpd_model = self.pkpd_model
- super().delete()
- pkpd_model.update_model()
-
- def create_stored_mapping(self, new_pkpd_model, new_variables):
- new_pk_variable = new_variables[self.pk_variable.qname]
- new_pd_variable = new_variables[self.pd_variable.qname]
- stored_kwargs = {
- 'pkpd_model': new_pkpd_model,
- 'pk_variable': new_pk_variable,
- 'pd_variable': new_pd_variable,
- 'read_only': True,
- }
- stored_mapping = PkpdMapping.objects.create(
- **stored_kwargs)
- return stored_mapping
-
-
-def _add_dose_compartment(model, drug_amount, time_unit):
- """
- Adds a dose compartment to the model with a linear absorption rate to
- the connected compartment.
- """
- # Add a dose compartment to the model
- dose_comp = model.add_component_allow_renaming('dose')
-
- # Create a state variable for the drug amount in the dose compartment
- dose_drug_amount = dose_comp.add_variable('drug_amount')
- dose_drug_amount.set_rhs(0)
- dose_drug_amount.set_unit(drug_amount.unit())
- dose_drug_amount.promote()
-
- # Create an absorption rate variable
- absorption_rate = dose_comp.add_variable('absorption_rate')
- absorption_rate.set_rhs(1)
- absorption_rate.set_unit(1 / time_unit)
-
- # Add outflow expression to dose compartment
- dose_drug_amount.set_rhs(
- myokit.Multiply(myokit.PrefixMinus(myokit.Name(absorption_rate)),
- myokit.Name(dose_drug_amount)))
-
- # Add inflow expression to connected compartment
- rhs = drug_amount.rhs()
- drug_amount.set_rhs(
- myokit.Plus(
- rhs,
- myokit.Multiply(myokit.Name(absorption_rate),
- myokit.Name(dose_drug_amount))))
-
- return dose_drug_amount
-
-
-def _add_dose_rate(compartment, drug_amount, time_unit):
- """
- Adds a dose rate variable to the state variable, which is bound to the
- dosing regimen.
- """
- # Register a dose rate variable to the compartment and bind it to
- # pace, i.e. tell myokit that its value is set by the dosing regimen/
- # myokit.Protocol
- compartment = drug_amount.parent()
- dose_rate = compartment.add_variable_allow_renaming(str('dose_rate'))
- dose_rate.set_binding('pace')
-
- # Set initial value to 0 and unit to unit of drug amount over unit of
- # time
- dose_rate.set_rhs(0)
- drug_amount_unit = drug_amount.unit()
- if drug_amount_unit is not None and time_unit is not None:
- dose_rate.set_unit(drug_amount.unit() / time_unit)
-
- # Add the dose rate to the rhs of the drug amount variable
- rhs = drug_amount.rhs()
- drug_amount.set_rhs(myokit.Plus(rhs, myokit.Name(dose_rate)))
-
-
-def _get_time_unit(model):
- """
- Gets the model's time unit.
- """
- # Get bound variables
- bound_variables = [var for var in model.variables(bound=True)]
-
- # Get the variable that is bound to time
- # (only one can exist in myokit.Model)
- for var in bound_variables:
- if var._binding == 'time':
- return var.unit()
-
-
-def set_administration(model,
- compartment,
- amount_var='drug_amount',
- direct=True):
- r"""
- Sets the route of administration of the compound.
-
- The compound is administered to the selected compartment either
- directly or indirectly. If it is administered directly, a dose rate
- variable is added to the drug amount's rate of change expression
-
- .. math ::
-
- \frac{\text{d}A}{\text{d}t} = \text{RHS} + r_d,
-
- where :math:`A` is the drug amount in the selected compartment, RHS is
- the rate of change of :math:`A` prior to adding the dose rate, and
- :math:`r_d` is the dose rate.
-
- The dose rate can be set by :meth:`set_dosing_regimen`.
-
- If the route of administration is indirect, a dosing compartment
- is added to the model, which is connected to the selected compartment.
- The dose rate variable is then added to the rate of change expression
- of the dose amount variable in the dosing compartment. The drug amount
- in the dosing compartment flows at a linear absorption rate into the
- selected compartment
-
- .. math ::
-
- \frac{\text{d}A_d}{\text{d}t} = -k_aA_d + r_d \\
- \frac{\text{d}A}{\text{d}t} = \text{RHS} + k_aA_d,
-
- where :math:`A_d` is the amount of drug in the dose compartment and
- :math:`k_a` is the absorption rate.
-
- Setting an indirect administration route changes the number of
- parameters of the model, and resets the parameter names to their
- defaults.
-
- Parameters
- ----------
- compartment
- Compartment to which doses are either directly or indirectly
- administered.
- amount_var
- Drug amount variable in the compartment. By default the drug amount
- variable is assumed to be 'drug_amount'.
- direct
- A boolean flag that indicates whether the dose is administered
- directly or indirectly to the compartment.
- """
- # Check inputs
- if not model.has_component(compartment):
- raise ValueError('The model does not have a compartment named <' +
- str(compartment) + '>.')
- comp = model.get(compartment, class_filter=myokit.Component)
-
- if not comp.has_variable(amount_var):
- raise ValueError('The drug amount variable <' + str(amount_var) +
- '> could not '
- 'be found in the compartment.')
-
- drug_amount = comp.get(amount_var)
- if not drug_amount.is_state():
- raise ValueError('The variable <' + str(drug_amount) +
- '> is not a state '
- 'variable, and can therefore not be dosed.')
-
- # If administration is indirect, add a dosing compartment and update
- # the drug amount variable to the one in the dosing compartment
- time_unit = _get_time_unit(model)
- if not direct:
- drug_amount = _add_dose_compartment(model, drug_amount, time_unit)
-
- # Add dose rate variable to the right hand side of the drug amount
- _add_dose_rate(compartment, drug_amount, time_unit)
-
-
-def set_dosing_events(simulator, events):
- """
-
- Parameters
- ----------
- events
- list of (level, start, duration)
- """
- myokit_protocol = myokit.Protocol()
- for e in events:
- myokit_protocol.schedule(
- e[0], e[1], e[2]
- )
-
- simulator.set_protocol(myokit_protocol)
diff --git a/pkpdapp/pkpdapp/models/project.py b/pkpdapp/pkpdapp/models/project.py
index 9b6de825..6b901b2d 100644
--- a/pkpdapp/pkpdapp/models/project.py
+++ b/pkpdapp/pkpdapp/models/project.py
@@ -29,6 +29,23 @@ class Project(models.Model):
'Compound', on_delete=models.CASCADE,
)
+ created = models.DateTimeField(auto_now_add=True)
+
+ # species is a enum field
+ class Species(models.TextChoices):
+ MOUSE = 'M', 'Mouse'
+ RAT = 'R', 'Rat'
+ HUMAN = 'H', 'Human'
+ MONKEY = 'K', 'Monkey'
+ OTHER = 'O', 'Other'
+
+ species = models.CharField(
+ max_length=1,
+ choices=Species.choices,
+ default=Species.OTHER,
+ help_text='subject species'
+ )
+
def get_absolute_url(self):
return reverse('project-detail', kwargs={'pk': self.pk})
diff --git a/pkpdapp/pkpdapp/models/simulation.py b/pkpdapp/pkpdapp/models/simulation.py
new file mode 100644
index 00000000..57aaf400
--- /dev/null
+++ b/pkpdapp/pkpdapp/models/simulation.py
@@ -0,0 +1,174 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+from django.db import models
+from django.core.validators import MinValueValidator
+
+
+# class to store options for simulation and plotting of results
+# a project can have multiple simulations
+class Simulation(models.Model):
+ """
+ A simulation, containing multiple :model:`pkpdapp.Dataset`,
+ :model:`pkpdapp.PkpdModel` and users.
+ """
+
+ name = models.CharField(max_length=100, help_text="name of the simulation")
+
+ project = models.ForeignKey(
+ "Project",
+ on_delete=models.CASCADE,
+ related_name="simulations",
+ )
+
+ nrows = models.IntegerField(default=1, help_text="number of subplot rows")
+
+ ncols = models.IntegerField(default=1, help_text="number of subplot columns")
+
+ time_max = models.FloatField(
+ default=30,
+ validators=[MinValueValidator(0)],
+ help_text="maximum time for the simulation",
+ )
+
+ time_max_unit = models.ForeignKey(
+ "Unit",
+ on_delete=models.PROTECT,
+ related_name="simulation_time_max",
+ help_text="unit for maximum time",
+ )
+
+ abs_tolerance = models.FloatField(
+ default=1e-6,
+ validators=[MinValueValidator(0)],
+ help_text="absolute tolerance for the simulation",
+ )
+
+ rel_tolerance = models.FloatField(
+ default=1e-6,
+ validators=[MinValueValidator(0)],
+ help_text="relative tolerance for the simulation",
+ )
+
+ def get_project(self):
+ return self.project
+
+
+# model for a simulation plot
+
+
+class SimulationPlot(models.Model):
+ simulation = models.ForeignKey(
+ "Simulation", on_delete=models.CASCADE, related_name="plots"
+ )
+ index = models.IntegerField(help_text="index of the plot in the simulation")
+
+ class ScaleOptions(models.TextChoices):
+ LINEAR = "lin", "Linear"
+ LOG2 = "lg2", "Log2"
+ LOG10 = "lg10", "Log10"
+ LN = "ln", "Ln"
+
+ x_scale = models.CharField(
+ max_length=4,
+ choices=ScaleOptions.choices,
+ default=ScaleOptions.LINEAR,
+ help_text="scale for x axis",
+ )
+
+ y_scale = models.CharField(
+ max_length=4,
+ choices=ScaleOptions.choices,
+ default=ScaleOptions.LINEAR,
+ help_text="scale for y axis",
+ )
+
+ y2_scale = models.CharField(
+ max_length=4,
+ choices=ScaleOptions.choices,
+ default=ScaleOptions.LINEAR,
+ help_text="scale for rhs y axis",
+ )
+
+ x_unit = models.ForeignKey(
+ "Unit",
+ on_delete=models.PROTECT,
+ related_name="simulation_plots",
+ help_text="unit for x axis",
+ )
+
+ y_unit = models.ForeignKey(
+ "Unit",
+ on_delete=models.PROTECT,
+ related_name="simulation_plots_y",
+ null=True,
+ blank=True,
+ help_text="unit for y axis",
+ )
+
+ y_unit2 = models.ForeignKey(
+ "Unit",
+ on_delete=models.PROTECT,
+ related_name="simulation_plots_y2",
+ null=True,
+ blank=True,
+ help_text="unit for rhs y axis",
+ )
+
+ min = models.FloatField(
+ null=True, blank=True, help_text="lower bound for the y axis"
+ )
+
+ max = models.FloatField(
+ null=True, blank=True, help_text="upper bound for the y axis"
+ )
+
+ min2 = models.FloatField(
+ null=True, blank=True, help_text="lower bound for the rhs y axis"
+ )
+
+ max2 = models.FloatField(
+ null=True, blank=True, help_text="upper bound for the rhs y axis"
+ )
+
+ def get_project(self):
+ return self.simulation.project
+
+
+# model for mapping a variable to a y axis
+class SimulationYAxis(models.Model):
+ plot = models.ForeignKey(
+ "SimulationPlot", on_delete=models.CASCADE, related_name="y_axes"
+ )
+
+ variable = models.ForeignKey(
+ "Variable", on_delete=models.CASCADE, related_name="y_axes"
+ )
+
+ # if true, the variable is plotted on the right y axis
+ right = models.BooleanField(
+ default=False, help_text="True if the variable is plotted on the right y axis"
+ )
+
+
+# model for a slider on the plot. the sliders alter the value of a variable
+# in the model
+class SimulationSlider(models.Model):
+ simulation = models.ForeignKey(
+ "Simulation", on_delete=models.CASCADE, related_name="sliders"
+ )
+
+ variable = models.ForeignKey(
+ "Variable", on_delete=models.CASCADE, related_name="sliders"
+ )
+
+
+class SimulationCxLine(models.Model):
+ plot = models.ForeignKey(
+ "SimulationPlot", on_delete=models.CASCADE, related_name="cx_lines"
+ )
+
+ value = models.FloatField(help_text="value of the line")
diff --git a/pkpdapp/pkpdapp/models/units.py b/pkpdapp/pkpdapp/models/units.py
index 475fedbb..b89e40c1 100644
--- a/pkpdapp/pkpdapp/models/units.py
+++ b/pkpdapp/pkpdapp/models/units.py
@@ -5,8 +5,24 @@
#
from django.db import models
+from django.db.models import Q
import myokit
+# https://stackoverflow.com/questions/14711203/perform-a-logical-exclusive-or-on-a-django-q-object
+
+
+class QQ:
+ def __xor__(self, other):
+ not_self = self.clone()
+ not_other = other.clone()
+ not_self.negate()
+ not_other.negate()
+
+ x = self & not_other
+ y = not_self & other
+
+ return x | y
+
class Unit(models.Model):
"""
@@ -24,30 +40,24 @@ class Unit(models.Model):
use the multiplier log10(2.54).
"""
- symbol = models.CharField(
- max_length=50, help_text='symbol for unit display'
- )
- g = models.FloatField(default=0, help_text='grams exponent')
- m = models.FloatField(default=0, help_text='meters exponent')
- s = models.FloatField(default=0, help_text='seconds exponent')
- A = models.FloatField(default=0, help_text='ampere exponent')
- K = models.FloatField(default=0, help_text='kelvin exponent')
- cd = models.FloatField(default=0, help_text='candela exponent')
- mol = models.FloatField(default=0, help_text='mole exponent')
- multiplier = models.FloatField(
- default=0,
- help_text='multiplier in powers of 10'
- )
+ symbol = models.CharField(max_length=50, help_text="symbol for unit display")
+ g = models.FloatField(default=0, help_text="grams exponent")
+ m = models.FloatField(default=0, help_text="meters exponent")
+ s = models.FloatField(default=0, help_text="seconds exponent")
+ A = models.FloatField(default=0, help_text="ampere exponent")
+ K = models.FloatField(default=0, help_text="kelvin exponent")
+ cd = models.FloatField(default=0, help_text="candela exponent")
+ mol = models.FloatField(default=0, help_text="mole exponent")
+ multiplier = models.FloatField(default=0, help_text="multiplier in powers of 10")
constraints = [
- models.UniqueConstraint(fields=['symbol'], name='unique unit symbol')
+ models.UniqueConstraint(fields=["symbol"], name="unique unit symbol")
]
def get_myokit_unit(self):
return myokit.Unit(
- exponents=[self.g, self.m, self.s,
- self.A, self.K, self.cd, self.mol],
- multiplier=self.multiplier
+ exponents=[self.g, self.m, self.s, self.A, self.K, self.cd, self.mol],
+ multiplier=self.multiplier,
)
def get_project(self):
@@ -107,51 +117,188 @@ def get_unit_from_variable(v):
K=exponents[4],
cd=exponents[5],
mol=exponents[6],
- multiplier=multiplier
+ multiplier=multiplier,
)
- def convert_to(self, unit):
+ def is_convertible_to(self, unit, compound=None):
+ try:
+ self.convert_to(unit, compound=compound)
+ except myokit.IncompatibleUnitError:
+ return False
+ return True
+
+ def convert_to(self, unit, compound=None, is_target=False):
+ if unit is None:
+ return 1.0
+ if isinstance(unit, myokit.Unit):
+ myokit_unit = unit
+ else:
+ myokit_unit = unit.get_myokit_unit()
+ helpers = []
+ if compound is not None:
+ if is_target:
+ helpers = [
+ f"{compound.target_molecular_mass} [{compound.target_molecular_mass_unit.symbol}]" # noqa: E501
+ ]
+ else:
+ helpers = [
+ f"{compound.molecular_mass} [{compound.molecular_mass_unit.symbol}]" # noqa: E501
+ ]
return myokit.Unit.conversion_factor(
self.get_myokit_unit(),
- unit.get_myokit_unit()
+ myokit_unit,
+ helpers=helpers,
+ ).value()
+
+ @staticmethod
+ def convert_between_myokit_units(
+ from_unit, to_unit, compound=None, is_target=False
+ ):
+ helpers = []
+ if compound is not None:
+ if is_target:
+ helpers = [
+ f"{compound.target_molecular_mass} [{compound.target_molecular_mass_unit.symbol}]" # noqa: E501
+ ]
+ else:
+ helpers = [
+ f"{compound.molecular_mass} [{compound.molecular_mass_unit.symbol}]" # noqa: E501
+ ]
+ return myokit.Unit.conversion_factor(
+ from_unit,
+ to_unit,
+ helpers=helpers,
).value()
- def get_compatible_units(self):
+ def get_compatible_units(self, compound=None):
close_enough = 1e-9
- return Unit.objects.filter(
- g__range=(
- self.g - close_enough,
- self.g + close_enough,
- ),
- m__range=(
- self.m - close_enough,
- self.m + close_enough,
- ),
- s__range=(
- self.s - close_enough,
- self.s + close_enough,
- ),
- A__range=(
- self.A - close_enough,
- self.A + close_enough,
- ),
- K__range=(
- self.K - close_enough,
- self.K + close_enough,
- ),
- cd__range=(
- self.cd - close_enough,
- self.cd + close_enough,
- ),
- mol__range=(
- self.mol - close_enough,
- self.mol + close_enough,
- ),
- )
+ if compound is not None:
+ g_is_same = Q(
+ g__range=(
+ self.g - close_enough,
+ self.g + close_enough,
+ )
+ )
+ mol_is_same = Q(
+ mol__range=(
+ self.mol - close_enough,
+ self.mol + close_enough,
+ )
+ )
+ mol_added_to_g = Q(
+ g__range=(
+ self.g + self.mol - close_enough,
+ self.g + self.mol + close_enough,
+ )
+ )
+ g_added_to_mol = Q(
+ mol__range=(
+ self.mol + self.g - close_enough,
+ self.mol + self.g + close_enough,
+ )
+ )
+ no_g = Q(g=0)
+ self_has_g = self.g != 0
+ self_no_g_or_mol = self.g == 0 and self.mol == 0
+ no_mol = Q(mol=0)
+ self_has_mol = self.mol != 0
+ filter = mol_is_same & g_is_same
+ mol_and_g_add_to_zero = Q(mol=1, g=-1) | Q(mol=-1, g=1)
+
+ # take into account that '' is convertible to 'mol/g' or 'g/mol'
+ if self_no_g_or_mol:
+ filter |= mol_and_g_add_to_zero
+ if self_has_mol:
+ filter |= mol_added_to_g & no_mol
+ if self_has_g:
+ filter |= g_added_to_mol & no_g
+ compat_units = Unit.objects.filter(
+ filter,
+ Q(
+ m__range=(
+ self.m - close_enough,
+ self.m + close_enough,
+ )
+ ),
+ Q(
+ s__range=(
+ self.s - close_enough,
+ self.s + close_enough,
+ )
+ ),
+ Q(
+ A__range=(
+ self.A - close_enough,
+ self.A + close_enough,
+ )
+ ),
+ Q(
+ K__range=(
+ self.K - close_enough,
+ self.K + close_enough,
+ )
+ ),
+ Q(
+ cd__range=(
+ self.cd - close_enough,
+ self.cd + close_enough,
+ )
+ ),
+ )
+ return compat_units
+ else:
+ return Unit.objects.filter(
+ Q(
+ g__range=(
+ self.g - close_enough,
+ self.g + close_enough,
+ )
+ ),
+ Q(
+ mol__range=(
+ self.mol - close_enough,
+ self.mol + close_enough,
+ )
+ ),
+ Q(
+ m__range=(
+ self.m - close_enough,
+ self.m + close_enough,
+ )
+ ),
+ Q(
+ s__range=(
+ self.s - close_enough,
+ self.s + close_enough,
+ )
+ ),
+ Q(
+ A__range=(
+ self.A - close_enough,
+ self.A + close_enough,
+ )
+ ),
+ Q(
+ K__range=(
+ self.K - close_enough,
+ self.K + close_enough,
+ )
+ ),
+ Q(
+ cd__range=(
+ self.cd - close_enough,
+ self.cd + close_enough,
+ )
+ ),
+ )
def is_time_unit(self):
return (
- self.s == 1 and
- self.g == 0 and self.m == 0 and self.A == 0 and
- self.K == 0 and self.cd == 0 and self.mol == 0
+ self.s == 1
+ and self.g == 0
+ and self.m == 0
+ and self.A == 0
+ and self.K == 0
+ and self.cd == 0
+ and self.mol == 0
)
diff --git a/pkpdapp/pkpdapp/models/variable.py b/pkpdapp/pkpdapp/models/variable.py
index 1e7ce5da..2f006f28 100644
--- a/pkpdapp/pkpdapp/models/variable.py
+++ b/pkpdapp/pkpdapp/models/variable.py
@@ -3,16 +3,16 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
-from django.db import models
-from django.db.models import Q
-import myokit
-import numpy as np
from pkpdapp.models import (
- Unit, DosedPharmacokineticModel,
+ Unit, CombinedModel,
PharmacokineticModel, PharmacodynamicModel,
- StoredModel
+ StoredModel, Protocol,
)
+import numpy as np
+from django.db.models import Q
+from django.db import models
+import logging
+logger = logging.getLogger(__name__)
class Variable(StoredModel):
@@ -21,11 +21,11 @@ class Variable(StoredModel):
"""
is_public = models.BooleanField(default=False)
lower_bound = models.FloatField(
- default=1e-6,
+ blank=True, null=True,
help_text='lowest possible value for this variable'
)
upper_bound = models.FloatField(
- default=2,
+ blank=True, null=True,
help_text='largest possible value for this variable'
)
default_value = models.FloatField(
@@ -42,6 +42,10 @@ class Variable(StoredModel):
)
name = models.CharField(max_length=100, help_text='name of the variable')
+ description = models.TextField(
+ blank=True, null=True,
+ help_text='description of the variable'
+ )
binding = models.CharField(
max_length=100,
help_text='myokit binding of the variable (e.g. time)',
@@ -60,6 +64,15 @@ class Variable(StoredModel):
'in the stored sbml)'
)
)
+
+ unit_symbol = models.CharField(
+ max_length=20, blank=True, null=True,
+ help_text=(
+ 'if unit is None then this is the unit of this '
+ 'variable as a string'
+ )
+ )
+
constant = models.BooleanField(
default=True,
help_text=(
@@ -113,13 +126,21 @@ class Variable(StoredModel):
help_text='pharmacokinetic model'
)
dosed_pk_model = models.ForeignKey(
- DosedPharmacokineticModel,
+ CombinedModel,
blank=True, null=True,
on_delete=models.CASCADE,
related_name='variables',
help_text='dosed pharmacokinetic model'
)
+ protocol = models.ForeignKey(
+ Protocol,
+ on_delete=models.SET_NULL,
+ related_name='variables',
+ blank=True, null=True,
+ help_text='dosing protocol'
+ )
+
class Meta:
constraints = [
models.CheckConstraint(
@@ -181,7 +202,8 @@ def get_variable_pk(model, myokit_variable):
pk_model=model,
)
found_variable = Variable._find_close_variable(
- myokit_variable, variables
+ myokit_variable, variables,
+ compound=model.get_project().compound
)
if found_variable is not None:
return variables[0]
@@ -196,9 +218,10 @@ def get_variable_pk(model, myokit_variable):
name=myokit_variable.name(),
qname=qname,
default_value=value,
+ description=myokit_variable.meta.get('desc', ''),
binding=myokit_variable.binding(),
- lower_bound=0.1 * value,
- upper_bound=10.0 * value,
+ lower_bound=None,
+ upper_bound=None,
constant=myokit_variable.is_constant(),
state=state,
unit=Unit.get_unit_from_variable(myokit_variable),
@@ -208,18 +231,31 @@ def get_variable_pk(model, myokit_variable):
)
@staticmethod
- def _find_close_variable(myokit_variable, variables):
+ def _find_close_variable(myokit_variable, variables, compound=None):
+ logger.debug('Looking for variable: {} [{}]'.format(
+ myokit_variable, myokit_variable.unit()
+ ))
found = None
for i, v in enumerate(variables):
+ # todo check if units are compatible...
+ if v.unit is None:
+ logger.debug('\tchecking variable: {}'.format(v.qname))
+ else:
+ logger.debug('\tchecking variable: {} [{}]'.format(
+ v.qname, v.unit.symbol
+ ))
if v.unit is None:
if myokit_variable.unit() is None:
found = i
- elif myokit.Unit.close(
- v.unit.get_myokit_unit(),
- myokit_variable.unit()
+ elif (
+ myokit_variable.unit() is not None and
+ v.unit.is_convertible_to(
+ myokit_variable.unit(), compound=compound
+ )
):
found = i
if found is not None:
+ logger.debug('Found variable: {}'.format(variables[found]))
return variables[found]
return None
@@ -232,8 +268,13 @@ def get_variable_pd(model, myokit_variable):
qname=myokit_variable.qname(),
pd_model=model,
)
+ project = model.get_project()
+ compound = None
+ if project is not None:
+ compound = project.compound
found_variable = Variable._find_close_variable(
- myokit_variable, variables
+ myokit_variable, variables,
+ compound=compound
)
if found_variable is not None:
return variables[0]
@@ -247,11 +288,12 @@ def get_variable_pd(model, myokit_variable):
return Variable.objects.create(
name=myokit_variable.name(),
qname=qname,
+ description=myokit_variable.meta.get('desc', ''),
constant=myokit_variable.is_constant(),
binding=myokit_variable.binding(),
default_value=value,
- lower_bound=0.1 * value,
- upper_bound=10.0 * value,
+ lower_bound=None,
+ upper_bound=None,
state=state,
unit=Unit.get_unit_from_variable(myokit_variable),
pd_model=model,
@@ -268,12 +310,29 @@ def get_variable_dosed_pk(model, myokit_variable):
qname=myokit_variable.qname(),
dosed_pk_model=model,
)
+ compound = None
+ project = model.get_project()
+ if project is not None:
+ compound = project.compound
found_variable = Variable._find_close_variable(
- myokit_variable, variables
+ myokit_variable, variables,
+ compound=compound
)
if found_variable is not None:
return variables[0]
else:
+ # lower and upper bounds for library models
+ lower = None
+ upper = None
+ if model.is_library_model:
+ if myokit_variable.qname() == 'PDCompartment.Imax':
+ upper = 1.0
+ elif myokit_variable.qname() == 'PKCompartment.F':
+ upper = 1.0
+ elif myokit_variable.qname() == 'PDCompartment.FE':
+ upper = 1.0
+ elif myokit_variable.qname() == 'PDCompartment.Emax':
+ lower = 1.0
state = myokit_variable.is_state()
if state:
value = myokit_variable.state_value()
@@ -283,11 +342,12 @@ def get_variable_dosed_pk(model, myokit_variable):
return Variable.objects.create(
name=myokit_variable.name(),
qname=qname,
+ description=myokit_variable.meta.get('desc', ''),
constant=myokit_variable.is_constant(),
default_value=value,
binding=myokit_variable.binding(),
- lower_bound=0.1 * value,
- upper_bound=10.0 * value,
+ lower_bound=lower,
+ upper_bound=upper,
state=state,
unit=Unit.get_unit_from_variable(myokit_variable),
dosed_pk_model=model,
@@ -299,7 +359,7 @@ def get_variable_dosed_pk(model, myokit_variable):
def get_variable(model, myokit_variable):
if isinstance(model, PharmacokineticModel):
return Variable.get_variable_pk(model, myokit_variable)
- elif isinstance(model, DosedPharmacokineticModel):
+ elif isinstance(model, CombinedModel):
return Variable.get_variable_dosed_pk(model, myokit_variable)
elif isinstance(model, PharmacodynamicModel):
return Variable.get_variable_pd(model, myokit_variable)
@@ -313,6 +373,7 @@ def create_stored_variable(self, stored_model):
stored_variable_kwargs = {
'name': self.name,
'qname': self.qname,
+ 'description': self.description,
'unit': self.unit,
'is_public': self.is_public,
'binding': self.binding,
@@ -324,11 +385,16 @@ def create_stored_variable(self, stored_model):
'display': self.display,
'color': self.color,
'state': self.state,
+ 'unit_symbol': self.unit_symbol,
'constant': self.constant,
'read_only': True,
+ 'protocol': (
+ self.protocol.create_stored_protocol()
+ if self.protocol is not None else None
+ ),
}
if isinstance(stored_model, PharmacodynamicModel):
stored_variable_kwargs['pd_model'] = stored_model
- elif isinstance(stored_model, DosedPharmacokineticModel):
+ elif isinstance(stored_model, CombinedModel):
stored_variable_kwargs['dosed_pk_model'] = stored_model
return Variable.objects.create(**stored_variable_kwargs)
diff --git a/pkpdapp/pkpdapp/settings.py b/pkpdapp/pkpdapp/settings.py
index 7c473bff..d5e276d9 100644
--- a/pkpdapp/pkpdapp/settings.py
+++ b/pkpdapp/pkpdapp/settings.py
@@ -27,6 +27,46 @@
# setup automatic pk column for models
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': False,
+ 'handlers': {
+ 'console': {
+ 'class': 'logging.StreamHandler',
+ 'level': 'DEBUG',
+ 'formatter': 'simple'
+ },
+ 'file': {
+ 'class': 'logging.handlers.RotatingFileHandler',
+ 'filename': os.path.join(BASE_DIR, 'logfile.log'),
+ 'maxBytes': 1024 * 1024 * 5, # 5 MB
+ 'backupCount': 5,
+ 'level': 'DEBUG',
+ 'formatter': 'verbose'
+ }
+ },
+ 'loggers': {
+ 'django': {
+ 'handlers': ['console', 'file'],
+ 'level': 'INFO',
+ 'propagate': False,
+ },
+ 'pkpdapp': {
+ 'handlers': ['console', 'file'],
+ 'level': 'DEBUG',
+ 'propagate': False,
+ },
+ },
+ 'formatters': {
+ 'simple': {
+ 'format': '%(levelname)s %(message)s'
+ },
+ 'verbose': {
+ 'format': '%(asctime)s %(levelname)s %(module)s %(process)d %(thread)d %(message)s' # noqa: E501
+ }
+ }
+}
+
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
@@ -37,6 +77,10 @@
ALLOWED_HOSTS = [os.environ.get('HOST_NAME', 'localhost'), '127.0.0.1']
+if DEBUG:
+ ALLOWED_HOSTS.append('testserver')
+
+
# Application definition - to use any of those you need to run `manage.py
# migrate` first
@@ -57,6 +101,7 @@
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
+ 'drf_spectacular',
# internal apps
'pkpdapp',
@@ -135,7 +180,15 @@
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
- ]
+ ],
+ 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
+}
+
+SPECTACULAR_SETTINGS = {
+ 'TITLE': 'PKPDApp API',
+ 'DESCRIPTION': 'The API for the PKPDApp',
+ 'VERSION': '1.0.0',
+ 'SERVE_INCLUDE_SCHEMA': False,
}
@@ -189,6 +242,10 @@
CORS_ALLOWED_ORIGINS = [
"http://127.0.0.1:3000",
+ "http://127.0.0.1:3001",
+ "http://127.0.0.1:3002",
+ "http://127.0.0.1:3003",
+ "http://127.0.0.1:3004",
"http://localhost:3000",
"http://" + os.environ.get('HOST_NAME', 'bamad.herokuapp.com')
]
diff --git a/pkpdapp/pkpdapp/tests/__init__.py b/pkpdapp/pkpdapp/tests/__init__.py
index d0505307..c062f5b8 100644
--- a/pkpdapp/pkpdapp/tests/__init__.py
+++ b/pkpdapp/pkpdapp/tests/__init__.py
@@ -3,3 +3,12 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+# flake8: noqa f401
+from .utils import create_pd_inference
+import os
+import django
+
+
+django.setup()
+dummy = ""
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pkpdapp.settings')
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_biomarker.py b/pkpdapp/pkpdapp/tests/test_models/test_biomarker.py
deleted file mode 100644
index d576bef1..00000000
--- a/pkpdapp/pkpdapp/tests/test_models/test_biomarker.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
-# is released under the BSD 3-clause license. See accompanying LICENSE.md for
-# copyright notice and full license details.
-#
-
-from django.test import TestCase
-from pkpdapp.models import (
- Dataset, Biomarker, BiomarkerType,
- Unit,
-)
-from django.utils import timezone
-
-
-class TestBiomarkerModel(TestCase):
- def test_biomarker_creation(self):
- u = Unit.objects.get(symbol='mg')
- time_unit = Unit.objects.get(symbol='h')
- d = Dataset.objects.create(
- name='my_cool_dataset',
- datetime=timezone.now(),
- description='description for my cool biomarker',
- )
-
- b = BiomarkerType.objects.create(
- name='my type',
- stored_unit=u,
- display_unit=u,
- stored_time_unit=time_unit,
- display_time_unit=time_unit,
- dataset=d,
- )
- b = Biomarker.objects.create(
- time=0.0,
- value=1.0,
- subject_id=1,
- biomarker_type=b
- )
- self.assertTrue(isinstance(b, Biomarker))
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_biomarker_type.py b/pkpdapp/pkpdapp/tests/test_models/test_biomarker_type.py
index 85759339..e02f4b10 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_biomarker_type.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_biomarker_type.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
from django.test import TestCase
from pkpdapp.models import (
Dataset,
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_dataset.py b/pkpdapp/pkpdapp/tests/test_models/test_dataset.py
index a0228fe8..db9a7825 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_dataset.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_dataset.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
from django.test import TestCase
from pkpdapp.models import (
Dataset,
@@ -61,10 +62,3 @@ def test_dataset_deletion(self):
BiomarkerType.objects.get(id=self.biomarker_type.id)
with self.assertRaises(Biomarker.DoesNotExist):
Biomarker.objects.get(id=self.biomarkers[0].id)
-
- def test_migration(self):
- dataset = Dataset.objects.get(name='demo_pk_data')
- protocols = set([
- subject.protocol for subject in dataset.subjects.all()
- ])
- self.assertEqual(len(protocols), 39)
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_inference.py b/pkpdapp/pkpdapp/tests/test_models/test_inference.py
index 6e69abd2..59abcc67 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_inference.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_inference.py
@@ -3,58 +3,20 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
from django.test import TestCase
from pkpdapp.models import (
- Inference, PharmacodynamicModel, LogLikelihood,
- Project, BiomarkerType, Algorithm,
InferenceResult, InferenceMixin,
InferenceFunctionResult
)
import numpy as np
+from pkpdapp.tests import create_pd_inference
class TestInferenceSerializer(TestCase):
def setUp(self):
- project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- self.model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='PSO'),
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=self.model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
+ self.inference, log_likelihood, _, _, \
+ self.model, _ = create_pd_inference(
+ sampling=False)
# set uniform prior on first param, except amounts
self.param = log_likelihood.parameters.first()
@@ -63,7 +25,7 @@ def setUp(self):
def test_run_inference(self):
self.inference.run_inference(test=True)
self.assertEqual(self.inference.name, 'bob')
- self.assertEqual(self.inference.log_likelihoods.count(), 10)
+ self.assertEqual(self.inference.log_likelihoods.count(), 8)
def test_set_variables_from_inference(self):
inference_mixin = InferenceMixin(self.inference)
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_inference_mixin.py b/pkpdapp/pkpdapp/tests/test_models/test_inference_mixin.py
index f440455e..a7d0f370 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_inference_mixin.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_inference_mixin.py
@@ -7,144 +7,20 @@
from django.test import TestCase
import numpy as np
from pkpdapp.models import (
- Inference, PharmacodynamicModel,
- PharmacokineticModel, DosedPharmacokineticModel,
- Protocol, Unit,
LogLikelihood,
- Project, BiomarkerType,
- InferenceMixin, Algorithm, InferenceChain, InferenceResult,
+ InferenceMixin, InferenceChain, InferenceResult,
InferenceFunctionResult, LogLikelihoodParameter,
)
+from pkpdapp.tests import create_pd_inference
from django.core.cache import cache
-class TestInferenceMixinPkModel(TestCase):
- def setUp(self):
- # ensure we've got nothing in the cache
- cache._cache.flush_all()
-
- project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='DemoDrug Concentration',
- dataset__name='usecase0'
- )
- biomarker_type.display_unit = Unit.objects.get(
- symbol='g/L'
- )
- biomarker_type.save()
- pk = PharmacokineticModel.objects\
- .get(name='three_compartment_pk_model')
-
- protocol = Protocol.objects.get(
- subjects__dataset=biomarker_type.dataset,
- subjects__id_in_dataset=1,
- )
-
- model = DosedPharmacokineticModel.objects.create(
- name='my wonderful model',
- pk_model=pk,
- dose_compartment='central',
- protocol=protocol,
- )
-
- self.inference = Inference.objects.create(
- name='bob',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='Haario-Bardenet'),
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'central.drug_c_concentration',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
-
- # set uniform prior on everything, except amounts
- for param in log_likelihood.parameters.all():
- if '_amount' in param.name:
- param.set_fixed(0)
- else:
- param.set_uniform_prior(0.0, 0.1)
-
- # 'run' inference to create copies of models
- self.inference.run_inference(test=True)
-
- # create mixin object
- self.inference_mixin = InferenceMixin(self.inference)
-
- def test_objective_functions(self):
- # Test log-posterior
- log_posterior = self.inference_mixin._pints_log_posterior
- log_posterior(
- log_posterior.to_search(
- [0.0065, 0.0063, 0.05, 0.0135, 0.0022, 0.0089, 0.004]
- )
- )
-
-
class TestInferenceMixinSingleOutputSampling(TestCase):
def setUp(self):
# ensure we've got nothing in the cache
cache._cache.flush_all()
- project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='Haario-Bardenet'),
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
+ self.inference, log_likelihood, _, _, _, _ = create_pd_inference(True)
# set uniform prior on everything, except amounts
for param in log_likelihood.parameters.all():
@@ -169,7 +45,7 @@ def test_inference_runs(self):
self.inference_mixin.run_inference()
chains = self.inference_mixin.inference.chains.all()
- self.assertEqual(len(chains), 4)
+ self.assertEqual(len(chains), 3)
for chain in chains:
priors = self.inference_mixin._priors
fun_res = chain.inference_function_results
@@ -195,6 +71,7 @@ def test_inference_runs(self):
p_vals_all = list(map(list, zip(*p_vals_all)))
fn = self.inference_mixin._pints_log_posterior
for idx, params in enumerate(p_vals_all):
+ print(f'comparing {fn(fn.to_search(params))} to {f_vals[idx]}')
self.assertTrue(
abs(fn(fn.to_search(params)) - f_vals[idx]) < 0.01
)
@@ -207,52 +84,12 @@ def test_inference_runs(self):
self.assertTrue(inference.number_of_function_evals > 0)
-class TestInferenceMixinSingleOutputOptimisation(TestCase):
+class TestInferenceMixinSingleOutput(TestCase):
def setUp(self):
# ensure we've got nothing in the cache
cache._cache.flush_all()
- self.project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=self.project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='XNES'),
- number_of_chains=3,
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
- self.outputs = outputs
+ self.inference, log_likelihood, _, _, _, _ = create_pd_inference()
# set uniform prior on everything, except amounts
for param in log_likelihood.parameters.all():
@@ -365,106 +202,13 @@ def test_inference_can_be_restarted(self):
self.assertTrue(np.array_equal(iterations, expected))
-class TestInferenceMixinFakeData(TestCase):
- def setUp(self):
- # ensure we've got nothing in the cache
- cache._cache.flush_all()
- project = Project.objects.get(
- name='demo',
- )
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='Haario-Bardenet'),
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = None
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
-
- # set uniform prior on everything, except amounts
- for param in log_likelihood.parameters.all():
- param.set_uniform_prior(0.0, 2.0)
-
- # 'run' inference to create copies of models
- self.inference.run_inference(test=True)
-
- def test_inference_fails(self):
- with self.assertRaisesRegex(
- RuntimeError,
- "must have at least one observed random variable"
- ):
- InferenceMixin(self.inference)
-
-
class TestInferenceMixinSingleOutputOptimisationPopulation(TestCase):
def setUp(self):
# ensure we've got nothing in the cache
cache._cache.flush_all()
- self.project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=self.project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='XNES'),
- number_of_chains=3,
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
- self.outputs = outputs
+ self.inference, log_likelihood, biomarker_type, \
+ _, _, _ = create_pd_inference()
# set uniform prior on everything, except
# we'll do a population prior on the first one
@@ -516,47 +260,8 @@ def setUp(self):
# ensure we've got nothing in the cache
cache._cache.flush_all()
- self.project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=self.project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='XNES'),
- number_of_chains=3,
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
- self.outputs = outputs
+ self.inference, log_likelihood, biomarker_type, \
+ covariate_biomarker_type, _, _ = create_pd_inference()
# set uniform prior on everything, except
# we'll do a population prior on the first one
@@ -564,11 +269,7 @@ def setUp(self):
if i == 0:
# first param is sampled from a normal distribution with a mean
# derived from subject body weight
- body_weight_biomarker_type = BiomarkerType.objects.get(
- name='Body weight',
- dataset__name='lxf_control_growth'
- )
- param.child.biomarker_type = body_weight_biomarker_type
+ param.child.biomarker_type = covariate_biomarker_type
param.child.time_independent_data = True
param.child.form = LogLikelihood.Form.NORMAL
param.child.save()
@@ -582,14 +283,14 @@ def setUp(self):
mean.form = LogLikelihood.Form.EQUATION
mean.description = '1.0 if arg0 < 20 else 2.0'
- mean.biomarker_type = body_weight_biomarker_type
+ mean.biomarker_type = covariate_biomarker_type
mean.time_independent_data = True
mean.save()
body_weight = LogLikelihood.objects.create(
name='Body weight',
inference=self.inference,
form=LogLikelihood.Form.FIXED,
- biomarker_type=body_weight_biomarker_type,
+ biomarker_type=covariate_biomarker_type,
time_independent_data=True,
)
LogLikelihoodParameter.objects.create(
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_loglikelihood.py b/pkpdapp/pkpdapp/tests/test_models/test_loglikelihood.py
index 412931a6..db0e4992 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_loglikelihood.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_loglikelihood.py
@@ -5,306 +5,54 @@
#
from django.test import TestCase
-
from pkpdapp.models import (
- Algorithm,
- BiomarkerType,
- DosedPharmacokineticModel,
- Inference,
LogLikelihood,
LogLikelihoodParameter,
- PharmacodynamicModel,
- PharmacokineticModel,
- Project,
- Protocol,
)
-
-
-class TestInferenceMixinPkModel(TestCase):
- def setUp(self):
- project = Project.objects.get(
- name='demo',
- )
- self.biomarker_type = BiomarkerType.objects.get(
- name='DemoDrug Concentration',
- dataset__name='usecase0'
- )
- pk = PharmacokineticModel.objects.get(
- name='three_compartment_pk_model'
- )
- protocol = Protocol.objects.get(
- subjects__dataset=self.biomarker_type.dataset,
- subjects__id_in_dataset=1,
- )
- self.model = DosedPharmacokineticModel.objects.create(
- name='test model',
- pk_model=pk,
- dose_compartment='central',
- protocol=protocol,
- )
- self.inference = Inference.objects.create(
- name='test',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='Haario-Bardenet'),
- )
-
- def test_create_parameters(self):
- log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- biomarker_type=self.biomarker_type,
- form=LogLikelihood.Form.MODEL
- )
- self.assertEqual(log_likelihood.parameters.count(), 10)
- self.assertEqual(
- log_likelihood.parameters.filter(name='central.size').count(),
- 1
- )
- self.assertEqual(log_likelihood.outputs.count(), 8)
-
- def test_add_output_model(self):
- log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- biomarker_type=self.biomarker_type,
- form=LogLikelihood.Form.MODEL
- )
-
- output_model = LogLikelihood.objects.create(
- inference=self.inference,
- form=LogLikelihood.Form.NORMAL
- )
-
- # add the output_model
- mean_param = output_model.parameters.get(parent_index=0)
- mean_param.child = log_likelihood
- possible_outputs = self.model.variables.filter(
- constant=False
- )
- mean_param.variable = possible_outputs[0]
- mean_param.save()
-
- self.assertEqual(
- output_model.children.filter(id=log_likelihood.id).count(), 1
- )
-
- def test_create_pymc3_model(self):
- log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'central.drug_c_concentration',
- 'peripheral_1.drug_p1_concentration',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = self.biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- output.parent.delete()
-
- # add a prior on the first param
- first_param = log_likelihood.parameters.first()
- prior_name = first_param.name
- first_param.child.form = LogLikelihood.Form.NORMAL
- first_param.child.save()
-
- model = outputs[0].create_pymc3_model(outputs[1])
-
- # check everything is in there
- model[prior_name]
- for name in output_names:
- model[name]
-
- model.logp({prior_name: 0.3})
-
- # check we can run predictive posteriors
- model.fastfn([
- model[log_likelihood.name + outputs[0].name]
- ])
-
- def test_equations(self):
- # create model N(2 * 1.0, 1.0) using an equation
- normal = LogLikelihood.objects.create(
- inference=self.inference,
- name='normal',
- form=LogLikelihood.Form.NORMAL
- )
- mean, sigma = normal.get_noise_log_likelihoods()
- mean.name = 'double it'
- mean.form = LogLikelihood.Form.EQUATION
- mean.description = '2 * arg0'
- mean.save()
-
- fixed = LogLikelihood.objects.create(
- inference=self.inference,
- name='untransformed mean',
- value=1.0,
- form=LogLikelihood.Form.FIXED,
- )
- LogLikelihoodParameter.objects.create(
- parent=mean,
- child=fixed,
- parent_index=0,
- name='x'
- )
-
- sigma.value = 1.0
- sigma.save()
-
- model = normal.create_pymc3_model()
-
- # check everything is in there
- for name in ['normal']:
- model[name]
-
- # equation will shift max likelihood point from 1.0 => 2.0
- self.assertLess(
- model.logp({'normal': 1.0}),
- model.logp({'normal': 2.0})
- )
-
- def test_population_model(self):
- log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'central.drug_c_concentration',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = self.biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- output.parent.delete()
- values, times, subjects = outputs[0].get_data()
- n_subjects = len(set(subjects))
-
- # first param a new rv is drawn for each subject, set length
- first_param = log_likelihood.parameters.first()
- first_param.length = n_subjects
- first_param.save()
- first_param.child.form = LogLikelihood.Form.NORMAL
- first_param.child.biomarker_type = self.biomarker_type
- first_param.child.save()
-
- model = outputs[0].create_pymc3_model()
-
- model.logp({first_param.name: [0.3] * n_subjects})
+from pkpdapp.tests import create_pd_inference
class TestInferenceMixinPdModel(TestCase):
def setUp(self):
- project = Project.objects.get(
- name='demo',
- )
- self.biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
-
- self.model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
-
- self.inference = Inference.objects.create(
- name='test',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='Haario-Bardenet'),
- )
+ self.inference, self.log_likelihood, self.biomarker_type, \
+ self.covariate_biomarker_type, self.model, \
+ _ = create_pd_inference(
+ sampling=True)
def test_create_pymc3_model(self):
- log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume'
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = self.biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- output.parent.delete()
# add a prior on the first param
- first_param = log_likelihood.parameters.first()
+ first_param = self.log_likelihood.parameters.first()
prior_name = first_param.child.name
first_param.child.form = LogLikelihood.Form.NORMAL
first_param.child.save()
- model = outputs[0].create_pymc3_model()
+ output = self.log_likelihood.parents.first()
+ model = output.create_pymc3_model()
# check everything is in there
model[prior_name]
- for name in output_names:
- model[name]
-
+ model[output.name]
model.logp({prior_name: 0.3})
# check we can run predictive posteriors
model.fastfn([
- model[log_likelihood.name + outputs[0].name]
+ model[self.log_likelihood.name + output.name]
])
def test_population_model_with_covariate(self):
- log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- form=LogLikelihood.Form.MODEL
- )
+ output = self.log_likelihood.parents.first()
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume'
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = self.biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- output.parent.delete()
- values, times, subjects = outputs[0].get_data()
+ values, times, subjects = output.get_data()
n_subjects = len(set(subjects))
print('n_subjects', n_subjects)
# first param is sampled from a normal distribution with a mean
# derived from subject body weight
- first_param = log_likelihood.parameters.first()
- body_weight_biomarker_type = BiomarkerType.objects.get(
- name='Body weight',
- dataset__name='lxf_control_growth'
- )
+ first_param = self.log_likelihood.parameters.first()
first_param.length = n_subjects
first_param.save()
- first_param.child.biomarker_type = body_weight_biomarker_type
+ first_param.child.biomarker_type = self.covariate_biomarker_type
first_param.child.time_independent_data = True
first_param.child.form = LogLikelihood.Form.NORMAL
first_param.child.save()
@@ -315,14 +63,14 @@ def test_population_model_with_covariate(self):
mean.form = LogLikelihood.Form.EQUATION
mean.description = '1.0 if arg0 < 20 else 2.0'
- mean.biomarker_type = body_weight_biomarker_type
+ mean.biomarker_type = self.covariate_biomarker_type
mean.time_independent_data = True
mean.save()
body_weight = LogLikelihood.objects.create(
name='Body weight',
inference=self.inference,
form=LogLikelihood.Form.FIXED,
- biomarker_type=body_weight_biomarker_type,
+ biomarker_type=self.covariate_biomarker_type,
time_independent_data=True,
)
body_weight_values, _, subjects = body_weight.get_data()
@@ -336,7 +84,7 @@ def test_population_model_with_covariate(self):
sigma.value = 0.01
sigma.save()
- model = outputs[0].create_pymc3_model()
+ model = output.create_pymc3_model()
model.logp({first_param.child.name: [0.3] * n_subjects})
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_mechanistic_model.py b/pkpdapp/pkpdapp/tests/test_models/test_mechanistic_model.py
index 6ddeaa69..38e93670 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_mechanistic_model.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_mechanistic_model.py
@@ -3,12 +3,14 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
from django.test import TestCase
from pkpdapp.models import (
- PharmacodynamicModel, Protocol, PharmacokineticModel,
- Compound, DosedPharmacokineticModel,
- Dose, Unit, Variable,
+ PharmacodynamicModel,
+ Protocol,
+ PharmacokineticModel,
+ CombinedModel,
+ Dose,
+ Unit,
)
import myokit
from django.core.exceptions import ValidationError
@@ -23,213 +25,97 @@ def setUp(self):
def test_model_bad_mmt(self):
with self.assertRaises(myokit.ParseError):
PharmacodynamicModel.objects.create(
- name='my_cool_model',
- description='description for my cool model',
- mmt='this is not sbml'
+ name="my_cool_model",
+ description="description for my cool model",
+ mmt="this is not sbml",
)
def test_model_clean(self):
m = PharmacodynamicModel(
- name='my_cool_model',
- description='description for my cool model',
- mmt='this is not xml'
+ name="my_cool_model",
+ description="description for my cool model",
+ mmt="this is not xml",
)
with self.assertRaises(ValidationError):
m.clean()
def test_model_creation(self):
m = PharmacodynamicModel.objects.create(
- name='my_cool_model',
- description='description for my cool model',
+ name="my_cool_model",
+ description="description for my cool model",
)
self.assertTrue(isinstance(m, PharmacodynamicModel))
def test_myokit_model(self):
m = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
+ name="tumour_growth_gompertz",
)
model = m.get_myokit_model()
model_variables = [v.name() for v in model.variables()]
- test_model_variables = [
- 'tumour_volume', 'lambda_0', 'lambda_1',
- 'kappa', 'drug_concentration', 'time'
- ]
- self.assertCountEqual(model_variables, test_model_variables)
-
- def test_store_model(self):
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- stored_model = model.create_stored_model()
- self.assertTrue(isinstance(stored_model, PharmacodynamicModel))
- self.assertTrue(stored_model.read_only)
- self.assertEqual(len(stored_model.variables.all()), 6)
-
- def test_update_model(self):
- m = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- m.save()
- model_variables = m.variables.values_list('name', flat=True)
- test_model_variables = [
- 'tumour_volume', 'time',
- 'lambda_0', 'lambda_1',
- 'kappa', 'drug_concentration'
- ]
+ test_model_variables = ["TS0", "TSmax", "beta", "Growth", "TS", "t"]
self.assertCountEqual(model_variables, test_model_variables)
- def test_component_serialisation(self):
- m = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- components = m.components()
- self.assertEqual(len(components), 1)
- self.assertIn('name', components[0])
- self.assertIn('states', components[0])
- self.assertIn('variables', components[0])
- self.assertIn('outputs', components[0])
- self.assertIn('equations', components[0])
-
- def test_simulate(self):
- m = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
-
- variables = [v['qname'] for v in m.myokit_variables()]
- test_model_variables = [
- 'myokit.lambda_0', 'myokit.lambda_1',
- 'myokit.kappa', 'myokit.drug_concentration'
- ]
- self.assertCountEqual(variables, test_model_variables)
-
- states = [s['qname'] for s in m.states()]
- test_model_states = ['myokit.tumour_volume']
- self.assertCountEqual(states, test_model_states)
-
- outpts = [o['qname'] for o in m.outputs()]
- test_model_outputs = ['myokit.tumour_volume', 'myokit.time']
- self.assertCountEqual(outpts, test_model_outputs)
-
- outputs = outpts
- initial_conditions = {s: 1.1 for s in test_model_states}
- variables = {v: 0.5 for v in test_model_variables}
- result = m.simulate(outputs, initial_conditions, variables)
- test_model_output_ids = [
- Variable.objects.get(qname=qname, pd_model=m).id
- for qname in test_model_outputs
- ]
- self.assertEqual(result[test_model_output_ids[0]][0], 1.1)
- self.assertEqual(result[test_model_output_ids[1]][0], 0.0)
-
-
-class TestPharmokineticModel(TestCase):
- def setUp(self):
- cache.clear()
-
- def test_model_creation(self):
- one_pk = PharmacokineticModel.objects\
- .get(name='one_compartment_pk_model')
-
- newl_pk = PharmacokineticModel.objects\
- .create(
- name='one_compartment_pk_model_v2',
- mmt=one_pk.mmt
- )
- self.assertTrue(isinstance(newl_pk, PharmacokineticModel))
- self.assertGreater(len(newl_pk.variables.all()), 0)
-
class TestDosedPharmokineticModel(TestCase):
def setUp(self):
cache.clear()
-
- def test_model_creation(self):
- pk = PharmacokineticModel.objects\
- .get(name='one_compartment_pk_model')
-
- c = Compound.objects.create(
- name='test_dosed_pk_model',
- description='placebo',
- )
-
- p = Protocol.objects.create(
- name='my_cool_protocol',
- compound=c,
- amount_unit=Unit.objects.get(symbol='mg'),
- time_unit=Unit.objects.get(symbol='h'),
+ self.pk = PharmacokineticModel.objects.get(
+ name="one_compartment_clinical",
)
- m = DosedPharmacokineticModel.objects.create(
- pk_model=pk,
- dose_compartment='central',
- protocol=p,
+ self.model = CombinedModel.objects.create(
+ pk_model=self.pk,
)
- self.assertTrue(isinstance(m, DosedPharmacokineticModel))
- def test_store_model(self):
- pk = PharmacokineticModel.objects.get(
- name='one_compartment_pk_model',
- )
-
- p = Protocol.objects.create(
- amount_unit=Unit.objects.get(symbol='mg'),
- time_unit=Unit.objects.get(symbol='h'),
- name='my_cool_protocol',
+ self.p = Protocol.objects.create(
+ amount_unit=Unit.objects.get(symbol="pmol"),
+ time_unit=Unit.objects.get(symbol="h"),
+ name="my_cool_protocol",
dose_type=Protocol.DoseType.INDIRECT,
)
- model = DosedPharmacokineticModel.objects.create(
- pk_model=pk,
- dose_compartment='central',
- protocol=p,
- )
- stored_model = model.create_stored_model()
- self.assertTrue(isinstance(stored_model, DosedPharmacokineticModel))
- self.assertTrue(stored_model.read_only)
- self.assertEqual(len(stored_model.variables.all()), 10)
- self.assertEqual(stored_model.protocol.name, 'my_cool_protocol')
- self.assertNotEqual(stored_model.protocol.id, p.id)
+ v = self.model.variables.get(qname="PKCompartment.A1")
+ v.protocol = self.p
+ v.save()
- def test_myokit_model(self):
- pk = PharmacokineticModel.objects.get(
- name='one_compartment_pk_model',
+ def test_store_model(self):
+ stored_model = self.model.create_stored_model()
+ self.assertTrue(isinstance(stored_model, CombinedModel))
+ self.assertTrue(stored_model.read_only)
+ self.assertEqual(
+ len(stored_model.variables.all()), len(self.model.variables.all())
)
+ v = stored_model.variables.get(qname="PKCompartment.A1")
+ self.assertEqual(v.protocol.name, "my_cool_protocol")
+ self.assertNotEqual(v.protocol.id, self.p.id)
- p = Protocol.objects.create(
- amount_unit=Unit.objects.get(symbol='mg'),
- time_unit=Unit.objects.get(symbol='h'),
- name='my_cool_protocol',
- dose_type=Protocol.DoseType.INDIRECT,
- )
+ def test_reset_to_default(self):
+ v = self.model.variables.get(qname="PKCompartment.CL")
+ self.assertNotEqual(v.default_value, 8)
+ self.assertNotEqual(v.unit.symbol, "mL/h")
- m = DosedPharmacokineticModel.objects.create(
- pk_model=pk,
- dose_compartment='central',
- protocol=p,
- )
+ self.model.reset_params_to_defaults("H", "LM")
- model = m.get_myokit_model()
- pk_model = pk.get_myokit_model()
+ v = self.model.variables.get(qname="PKCompartment.CL")
+ self.assertEqual(v.default_value, 8)
+ self.assertEqual(v.unit.symbol, "mL/h")
+
+ def test_myokit_model(self):
+ model = self.model.get_myokit_model()
+ pk_model = self.pk.get_myokit_model()
model_variables = [v.name() for v in model.variables()]
pk_model_variables = [v.name() for v in pk_model.variables()]
- model_components = [c.name() for c in model.components()]
- pk_model_components = [c.name() for c in pk_model.components()]
# check that the absorption_rate and dose_rate variable has been added,
# and the extra drug_amount state variable
self.assertCountEqual(
model_variables,
- pk_model_variables +
- ['absorption_rate', 'drug_amount', 'dose_rate']
- )
- # check that the dose compartment has been added
- self.assertCountEqual(
- model_components, pk_model_components + ['dose']
+ pk_model_variables,
)
# run a simulation with a a dose events
Dose.objects.create(
- protocol=p,
+ protocol=self.p,
start_time=0,
duration=0.1,
amount=1000,
@@ -237,86 +123,14 @@ def test_myokit_model(self):
# dosed model should have a concentration at t ~ 0.5
# of greater than 0.01
- sim = m.get_myokit_simulator()
- output = sim.run(m.time_max)
- index = np.where(np.array(output['myokit.time']) > 0.5)[0][0]
- self.assertGreater(output['central.drug_concentration'][index], 0.01)
-
- # non-dosed model should have a concentration at t ~ 0.5 of near zero
- pk_sim = pk.get_myokit_simulator()
- output = pk_sim.run(pk.time_max)
- index = np.where(np.array(output['myokit.time']) > 0.5)[0][0]
- self.assertLess(output['central.drug_concentration'][index], 1e-6)
-
- def test_simulate(self):
- pk = PharmacokineticModel.objects.get(
- name='one_compartment_pk_model',
- )
-
- p = Protocol.objects.create(
- amount_unit=Unit.objects.get(symbol='mg'),
- time_unit=Unit.objects.get(symbol='h'),
- name='my_cool_protocol',
- dose_type=Protocol.DoseType.INDIRECT,
- )
-
- m = DosedPharmacokineticModel.objects.create(
- pk_model=pk,
- dose_compartment='central',
- protocol=p,
- )
-
- Dose.objects.create(
- protocol=p,
- start_time=0,
- duration=0.1,
- amount=1,
- )
+ sim = self.model.get_myokit_simulator()
- variables = [v['qname'] for v in m.myokit_variables()]
- test_model_variables = [
- 'central.size', 'dose.absorption_rate',
- 'myokit.clearance', 'myokit.drug_scale_factor',
- ]
- self.assertCountEqual(variables, test_model_variables)
+ output = sim.run(self.model.time_max)
+ index = np.where(np.array(output["environment.t"]) > 0.5)[0][0]
+ self.assertGreater(output["PKCompartment.C1"][index], 0.01)
- states = [s['qname'] for s in m.states()]
- test_model_states = ['central.drug_amount', 'dose.drug_amount']
- self.assertCountEqual(states, test_model_states)
-
- outpts = [o['qname'] for o in m.outputs()]
- test_model_outputs = [
- 'central.drug_amount', 'central.drug_concentration',
- 'dose.dose_rate', 'dose.drug_amount', 'myokit.time',
- 'myokit.scaled_drug_concentration',
- ]
- self.assertCountEqual(outpts, test_model_outputs)
-
- outputs = test_model_outputs
- initial_conditions = {s: 1.1 for s in test_model_states}
- variables = {v: 0.5 for v in test_model_variables}
- result = m.simulate(outputs, initial_conditions, variables)
-
- test_model_variables = [
- Variable.objects.get(qname=qname, dosed_pk_model=m)
- for qname in test_model_outputs
- ]
- test_model_output_ids = [
- v.id
- for v in test_model_variables
- ]
- self.assertEqual(result[test_model_output_ids[0]][0], 1.1)
- self.assertEqual(result[test_model_output_ids[-2]][0], 0.0)
-
- first_drug_concentration = \
- result[test_model_output_ids[1]][0]
-
- new_unit = Unit.objects.get(symbol='ng/L')
- test_model_variables[1].unit = new_unit
- test_model_variables[1].save()
-
- result = m.simulate(outputs, initial_conditions, variables)
- self.assertEqual(
- result[test_model_output_ids[1]][0],
- 1e9 * first_drug_concentration,
- )
+ # non-dosed model should have a concentration at t ~ 0.5 of near zero
+ pk_sim = self.pk.get_myokit_simulator()
+ output = pk_sim.run(self.pk.time_max)
+ index = np.where(np.array(output["environment.t"]) > 0.5)[0][0]
+ self.assertLess(output["PKCompartment.C1"][index], 1e-6)
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_myokit_forward_model.py b/pkpdapp/pkpdapp/tests/test_models/test_myokit_forward_model.py
index 6b1b443d..0dbdd119 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_myokit_forward_model.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_myokit_forward_model.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
from django.test import TestCase
from numpy.testing import assert_almost_equal
from pkpdapp.models import (
@@ -17,24 +18,20 @@
class TestMyokitForwardModelSingleOutput(TestCase):
def setUp(self):
m = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
+ name='tumour_growth_gompertz',
)
self.model = m.get_myokit_model()
self.simulator = m.get_myokit_simulator()
self.parameter_dict = {
- 'myokit.tumour_volume': 1,
- 'myokit.lambda_0': 1,
- 'myokit.lambda_1': 1,
- 'myokit.kappa': 1,
- 'myokit.drug_concentration': 1,
+ 'PDCompartment.beta': 1,
+ 'PDCompartment.TS0': 1,
+ 'PDCompartment.TSmax': 1,
}
all_keys = list(self.parameter_dict.keys())
self.fixed_dict = {
- 'myokit.tumour_volume': 1,
- 'myokit.lambda_0': 1,
- 'myokit.drug_concentration': 1,
+ 'PDCompartment.TS0': 1,
}
variable_keys = (
@@ -49,7 +46,7 @@ def test_run_myokit_pints_forward_model(self):
forward_model = MyokitForwardModel(
myokit_model=self.model,
myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
+ outputs=["PDCompartment.TS"],
times=[times],
fixed_parameter_dict=self.fixed_dict,
conversion_factors=[1.0],
@@ -63,7 +60,7 @@ def test_run_myokit_pints_forward_model(self):
forward_model = MyokitForwardModel(
myokit_model=self.model,
myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
+ outputs=["PDCompartment.TS"],
times=[times],
conversion_factors=[1.0],
)
@@ -72,14 +69,12 @@ def test_run_myokit_pints_forward_model(self):
# try model with different variable parameters and check output differs
new_fixed_dict = {
- 'myokit.tumour_volume': 2,
- 'myokit.lambda_0': 3,
- 'myokit.drug_concentration': 7.5,
+ 'PDCompartment.TS0': 2,
}
forward_model = MyokitForwardModel(
myokit_model=self.model,
myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
+ outputs=["PDCompartment.TS"],
times=[times],
fixed_parameter_dict=new_fixed_dict,
conversion_factors=[1.0],
@@ -92,7 +87,7 @@ def test_run_myokit_pints_forward_model(self):
forward_model = MyokitForwardModel(
myokit_model=self.model,
myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
+ outputs=["PDCompartment.TS"],
times=[times],
fixed_parameter_dict=new_fixed_dict,
conversion_factors=[1.0],
@@ -108,11 +103,7 @@ def test_run_myokit_pints_forward_model(self):
all_keys = list(self.parameter_dict.keys())
fixed_dict = {
- 'myokit.tumour_volume': self.fixed_dict['myokit.tumour_volume'],
- 'myokit.lambda_0':
- [self.fixed_dict['myokit.lambda_0']] * n_subjects,
- 'myokit.drug_concentration':
- self.fixed_dict['myokit.drug_concentration'],
+ 'PDCompartment.TS0': [1] * n_subjects,
}
variable_keys = (
@@ -127,7 +118,7 @@ def test_run_myokit_pints_forward_model(self):
forward_model = MyokitForwardModel(
myokit_model=self.model,
myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
+ outputs=["PDCompartment.TS"],
times=[times],
subjects=[subjects],
fixed_parameter_dict=fixed_dict,
@@ -139,58 +130,11 @@ def test_run_myokit_pints_forward_model(self):
self.assertEqual(len(z_subjects[0]), len(times))
np.testing.assert_almost_equal(z_subjects[0], z[0])
- def test_values(self):
- times = np.linspace(0, 100)
-
- forward_model = MyokitForwardModel(
- myokit_model=self.model,
- myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
- times=[times],
- conversion_factors=[1.0],
- )
- z = forward_model.simulate([1, 1, 1, 1, 1])
- self.assertAlmostEqual(z[0][-1], 0.4999996148976773, delta=0.1)
-
- tumour_volume = 2
- z = forward_model.simulate([tumour_volume, 1, 1, 1, 1])
- self.assertAlmostEqual(z[0][0], tumour_volume, delta=0.1)
-
- z = forward_model.simulate([tumour_volume, 2, 1, 1, 1])
- self.assertAlmostEqual(z[0][-1], 0.002582, delta=0.1)
-
- z = forward_model.simulate([tumour_volume, 2, 0.1, 1, 1])
- self.assertAlmostEqual(z[0][-1], 4.4999, delta=0.1)
-
- # add some fixed parameters
- forward_model = MyokitForwardModel(
- myokit_model=self.model,
- myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
- times=[times],
- fixed_parameter_dict={'myokit.tumour_volume': 2},
- conversion_factors=[1.0],
- )
- z = forward_model.simulate([2, 0.1, 1, 1])
- self.assertAlmostEqual(z[0][-1], 4.49999, delta=0.1)
-
- forward_model = MyokitForwardModel(
- myokit_model=self.model,
- myokit_simulator=self.simulator,
- outputs=["myokit.tumour_volume"],
- times=[times],
- fixed_parameter_dict={'myokit.tumour_volume': 4,
- 'myokit.kappa': 0.1},
- conversion_factors=[1.0],
- )
- z = forward_model.simulate([2, 1, 3])
- self.assertAlmostEqual(z[0][-1], 13.4999, delta=0.1)
-
class TestMyokitPintsForwardModelMultipleOutput(TestCase):
def setUp(self):
m = PharmacokineticModel.objects.get(
- name='three_compartment_pk_model',
+ name='three_compartment_preclinical',
)
self.model = m.get_myokit_model()
self.simulator = m.get_myokit_simulator()
@@ -198,28 +142,31 @@ def setUp(self):
def test_runs(self):
# all parameters are:
# full_dict = {
- # 'central.drug_c_amount': 1,
- # 'peripheral_1.drug_p1_amount': 1,
- # 'peripheral_2.drug_p2_amount': 1,
- # 'central.size': 1,
- # 'myokit.clearance': 1,
- # 'myokit.drug_c_scale_factor': 1,
- # 'myokit.k_peripheral1': 1,
- # 'myokit.k_peripheral2': 1,
- # 'peripheral_1.size': 1,
- # 'peripheral_2.size': 1
+ # 'PKCompartment.tlag': 1,
+ # 'PKCompartment.ka': 1,
+ # 'PKCompartment.F': 1,
+ # 'PKCompartment.V1': 1,
+ # 'PKCompartment.V2': 1,
+ # 'PKCompartment.V3': 1,
+ # 'PKCompartment.CL': 1,
+ # 'PKCompartment.Q1': 1,
+ # 'PKCompartment.Q2': 1,
+ # 'PKCompartment.CLmax': 1,
+ # 'PKCompartment.Km': 1,
+ # 'PKCompartment.ke0': 1,
+ # 'PKCompartment.Kpu': 1,
# }
fixed_dict = {
- 'peripheral_1.drug_p1_amount': 1,
- 'peripheral_2.drug_p2_amount': 1,
- 'myokit.drug_c_scale_factor': 1,
+ 'PKCompartment.tlag': 1,
+ 'PKCompartment.CLmax': 1,
+ 'PKCompartment.ke0': 1,
}
- variable_parameters = [1, 1, 1, 1, 1, 1, 1]
+ variable_parameters = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
desired_outputs = [
- 'central.drug_c_amount',
- 'peripheral_1.drug_p1_amount',
- 'peripheral_2.drug_p2_amount'
+ 'PKCompartment.A1',
+ 'PKCompartment.A2',
+ 'PKCompartment.A3',
]
conversion_factors = [
@@ -251,9 +198,9 @@ def test_runs(self):
# do another ordering
desired_outputs = [
- 'peripheral_2.drug_p2_amount',
- 'central.drug_c_amount',
- 'peripheral_1.drug_p1_amount',
+ 'PKCompartment.A3',
+ 'PKCompartment.A1',
+ 'PKCompartment.A2',
]
conversion_factors = [
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_other.py b/pkpdapp/pkpdapp/tests/test_models/test_other.py
index a276cca5..002dc179 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_other.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_other.py
@@ -3,7 +3,7 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
+import pkpdapp.tests # noqa: F401
from django.test import TestCase
from pkpdapp.models import (
Dataset, Project,
@@ -19,6 +19,8 @@ def test_model_creation(self):
c = Compound.objects.create(
name='my_cool_compound',
description='placebo',
+ molecular_mass=100,
+ target_molecular_mass=100,
)
self.assertTrue(isinstance(c, Compound))
@@ -28,9 +30,16 @@ def test_profile_creation(self):
u = User.objects.create_user(
'john', 'lennon@thebeatles.com', 'johnpassword'
)
+ c = Compound.objects.create(
+ name='my_cool_compound',
+ description='placebo',
+ molecular_mass=100,
+ target_molecular_mass=100,
+ )
p = Project.objects.create(
name='my_cool_project',
description='description for my cool project',
+ compound=c,
)
self.assertEqual(u.profile.user.username, 'john')
u.profile.selected_project = p
@@ -39,9 +48,17 @@ def test_profile_creation(self):
class TestProjectModel(TestCase):
def setUp(self):
+ c = Compound.objects.create(
+ name='my_cool_compound',
+ description='placebo',
+ molecular_mass=100,
+ target_molecular_mass=100,
+ )
+
Project.objects.create(
name='my_cool_project',
description='description for my cool project',
+ compound=c,
)
def test_project_creation(self):
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_pkpd_model.py b/pkpdapp/pkpdapp/tests/test_models/test_pkpd_model.py
index b13556a2..fa49f197 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_pkpd_model.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_pkpd_model.py
@@ -3,266 +3,144 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-import codecs
-import urllib.request
+
from django.contrib.auth.models import User
from django.test import TestCase
-from rest_framework import status
from rest_framework.test import APIClient
from pkpdapp.models import (
- BiomarkerType,
- DosedPharmacokineticModel,
+ CombinedModel,
PharmacodynamicModel,
PharmacokineticModel,
PkpdMapping,
Project,
- Protocol,
+ DerivedVariable,
)
class TestPkpdModel(TestCase):
def setUp(self):
self.project = Project.objects.get(
- name='demo',
+ name="demo",
)
- user = User.objects.get(username='demo')
+ user = User.objects.get(username="demo")
self.client = APIClient()
self.client.force_authenticate(user=user)
- def test_myokit_model_creation(self):
- pk_model = PharmacokineticModel.objects.get(
- name='three_compartment_pk_model'
- )
- biomarker_type = BiomarkerType.objects.get(
- name='DemoDrug Concentration',
- dataset__name='usecase0'
- )
- protocol = Protocol.objects.get(
- subjects__dataset=biomarker_type.dataset,
- subjects__id_in_dataset=1,
- )
-
+ def test_combined_model_creation(self):
+ pk_model = PharmacokineticModel.objects.get(name="one_compartment_clinical")
pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
+ name="indirect_effects_stimulation_production"
)
- pkpd_model = DosedPharmacokineticModel.objects.create(
- name='my wonderful model',
+ pkpd_model = CombinedModel.objects.create(
+ name="my wonderful model",
pk_model=pk_model,
pd_model=pd_model,
- dose_compartment='central',
- protocol=protocol,
project=self.project,
)
- pk_variable = pkpd_model.variables.get(
- qname='central.drug_c_concentration',
- )
- pd_variable = pkpd_model.variables.get(
- qname='PD.drug_concentration',
- )
- mapping = PkpdMapping.objects.create(
+ PkpdMapping.objects.create(
pkpd_model=pkpd_model,
- pk_variable=pk_variable,
- pd_variable=pd_variable,
- )
- myokit_model = pkpd_model.get_myokit_model()
-
- # check all the right variables are there
- variables = [
- 'myokit.time',
- 'PD.drug_concentration',
- 'PD.tumour_volume',
- 'PD.lambda_0',
- 'PD.lambda_1',
- 'PD.kappa',
- 'central.size',
- 'central.drug_c_amount',
- 'central.drug_c_concentration',
- 'central.dose_rate',
- 'peripheral_1.size',
- 'peripheral_1.drug_p1_amount',
- 'peripheral_1.drug_p1_concentration',
- 'peripheral_2.size',
- 'peripheral_2.drug_p2_amount',
- 'peripheral_2.drug_p2_concentration',
- 'myokit.clearance',
- 'myokit.k_peripheral1',
- 'myokit.k_peripheral2',
- 'myokit.drug_c_scale_factor',
- 'myokit.scaled_drug_c_concentration',
- ]
- for var in myokit_model.variables():
- self.assertIn(var.qname(), variables)
- index = variables.index(var.qname())
- del variables[index]
-
- # check that PD.drug_concentration is not constant
+ pk_variable=pkpd_model.variables.get(
+ qname="PKCompartment.C1",
+ ),
+ pd_variable=pkpd_model.variables.get(
+ qname="PDCompartment.C_Drug",
+ ),
+ )
+ vars = pkpd_model.variables.values_list("qname", flat=True)
+ for var in ["PKCompartment.C1", "PDCompartment.C_Drug", "PDCompartment.E"]:
+ self.assertIn(var, vars)
self.assertFalse(
- myokit_model.get('PD.drug_concentration').is_constant()
- )
-
- # check it still works if remove pk_model
- mapping.delete()
- pkpd_model.pk_model = None
- pkpd_model.save()
-
- myokit_model = pkpd_model.get_myokit_model()
-
- # check all the right variables are there
- variables = [
- 'PD.time',
- 'PD.drug_concentration',
- 'PD.tumour_volume',
- 'PD.lambda_0',
- 'PD.lambda_1',
- 'PD.kappa',
- ]
-
- for var in myokit_model.variables():
- self.assertIn(var.qname(), variables)
- index = variables.index(var.qname())
- del variables[index]
-
- # check it still works if remove pd_model
- pkpd_model.pk_model = pk_model
- pkpd_model.pd_model = None
- pkpd_model.save()
-
- myokit_model = pkpd_model.get_myokit_model()
-
- # check all the right variables are there
- variables = [
- 'myokit.time',
- 'central.size',
- 'central.drug_c_amount',
- 'central.drug_c_concentration',
- 'central.dose_rate',
- 'peripheral_1.size',
- 'peripheral_1.drug_p1_amount',
- 'peripheral_1.drug_p1_concentration',
- 'peripheral_2.size',
- 'peripheral_2.drug_p2_amount',
- 'peripheral_2.drug_p2_concentration',
- 'myokit.clearance',
- 'myokit.k_peripheral1',
- 'myokit.k_peripheral2',
- 'myokit.drug_c_scale_factor',
- 'myokit.scaled_drug_c_concentration',
- ]
- for var in myokit_model.variables():
- self.assertIn(var.qname(), variables)
- index = variables.index(var.qname())
- del variables[index]
-
- # check it still works if remove all models
- pkpd_model.pk_model = None
- pkpd_model.pd_model = None
- pkpd_model.save()
-
- myokit_model = pkpd_model.get_myokit_model()
- variables = [
- 'myokit.time',
- ]
- for var in myokit_model.variables():
- self.assertIn(var.qname(), variables)
- index = variables.index(var.qname())
- del variables[index]
-
- def test_usecase3(self):
- pk_model = PharmacokineticModel.objects.get(
- name='two_compartment_pk_model'
+ pkpd_model.get_myokit_model().get("PKCompartment.C1").is_state()
)
- biomarker_type = BiomarkerType.objects.get(
- name='DemoDrug Concentration',
- dataset__name='usecase0'
- )
- protocol = Protocol.objects.get(
- subjects__dataset=biomarker_type.dataset,
- subjects__id_in_dataset=1,
+ self.assertFalse(
+ pkpd_model.get_myokit_model().get("PKCompartment.C1").is_constant()
)
-
- # upload pd model
- BASE_URL_DATASETS = 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/usecase3/' # noqa: E501
- with urllib.request.urlopen(
- BASE_URL_DATASETS + 'TMDD_1.xml', timeout=5
- ) as f:
- sbml_string = codecs.decode(f.read(), 'utf-8')
-
- pd_model = PharmacodynamicModel.objects.create(
- name='usecase3-pd',
- project=self.project,
+ self.assertTrue(pkpd_model.get_myokit_model().get("PDCompartment.E").is_state())
+ self.assertFalse(pkpd_model.variables.get(qname="PKCompartment.C1").state)
+ self.assertFalse(pkpd_model.variables.get(qname="PKCompartment.C1").constant)
+ self.assertTrue(pkpd_model.variables.get(qname="PDCompartment.E").state)
+ pkpd_model.get_myokit_model().validate()
+ self.assertFalse(
+ pkpd_model.variables.get(qname="PDCompartment.C_Drug").constant
)
- response = self.client.put(
- '/api/pharmacodynamic/{}/sbml/'.format(pd_model.id),
- data={
- 'sbml': sbml_string
- },
+ def test_combined_model_with_derived_variable(self):
+ pk_model = PharmacokineticModel.objects.get(name="one_compartment_clinical")
+ pd_model = PharmacodynamicModel.objects.get(
+ name="indirect_effects_stimulation_production"
)
- self.assertEquals(response.status_code, status.HTTP_200_OK)
- pd_model.refresh_from_db()
-
- pkpd_model = DosedPharmacokineticModel.objects.create(
- name='my wonderful model',
+ pkpd_model = CombinedModel.objects.create(
+ name="my wonderful model",
pk_model=pk_model,
pd_model=pd_model,
- dose_compartment='central',
- protocol=protocol,
project=self.project,
)
-
- pk_variable = pkpd_model.variables.get(
- qname='central.drug_c_amount',
- )
- pd_variable = pkpd_model.variables.get(
- qname='L.size',
+ DerivedVariable.objects.create(
+ pkpd_model=pkpd_model,
+ pk_variable=pkpd_model.variables.get(
+ qname="PKCompartment.C1",
+ ),
+ type=DerivedVariable.Type.FRACTION_UNBOUND_PLASMA,
)
+ derived_var_qname = "PKCompartment.calc_C1_f"
PkpdMapping.objects.create(
pkpd_model=pkpd_model,
- pk_variable=pk_variable,
- pd_variable=pd_variable,
+ pk_variable=pkpd_model.variables.get(
+ qname=derived_var_qname,
+ ),
+ pd_variable=pkpd_model.variables.get(
+ qname="PDCompartment.C_Drug",
+ ),
+ )
+ vars = pkpd_model.variables.values_list("qname", flat=True)
+ for var in [derived_var_qname, "PDCompartment.C_Drug", "PDCompartment.E"]:
+ self.assertIn(var, vars)
+ self.assertFalse(
+ pkpd_model.get_myokit_model().get(derived_var_qname).is_state()
+ )
+ self.assertFalse(
+ pkpd_model.get_myokit_model().get(derived_var_qname).is_constant()
+ )
+ self.assertFalse(
+ pkpd_model.get_myokit_model().get("PDCompartment.C_Drug").is_constant()
)
- myokit_model = pkpd_model.get_myokit_model()
-
- # check all the right variables are there
- variables = [
- 'central.size',
- 'central.drug_c_amount',
- 'central.drug_c_concentration',
- 'central.dose_rate',
- 'peripheral.size',
- 'peripheral.drug_p_amount',
- 'peripheral.drug_p_concentration',
- 'myokit.time',
- 'myokit.clearance',
- 'myokit.k_peripheral',
- 'myokit.drug_c_scale_factor',
- 'myokit.scaled_drug_c_concentration',
- 'L.size',
- 'R.size',
- 'P.size',
- 't.size',
- 'PD.Ltotal',
- 'PD.Rtotal',
- 'PD.Kel',
- 'PD.Kep',
- 'PD.Kout',
- 'PD.Koff',
- 'PD.Kon',
- 'PD.Kin',
- 'PD.Vc',
- ]
-
- lsize = myokit_model.get('L.size')
- self.assertFalse(lsize.is_state())
- self.assertFalse(lsize.is_constant())
- central_drug_c_amount = myokit_model.get('central.drug_c_amount')
- self.assertTrue(central_drug_c_amount.is_state())
+ def test_combine_multiple_pd_models(self):
+ pk = PharmacokineticModel.objects.get(
+ name="one_compartment_preclinical",
+ )
+ pd = PharmacodynamicModel.objects.get(
+ name="tumour_growth_gompertz",
+ )
+ pd2 = PharmacodynamicModel.objects.get(
+ name="tumour_growth_inhibition_delay_cell_distribution_conc_prop_kill", # noqa E501
+ )
+ combined = CombinedModel.objects.create(
+ name="my_combined_model",
+ pk_model=pk,
+ pd_model=pd,
+ pd_model2=pd2,
+ )
- for var in myokit_model.variables():
- self.assertIn(var.qname(), variables)
- index = variables.index(var.qname())
- del variables[index]
+ pk_vars = [v.qname() for v in pk.get_myokit_model().variables()]
+ pd_vars = [
+ v.qname()
+ for v in pd.get_myokit_model().variables()
+ if v.qname() != "environment.t"
+ ]
+ pd2_vars = [
+ v.qname().replace("PDCompartment", "PDCompartment2")
+ for v in pd2.get_myokit_model().variables()
+ if v.qname() != "environment.t"
+ ]
+ expected_vars = [v for v in pk_vars + pd_vars + pd2_vars]
+ removed_vars = ["PDCompartment2.TS", "PDCompartment2.TS0"]
+ for var in removed_vars:
+ expected_vars.remove(var)
+ model = combined.get_myokit_model()
+ model_vars = [v.qname() for v in model.variables()]
+ self.assertCountEqual(model_vars, expected_vars)
+ print("combined model validated", model.code())
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_protocol.py b/pkpdapp/pkpdapp/tests/test_models/test_protocol.py
index 381e6026..ef6b05dd 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_protocol.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_protocol.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
from django.test import TestCase
from pkpdapp.models import (
Protocol,
@@ -20,6 +21,8 @@ def test_model_creation(self):
c = Compound.objects.create(
name='my_cool_compound',
description='placebo',
+ molecular_mass=100,
+ target_molecular_mass=100,
)
# test optional dataset
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_subject.py b/pkpdapp/pkpdapp/tests/test_models/test_subject.py
index efa69526..a720089f 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_subject.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_subject.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
from django.test import TestCase
from pkpdapp.models import (
Dataset,
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_unit.py b/pkpdapp/pkpdapp/tests/test_models/test_unit.py
new file mode 100644
index 00000000..43c61859
--- /dev/null
+++ b/pkpdapp/pkpdapp/tests/test_models/test_unit.py
@@ -0,0 +1,77 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+import pkpdapp.tests # noqa: F401
+from django.test import TestCase
+from pkpdapp.models import (
+ Unit, Compound
+)
+
+
+class TestUnitModel(TestCase):
+ def setUp(self):
+ self.compound = Compound.objects.create(
+ name='test_unit_model',
+ description='description for my cool compound',
+ )
+
+ def check_compatible_unit(
+ self, unit_symbol, compatible_units, compound=None
+ ):
+ unit = Unit.objects.get(symbol=unit_symbol)
+ compat_symbols = [
+ u.symbol for u in unit.get_compatible_units(compound=compound)]
+ self.assertCountEqual(compat_symbols, compatible_units)
+
+ def test_compatible_units(self):
+ self.check_compatible_unit('s', ['s', 'min', 'h', 'day', 'week'])
+ self.check_compatible_unit(
+ 'ng/mL', ['ng/mL', 'µg/mL', 'mg/L', 'ng/L', 'g/L', 'g/dL', 'pg/mL'
+ ])
+
+ def test_compatible_units_mols(self):
+ self.check_compatible_unit('nmol', ['mol', 'nmol', 'pmol', 'µmol'])
+ self.check_compatible_unit(
+ 'nmol',
+ [
+ 'mol', 'nmol', 'pmol', 'µmol', 'mg', 'g', 'ng', 'kg'
+ ],
+ compound=self.compound
+ )
+ self.check_compatible_unit('mg', ['mg', 'g', 'ng', 'kg'])
+ self.check_compatible_unit(
+ 'mg',
+ ['mol', 'nmol', 'pmol', 'µmol', 'mg', 'g', 'ng', 'kg'],
+ compound=self.compound
+ )
+ self.check_compatible_unit(
+ 'nmol/L',
+ [
+ 'nmol/L', 'pmol/L', 'µmol/L', 'mg/L',
+ 'g/L', 'ng/mL', 'ng/L', 'pg/mL', 'µg/mL', 'g/dL'
+ ],
+ compound=self.compound
+ )
+
+ def test_compatible_units_mols_per_kg(self):
+ self.check_compatible_unit(
+ 'nmol/kg', ['nmol/kg', 'pmol/kg', 'µmol/kg'])
+ self.check_compatible_unit(
+ 'nmol/kg',
+ ['nmol/kg', 'pmol/kg', 'µmol/kg', 'mg/kg',
+ 'pg/kg', 'µg/kg', 'ng/kg', ''],
+ compound=self.compound
+ )
+ self.check_compatible_unit(
+ 'mg/kg', ['mg/kg', 'pg/kg', 'µg/kg', 'ng/kg', ''])
+ self.check_compatible_unit(
+ 'mg/kg',
+ [
+ 'nmol/kg', 'pmol/kg', 'µmol/kg', 'mg/kg',
+ 'pg/kg', 'µg/kg', 'ng/kg', 'g/mol', 'g/nmol', ''
+ ],
+ compound=self.compound
+ )
diff --git a/pkpdapp/pkpdapp/tests/test_models/test_variable.py b/pkpdapp/pkpdapp/tests/test_models/test_variable.py
index f9fc0580..1faad709 100644
--- a/pkpdapp/pkpdapp/tests/test_models/test_variable.py
+++ b/pkpdapp/pkpdapp/tests/test_models/test_variable.py
@@ -3,7 +3,7 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
+import pkpdapp.tests # noqa: F401
from django.db.utils import IntegrityError
from pkpdapp.models import (
Variable, Unit,
diff --git a/pkpdapp/pkpdapp/tests/test_serializers/test_inference.py b/pkpdapp/pkpdapp/tests/test_serializers/test_inference.py
index 0c7d698b..4ea4f5a2 100644
--- a/pkpdapp/pkpdapp/tests/test_serializers/test_inference.py
+++ b/pkpdapp/pkpdapp/tests/test_serializers/test_inference.py
@@ -3,60 +3,22 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
from django.test import TestCase
from rest_framework.exceptions import ValidationError
from pkpdapp.models import (
- Inference, PharmacodynamicModel, LogLikelihood,
- Project, BiomarkerType,
- InferenceMixin, Algorithm
+ InferenceMixin
)
from pkpdapp.api.serializers import (
InferenceSerializer, InferenceChainSerializer,
)
+from pkpdapp.tests import create_pd_inference
class TestInferenceSerializer(TestCase):
def setUp(self):
- project = Project.objects.get(
- name='demo',
- )
- biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- self.inference = Inference.objects.create(
- name='bob',
- project=project,
- max_number_of_iterations=10,
- algorithm=Algorithm.objects.get(name='Haario-Bardenet'),
- )
- log_likelihood = LogLikelihood.objects.create(
- variable=model.variables.first(),
- inference=self.inference,
- form=LogLikelihood.Form.MODEL
- )
-
- # remove all outputs except
- output_names = [
- 'myokit.tumour_volume',
- ]
- outputs = []
- for output in log_likelihood.outputs.all():
- if output.variable.qname in output_names:
- output.parent.biomarker_type = biomarker_type
- output.parent.observed = True
- output.parent.save()
- outputs.append(output.parent)
- else:
- for param in output.parent.parameters.all():
- if param != output:
- param.child.delete()
- output.parent.delete()
+ self.inference, log_likelihood, biomarker_type, \
+ _, self.model, _ = create_pd_inference(
+ sampling=False)
# set uniform prior on everything, except amounts
for i, param in enumerate(
diff --git a/pkpdapp/pkpdapp/tests/test_serializers/test_likelihoods.py b/pkpdapp/pkpdapp/tests/test_serializers/test_likelihoods.py
index 610bb29b..1672c583 100644
--- a/pkpdapp/pkpdapp/tests/test_serializers/test_likelihoods.py
+++ b/pkpdapp/pkpdapp/tests/test_serializers/test_likelihoods.py
@@ -3,39 +3,17 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
from django.test import TestCase
-from pkpdapp.models import (
- PharmacodynamicModel, LogLikelihood,
- Project, BiomarkerType,
- Inference,
-)
from pkpdapp.api.serializers import (
LogLikelihoodSerializer
)
+from pkpdapp.tests import create_pd_inference
class TestLoglikelihoodSerializer(TestCase):
def setUp(self):
- project = Project.objects.get(
- name='demo',
- )
- self.biomarker_type = BiomarkerType.objects.get(
- name='Tumour volume',
- dataset__name='lxf_control_growth'
- )
- self.model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- self.inference = Inference.objects.create(
- project=project,
- )
- self.log_likelihood = LogLikelihood.objects.create(
- inference=self.inference,
- variable=self.model.variables.first(),
- biomarker_type=self.biomarker_type,
- form=LogLikelihood.Form.MODEL
- )
+ self.inference, self.log_likelihood, self.biomarker_type, \
+ _, self.model, _ = create_pd_inference()
self.parameters = self.log_likelihood.parameters.all()
self.prior = self.parameters[0].child
@@ -45,12 +23,11 @@ def test_serialize(self):
many=True
)
data = serializer.data
- self.assertEqual(len(data), 8)
+ self.assertEqual(len(data), 6)
def test_update(self):
serializer = LogLikelihoodSerializer(self.prior)
data = serializer.data
- print(data)
# update fixed value of 1st param
data['form'] = 'N'
diff --git a/pkpdapp/pkpdapp/tests/test_serializers/test_models.py b/pkpdapp/pkpdapp/tests/test_serializers/test_models.py
index 2017590f..fcadd116 100644
--- a/pkpdapp/pkpdapp/tests/test_serializers/test_models.py
+++ b/pkpdapp/pkpdapp/tests/test_serializers/test_models.py
@@ -3,7 +3,7 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
+import pkpdapp.tests # noqa: F401
import codecs
from django.test import TestCase
import urllib.request
diff --git a/pkpdapp/pkpdapp/tests/test_serializers/test_monolix.py b/pkpdapp/pkpdapp/tests/test_serializers/test_monolix.py
index 144094b0..ac347943 100644
--- a/pkpdapp/pkpdapp/tests/test_serializers/test_monolix.py
+++ b/pkpdapp/pkpdapp/tests/test_serializers/test_monolix.py
@@ -3,12 +3,12 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
+import pkpdapp.tests # noqa: F401
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
import urllib.request
from pkpdapp.models import (
- Project,
+ Project, Compound,
)
from pkpdapp.api.serializers import (
MonolixSerializer,
@@ -19,8 +19,15 @@
class TestMonolixSerializer(TestCase):
def test_import(self):
+ compound = Compound.objects.create(
+ name='test',
+ description='test',
+ molecular_mass=100,
+ target_molecular_mass=100,
+ )
project = Project.objects.create(
name='test',
+ compound=compound,
)
model_f = urllib.request.urlopen(
BASE_URL_DATASETS + 'usecase_monolix/PK_Model.txt', timeout=5
diff --git a/pkpdapp/pkpdapp/tests/test_utils/test_data_parser.py b/pkpdapp/pkpdapp/tests/test_utils/test_data_parser.py
index 402bc3cb..088dc749 100644
--- a/pkpdapp/pkpdapp/tests/test_utils/test_data_parser.py
+++ b/pkpdapp/pkpdapp/tests/test_utils/test_data_parser.py
@@ -3,15 +3,15 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
+import django
import codecs
from django.utils import timezone
import urllib.request
from django.test import TestCase
from pkpdapp.models.dataset import Dataset
-
from pkpdapp.utils import DataParser
+django.setup()
BASE_URL_DATASETS = 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/' # noqa: E501
diff --git a/pkpdapp/pkpdapp/tests/test_utils/test_monolix_import.py b/pkpdapp/pkpdapp/tests/test_utils/test_monolix_import.py
index 18e3e1d3..c38404fb 100644
--- a/pkpdapp/pkpdapp/tests/test_utils/test_monolix_import.py
+++ b/pkpdapp/pkpdapp/tests/test_utils/test_monolix_import.py
@@ -4,6 +4,7 @@
# copyright notice and full license details.
#
+import django
import codecs
import urllib.request
from django.test import TestCase
@@ -15,6 +16,7 @@
monolix_import
)
+django.setup()
BASE_URL_DATASETS = 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/' # noqa: E501
diff --git a/pkpdapp/pkpdapp/tests/test_utils/test_monolix_parser.py b/pkpdapp/pkpdapp/tests/test_utils/test_monolix_parser.py
index 893734ce..eb7b1644 100644
--- a/pkpdapp/pkpdapp/tests/test_utils/test_monolix_parser.py
+++ b/pkpdapp/pkpdapp/tests/test_utils/test_monolix_parser.py
@@ -3,7 +3,7 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
+import django
import codecs
import unittest
import urllib.request
@@ -11,6 +11,7 @@
MonolixModelParser, MonolixProjectParser
)
+django.setup()
BASE_URL_DATASETS = 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/' # noqa: E501
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_auce.py b/pkpdapp/pkpdapp/tests/test_views/test_auce.py
index 24627b02..c726ce1c 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_auce.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_auce.py
@@ -3,12 +3,16 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+
+import pkpdapp.tests # noqa: F401
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
from django.contrib.auth.models import User
from pkpdapp.models import BiomarkerType, Dataset
+import unittest
+@unittest.skip("might not be needed anymore")
class NcaTestCase(APITestCase):
def setUp(self):
user = User.objects.get(username='demo')
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_biomarker_type.py b/pkpdapp/pkpdapp/tests/test_views/test_biomarker_type.py
index e886eefa..56ae56d1 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_biomarker_type.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_biomarker_type.py
@@ -3,10 +3,13 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
+import django
from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.test import APIClient, APITestCase
from pkpdapp.models import Project
+django.setup()
class BiomarkerTypeTestCase(APITestCase):
@@ -21,4 +24,4 @@ def test_bt_project_filter(self):
"/api/biomarker_type/?project_id={}".format(project.pk)
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
- self.assertTrue(len(response.data) > 0)
+ self.assertTrue(len(response.data) == 0)
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_combined_model.py b/pkpdapp/pkpdapp/tests/test_views/test_combined_model.py
new file mode 100644
index 00000000..1fb18cd2
--- /dev/null
+++ b/pkpdapp/pkpdapp/tests/test_views/test_combined_model.py
@@ -0,0 +1,177 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+
+import pkpdapp.tests # noqa: F401
+from rest_framework import status
+from rest_framework.test import APITestCase, APIClient
+from django.contrib.auth.models import User
+from pkpdapp.models import (
+ Project,
+ PharmacokineticModel,
+ CombinedModel,
+ PharmacodynamicModel,
+)
+import numpy as np
+
+
+class CombinedModelTestCase(APITestCase):
+ def setUp(self):
+ user = User.objects.get(username="demo")
+ self.client = APIClient()
+ self.client.force_authenticate(user=user)
+
+ def test_pk_project_filter(self):
+ response = self.client.get("/api/combined_model/?project_id=1")
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ response_data = response.data
+ self.assertEqual(len(response_data), 1)
+
+ def test_cannot_create_in_read_only_project(self):
+ user = User.objects.get(username="demo2")
+ self.client = APIClient()
+ self.client.force_authenticate(user=user)
+
+ project = Project.objects.get(name="demo")
+ response = self.client.post(
+ "/api/combined_model/", data={"name": "test", "project": project.id}
+ )
+ self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
+
+ def create_combined_model(self, name, pd=None):
+ project = Project.objects.get(name="demo")
+ pk = PharmacokineticModel.objects.get(
+ name="one_compartment_clinical",
+ )
+ data = {
+ "name": name,
+ "project": project.id,
+ "pk_model": pk.id,
+ "mappings": [],
+ "derived_variables": [],
+ }
+ if pd is not None:
+ data["pd_model"] = pd.id
+ response = self.client.post("/api/combined_model/", data=data, format="json")
+ self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+ cm = CombinedModel.objects.get(pk=response.data["id"])
+
+ # set up a protocol
+ response = self.client.post(
+ "/api/protocol/",
+ data={
+ "name": "test protocol",
+ "project": project.id,
+ "doses": [
+ {
+ "start_time": 0,
+ "amount": 1,
+ "duration": 0.001,
+ "repeat_interval": 1,
+ "repeats": 1,
+ }
+ ],
+ },
+ format="json",
+ )
+ self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+
+ # attach it to the A1 variables
+ a1 = cm.variables.get(name="A1")
+ response = self.client.patch(
+ f"/api/variable/{a1.id}/",
+ data={
+ "protocol": response.data["id"],
+ },
+ format="json",
+ )
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ if pd is not None:
+ c1 = cm.variables.get(name="C1")
+ drug_c = cm.variables.get(name="C_Drug")
+
+ response = self.client.patch(
+ f"/api/combined_model/{cm.id}/",
+ data={
+ "mappings": [
+ {
+ "pk_variable": c1.id,
+ "pd_variable": drug_c.id,
+ }
+ ],
+ "derived_variables": [],
+ },
+ format="json",
+ )
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ return response.data
+
+ def simulate_combined_model(self, id):
+ response = self.client.post(
+ f"/api/combined_model/{id}/simulate",
+ data={
+ "outputs": [
+ "PDCompartment.C_Drug",
+ "PKCompartment.C1",
+ "PDCompartment.E",
+ ],
+ "variables": {},
+ },
+ format="json",
+ )
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ keys = [key for key in response.data["outputs"].keys()]
+ return (
+ response.data["outputs"][keys[0]],
+ response.data["outputs"][keys[1]],
+ response.data["outputs"][keys[2]],
+ )
+
+ def test_swap_mapped_pd_model(self):
+ pd1 = PharmacodynamicModel.objects.get(
+ name="indirect_effects_stimulation_elimination",
+ )
+ pd2 = PharmacodynamicModel.objects.get(
+ name="indirect_effects_inhibition_elimination",
+ )
+ model1 = self.create_combined_model("test1", pd1)
+ model2 = self.create_combined_model("test2", pd2)
+ c_drug1, c1_1, e1 = self.simulate_combined_model(model1["id"])
+ c_drug2, c1_2, e2 = self.simulate_combined_model(model2["id"])
+
+ # c_drug should be mapped to c1 and equal
+ np.testing.assert_allclose(c_drug1, c1_1, atol=1e-5, rtol=1e-5)
+
+ # swap the pd model for model 1, old mappings should be updated
+ cm = CombinedModel.objects.get(pk=model1["id"])
+ c1 = cm.variables.get(name="C1")
+ c_drug = cm.variables.get(name="C_Drug")
+ response = self.client.patch(
+ f"/api/combined_model/{model1['id']}/",
+ data={
+ "pd_model": pd2.id,
+ "mappings": [
+ {
+ "pk_variable": c1.id,
+ "pd_variable": c_drug.id,
+ }
+ ],
+ },
+ format="json",
+ )
+ model1 = response.data
+
+ # simulate the model again
+ c_drug3, c1_3, e3 = self.simulate_combined_model(model1["id"])
+
+ # c_drug3 should be mapped to c3 and equal
+ np.testing.assert_allclose(c_drug3, c1_3, atol=1e-5, rtol=1e-5)
+
+ # check that the data is the same as the second simulation
+ np.testing.assert_allclose(c_drug3, c_drug2, atol=1e-5, rtol=1e-5)
+ np.testing.assert_allclose(c1_3, c1_2, atol=1e-5, rtol=1e-5)
+ np.testing.assert_allclose(e3, e2, atol=1e-5, rtol=1e-5)
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_dataset.py b/pkpdapp/pkpdapp/tests/test_views/test_dataset.py
index a15ed987..c306a2fc 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_dataset.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_dataset.py
@@ -3,6 +3,7 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+import pkpdapp.tests # noqa: F401
from urllib.request import urlretrieve
from django.contrib.auth.models import User
@@ -45,4 +46,4 @@ def test_dataset_project_filter(self):
response = self.client.get("/api/dataset/?project_id=1")
self.assertEqual(response.status_code, status.HTTP_200_OK)
response_data = response.data
- self.assertGreater(len(response_data), 0)
+ self.assertEqual(len(response_data), 0)
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_dose.py b/pkpdapp/pkpdapp/tests/test_views/test_dose.py
deleted file mode 100644
index a0dbce71..00000000
--- a/pkpdapp/pkpdapp/tests/test_views/test_dose.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
-# is released under the BSD 3-clause license. See accompanying LICENSE.md for
-# copyright notice and full license details.
-#
-from rest_framework import status
-from rest_framework.test import APITestCase, APIClient
-from django.contrib.auth.models import User
-from pkpdapp.models import Dataset
-
-
-class ProtocolTestCase(APITestCase):
- def setUp(self):
- user = User.objects.get(username='demo')
- self.client = APIClient()
- self.client.force_authenticate(user=user)
-
- def test_dataset_dose_no_update(self):
- dataset = Dataset.objects.get(name='demo_pk_data')
- protocol = dataset.subjects.first().protocol
- dose = protocol.doses.first()
-
- data = {
- 'value': 3.14,
- }
-
- response = self.client.put(
- "/api/dose/{}/".format(dose.id), data
- )
- self.assertEqual(
- response.status_code, status.HTTP_403_FORBIDDEN
- )
- response = self.client.patch(
- "/api/dose/{}/".format(dose.id), data
- )
- self.assertEqual(
- response.status_code, status.HTTP_403_FORBIDDEN
- )
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_dosed_pk_model.py b/pkpdapp/pkpdapp/tests/test_views/test_dosed_pk_model.py
deleted file mode 100644
index d2acbeb0..00000000
--- a/pkpdapp/pkpdapp/tests/test_views/test_dosed_pk_model.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
-# is released under the BSD 3-clause license. See accompanying LICENSE.md for
-# copyright notice and full license details.
-#
-from rest_framework import status
-from rest_framework.test import APITestCase, APIClient
-from django.contrib.auth.models import User
-from pkpdapp.models import Project
-
-
-class DosedPkModelTestCase(APITestCase):
- def setUp(self):
- user = User.objects.get(username='demo')
- self.client = APIClient()
- self.client.force_authenticate(user=user)
-
- def test_pk_project_filter(self):
- response = self.client.get("/api/dosed_pharmacokinetic/?project_id=1")
- self.assertEqual(response.status_code, status.HTTP_200_OK)
- response_data = response.data
- self.assertEqual(len(response_data), 0)
-
- def test_cannot_create_in_read_only_project(self):
- user = User.objects.get(username='demo2')
- self.client = APIClient()
- self.client.force_authenticate(user=user)
-
- project = Project.objects.get(name='demo')
- response = self.client.post(
- "/api/dosed_pharmacokinetic/",
- data={
- 'name': 'test',
- 'project': project.id
- }
- )
- self.assertEqual(
- response.status_code, status.HTTP_403_FORBIDDEN
- )
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_inference.py b/pkpdapp/pkpdapp/tests/test_views/test_inference.py
index e12fa658..2685d84e 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_inference.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_inference.py
@@ -3,31 +3,18 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
-
-import codecs
-import urllib.request
-from urllib.request import urlretrieve
+from rest_framework import status
from django.contrib.auth.models import User
-from django.core.files import File
-from rest_framework import status
from rest_framework.test import APIClient, APITestCase
from pkpdapp.models import (
Algorithm,
- BiomarkerType,
- Dataset,
- DosedPharmacokineticModel,
Inference,
InferenceMixin,
- LogLikelihood,
- PharmacodynamicModel,
- PharmacokineticModel,
- PkpdMapping,
Project,
- Protocol,
- Unit,
)
+from pkpdapp.tests import create_pd_inference
class TestInferenceWizardView(APITestCase):
@@ -41,19 +28,17 @@ def setUp(self):
self.client.force_authenticate(user=user)
def test_population_and_covariates_inference(self):
- pd_dataset = Dataset.objects.get(
- name='lxf_control_growth'
- )
+ inference, log_likelihood, \
+ biomarker_type, covariate_biomarker_type, \
+ pd_model, pd_dataset = create_pd_inference(
+ sampling=False)
pd_biomarker_names = [
- 'Tumour volume', 'Body weight'
+ biomarker_type.name,
+ covariate_biomarker_type.name,
]
- pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- pd_output_name = 'myokit.tumour_volume'
+ pd_output_name = log_likelihood.parents.first().name
pd_parameter_names = [
v.qname for v in pd_model.variables.filter(constant=True)
]
@@ -69,7 +54,7 @@ def test_population_and_covariates_inference(self):
# Model
'model': {
- 'form': 'PD',
+ 'form': 'PK',
'id': pd_model.id
},
'dataset': pd_dataset.id,
@@ -108,13 +93,13 @@ def test_population_and_covariates_inference(self):
},
]
}
-
+ print(data)
response = self.client.post(
"/api/inference/wizard", data, format='json'
)
- self.assertEqual(response.status_code, status.HTTP_200_OK)
+
response_data = response.data
- print(response_data)
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
# check inference fields
self.assertEqual(response_data['name'], 'my inference run')
@@ -123,7 +108,7 @@ def test_population_and_covariates_inference(self):
# check number of log_likelihoods, and that the population_parameter is
# there
- self.assertEqual(len(response_data['log_likelihoods']), 16)
+ self.assertEqual(len(response_data['log_likelihoods']), 14)
found_it = False
for ll in response_data['log_likelihoods']:
if ll['name'] == 'population_parameter':
@@ -157,17 +142,14 @@ def test_population_and_covariates_inference(self):
)
def test_pd_inference_runs(self):
- pd_dataset = Dataset.objects.get(
- name='lxf_control_growth'
- )
-
- pd_biomarker_name = 'Tumour volume'
-
- pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
- pd_output_name = 'myokit.tumour_volume'
+ inference, log_likelihood, \
+ biomarker_type, \
+ covariate_biomarker_type, \
+ pd_model, pd_dataset = create_pd_inference(
+ sampling=False)
+
+ pd_biomarker_name = biomarker_type.name
+ pd_output_name = log_likelihood.parents.first().name
pd_parameter_names = [
v.qname for v in pd_model.variables.filter(constant=True)
]
@@ -230,12 +212,13 @@ def test_pd_inference_runs(self):
self.assertEqual(response_data['initialization_strategy'], 'R')
# check number of log_likelihoods, and that the model ll is there
- self.assertEqual(len(response_data['log_likelihoods']), 14)
+ self.assertEqual(len(response_data['log_likelihoods']), 12)
found_it = False
for ll in response_data['log_likelihoods']:
- if ll['name'] == 'tumour_growth_inhibition_model_koch':
+ print('looking in ', ll['name'])
+ if ll['name'] == 'my wonderful model':
found_it = True
- self.assertEqual(len(ll['parameters']), 5)
+ self.assertEqual(len(ll['parameters']), 3)
model_id = ll['id']
self.assertTrue(found_it)
@@ -295,536 +278,12 @@ def test_pd_inference_runs(self):
log_posterior.to_search([0.5, 0.12, 0.1])
)
- def test_pk_inference_runs(self):
- pk_dataset = Dataset.objects.get(
- name='usecase0'
- )
- pk_biomarker_name = 'DemoDrug Concentration'
-
- biomarker_type = BiomarkerType.objects.get(
- name=pk_biomarker_name,
- dataset__name=pk_dataset.name,
- )
- biomarker_type.display_unit = Unit.objects.get(
- symbol='g/L'
- )
- biomarker_type.save()
- pk = PharmacokineticModel.objects\
- .get(name='three_compartment_pk_model')
-
- protocol = Protocol.objects.get(
- subjects__dataset=biomarker_type.dataset,
- subjects__id_in_dataset=1,
- )
-
- pk_model = DosedPharmacokineticModel.objects.create(
- name='my wonderful model',
- pk_model=pk,
- dose_compartment='central',
- protocol=protocol,
- )
- pk_output_name = 'central.drug_c_concentration'
- pk_parameter_names = [
- v.qname for v in pk_model.variables.filter(constant=True)
- ]
-
- data = {
- # Inference parameters
- 'name': "test inference run",
- 'project': self.project.id,
- 'algorithm': Algorithm.objects.get(name='XNES').id,
- 'initialization_strategy': 'R',
- 'number_of_chains': 4,
- 'max_number_of_iterations': 11,
- 'burn_in': 0,
-
- # Model
- 'model': {
- 'form': 'PK',
- 'id': pk_model.id
- },
- 'dataset': pk_dataset.id,
-
- # Model parameters
- 'parameters': [
- {
- 'name': pk_parameter_names[0],
- 'form': 'N',
- 'parameters': [0, 1],
- },
- {
- 'name': pk_parameter_names[1],
- 'form': 'U',
- 'parameters': [-1, 1],
- },
- {
- 'name': pk_parameter_names[2],
- 'form': 'F',
- 'parameters': [0.1],
- }
- ],
- # output
- 'observations': [
- {
- 'model': pk_output_name,
- 'biomarker': pk_biomarker_name,
- 'noise_form': 'N',
- 'noise_param_form': 'F',
- 'parameters': [123.3],
- },
- ]
- }
- response = self.client.post(
- "/api/inference/wizard", data, format='json'
- )
- self.assertEqual(response.status_code, status.HTTP_200_OK)
- response_data = response.data
-
- # check inference fields
- self.assertEqual(response_data['name'], 'test inference run')
- self.assertEqual(response_data['project'], self.project.id)
- self.assertEqual(response_data['initialization_strategy'], 'R')
-
- # check number of log_likelihoods, and that the model ll is there
- self.assertEqual(len(response_data['log_likelihoods']), 17)
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['name'] == 'my wonderful model':
- found_it = True
- self.assertEqual(len(ll['parameters']), 10)
- model_id = ll['id']
- self.assertTrue(found_it)
-
- # check that the output log_likelihood is there and looks ok
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['name'][:len(pk_output_name)] == pk_output_name:
- found_it = True
- self.assertEqual(len(ll['parameters']), 2)
- self.assertEqual(ll['parameters'][0]['name'],
- pk_output_name)
- self.assertEqual(ll['form'], 'N')
- sigma_ll = ll['parameters'][1]['child']
- self.assertEqual(ll['parameters'][0]['child'], model_id)
- self.assertTrue(found_it)
-
- # check that the sigma log_likelihood is there and looks ok
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['id'] == sigma_ll:
- found_it = True
- self.assertEqual(ll['value'], 123.3)
- self.assertEqual(ll['form'], 'F')
- self.assertTrue(found_it)
-
- # check that the param 1 log_likelihood is there and looks ok
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['name'] == pk_parameter_names[1]:
- found_it = True
- self.assertEqual(ll['form'], 'U')
- self.assertEqual(len(ll['parameters']), 2)
- child_id = ll['parameters'][0]['child']
- self.assertTrue(found_it)
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['id'] == child_id:
- found_it = True
- self.assertEqual(ll['form'], 'F')
- self.assertEqual(ll['value'], -1)
- self.assertTrue(found_it)
-
- def test_usecase1(self):
- pk_dataset = Dataset.objects.get(
- name='usecase1'
- )
- pk_biomarker_name = 'DemoDrug Concentration'
-
- biomarker_type = BiomarkerType.objects.get(
- name=pk_biomarker_name,
- dataset__name=pk_dataset.name,
- )
- biomarker_type.display_unit = Unit.objects.get(
- symbol='g/L'
- )
- biomarker_type.save()
- pk = PharmacokineticModel.objects\
- .get(name='three_compartment_pk_model')
-
- protocol = Protocol.objects.get(
- subjects__dataset=biomarker_type.dataset,
- subjects__id_in_dataset=1,
- )
-
- pk_model = DosedPharmacokineticModel.objects.create(
- name='my wonderful model',
- pk_model=pk,
- dose_compartment='central',
- protocol=protocol,
- )
- drug_c_amount = pk_model.variables.get(
- qname='central.drug_c_amount'
- )
- drug_c_amount.default_value = 0
- drug_c_amount.save()
-
- pk_output_name = 'central.drug_c_concentration'
- pk_parameter_names = [
- v.qname for v in pk_model.variables.filter(constant=True)
- ]
-
- data = {
- # Inference parameters
- 'name': "test inference run",
- 'project': self.project.id,
- 'algorithm': Algorithm.objects.get(name='XNES').id,
- 'initialization_strategy': 'R',
- 'number_of_chains': 4,
- 'max_number_of_iterations': 11,
- 'burn_in': 0,
-
- # Model
- 'model': {
- 'form': 'PK',
- 'id': pk_model.id
- },
- 'dataset': pk_dataset.id,
-
- # Model parameters
- 'parameters': [
- {
- 'name': pk_parameter_names[0],
- 'form': 'N',
- 'parameters': [0.5, 0.01],
- },
- {
- 'name': pk_parameter_names[1],
- 'form': 'U',
- 'parameters': [0.1, 0.2],
- },
- {
- 'name': pk_parameter_names[2],
- 'form': 'F',
- 'parameters': [0.1],
- }
- ],
- # output
- 'observations': [
- {
- 'model': pk_output_name,
- 'biomarker': pk_biomarker_name,
- 'noise_form': 'N',
- 'noise_param_form': 'F',
- 'parameters': [123.3],
- },
- ]
- }
- response = self.client.post(
- "/api/inference/wizard", data, format='json'
- )
- self.assertEqual(response.status_code, status.HTTP_200_OK)
- response_data = response.data
-
- # check inference fields
- self.assertEqual(response_data['name'], 'test inference run')
- self.assertEqual(response_data['project'], self.project.id)
- self.assertEqual(response_data['initialization_strategy'], 'R')
-
- # check number of log_likelihoods, and that the 5 model ll's are there
- self.assertEqual(len(response_data['log_likelihoods']), 27)
- found_it = 0
- model_ids = []
- model_name = 'my wonderful model'
- for ll in response_data['log_likelihoods']:
- if ll['name'][:len(model_name)] == model_name:
- found_it += 1
- dbmodel = DosedPharmacokineticModel.objects.get(
- id=ll['model'][1]
- )
- if dbmodel.protocol.dose_type == 'D':
- self.assertEqual(len(ll['parameters']), 10)
- elif dbmodel.protocol.dose_type == 'I':
- self.assertEqual(len(ll['parameters']), 12)
- model_ids.append(ll['id'])
- self.assertEqual(found_it, 5)
-
- # check that the 5 output log_likelihoods are there and looks ok
- found_it = 0
- for ll in response_data['log_likelihoods']:
- if ll['name'][:len(pk_output_name)] == pk_output_name:
- found_it += 1
- db_ll = LogLikelihood.objects.get(id=ll['id'])
- self.assertEqual(db_ll.protocol_filter.subjects.count(), 1)
- self.assertEqual(len(ll['parameters']), 2)
- self.assertEqual(ll['parameters'][0]['name'],
- pk_output_name)
- self.assertEqual(ll['form'], 'N')
- sigma_ll = ll['parameters'][1]['child']
- self.assertIn(ll['parameters'][0]['child'], model_ids)
- self.assertEqual(found_it, 5)
-
- # check that the sigma log_likelihood is there and looks ok
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['id'] == sigma_ll:
- found_it = True
- self.assertEqual(ll['value'], 123.3)
- self.assertEqual(ll['form'], 'F')
- self.assertTrue(found_it)
-
- # check that the param 1 log_likelihood is there and looks ok
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['name'] == pk_parameter_names[1]:
- found_it = True
- self.assertEqual(ll['form'], 'U')
- self.assertEqual(len(ll['parameters']), 2)
- child_id = ll['parameters'][0]['child']
- self.assertTrue(found_it)
- found_it = False
- for ll in response_data['log_likelihoods']:
- if ll['id'] == child_id:
- found_it = True
- self.assertEqual(ll['form'], 'F')
- self.assertEqual(ll['value'], 0.1)
- self.assertTrue(found_it)
-
- inference = Inference.objects.get(id=response_data['id'])
-
- inference_mixin = InferenceMixin(inference)
- log_posterior = inference_mixin._pints_log_posterior
-
- # pymc3_model = log_posterior._model
- # graph = pymc3.model_graph.model_to_graphviz(pymc3_model)
- # graph.render(directory='test', view=True)
-
- log_posterior(
- log_posterior.to_search([0.5, 0.12])
- )
-
- def test_usecase2(self):
- def faux_test_file(url, ending='.csv'):
- tempname, _ = urlretrieve(url)
- file = File(open(tempname, 'rb'))
- file.name = 'test' + ending
- return file
-
- project = Project.objects.get(
- name='demo',
- )
-
- # upload dataset
- BASE_URL_DATASETS = 'https://raw.githubusercontent.com/pkpdapp-team/pkpdapp-datafiles/main/usecase2/' # noqa: E501
- file = faux_test_file(
- BASE_URL_DATASETS + 'PKPD_UseCase_Abx.csv', '.csv'
- )
-
- dataset = Dataset.objects.create(
- name='usecase2',
- project=project,
- )
- response = self.client.put(
- '/api/dataset/{}/csv/'.format(dataset.id),
- data={
- 'csv': file
- },
- )
- self.assertEquals(response.status_code, status.HTTP_200_OK)
- dataset.refresh_from_db()
- for bt in dataset.biomarker_types.all():
- print('have bt', bt.name, bt.display_unit.symbol,
- bt.display_time_unit.symbol)
-
- # upload pd model
- with urllib.request.urlopen(
- BASE_URL_DATASETS + 'ABx_updated3.xml', timeout=5
- ) as f:
- sbml_string = codecs.decode(f.read(), 'utf-8')
-
- pd_model = PharmacodynamicModel.objects.create(
- name='usecase2-pd',
- project=project,
- )
-
- response = self.client.put(
- '/api/pharmacodynamic/{}/sbml/'.format(pd_model.id),
- data={
- 'sbml': sbml_string
- },
- )
- print(response.data)
- self.assertEquals(response.status_code, status.HTTP_200_OK)
- pd_model.refresh_from_db()
-
- # create pkpd model
- pk_model = PharmacokineticModel.objects\
- .get(name='three_compartment_pk_model')
-
- protocol = Protocol.objects.get(
- subjects__dataset=dataset,
- subjects__id_in_dataset=1,
- )
- print('xxxxx')
- for v in pd_model.variables.all():
- print(v.qname)
- pkpd_model = DosedPharmacokineticModel.objects.create(
- name='usecase2',
- pk_model=pk_model,
- pd_model=pd_model,
- dose_compartment='central',
- protocol=protocol,
- )
- PkpdMapping.objects.create(
- pkpd_model=pkpd_model,
- pk_variable=pkpd_model.variables.get(
- qname='myokit.scaled_drug_c_concentration',
- ),
- pd_variable=pkpd_model.variables.get(
- qname='PD.Drug_concentration',
- ),
- )
- pkpd_variables = {
- 'dose.absorption_rate': (0.6, 6.0, 60.0),
- 'myokit.clearance': (0.003, 0.03, 0.3),
- 'central.size': (0.0024, 0.024, 0.24),
- 'myokit.k_peripheral1': (0.0001, 0.001, 0.01),
- 'peripheral_1.size': (0.001, 0.01, 0.1),
- 'myokit.k_peripheral2': (0.000003, 0.00003, 0.0003),
- 'peripheral_2.size': (0.00007, 0.0007, 0.007),
- 'myokit.drug_c_scale_factor': (0.0014, 0.014, 0.14),
-
- 'PD.KNetgrowth': (0.05, 0.5, 5.0),
- 'PD.tvbmax': (1.35E+08, 1.35E+09, 1.35E+10),
- 'PD.Kmax': (0.15, 1.5, 15.0),
- 'PD.EC50k': (0.01, 0.1, 1.0),
- 'PD.gamma': (0.4, 4.0, 40.0),
- 'PD.beta': (0.2, 2.0, 20.0),
- 'PD.tau': (0.015, 0.15, 1.5),
- 'PD.Kdeath': (0.005, 0.5, 5.0),
- 'PD.Ksr_max': (0.1, 1.0, 10.0),
- }
- for qname, values in pkpd_variables.items():
- print(qname, values)
- var = pkpd_model.variables.get(qname=qname)
- var.lower_bound, var.default_value, var.upper_bound = values
- var.save()
-
- CFU = dataset.biomarker_types.get(name='CFU')
- demodrug_concentration = dataset.biomarker_types.get(
- name='DemoDrug Concentration'
- )
-
- Ptotal = pkpd_model.variables.get(qname='Ptotal.size')
- drug_c_concentration = pkpd_model.variables.get(
- qname='central.drug_c_concentration')
- drug_c_concentration.unit = demodrug_concentration.display_unit
- drug_c_concentration.save()
-
- fit_parameters = {
- qname: values
- for qname, values in pkpd_variables.items()
- if qname != 'myokit.drug_c_scale_factor'
- }
-
- data = {
- # Inference parameters
- 'name': "usecase2",
- 'project': self.project.id,
- 'algorithm': Algorithm.objects.get(name='PSO').id,
- 'initialization_strategy': 'D',
- 'number_of_chains': 4,
- 'max_number_of_iterations': 11,
- 'burn_in': 0,
-
- # Model
- 'model': {
- 'form': 'PK',
- 'id': pkpd_model.id
- },
- 'dataset': dataset.id,
-
- # Model parameters
- 'parameters': [
- {
- 'name': qname,
- 'form': 'U',
- 'parameters': [values[0], values[2]],
- }
- for qname, values in fit_parameters.items()
- ] + [
- {
- 'name': 't.size',
- 'form': 'F',
- 'parameters': ['1'],
- },
- {
- 'name': 'central.drug_c_amount',
- 'form': 'F',
- 'parameters': ['0'],
- }
-
- ],
- # output
- 'observations': [
- {
- 'model': drug_c_concentration.qname,
- 'biomarker': demodrug_concentration.name,
- 'noise_form': 'N',
- 'noise_param_form': 'F',
- 'parameters': [10],
- },
- {
- 'model': Ptotal.qname,
- 'biomarker': CFU.name,
- 'noise_form': 'N',
- 'noise_param_form': 'F',
- 'parameters': [1e6],
- },
- ]
- }
- response = self.client.post(
- "/api/inference/wizard", data, format='json'
- )
- response_data = response.data
- self.assertEqual(response.status_code, status.HTTP_200_OK)
-
- # check that there are no equations,
- # the strings should be converted to float
- for ll in response_data['log_likelihoods']:
- self.assertNotEqual(
- ll['form'], 'E', '{} is an Equation!'.format(ll['name'])
- )
-
- inference = Inference.objects.get(id=response_data['id'])
-
- inference_mixin = InferenceMixin(inference)
- log_posterior = inference_mixin._pints_log_posterior
-
- # pymc3_model = log_posterior._model
- # graph = pymc3.model_graph.model_to_graphviz(pymc3_model)
- # graph.render(directory='test', view=True)
-
- eval_pt = [
- fit_parameters[name][1]
- for name in log_posterior.parameter_names()
- ]
- log_posterior(
- log_posterior.to_search(
- eval_pt
- )
- )
-
- inference_mixin.run_inference()
-
def test_errors(self):
- pd_dataset = Dataset.objects.get(
- name='lxf_control_growth'
- )
+ inference, log_likelihood, biomarker_type, \
+ covariate_biomarker_type, pd_model, \
+ pd_dataset = create_pd_inference(
+ sampling=False)
- pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- read_only=False,
- )
pd_parameter_names = [
v.qname for v in pd_model.variables.filter(constant=True)
]
@@ -871,11 +330,6 @@ def test_errors(self):
'form': 'N',
'parameters': ['1 + biomarker("doesnt exist")', 1],
},
- {
- 'name': pd_parameter_names[3],
- 'form': 'N',
- 'parameters': [('cant use a tuple',), 1],
- },
],
'observations': [
{
@@ -903,9 +357,5 @@ def test_errors(self):
'not in list of biomarkers',
response.data['parameters'][2]['parameters'][0]
)
- self.assertIn(
- 'str or number',
- response.data['parameters'][3]['parameters'][0]
- )
self.assertIn('model', response.data['observations'][0])
self.assertIn('biomarker', response.data['observations'][0])
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_nca.py b/pkpdapp/pkpdapp/tests/test_views/test_nca.py
index 93598323..563612a0 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_nca.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_nca.py
@@ -3,12 +3,16 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+
+import pkpdapp.tests # noqa: F401
+import unittest
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
from django.contrib.auth.models import User
from pkpdapp.models import BiomarkerType, Protocol
+@unittest.skip("NCA deprecated")
class NcaTestCase(APITestCase):
def setUp(self):
user = User.objects.get(username='demo')
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_pd_model.py b/pkpdapp/pkpdapp/tests/test_views/test_pd_model.py
index e37470c3..d9f1f03b 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_pd_model.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_pd_model.py
@@ -3,6 +3,8 @@
# is released under the BSD 3-clause license. See accompanying LICENSE.md for
# copyright notice and full license details.
#
+
+import pkpdapp.tests # noqa: F401
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
from django.contrib.auth.models import User
@@ -19,7 +21,7 @@ def test_pd_project_filter(self):
response = self.client.get("/api/pharmacodynamic/?project_id=1")
self.assertEqual(response.status_code, status.HTTP_200_OK)
response_data = response.data
- self.assertGreater(len(response_data), 0)
+ self.assertEqual(len(response_data), 0)
def test_pd_serializer(self):
response = self.client.get("/api/pharmacodynamic/1/")
@@ -43,7 +45,7 @@ def test_cannot_edit_read_only_project(self):
)
response = self.client.put(
- "/api/pharmacodynamic/1/",
+ "/api/combined_model/1/",
data={
'name': 'test',
'project': project.id
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_protocol.py b/pkpdapp/pkpdapp/tests/test_views/test_protocol.py
deleted file mode 100644
index 70b8b65a..00000000
--- a/pkpdapp/pkpdapp/tests/test_views/test_protocol.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
-# is released under the BSD 3-clause license. See accompanying LICENSE.md for
-# copyright notice and full license details.
-#
-from rest_framework import status
-from rest_framework.test import APITestCase, APIClient
-from django.contrib.auth.models import User
-from pkpdapp.models import Dataset, Subject, Protocol
-
-
-class ProtocolTestCase(APITestCase):
- def setUp(self):
- user = User.objects.get(username='demo')
- self.client = APIClient()
- self.client.force_authenticate(user=user)
-
- def test_dataset_protocol_no_update(self):
- dataset = Dataset.objects.get(name='lxf_control_growth')
- data = {
- 'name': 'test',
- }
- response = self.client.post("/api/protocol/", data)
- self.assertEqual(
- response.status_code, status.HTTP_201_CREATED
- )
- self.assertEqual(response.data['name'], data['name'])
-
- # add a subject to the protocol
- protocol_id = response.data['id']
- protocol = Protocol.objects.get(id=protocol_id)
- Subject.objects.create(
- id_in_dataset=123,
- dataset=dataset,
- protocol=protocol
- )
-
- new_data = {
- 'name': 'test_new',
- }
-
- response = self.client.put(
- "/api/protocol/{}/".format(protocol_id), new_data
- )
- self.assertEqual(
- response.status_code, status.HTTP_403_FORBIDDEN
- )
- response = self.client.patch(
- "/api/protocol/{}/".format(protocol_id), new_data
- )
- self.assertEqual(
- response.status_code, status.HTTP_403_FORBIDDEN
- )
-
- def test_protocol_without_dataset_can_update(self):
- data = {
- 'name': 'test2',
- }
- response = self.client.post("/api/protocol/", data)
- self.assertEqual(
- response.status_code, status.HTTP_201_CREATED
- )
- self.assertEqual(response.data['name'], data['name'])
-
- new_data = {
- 'id': response.data['id'],
- 'name': 'test_new',
- }
-
- protocol_id = response.data['id']
-
- response = self.client.put(
- "/api/protocol/{}/".format(protocol_id), new_data
- )
- self.assertEqual(
- response.status_code, status.HTTP_200_OK
- )
- response = self.client.patch(
- "/api/protocol/{}/".format(protocol_id), new_data
- )
- self.assertEqual(
- response.status_code, status.HTTP_200_OK
- )
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_simulate.py b/pkpdapp/pkpdapp/tests/test_views/test_simulate.py
index a52e3538..a15cbe06 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_simulate.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_simulate.py
@@ -6,11 +6,7 @@
from pkpdapp.models import (
PharmacodynamicModel, Variable,
- Project,
- DosedPharmacokineticModel,
- PharmacokineticModel,
- BiomarkerType,
- Protocol,
+ CombinedModel,
)
from django.contrib.auth.models import User
@@ -28,70 +24,35 @@ def setUp(self):
self.client.force_authenticate(user=user)
def test_simulate(self):
- m = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
+ pd = PharmacodynamicModel.objects.get(
+ name='tumour_growth_gompertz',
+ read_only=False,
+ )
+ m = CombinedModel.objects.create(
+ name='my wonderful model',
+ pd_model=pd,
)
- url = reverse('simulate-pharmacodynamic', args=(m.pk,))
+ url = reverse('simulate-combined-model', args=(m.pk,))
data = {
- 'outputs': ['myokit.tumour_volume', 'myokit.time'],
- 'initial_conditions': {
- 'myokit.tumour_volume': 1.5,
- },
+ 'outputs': ['PDCompartment.TS', 'environment.t'],
'variables': {
- 'myokit.lambda_0': 1.1,
- 'myokit.lambda_1': 1.2,
- 'myokit.kappa': 1.3,
- 'myokit.drug_concentration': 1.4,
+ 'PDCompartment.TS0': 1.1,
},
}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
+ outputs = response.data.get('outputs')
self.assertCountEqual(
- list(response.data.keys()),
+ list(outputs.keys()),
[
- Variable.objects.get(qname=qname, pd_model=m).id
+ Variable.objects.get(qname=qname, dosed_pk_model=m).id
for qname in data['outputs']
]
)
- url = reverse('simulate-pharmacodynamic', args=(123,))
+ url = reverse('simulate-combined-model', args=(123,))
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
-
- def test_simulate_pkpd(self):
- project = Project.objects.get(
- name='demo',
- )
- pk_model = PharmacokineticModel.objects.get(
- name='three_compartment_pk_model'
- )
- biomarker_type = BiomarkerType.objects.get(
- name='DemoDrug Concentration',
- dataset__name='usecase0'
- )
- protocol = Protocol.objects.get(
- subjects__dataset=biomarker_type.dataset,
- subjects__id_in_dataset=1,
- )
- pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- pkpd_model = DosedPharmacokineticModel.objects.create(
- name='my wonderful model',
- pk_model=pk_model,
- pd_model=pd_model,
- dose_compartment='central',
- protocol=protocol,
- project=project,
- )
-
- url = reverse('simulate-dosed-pharmacokinetic', args=(pkpd_model.pk,))
- data = {
- 'outputs': ['PD.tumour_volume', 'myokit.time'],
- }
-
- response = self.client.post(url, data, format='json')
- self.assertEqual(response.status_code, status.HTTP_200_OK)
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_unit.py b/pkpdapp/pkpdapp/tests/test_views/test_unit.py
index be655cee..ada81c0c 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_unit.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_unit.py
@@ -7,51 +7,25 @@
from rest_framework.test import APITestCase, APIClient
from django.contrib.auth.models import User
from pkpdapp.models import (
- PharmacodynamicModel, Protocol, PharmacokineticModel,
- Compound, DosedPharmacokineticModel,
- Unit
+ PharmacodynamicModel, CombinedModel
)
class UnitTestCase(APITestCase):
def setUp(self):
self.pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- pk = PharmacokineticModel.objects\
- .get(name='one_compartment_pk_model')
-
- c = Compound.objects.create(
- name='test_dosed_pk_model',
- description='placebo',
- )
-
- p = Protocol.objects.create(
- name='my_cool_protocol',
- compound=c,
- amount_unit=Unit.objects.get(symbol='mg'),
- time_unit=Unit.objects.get(symbol='h'),
+ name='tumour_growth_gompertz',
)
self.dosed_pk_model = \
- DosedPharmacokineticModel.objects.create(
- pk_model=pk,
- dose_compartment='central',
- protocol=p,
+ CombinedModel.objects.create(
+ pd_model=self.pd_model,
)
user = User.objects.get(username='demo')
self.client = APIClient()
self.client.force_authenticate(user=user)
- def test_pd_project_filter(self):
- response = self.client.get(
- "/api/unit/?pd_model_id={}".format(self.pd_model.id)
- )
- self.assertEqual(response.status_code, status.HTTP_200_OK)
- response_data = response.data
- self.assertGreater(len(response_data), 0)
-
def test_dosed_pk_project_filter(self):
response = self.client.get(
"/api/unit/?dosed_pk_model_id={}".format(
diff --git a/pkpdapp/pkpdapp/tests/test_views/test_variable.py b/pkpdapp/pkpdapp/tests/test_views/test_variable.py
index 115f517f..d6773e78 100644
--- a/pkpdapp/pkpdapp/tests/test_views/test_variable.py
+++ b/pkpdapp/pkpdapp/tests/test_views/test_variable.py
@@ -7,51 +7,25 @@
from rest_framework.test import APITestCase, APIClient
from django.contrib.auth.models import User
from pkpdapp.models import (
- PharmacodynamicModel, Protocol, PharmacokineticModel,
- Compound, DosedPharmacokineticModel,
- Unit
+ PharmacodynamicModel, CombinedModel
)
class VariableTestCase(APITestCase):
def setUp(self):
self.pd_model = PharmacodynamicModel.objects.get(
- name='tumour_growth_inhibition_model_koch',
- )
- pk = PharmacokineticModel.objects\
- .get(name='one_compartment_pk_model')
-
- c = Compound.objects.create(
- name='test_dosed_pk_model',
- description='placebo',
- )
-
- p = Protocol.objects.create(
- name='my_cool_protocol',
- compound=c,
- amount_unit=Unit.objects.get(symbol='mg'),
- time_unit=Unit.objects.get(symbol='h'),
+ name='tumour_growth_gompertz',
)
self.dosed_pk_model = \
- DosedPharmacokineticModel.objects.create(
- pk_model=pk,
- dose_compartment='central',
- protocol=p,
+ CombinedModel.objects.create(
+ pd_model=self.pd_model,
)
user = User.objects.get(username='demo')
self.client = APIClient()
self.client.force_authenticate(user=user)
- def test_pd_project_filter(self):
- response = self.client.get(
- "/api/variable/?pd_model_id={}".format(self.pd_model.id)
- )
- self.assertEqual(response.status_code, status.HTTP_200_OK)
- response_data = response.data
- self.assertGreater(len(response_data), 0)
-
def test_dosed_pk_project_filter(self):
response = self.client.get(
"/api/variable/?dosed_pk_model_id={}".format(
diff --git a/pkpdapp/pkpdapp/tests/utils.py b/pkpdapp/pkpdapp/tests/utils.py
new file mode 100644
index 00000000..6bd3c89d
--- /dev/null
+++ b/pkpdapp/pkpdapp/tests/utils.py
@@ -0,0 +1,123 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+from pkpdapp.models import (
+ Inference, PharmacodynamicModel,
+ CombinedModel,
+ Unit,
+ LogLikelihood,
+ Project, BiomarkerType, Biomarker,
+ Algorithm,
+ Dataset,
+ Subject,
+)
+
+
+def create_pd_inference(sampling=False):
+ project = Project.objects.get(
+ name='demo',
+ )
+ pd = PharmacodynamicModel.objects.get(
+ name='tumour_growth_gompertz',
+ read_only=False,
+ )
+ model = CombinedModel.objects.create(
+ name='my wonderful model',
+ pd_model=pd,
+ )
+ # generate some fake data
+ output = model.variables.get(qname='PDCompartment.TS')
+ time = model.variables.get(qname='environment.t')
+ data = model.simulate(outputs=[output.qname, time.qname])
+ print(data)
+ TS = data[output.id]
+ times = data[time.id]
+ dataset = Dataset.objects.create(
+ name='fake data',
+ project=project,
+ )
+ bt = BiomarkerType.objects.create(
+ name='fake data',
+ dataset=dataset,
+ stored_unit=Unit.objects.get(symbol='mL'),
+ display_unit=Unit.objects.get(symbol='mL'),
+ stored_time_unit=Unit.objects.get(symbol='day'),
+ display_time_unit=Unit.objects.get(symbol='day'),
+ )
+ subject1 = Subject.objects.create(
+ id_in_dataset=1,
+ dataset=dataset,
+ )
+ subject2 = Subject.objects.create(
+ id_in_dataset=2,
+ dataset=dataset,
+ )
+
+ for i, (t, ts) in enumerate(zip(times, TS)):
+ Biomarker.objects.create(
+ biomarker_type=bt,
+ time=t,
+ value=ts,
+ subject=subject1,
+ )
+ Biomarker.objects.create(
+ biomarker_type=bt,
+ time=t,
+ value=ts,
+ subject=subject2,
+ )
+
+ bt_covariate = BiomarkerType.objects.create(
+ name='fake body weight',
+ dataset=dataset,
+ stored_unit=Unit.objects.get(symbol='kg'),
+ display_unit=Unit.objects.get(symbol='kg'),
+ stored_time_unit=Unit.objects.get(symbol='day'),
+ display_time_unit=Unit.objects.get(symbol='day'),
+ )
+
+ for s in [subject1, subject2]:
+ Biomarker.objects.create(
+ biomarker_type=bt_covariate,
+ time=0,
+ value=20,
+ subject=s,
+ )
+
+ algorithm = Algorithm.objects.get(
+ name='Haario-Bardenet') if sampling \
+ else Algorithm.objects.get(name='XNES')
+ inference = Inference.objects.create(
+ name='bob',
+ project=project,
+ max_number_of_iterations=10,
+ algorithm=algorithm,
+ number_of_chains=3,
+ )
+
+ log_likelihood = LogLikelihood.objects.create(
+ variable=model.variables.first(),
+ inference=inference,
+ form=LogLikelihood.Form.MODEL
+ )
+
+ # remove all outputs except
+ output_names = [
+ 'PDCompartment.TS',
+ ]
+ outputs = []
+ for output in log_likelihood.outputs.all():
+ if output.variable.qname in output_names:
+ output.parent.biomarker_type = bt
+ output.parent.observed = True
+ output.parent.save()
+ outputs.append(output.parent)
+ else:
+ for param in output.parent.parameters.all():
+ if param != output:
+ param.child.delete()
+ output.parent.delete()
+
+ return inference, log_likelihood, bt, bt_covariate, model, dataset
diff --git a/pkpdapp/pkpdapp/urls.py b/pkpdapp/pkpdapp/urls.py
index ea2f8614..fca1f7dc 100644
--- a/pkpdapp/pkpdapp/urls.py
+++ b/pkpdapp/pkpdapp/urls.py
@@ -19,6 +19,7 @@
router.register('dataset', api.DatasetView, basename='dataset')
router.register('user', api.UserView, basename='user')
router.register('subject', api.SubjectView, basename='subject')
+router.register('compound', api.CompoundView, basename='compound')
router.register('project', api.ProjectView, basename='project')
router.register('project_access', api.ProjectAccessView,
basename='project_access')
@@ -38,11 +39,10 @@
)
router.register(
- 'dosed_pharmacokinetic', api.DosedPharmacokineticView,
- basename='dosed_pharmacodynamic'
+ 'combined_model', api.CombinedModelView,
+ basename='combined_model'
)
-
router.register(
'inference', api.InferenceView,
basename='inference'
@@ -55,6 +55,10 @@
'inference_chain', api.InferenceChainView,
basename='inference_chain'
)
+router.register(
+ 'simulation', api.SimulationViewSet,
+ basename='simulation'
+)
urlpatterns = [
path('admin/doc/', include('django.contrib.admindocs.urls')),
@@ -63,8 +67,8 @@
path('api/', include(router.urls), name='api'),
path('api/nca/', api.NcaView.as_view(), name='nca'),
path('api/auce/', api.AuceView.as_view(), name='auce'),
- path('api/dosed_pharmacokinetic//simulate',
- api.SimulatePkView.as_view(), name='simulate-dosed-pharmacokinetic'),
+ path('api/combined_model//simulate',
+ api.SimulateCombinedView.as_view(), name='simulate-combined-model'),
path(
'api/inference/wizard',
api.InferenceWizardView.as_view(),
diff --git a/pkpdapp/pkpdapp/utils/data_parser.py b/pkpdapp/pkpdapp/utils/data_parser.py
index 3ffd262c..7e3f751e 100644
--- a/pkpdapp/pkpdapp/utils/data_parser.py
+++ b/pkpdapp/pkpdapp/utils/data_parser.py
@@ -71,7 +71,7 @@ class DataParser:
altername_unit_names = {
"h": ["hour"],
- "d": ["day"],
+ "day": ["d"],
}
def is_covariate_column(self, col_name):
diff --git a/pkpdapp/pkpdapp/utils/default_params.py b/pkpdapp/pkpdapp/utils/default_params.py
new file mode 100644
index 00000000..614e5aa7
--- /dev/null
+++ b/pkpdapp/pkpdapp/utils/default_params.py
@@ -0,0 +1,53 @@
+#
+# This file is part of PKPDApp (https://github.com/pkpdapp-team/pkpdapp) which
+# is released under the BSD 3-clause license. See accompanying LICENSE.md for
+# copyright notice and full license details.
+#
+import openpyxl
+
+
+# Load the workbook
+workbook = openpyxl.load_workbook(
+ "pkpdapp/migrations/models/ParametersValue_Species.xlsx", data_only=True
+)
+
+sheet_names = [
+ "1cmpt_PK_Model",
+ "2cmpt_PK_Model",
+ "3cmpt_PK_Model",
+ "1cmpt_TMDD_Model",
+ "2cmpt_TMDD_Model",
+]
+model_names = [
+ "one_compartment",
+ "two_compartment",
+ "three_compartment",
+ "one_compartment_tmdd",
+ "two_compartment_tmdd",
+]
+species_list = ["M", "R", "K", "H"]
+compound_type = ["SM", "LM"]
+clinical = [False, False, False, True]
+
+defaults = {}
+
+for sheet_name, model_name in zip(sheet_names, model_names):
+ worksheet = workbook[sheet_name]
+
+ defaults[model_name] = {}
+ for row in worksheet.iter_rows():
+ parameter = row[0].value
+ if parameter is None:
+ continue
+ defaults[model_name][parameter] = {}
+ for i, species in enumerate(species_list):
+ defaults[model_name][parameter][species] = {}
+ for j, ctype in enumerate(compound_type):
+ rowi = i * 4 + j * 2 + 1
+ value = row[rowi].value
+ unit = row[rowi + 1].value
+ if_clinical = clinical[i]
+ defaults[model_name][parameter][species][ctype] = {
+ "value": value,
+ "unit": unit,
+ }
diff --git a/pkpdapp/pkpdapp/utils/monolix_importer.py b/pkpdapp/pkpdapp/utils/monolix_importer.py
index 9282f952..17350501 100644
--- a/pkpdapp/pkpdapp/utils/monolix_importer.py
+++ b/pkpdapp/pkpdapp/utils/monolix_importer.py
@@ -41,7 +41,7 @@ def monolix_import(
# parse the model file
model_parser = MonolixModelParser()
model, (admin_id, dosed_compartment, tlag,
- direct) = model_parser.parse(model_str)
+ direct, dosed_qname) = model_parser.parse(model_str)
# parse the data file
data_parser = DataParser()
@@ -103,17 +103,19 @@ def monolix_import(
protocol = dataset.subjects.first().protocol
# create the pk model
- DosedPharmacokineticModel = apps.get_model(
- 'pkpdapp', 'DosedPharmacokineticModel')
- pk_model = DosedPharmacokineticModel.objects.create(
+ CombinedModel = apps.get_model(
+ 'pkpdapp', 'CombinedModel')
+ pk_model = CombinedModel.objects.create(
name='Dosed {}'.format(project['']['[LONGITUDINAL]']['file']),
project=app_project,
pd_model=pd_model,
pk_model=None,
- protocol=protocol,
- dose_compartment=dosed_compartment,
)
+ drug = pk_model.variables.get(qname=dosed_qname)
+ drug.protocol = protocol
+ drug.save()
+
# only display the fitted output of model
fit_variable = project['']['model']
model_variable = project[
diff --git a/pkpdapp/pkpdapp/utils/monolix_model_parser.py b/pkpdapp/pkpdapp/utils/monolix_model_parser.py
index 31372d1f..d3729058 100644
--- a/pkpdapp/pkpdapp/utils/monolix_model_parser.py
+++ b/pkpdapp/pkpdapp/utils/monolix_model_parser.py
@@ -171,6 +171,7 @@ def __init__(self):
self.tlag = None
self.direct_dosing = None
self.dosed_compartment = None
+ self.dosed_qname = None
def initialise_model(self):
self.myokit_model: myokit.Model = myokit.Model()
@@ -247,6 +248,7 @@ def construct_pk(self, toks):
direct = True
self.direct_dosing = direct
self.dosed_compartment = cmt
+ self.dosed_qname = amount_var.qname()
def construct_inputs(self, toks):
for name in toks:
@@ -323,5 +325,5 @@ def parse(self, model_str, parseAll=True):
return self.myokit_model, \
(
self.administration_id, self.dosed_compartment,
- self.tlag, self.direct_dosing
+ self.tlag, self.direct_dosing, self.dosed_qname
)
diff --git a/pkpdapp/schema.yml b/pkpdapp/schema.yml
index 5d43a264..d7b85b2d 100644
--- a/pkpdapp/schema.yml
+++ b/pkpdapp/schema.yml
@@ -1,13 +1,16 @@
-openapi: 3.0.2
+openapi: 3.0.3
info:
- title: ''
- version: ''
+ title: PKPDApp API
+ version: 1.0.0
+ description: The API for the PKPDApp
paths:
- /api/dataset/:
+ /api/algorithm/:
get:
- operationId: listDatasets
- description: ''
- parameters: []
+ operationId: algorithm_list
+ tags:
+ - algorithm
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -15,134 +18,150 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
description: ''
- tags:
- - api
post:
- operationId: createDataset
- description: ''
- parameters: []
+ operationId: algorithm_create
+ tags:
+ - algorithm
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
description: ''
- tags:
- - api
- /api/dataset/{id}/:
+ /api/algorithm/{id}/:
get:
- operationId: retrieveDataset
- description: ''
+ operationId: algorithm_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dataset.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
description: ''
- tags:
- - api
put:
- operationId: updateDataset
- description: ''
+ operationId: algorithm_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dataset.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateDataset
- description: ''
+ operationId: algorithm_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dataset.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/PatchedAlgorithm'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/PatchedAlgorithm'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/PatchedAlgorithm'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dataset'
+ $ref: '#/components/schemas/Algorithm'
description: ''
- tags:
- - api
delete:
- operationId: destroyDataset
- description: ''
+ operationId: algorithm_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dataset.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/auce/:
+ post:
+ operationId: auce_create
tags:
- - api
- /api/user/:
+ - auce
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/biomarker_type/:
get:
- operationId: listUsers
- description: ''
- parameters: []
+ operationId: biomarker_type_list
+ tags:
+ - biomarker_type
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -150,134 +169,146 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
description: ''
- tags:
- - api
post:
- operationId: createUser
- description: ''
- parameters: []
+ operationId: biomarker_type_create
+ tags:
+ - biomarker_type
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
multipart/form-data:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
description: ''
- tags:
- - api
- /api/user/{id}/:
+ /api/biomarker_type/{id}/:
get:
- operationId: retrieveUser
- description: ''
+ operationId: biomarker_type_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this user.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
description: ''
- tags:
- - api
put:
- operationId: updateUser
- description: ''
+ operationId: biomarker_type_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this user.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
multipart/form-data:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateUser
- description: ''
+ operationId: biomarker_type_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this user.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/PatchedBiomarkerType'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/PatchedBiomarkerType'
multipart/form-data:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/PatchedBiomarkerType'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/User'
+ $ref: '#/components/schemas/BiomarkerType'
description: ''
- tags:
- - api
delete:
- operationId: destroyUser
- description: ''
+ operationId: biomarker_type_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this user.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
- tags:
- - api
- /api/subject/:
+ description: No response body
+ /api/combined_model/:
get:
- operationId: listSubjects
- description: ''
- parameters: []
+ operationId: combined_model_list
+ parameters:
+ - in: query
+ name: project_id
+ schema:
+ type: integer
+ description: Filter results by project ID
+ tags:
+ - combined_model
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -285,269 +316,246 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
post:
- operationId: createSubject
- description: ''
- parameters: []
+ operationId: combined_model_create
+ tags:
+ - combined_model
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
- /api/subject/{id}/:
+ /api/combined_model/{id}/:
get:
- operationId: retrieveSubject
- description: ''
+ operationId: combined_model_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this subject.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this combined model.
+ required: true
+ tags:
+ - combined_model
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
put:
- operationId: updateSubject
- description: ''
+ operationId: combined_model_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this subject.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this combined model.
+ required: true
+ tags:
+ - combined_model
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateSubject
- description: ''
+ operationId: combined_model_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this subject.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this combined model.
+ required: true
+ tags:
+ - combined_model
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/PatchedCombinedModel'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/PatchedCombinedModel'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/PatchedCombinedModel'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Subject'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
delete:
- operationId: destroySubject
- description: ''
+ operationId: combined_model_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this subject.
+ - in: path
+ name: id
schema:
- type: string
- responses:
- '204':
- description: ''
+ type: integer
+ description: A unique integer value identifying this combined model.
+ required: true
tags:
- - api
- /api/project/:
- get:
- operationId: listProjects
- description: ''
- parameters: []
+ - combined_model
+ security:
+ - cookieAuth: []
responses:
- '200':
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Project'
- description: ''
+ '204':
+ description: No response body
+ /api/combined_model/{id}/set_params_to_defaults/:
+ put:
+ operationId: combined_model_set_params_to_defaults_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this combined model.
+ required: true
tags:
- - api
- post:
- operationId: createProject
- description: ''
- parameters: []
+ - combined_model
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Project'
- responses:
- '201':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Project'
- description: ''
- tags:
- - api
- /api/project/{id}/:
- get:
- operationId: retrieveProject
- description: ''
- parameters:
- - name: id
- in: path
+ $ref: '#/components/schemas/CombinedModel'
required: true
- description: A unique integer value identifying this project.
- schema:
- type: string
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
+ /api/combined_model/{id}/set_variables_from_inference/:
put:
- operationId: updateProject
- description: ''
+ operationId: combined_model_set_variables_from_inference_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this combined model.
+ required: true
+ tags:
+ - combined_model
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/CombinedModel'
description: ''
- tags:
- - api
- patch:
- operationId: partialUpdateProject
- description: ''
+ /api/combined_model/{id}/simulate:
+ post:
+ operationId: combined_model_simulate_create
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ required: true
+ tags:
+ - combined_model
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/Simulate'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/Simulate'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/Simulate'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/SimulateResponse'
description: ''
- tags:
- - api
- delete:
- operationId: destroyProject
- description: ''
- parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project.
- schema:
- type: string
- responses:
- '204':
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
description: ''
- tags:
- - api
- /api/project_access/:
+ '404':
+ description: No response body
+ /api/compound/:
get:
- operationId: listProjectAccess
- description: ''
- parameters: []
+ operationId: compound_list
+ tags:
+ - compound
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -555,134 +563,140 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
description: ''
- tags:
- - api
post:
- operationId: createProjectAccess
- description: ''
- parameters: []
+ operationId: compound_create
+ tags:
+ - compound
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
multipart/form-data:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
description: ''
- tags:
- - api
- /api/project_access/{id}/:
+ /api/compound/{id}/:
get:
- operationId: retrieveProjectAccess
- description: ''
+ operationId: compound_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project access.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
description: ''
- tags:
- - api
put:
- operationId: updateProjectAccess
- description: ''
+ operationId: compound_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project access.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
multipart/form-data:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateProjectAccess
- description: ''
+ operationId: compound_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project access.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/PatchedCompound'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/PatchedCompound'
multipart/form-data:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/PatchedCompound'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectAccess'
+ $ref: '#/components/schemas/Compound'
description: ''
- tags:
- - api
delete:
- operationId: destroyProjectAccess
- description: ''
+ operationId: compound_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project access.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
- tags:
- - api
- /api/dose/:
+ description: No response body
+ /api/dataset/:
get:
- operationId: listDoses
- description: ''
- parameters: []
+ operationId: dataset_list
+ tags:
+ - dataset
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -690,134 +704,167 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
description: ''
- tags:
- - api
post:
- operationId: createDose
- description: ''
- parameters: []
+ operationId: dataset_create
+ tags:
+ - dataset
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
description: ''
- tags:
- - api
- /api/dose/{id}/:
+ /api/dataset/{id}/:
get:
- operationId: retrieveDose
- description: ''
+ operationId: dataset_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dose.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
description: ''
- tags:
- - api
put:
- operationId: updateDose
- description: ''
+ operationId: dataset_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dose.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateDose
- description: ''
+ operationId: dataset_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dose.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/PatchedDataset'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/PatchedDataset'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/PatchedDataset'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Dose'
+ $ref: '#/components/schemas/Dataset'
description: ''
- tags:
- - api
delete:
- operationId: destroyDose
- description: ''
+ operationId: dataset_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dose.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/dataset/{id}/csv/:
+ put:
+ operationId: dataset_csv_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
tags:
- - api
- /api/unit/:
+ - dataset
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/DatasetCsv'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DatasetCsv'
+ description: ''
+ /api/dose/:
get:
- operationId: listUnits
- description: ''
- parameters: []
+ operationId: dose_list
+ tags:
+ - dose
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -825,134 +872,140 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
description: ''
- tags:
- - api
post:
- operationId: createUnit
- description: ''
- parameters: []
+ operationId: dose_create
+ tags:
+ - dose
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
description: ''
- tags:
- - api
- /api/unit/{id}/:
+ /api/dose/{id}/:
get:
- operationId: retrieveUnit
- description: ''
+ operationId: dose_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this unit.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
description: ''
- tags:
- - api
put:
- operationId: updateUnit
- description: ''
+ operationId: dose_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this unit.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateUnit
- description: ''
+ operationId: dose_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this unit.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/PatchedDose'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/PatchedDose'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/PatchedDose'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Unit'
+ $ref: '#/components/schemas/Dose'
description: ''
- tags:
- - api
delete:
- operationId: destroyUnit
- description: ''
+ operationId: dose_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this unit.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
- tags:
- - api
- /api/variable/:
+ description: No response body
+ /api/inference/:
get:
- operationId: listVariables
- description: ''
- parameters: []
+ operationId: inference_list
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -960,134 +1013,253 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
description: ''
- tags:
- - api
post:
- operationId: createVariable
- description: ''
- parameters: []
+ operationId: inference_create
+ tags:
+ - inference
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
description: ''
- tags:
- - api
- /api/variable/{id}/:
+ /api/inference/{id}/:
get:
- operationId: retrieveVariable
- description: ''
+ operationId: inference_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this variable.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
description: ''
- tags:
- - api
put:
- operationId: updateVariable
- description: ''
+ operationId: inference_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this variable.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateVariable
- description: ''
+ operationId: inference_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this variable.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/PatchedInference'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/PatchedInference'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/PatchedInference'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Variable'
+ $ref: '#/components/schemas/Inference'
description: ''
- tags:
- - api
delete:
- operationId: destroyVariable
- description: ''
+ operationId: inference_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this variable.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/inference/{id}/stop:
+ post:
+ operationId: inference_stop_create
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ required: true
tags:
- - api
- /api/protocol/:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/inference/wizard:
+ post:
+ operationId: inference_wizard_create
+ description: |-
+ expecting data in the form:
+ {
+
+ # Inference parameters
+ 'id': 1
+ 'name': "my inference run",
+ 'project': 1,
+ 'algorithm': 2,
+ 'initialization_strategy': 'R',
+ 'initialization_inference': 2,
+ 'number_of_chains': 4,
+ 'max_number_of_iterations': 3000,
+ 'burn_in': 0,
+
+ # Model
+ 'model': {
+ 'form': 'PK',
+ 'id': 5
+ }
+ 'dataset': 3,
+
+ # Model parameters
+ 'parameters': [
+ {
+ 'name': 'myokit.parameter1'
+ 'form': 'N',
+ 'pooled': False,
+ 'parameters': [
+ '2 * biomarker[subject_weight]',
+ 'parameter[parameter1_variance]'
+ ]
+ },
+ {
+ 'name': 'parameter1_variance'
+ 'form': 'N',
+ 'parameters': [0, 1]
+ },
+ {
+ 'name': 'myokit.parameter2'
+ 'form': 'U',
+ 'parameters': [-1, 1]
+ },
+ {
+ 'name': 'myokit.parameter3'
+ 'form': 'F',
+ 'parameters': [123.5]
+ },
+ ]
+
+ # output
+ 'observations': [
+ {
+ 'model': 'myokit.plasma_concentration',
+ 'biomarker': 'concentration,
+ 'noise_form': 'N',
+ 'noise_param_form': 'N',
+ 'parameters': [0, 1]
+ },
+ {
+ 'model': 'myokit.bacteria_count',
+ 'biomarker': 'bacteria,
+ 'noise_form': 'LN',
+ 'noise_param_form': 'F'
+ 'parameters': [123.3]
+ },
+ ]
+ }
+
+ Uses model as the base model. If it is a PK or PKPD model, creates a model
+ for each protocol used in the dataset, replacing the protocol of the model
+ with each new one.
+
+ This set of models has a set of parameters. If pooled is True or not given,
+ then parameters of the same qname are assumed to be identical, if pooled is
+ False, then the value of this parameter is different across each subject.
+ All Variable fields from the original model are copied over to the new
+ models. Priors and fixed values for each parameter in this set are provided
+ in 'parameters'. Distribution parameters for each prior can be provided
+ using a python expression, or a number. If a python expression is used, the
+ keywords Parameter[] are used to refer to other parameters in
+ the list. Additional parameters can be added to the list (parameters not in
+ the model) to contruct hierarchical inference. You can refer to biomarkers
+ in the expression using the keyword Biomarker[].
+
+ The 'observations' field maps model output variables with biomarkers in the
+ dataset
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/inference_chain/:
get:
- operationId: listProtocols
- description: ''
- parameters: []
+ operationId: inference_chain_list
+ tags:
+ - inference_chain
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -1095,134 +1267,150 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
description: ''
- tags:
- - api
post:
- operationId: createProtocol
- description: ''
- parameters: []
+ operationId: inference_chain_create
+ tags:
+ - inference_chain
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
description: ''
- tags:
- - api
- /api/protocol/{id}/:
+ /api/inference_chain/{id}/:
get:
- operationId: retrieveProtocol
- description: ''
+ operationId: inference_chain_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this protocol.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
description: ''
- tags:
- - api
put:
- operationId: updateProtocol
- description: ''
+ operationId: inference_chain_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this protocol.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateProtocol
- description: ''
+ operationId: inference_chain_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this protocol.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/PatchedInferenceChain'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/PatchedInferenceChain'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/PatchedInferenceChain'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Protocol'
+ $ref: '#/components/schemas/InferenceChain'
description: ''
- tags:
- - api
delete:
- operationId: destroyProtocol
- description: ''
+ operationId: inference_chain_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this protocol.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/nca/:
+ post:
+ operationId: nca_create
tags:
- - api
- /api/biomarker_type/:
+ - nca
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/pharmacodynamic/:
get:
- operationId: listBiomarkerTypes
- description: ''
- parameters: []
+ operationId: pharmacodynamic_list
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -1230,269 +1418,267 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
- tags:
- - api
post:
- operationId: createBiomarkerType
- description: ''
- parameters: []
+ operationId: pharmacodynamic_create
+ tags:
+ - pharmacodynamic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
- tags:
- - api
- /api/biomarker_type/{id}/:
+ /api/pharmacodynamic/{id}/:
get:
- operationId: retrieveBiomarkerType
- description: ''
+ operationId: pharmacodynamic_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this biomarker type.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
- tags:
- - api
put:
- operationId: updateBiomarkerType
- description: ''
+ operationId: pharmacodynamic_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this biomarker type.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateBiomarkerType
- description: ''
+ operationId: pharmacodynamic_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this biomarker type.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/PatchedPharmacodynamic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/PatchedPharmacodynamic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/PatchedPharmacodynamic'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/BiomarkerType'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
- tags:
- - api
delete:
- operationId: destroyBiomarkerType
- description: ''
+ operationId: pharmacodynamic_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this biomarker type.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/pharmacodynamic/{id}/mmt/:
+ put:
+ operationId: pharmacodynamic_mmt_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
tags:
- - api
- /api/pharmacokinetic/:
- get:
- operationId: listPharmacokineticModels
- description: ''
- parameters: []
+ - pharmacodynamic
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- type: array
- items:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
+ /api/pharmacodynamic/{id}/sbml/:
+ put:
+ operationId: pharmacodynamic_sbml_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
tags:
- - api
- post:
- operationId: createPharmacokineticModel
- description: ''
- parameters: []
+ - pharmacodynamic
requestBody:
content:
- application/json:
- schema:
- $ref: '#/components/schemas/Pharmacokinetic'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/Pharmacokinetic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
- responses:
- '201':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Pharmacokinetic'
- description: ''
- tags:
- - api
- /api/pharmacokinetic/{id}/:
- get:
- operationId: retrievePharmacokineticModel
- description: ''
- parameters:
- - name: id
- in: path
+ $ref: '#/components/schemas/PharmacodynamicSbml'
required: true
- description: A unique integer value identifying this pharmacokinetic model.
- schema:
- type: string
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/PharmacodynamicSbml'
description: ''
- tags:
- - api
+ /api/pharmacodynamic/{id}/set_variables_from_inference/:
put:
- operationId: updatePharmacokineticModel
- description: ''
+ operationId: pharmacodynamic_set_variables_from_inference_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacokinetic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Pharmacodynamic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Pharmacodynamic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Pharmacodynamic'
description: ''
- tags:
- - api
- patch:
- operationId: partialUpdatePharmacokineticModel
- description: ''
+ /api/pharmacodynamic/{id}/simulate:
+ post:
+ operationId: pharmacodynamic_simulate_create
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacokinetic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ required: true
+ tags:
+ - pharmacodynamic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Simulate'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Simulate'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/Simulate'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacokinetic'
+ $ref: '#/components/schemas/SimulateResponse'
description: ''
- tags:
- - api
- delete:
- operationId: destroyPharmacokineticModel
- description: ''
- parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacokinetic model.
- schema:
- type: string
- responses:
- '204':
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
description: ''
- tags:
- - api
- /api/pharmacodynamic/:
+ '404':
+ description: No response body
+ /api/pharmacokinetic/:
get:
- operationId: listPharmacodynamicModels
- description: ''
- parameters: []
+ operationId: pharmacokinetic_list
+ tags:
+ - pharmacokinetic
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -1500,134 +1686,141 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
description: ''
- tags:
- - api
post:
- operationId: createPharmacodynamicModel
- description: ''
- parameters: []
+ operationId: pharmacokinetic_create
+ tags:
+ - pharmacokinetic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
description: ''
- tags:
- - api
- /api/pharmacodynamic/{id}/:
+ /api/pharmacokinetic/{id}/:
get:
- operationId: retrievePharmacodynamicModel
- description: ''
+ operationId: pharmacokinetic_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
description: ''
- tags:
- - api
put:
- operationId: updatePharmacodynamicModel
- description: ''
+ operationId: pharmacokinetic_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdatePharmacodynamicModel
- description: ''
+ operationId: pharmacokinetic_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/PatchedPharmacokinetic'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/PatchedPharmacokinetic'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/PatchedPharmacokinetic'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Pharmacokinetic'
description: ''
- tags:
- - api
delete:
- operationId: destroyPharmacodynamicModel
- description: ''
+ operationId: pharmacokinetic_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
- tags:
- - api
- /api/dosed_pharmacokinetic/:
+ description: No response body
+ /api/project/:
get:
- operationId: listDosedPharmacokineticModels
- description: ''
- parameters: []
+ operationId: project_list
+ description: Enable partial updates
+ tags:
+ - project
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -1635,138 +1828,173 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
description: ''
- tags:
- - api
post:
- operationId: createDosedPharmacokineticModel
- description: ''
- parameters: []
+ operationId: project_create
+ description: Enable partial updates
+ tags:
+ - project
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
multipart/form-data:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
description: ''
- tags:
- - api
- /api/dosed_pharmacokinetic/{id}/:
+ /api/project/{id}/:
get:
- operationId: retrieveDosedPharmacokineticModel
- description: ''
+ operationId: project_retrieve
+ description: Enable partial updates
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dosed pharmacokinetic
- model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
description: ''
- tags:
- - api
put:
- operationId: updateDosedPharmacokineticModel
- description: ''
+ operationId: project_update
+ description: Enable partial updates
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dosed pharmacokinetic
- model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
multipart/form-data:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateDosedPharmacokineticModel
- description: ''
+ operationId: project_partial_update
+ description: Enable partial updates
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dosed pharmacokinetic
- model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/PatchedProject'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/PatchedProject'
multipart/form-data:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/PatchedProject'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Project'
description: ''
- tags:
- - api
delete:
- operationId: destroyDosedPharmacokineticModel
- description: ''
+ operationId: project_destroy
+ description: Enable partial updates
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dosed pharmacokinetic
- model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/project/{id}/monolix/:
+ put:
+ operationId: project_monolix_update
+ description: Enable partial updates
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
tags:
- - api
- /api/inference/:
+ - project
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Monolix'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Monolix'
+ description: ''
+ /api/project_access/:
get:
- operationId: listInferences
- description: ''
- parameters: []
+ operationId: project_access_list
+ tags:
+ - project_access
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -1774,134 +2002,146 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
description: ''
- tags:
- - api
post:
- operationId: createInference
- description: ''
- parameters: []
+ operationId: project_access_create
+ tags:
+ - project_access
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
description: ''
- tags:
- - api
- /api/inference/{id}/:
+ /api/project_access/{id}/:
get:
- operationId: retrieveInference
- description: ''
+ operationId: project_access_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
description: ''
- tags:
- - api
put:
- operationId: updateInference
- description: ''
+ operationId: project_access_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateInference
- description: ''
+ operationId: project_access_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/PatchedProjectAccess'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/PatchedProjectAccess'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/PatchedProjectAccess'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Inference'
+ $ref: '#/components/schemas/ProjectAccess'
description: ''
- tags:
- - api
delete:
- operationId: destroyInference
- description: ''
+ operationId: project_access_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
- tags:
- - api
- /api/algorithm/:
+ description: No response body
+ /api/protocol/:
get:
- operationId: listAlgorithms
- description: ''
- parameters: []
+ operationId: protocol_list
+ parameters:
+ - in: query
+ name: project_id
+ schema:
+ type: integer
+ description: Filter results by project ID
+ tags:
+ - protocol
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -1909,134 +2149,157 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
description: ''
- tags:
- - api
post:
- operationId: createAlgorithm
- description: ''
- parameters: []
- requestBody:
+ operationId: protocol_create
+ tags:
+ - protocol
+ requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
description: ''
- tags:
- - api
- /api/algorithm/{id}/:
+ /api/protocol/{id}/:
get:
- operationId: retrieveAlgorithm
- description: ''
+ operationId: protocol_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this algorithm.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
description: ''
- tags:
- - api
put:
- operationId: updateAlgorithm
- description: ''
+ operationId: protocol_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this algorithm.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateAlgorithm
- description: ''
+ operationId: protocol_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this algorithm.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/PatchedProtocol'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/PatchedProtocol'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/PatchedProtocol'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Algorithm'
+ $ref: '#/components/schemas/Protocol'
description: ''
- tags:
- - api
delete:
- operationId: destroyAlgorithm
- description: ''
+ operationId: protocol_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this algorithm.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
+ description: No response body
+ /api/session/:
+ get:
+ operationId: session_retrieve
tags:
- - api
- /api/inference_chain/:
+ - session
+ security:
+ - cookieAuth: []
+ - basicAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/simulation/:
get:
- operationId: listInferenceChains
- description: ''
- parameters: []
+ operationId: simulation_list
+ parameters:
+ - in: query
+ name: project_id
+ schema:
+ type: integer
+ description: Filter results by project ID
+ tags:
+ - simulation
+ security:
+ - cookieAuth: []
responses:
'200':
content:
@@ -2044,653 +2307,1084 @@ paths:
schema:
type: array
items:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
description: ''
- tags:
- - api
post:
- operationId: createInferenceChain
- description: ''
- parameters: []
+ operationId: simulation_create
+ tags:
+ - simulation
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
multipart/form-data:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
description: ''
- tags:
- - api
- /api/inference_chain/{id}/:
+ /api/simulation/{id}/:
get:
- operationId: retrieveInferenceChain
- description: ''
+ operationId: simulation_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference chain.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this simulation.
+ required: true
+ tags:
+ - simulation
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
description: ''
- tags:
- - api
put:
- operationId: updateInferenceChain
- description: ''
+ operationId: simulation_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference chain.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this simulation.
+ required: true
+ tags:
+ - simulation
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
multipart/form-data:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
description: ''
- tags:
- - api
patch:
- operationId: partialUpdateInferenceChain
- description: ''
+ operationId: simulation_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference chain.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this simulation.
+ required: true
+ tags:
+ - simulation
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/PatchedSimulation'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/PatchedSimulation'
multipart/form-data:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/PatchedSimulation'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/InferenceChain'
+ $ref: '#/components/schemas/Simulation'
description: ''
- tags:
- - api
delete:
- operationId: destroyInferenceChain
- description: ''
+ operationId: simulation_destroy
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this inference chain.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this simulation.
+ required: true
+ tags:
+ - simulation
+ security:
+ - cookieAuth: []
responses:
'204':
- description: ''
- tags:
- - api
- /api/session/:
+ description: No response body
+ /api/subject/:
get:
- operationId: listSessions
- description: ''
- parameters: []
- responses:
- '200':
- content:
- application/json:
- schema:
- type: array
- items: {}
- description: ''
+ operationId: subject_list
tags:
- - api
- /api/whoami/:
- get:
- operationId: listWhoAmIs
- description: ''
- parameters: []
+ - subject
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
type: array
- items: {}
+ items:
+ $ref: '#/components/schemas/Subject'
description: ''
- tags:
- - api
- /api/nca/:
post:
- operationId: createNca
- description: ''
- parameters: []
+ operationId: subject_create
+ tags:
+ - subject
requestBody:
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
application/x-www-form-urlencoded:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
multipart/form-data:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
description: ''
+ /api/subject/{id}/:
+ get:
+ operationId: subject_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
tags:
- - api
- /api/auce/:
- post:
- operationId: createAuce
- description: ''
- parameters: []
- requestBody:
- content:
- application/json:
- schema: {}
- application/x-www-form-urlencoded:
- schema: {}
- multipart/form-data:
- schema: {}
+ - subject
+ security:
+ - cookieAuth: []
responses:
- '201':
+ '200':
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
description: ''
- tags:
- - api
- /api/dosed_pharmacokinetic/{id}/simulate:
- post:
- operationId: createSimulatePk
- description: ''
+ put:
+ operationId: subject_update
parameters:
- - name: id
- in: path
- required: true
- description: ''
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
+ tags:
+ - subject
requestBody:
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
application/x-www-form-urlencoded:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
multipart/form-data:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
+ required: true
+ security:
+ - cookieAuth: []
responses:
- '201':
+ '200':
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
description: ''
+ patch:
+ operationId: subject_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
tags:
- - api
- /api/inference/wizard:
- post:
- operationId: createInferenceWizard
- description: "expecting data in the form:\n{\n\n # Inference parameters\n\
- \ 'id': 1\n 'name': \"my inference run\",\n 'project': 1,\n 'algorithm':\
- \ 2,\n 'initialization_strategy': 'R',\n 'initialization_inference':\
- \ 2,\n 'number_of_chains': 4,\n 'max_number_of_iterations': 3000,\n\
- \ 'burn_in': 0,\n\n # Model\n 'model': {\n 'form': 'PK',\n\
- \ 'id': 5\n }\n 'dataset': 3,\n\n # Model parameters\n \
- \ 'parameters': [\n {\n 'name': 'myokit.parameter1'\n \
- \ 'form': 'N',\n 'pooled': False,\n 'parameters':\
- \ [\n '2 * biomarker[subject_weight]',\n 'parameter[parameter1_variance]'\n\
- \ ]\n },\n {\n 'name': 'parameter1_variance'\n\
- \ 'form': 'N',\n 'parameters': [0, 1]\n },\n\
- \ {\n 'name': 'myokit.parameter2'\n 'form': 'U',\n\
- \ 'parameters': [-1, 1]\n },\n {\n 'name':\
- \ 'myokit.parameter3'\n 'form': 'F',\n 'parameters':\
- \ [123.5]\n },\n ]\n\n # output\n 'observations': [\n \
- \ {\n 'model': 'myokit.plasma_concentration',\n 'biomarker':\
- \ 'concentration,\n 'noise_form': 'N',\n 'noise_param_form':\
- \ 'N',\n 'parameters': [0, 1]\n },\n {\n \
- \ 'model': 'myokit.bacteria_count',\n 'biomarker': 'bacteria,\n\
- \ 'noise_form': 'LN',\n 'noise_param_form': 'F'\n \
- \ 'parameters': [123.3]\n },\n ]\n}\n\nUses model as the\
- \ base model. If it is a PK or PKPD model, creates a model\nfor each protocol\
- \ used in the dataset, replacing the protocol of the model\nwith each new\
- \ one.\n\nThis set of models has a set of parameters. If pooled is True or\
- \ not given,\nthen parameters of the same qname are assumed to be identical,\
- \ if pooled is\nFalse, then the value of this parameter is different across\
- \ each subject.\nAll Variable fields from the original model are copied over\
- \ to the new\nmodels. Priors and fixed values for each parameter in this set\
- \ are provided\nin 'parameters'. Distribution parameters for each prior can\
- \ be provided\nusing a python expression, or a number. If a python expression\
- \ is used, the\nkeywords Parameter[] are used to refer to other\
- \ parameters in\nthe list. Additional parameters can be added to the list\
- \ (parameters not in\nthe model) to contruct hierarchical inference. You can\
- \ refer to biomarkers\nin the expression using the keyword Biomarker[].\n\
- \nThe 'observations' field maps model output variables with biomarkers in\
- \ the\ndataset"
- parameters: []
+ - subject
requestBody:
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/PatchedSubject'
application/x-www-form-urlencoded:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/PatchedSubject'
multipart/form-data:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/PatchedSubject'
+ security:
+ - cookieAuth: []
responses:
- '201':
+ '200':
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Subject'
description: ''
- tags:
- - api
- /api/inference/{id}/stop:
- post:
- operationId: createStopInference
- description: ''
+ delete:
+ operationId: subject_destroy
parameters:
- - name: id
- in: path
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
required: true
- description: ''
+ tags:
+ - subject
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/unit/:
+ get:
+ operationId: unit_list
+ parameters:
+ - in: query
+ name: compound_id
schema:
- type: string
- requestBody:
- content:
- application/json:
- schema: {}
- application/x-www-form-urlencoded:
- schema: {}
- multipart/form-data:
- schema: {}
+ type: integer
+ description: Enable conversions based on compound information
+ tags:
+ - unit
+ security:
+ - cookieAuth: []
responses:
- '201':
+ '200':
content:
application/json:
- schema: {}
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Unit'
description: ''
- tags:
- - api
- /api/pharmacodynamic/{id}/simulate:
post:
- operationId: createSimulatePd
- description: ''
- parameters:
- - name: id
- in: path
- required: true
- description: ''
- schema:
- type: string
+ operationId: unit_create
+ tags:
+ - unit
requestBody:
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Unit'
application/x-www-form-urlencoded:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Unit'
multipart/form-data:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Unit'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'201':
content:
application/json:
- schema: {}
+ schema:
+ $ref: '#/components/schemas/Unit'
description: ''
- tags:
- - api
- /api/dataset/{id}/csv/:
- put:
- operationId: csvDataset
- description: ''
+ /api/unit/{id}/:
+ get:
+ operationId: unit_retrieve
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this dataset.
+ - in: query
+ name: compound_id
schema:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/DatasetCsv'
+ type: integer
+ description: Enable conversions based on compound information
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/DatasetCsv'
+ $ref: '#/components/schemas/Unit'
description: ''
- tags:
- - api
- /api/project/{id}/monolix/:
put:
- operationId: monolixProject
- description: ''
+ operationId: unit_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this project.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
requestBody:
content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Unit'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Monolix'
+ $ref: '#/components/schemas/Unit'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Monolix'
+ $ref: '#/components/schemas/Unit'
description: ''
- tags:
- - api
- /api/pharmacodynamic/{id}/mmt/:
- put:
- operationId: mmtPharmacodynamicModel
- description: ''
+ patch:
+ operationId: unit_partial_update
parameters:
- - name: id
- in: path
- required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
requestBody:
content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedUnit'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedUnit'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/PatchedUnit'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Unit'
description: ''
+ delete:
+ operationId: unit_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
tags:
- - api
- /api/pharmacodynamic/{id}/sbml/:
- put:
- operationId: sbmlPharmacodynamicModel
- description: ''
+ - unit
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/user/:
+ get:
+ operationId: user_list
+ tags:
+ - user
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/User'
+ description: ''
+ post:
+ operationId: user_create
+ tags:
+ - user
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/User'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/User'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ /api/user/{id}/:
+ get:
+ operationId: user_retrieve
parameters:
- - name: id
- in: path
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ tags:
+ - user
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ put:
+ operationId: user_update
+ parameters:
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this user.
+ required: true
+ tags:
+ - user
requestBody:
content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/User'
multipart/form-data:
schema:
- $ref: '#/components/schemas/PharmacodynamicSbml'
+ $ref: '#/components/schemas/User'
+ required: true
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/PharmacodynamicSbml'
+ $ref: '#/components/schemas/User'
description: ''
+ patch:
+ operationId: user_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
+ required: true
tags:
- - api
- /api/pharmacodynamic/{id}/set_variables_from_inference/:
- put:
- operationId: setVariablesFromInferencePharmacodynamicModel
- description: ''
+ - user
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedUser'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedUser'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedUser'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ delete:
+ operationId: user_destroy
parameters:
- - name: id
- in: path
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
required: true
- description: A unique integer value identifying this pharmacodynamic model.
+ tags:
+ - user
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/variable/:
+ get:
+ operationId: variable_list
+ parameters:
+ - in: query
+ name: dosed_pk_model_id
schema:
- type: string
+ type: integer
+ description: Filter results by dosed_pk_model ID
+ - in: query
+ name: pd_model_id
+ schema:
+ type: integer
+ description: Filter results by pd_model ID
+ - in: query
+ name: project_id
+ schema:
+ type: integer
+ description: Filter results by project ID
+ tags:
+ - variable
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ post:
+ operationId: variable_create
+ tags:
+ - variable
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Variable'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Variable'
multipart/form-data:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Variable'
+ required: true
+ security:
+ - cookieAuth: []
responses:
- '200':
+ '201':
content:
application/json:
schema:
- $ref: '#/components/schemas/Pharmacodynamic'
+ $ref: '#/components/schemas/Variable'
description: ''
+ /api/variable/{id}/:
+ get:
+ operationId: variable_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
tags:
- - api
- /api/dosed_pharmacokinetic/{id}/set_variables_from_inference/:
+ - variable
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ description: ''
put:
- operationId: setVariablesFromInferenceDosedPharmacokineticModel
- description: ''
+ operationId: variable_update
parameters:
- - name: id
- in: path
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Variable'
required: true
- description: A unique integer value identifying this dosed pharmacokinetic
- model.
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ patch:
+ operationId: variable_partial_update
+ parameters:
+ - in: path
+ name: id
schema:
- type: string
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/PatchedVariable'
application/x-www-form-urlencoded:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/PatchedVariable'
multipart/form-data:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/PatchedVariable'
+ security:
+ - cookieAuth: []
responses:
'200':
content:
application/json:
schema:
- $ref: '#/components/schemas/DosedPharmacokinetic'
+ $ref: '#/components/schemas/Variable'
description: ''
+ delete:
+ operationId: variable_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/whoami/:
+ get:
+ operationId: whoami_retrieve
tags:
- - api
+ - whoami
+ security:
+ - cookieAuth: []
+ - basicAuth: []
+ responses:
+ '200':
+ description: No response body
components:
schemas:
- Dataset:
+ Algorithm:
type: object
properties:
id:
type: integer
readOnly: true
- biomarker_types:
- type: array
- items:
- type: string
+ name:
+ type: string
+ description: name of the algorithm
+ maxLength: 100
+ category:
+ $ref: '#/components/schemas/CategoryEnum'
+ required:
+ - category
+ - id
+ - name
+ BiomarkerType:
+ type: object
+ properties:
+ id:
+ type: integer
readOnly: true
- subjects:
- type: array
- items:
- type: string
+ data:
+ type: object
+ additionalProperties:
+ type: array
+ items: {}
+ nullable: true
readOnly: true
- protocols:
- type: string
+ is_continuous:
+ type: boolean
+ readOnly: true
+ is_categorical:
+ type: boolean
readOnly: true
name:
type: string
- description: name of the dataset
+ description: name of the biomarker type
maxLength: 100
- datetime:
- type: string
- format: date-time
- nullable: true
- description: date/time the experiment was conducted. All time measurements
- are relative to this date/time, which is in YYYY-MM-DD HH:MM:SS format.
- For example, 2020-07-18 14:30:59
description:
type: string
- description: short description of the dataset
- project:
- type: integer
nullable: true
- description: Project that "owns" this model
+ description: short description of the biomarker type
+ display:
+ type: boolean
+ description: True if this biomarker type will be displayed in the frontend,
+ False otherwise
+ color:
+ type: integer
+ description: Color index associated with this biomarker type. For plotting
+ purposes in the frontend
+ axis:
+ type: boolean
+ description: True/False if biomarker type displayed on LHS/RHS axis
+ stored_unit:
+ type: integer
+ description: unit for the value stored in :model:`pkpdapp.Biomarker`
+ dataset:
+ type: integer
+ description: dataset containing this biomarker measurement
+ display_unit:
+ type: integer
+ description: unit to use when sending or displaying biomarker values
+ stored_time_unit:
+ type: integer
+ description: unit for the time values stored in :model:`pkpdapp.Biomarker`
+ display_time_unit:
+ type: integer
+ description: unit to use when sending or displaying time values
required:
+ - data
+ - dataset
+ - display_time_unit
+ - display_unit
+ - id
+ - is_categorical
+ - is_continuous
- name
- User:
+ - stored_time_unit
+ - stored_unit
+ CategoryEnum:
+ enum:
+ - SA
+ - OP
+ - OT
+ type: string
+ description: |-
+ * `SA` - Sampling
+ * `OP` - Optimisation
+ * `OT` - Optimisation
+ CombinedModel:
type: object
properties:
id:
type: integer
readOnly: true
- username:
- type: string
- description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
- only.
- pattern: ^[\w.@+-]+\z
- maxLength: 150
- first_name:
- type: string
- maxLength: 150
- last_name:
- type: string
- maxLength: 150
- email:
+ mappings:
+ type: array
+ items:
+ $ref: '#/components/schemas/PkpdMapping'
+ derived_variables:
+ type: array
+ items:
+ $ref: '#/components/schemas/DerivedVariable'
+ components:
type: string
- format: email
- maxLength: 254
- profile:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- user:
- type: integer
- required:
- - user
readOnly: true
- project_set:
+ variables:
type: array
items:
- type: string
+ type: integer
readOnly: true
- required:
- - username
- Subject:
- type: object
- properties:
- id:
- type: integer
+ mmt:
+ type: string
readOnly: true
- id_in_dataset:
- type: integer
- description: unique id in the dataset
- shape:
+ time_unit:
type: integer
- description: Shape index associated with this subject. For plotting purposes
- in the frontend
- display:
+ readOnly: true
+ is_library_model:
type: boolean
- description: True if this subject will be displayed in the frontend, False
- otherwise
- metadata:
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
type: string
- description: subject metadata
- dataset:
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ species:
+ allOf:
+ - $ref: '#/components/schemas/CombinedModelSpeciesEnum'
+ description: |-
+ species
+
+ * `H` - human
+ * `R` - rat
+ * `N` - non-human primate
+ * `M` - mouse
+ has_saturation:
+ type: boolean
+ description: whether the pk model has saturation
+ has_effect:
+ type: boolean
+ description: whether the pk model has effect compartment
+ has_lag:
+ type: boolean
+ description: whether the pk model has lag
+ has_bioavailability:
+ type: boolean
+ description: whether the pk model has bioavailability
+ has_hill_coefficient:
+ type: boolean
+ description: whether the pd model has hill coefficient
+ time_max:
+ type: number
+ format: double
+ description: suggested time to simulate after the last dose (in the time
+ units specified by the mmt model)
+ project:
type: integer
- description: dataset containing this subject
- protocol:
+ nullable: true
+ description: Project that "owns" this model
+ pk_model:
type: integer
nullable: true
- description: dosing protocol for this subject.
+ description: model
+ pd_model:
+ type: integer
+ nullable: true
+ description: PD part of model
+ pd_model2:
+ type: integer
+ nullable: true
+ description: second PD part of model
required:
- - id_in_dataset
- - dataset
- Project:
+ - components
+ - derived_variables
+ - id
+ - is_library_model
+ - mappings
+ - mmt
+ - name
+ - time_unit
+ - variables
+ CombinedModelSpeciesEnum:
+ enum:
+ - H
+ - R
+ - N
+ - M
+ type: string
+ description: |-
+ * `H` - human
+ * `R` - rat
+ * `N` - non-human primate
+ * `M` - mouse
+ Compound:
type: object
properties:
id:
type: integer
readOnly: true
- user_access:
+ efficacy_experiments:
type: array
items:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- read_only:
- type: boolean
- description: True if user has read access only
- user:
- type: integer
- project:
- type: string
- readOnly: true
- required:
- - user
+ $ref: '#/components/schemas/Efficacy'
name:
type: string
- description: name of the project
+ description: name of the compound
maxLength: 100
description:
type: string
- description: short description of the project
- users:
+ description: short description of the compound
+ molecular_mass:
+ type: number
+ format: double
+ description: molecular mass for compound for conversion from mol to grams
+ compound_type:
+ $ref: '#/components/schemas/CompoundTypeEnum'
+ fraction_unbound_plasma:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound plasma (unitless)
+ blood_to_plasma_ratio:
+ type: number
+ format: double
+ nullable: true
+ description: blood to plasma ratio (unitless)
+ intrinsic_clearance:
+ type: number
+ format: double
+ nullable: true
+ description: intrinsic clearance
+ intrinsic_clearance_assay:
+ $ref: '#/components/schemas/IntrinsicClearanceAssayEnum'
+ fraction_unbound_including_cells:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound in plasma and red blood cells (unitless)
+ target_molecular_mass:
+ type: number
+ format: double
+ description: molecular mass for target for conversion from mol to grams
+ target_concentration:
+ type: number
+ format: double
+ nullable: true
+ description: target concentration
+ dissociation_constant:
+ type: number
+ format: double
+ nullable: true
+ description: dissociation constant
+ is_soluble:
+ type: boolean
+ description: is the compound target soluble
+ use_efficacy:
+ type: integer
+ nullable: true
+ molecular_mass_unit:
+ type: integer
+ description: unit for molecular mass (e.g. g/mol)
+ intrinsic_clearance_unit:
+ type: integer
+ description: unit for intrinsic clearance
+ target_molecular_mass_unit:
+ type: integer
+ description: unit for target molecular mass (e.g. g/mol)
+ target_concentration_unit:
+ type: integer
+ description: unit for target concentration
+ dissociation_unit:
+ type: integer
+ description: unit for dissociation constant
+ required:
+ - efficacy_experiments
+ - id
+ - name
+ CompoundTypeEnum:
+ enum:
+ - SM
+ - LM
+ type: string
+ description: |-
+ * `SM` - Small Molecule
+ * `LM` - Large Molecule
+ Dataset:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ biomarker_types:
type: array
items:
- type: string
+ type: integer
readOnly: true
- description: users with access to this project
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ protocols:
+ type: array
+ items:
+ $ref: '#/components/schemas/Protocol'
+ readOnly: true
+ name:
+ type: string
+ description: name of the dataset
+ maxLength: 100
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: date/time the experiment was conducted. All time measurements
+ are relative to this date/time, which is in YYYY-MM-DD HH:MM:SS format.
+ For example, 2020-07-18 14:30:59
+ description:
+ type: string
+ description: short description of the dataset
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
required:
- - user_access
+ - biomarker_types
+ - id
- name
- ProjectAccess:
+ - protocols
+ - subjects
+ DatasetCsv:
+ type: object
+ properties:
+ csv:
+ type: string
+ format: uri
+ required:
+ - csv
+ DerivedVariable:
type: object
properties:
id:
@@ -2698,14 +3392,33 @@ components:
readOnly: true
read_only:
type: boolean
- description: True if user has read access only
- user:
- type: integer
- project:
+ description: true if object has been stored
+ datetime:
type: string
- readOnly: true
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ type:
+ allOf:
+ - $ref: '#/components/schemas/TypeEnum'
+ description: |-
+ type of derived variable
+
+ * `RO` - receptor occupancy
+ * `FUP` - faction unbound plasma
+ * `BPR` - blood plasma ratio
+ * `TLG` - dosing lag time
+ pkpd_model:
+ type: integer
+ description: PKPD model that this derived variable is for
+ pk_variable:
+ type: integer
+ description: base variable in PK part of model
required:
- - user
+ - id
+ - pk_variable
+ - pkpd_model
+ - type
Dose:
type: object
properties:
@@ -2714,15 +3427,25 @@ components:
readOnly: true
start_time:
type: number
+ format: double
description: starting time point of dose, see protocol for units
amount:
type: number
+ format: double
description: amount of compound administered over the duration, see protocol
for units. Rate of administration is assumed constant
duration:
type: number
+ format: double
description: Duration of dose administration, see protocol for units. Duration
must be greater than 0.
+ repeats:
+ type: integer
+ description: 'Number of times to repeat the dose. '
+ repeat_interval:
+ type: number
+ format: double
+ description: 'Interval between repeated doses. See protocol for units. '
read_only:
type: boolean
description: true if object has been stored
@@ -2731,58 +3454,82 @@ components:
format: date-time
nullable: true
description: datetime the object was stored.
- protocol:
- type: integer
- description: protocol containing this dose
required:
- - start_time
- amount
- - protocol
- Unit:
+ - id
+ - start_time
+ DoseTypeEnum:
+ enum:
+ - D
+ - I
+ type: string
+ description: |-
+ * `D` - IV
+ * `I` - Extravascular
+ Efficacy:
type: object
properties:
id:
type: integer
readOnly: true
- compatible_units:
- type: string
- readOnly: true
- symbol:
+ name:
type: string
- description: symbol for unit display
- maxLength: 50
- g:
- type: number
- description: grams exponent
- m:
- type: number
- description: meters exponent
- s:
- type: number
- description: seconds exponent
- A:
- type: number
- description: ampere exponent
- K:
- type: number
- description: kelvin exponent
- cd:
- type: number
- description: candela exponent
- mol:
+ description: name of the experiment
+ maxLength: 100
+ c50:
type: number
- description: mole exponent
- multiplier:
+ format: double
+ description: half maximal effective concentration
+ hill_coefficient:
type: number
- description: multiplier in powers of 10
+ format: double
+ description: Hill coefficient measure of binding
+ c50_unit:
+ type: integer
+ description: unit for c50
+ compound:
+ type: integer
+ description: compound for efficacy experiment
required:
- - symbol
- Variable:
+ - c50
+ - c50_unit
+ - compound
+ - id
+ ErrorResponse:
+ type: object
+ properties:
+ error:
+ type: string
+ required:
+ - error
+ FormEnum:
+ enum:
+ - N
+ - U
+ - LN
+ - F
+ - S
+ - E
+ - M
+ type: string
+ description: |-
+ * `N` - Normal
+ * `U` - Uniform
+ * `LN` - Log-Normal
+ * `F` - Fixed
+ * `S` - Sum
+ * `E` - Equation
+ * `M` - Model
+ Inference:
type: object
properties:
id:
type: integer
readOnly: true
+ log_likelihoods:
+ type: array
+ items:
+ $ref: '#/components/schemas/LogLikelihood'
read_only:
type: boolean
description: true if object has been stored
@@ -2791,296 +3538,315 @@ components:
format: date-time
nullable: true
description: datetime the object was stored.
- is_public:
- type: boolean
- lower_bound:
- type: number
- description: lowest possible value for this variable
- upper_bound:
- type: number
- description: largest possible value for this variable
- default_value:
- type: number
- description: default value for this variable
- is_log:
- type: boolean
- description: True if default_value is stored as the log of this value
name:
type: string
- description: name of the variable
- maxLength: 100
- binding:
- type: string
- nullable: true
- description: myokit binding of the variable (e.g. time)
+ description: name of the dataset
maxLength: 100
- qname:
+ description:
type: string
- description: fully qualitifed name of the variable
- maxLength: 200
- constant:
- type: boolean
- description: True for a constant variable of the model, i.e. a parameter.
- False if non-constant, i.e. an output of the model (default is True)
- state:
- type: boolean
- description: True if it is a state variable of the model and has an initial
- condition parameter (default is False)
- color:
+ description: short description of what this inference does
+ initialization_strategy:
+ $ref: '#/components/schemas/InitializationStrategyEnum'
+ number_of_chains:
type: integer
- description: Color index associated with this variable. For display purposes
- in the frontend
- display:
- type: boolean
- description: True if this variable will be displayed in the frontend, False
- otherwise
- axis:
- type: boolean
- description: False/True if biomarker type displayed on LHS/RHS axis
- unit:
+ description: number of chains
+ max_number_of_iterations:
type: integer
- nullable: true
- description: variable values are in this unit (note this might be different
- from the unit in the stored sbml)
- pd_model:
+ description: maximum number of iterations
+ burn_in:
type: integer
- nullable: true
- description: pharmacodynamic model
- pk_model:
+ description: final iteration of burn-in
+ number_of_iterations:
+ type: integer
+ description: number of iterations calculated
+ time_elapsed:
+ type: integer
+ description: Elapsed run time for inference in seconds
+ number_of_function_evals:
type: integer
+ description: number of function evaluations
+ task_id:
+ type: string
nullable: true
- description: pharmacokinetic model
- dosed_pk_model:
+ description: If executing, this is the celery task id
+ maxLength: 40
+ metadata:
+ type: object
+ additionalProperties: {}
+ description: metadata for inference
+ project:
+ type: integer
+ description: Project that "owns" this inference object
+ algorithm:
+ type: integer
+ description: algorithm used to perform the inference
+ initialization_inference:
type: integer
nullable: true
- description: dosed pharmacokinetic model
required:
+ - id
+ - log_likelihoods
- name
- - qname
- Protocol:
+ - project
+ InferenceChain:
type: object
properties:
id:
type: integer
readOnly: true
- doses:
- type: array
- items:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- start_time:
- type: number
- description: starting time point of dose, see protocol for units
- amount:
- type: number
- description: amount of compound administered over the duration, see
- protocol for units. Rate of administration is assumed constant
- duration:
- type: number
- description: Duration of dose administration, see protocol for units.
- Duration must be greater than 0.
- read_only:
- type: boolean
- description: true if object has been stored
- datetime:
- type: string
- format: date-time
- nullable: true
- description: datetime the object was stored.
- protocol:
- type: integer
- description: protocol containing this dose
- required:
- - start_time
- - amount
- - protocol
- readOnly: true
- dose_ids:
+ data:
+ type: string
+ readOnly: true
+ outputs:
+ type: string
+ readOnly: true
+ inference:
+ type: integer
+ description: inference for this chain
+ required:
+ - data
+ - id
+ - inference
+ - outputs
+ InitializationStrategyEnum:
+ enum:
+ - D
+ - R
+ - F
+ type: string
+ description: |-
+ * `D` - Default Value of model
+ * `R` - Random from prior
+ * `F` - From other inference
+ IntrinsicClearanceAssayEnum:
+ enum:
+ - MS
+ - HC
+ type: string
+ description: |-
+ * `MS` - Microsomes
+ * `HC` - Hepatocytes
+ LogLikelihood:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ parameters:
type: array
items:
- type: string
- writeOnly: true
- dosed_pk_models:
+ $ref: '#/components/schemas/LogLikelihoodParameter'
+ model:
type: array
items:
type: string
+ minLength: 2
+ maxLength: 2
+ nullable: true
readOnly: true
dataset:
- type: string
+ type: integer
+ nullable: true
readOnly: true
- subjects:
- type: array
- items:
- type: string
+ time_variable:
+ type: integer
+ nullable: true
readOnly: true
- read_only:
+ is_a_prior:
type: boolean
- description: true if object has been stored
- datetime:
- type: string
- format: date-time
- nullable: true
- description: datetime the object was stored.
+ readOnly: true
name:
type: string
- description: name of the protocol
+ description: name of log_likelihood.
maxLength: 100
- dose_type:
- enum:
- - D
- - I
+ description:
type: string
- project:
- type: integer
nullable: true
- description: Project that "owns" this protocol.
- compound:
+ description: 'description of log_likelihood. For equations will be the code
+ of that equation using Python syntax: arg1 * arg2^arg3'
+ value:
+ type: number
+ format: double
+ nullable: true
+ description: set if a fixed value is required
+ time_independent_data:
+ type: boolean
+ description: 'True if biomarker_type refers to time-independent data. If
+ there are multiple timepoints in biomarker_type then only the first is
+ taken '
+ observed:
+ type: boolean
+ description: 'True if this log_likelihood is observed '
+ form:
+ $ref: '#/components/schemas/FormEnum'
+ inference:
+ type: integer
+ readOnly: true
+ description: 'Log_likelihood belongs to this inference object. '
+ variable:
type: integer
nullable: true
- description: drug compound
- time_unit:
+ description: 'If form=MODEL, a variable (any) in the deterministic model. '
+ biomarker_type:
type: integer
nullable: true
- description: unit for the start_time and duration values stored in each
- dose
- amount_unit:
+ description: data associated with this log_likelihood. This is used for
+ measurement data (observed=True) or for covariates (observed=False). The
+ random variable associated with this log_likelihood has the same shape
+ as this data. For covariates the subject ids in the data correspond to
+ the values of the random variable at that location.
+ protocol_filter:
type: integer
nullable: true
- description: unit for the amount value stored in each dose
+ description: filter subject data on this protocol(null implies all subjects)
+ children:
+ type: array
+ items:
+ type: integer
+ readOnly: true
required:
- - dose_ids
+ - children
+ - dataset
+ - id
+ - inference
+ - is_a_prior
+ - model
- name
- BiomarkerType:
+ - parameters
+ - time_variable
+ LogLikelihoodParameter:
type: object
properties:
id:
type: integer
readOnly: true
- data:
- type: string
- readOnly: true
- is_continuous:
- type: string
- readOnly: true
- is_categorical:
- type: string
- readOnly: true
name:
type: string
- description: name of the biomarker type
+ description: name of log_likelihood parameter.
maxLength: 100
- description:
- type: string
- nullable: true
- description: short description of the biomarker type
- display:
- type: boolean
- description: True if this biomarker type will be displayed in the frontend,
- False otherwise
- color:
+ parent_index:
type: integer
- description: Color index associated with this biomarker type. For plotting
- purposes in the frontend
- axis:
- type: boolean
- description: True/False if biomarker type displayed on LHS/RHS axis
- stored_unit:
+ nullable: true
+ description: parameter index for distribution and equation parameters. blank
+ for models (variable is used instead)
+ child_index:
type: integer
- description: unit for the value stored in :model:`pkpdapp.Biomarker`
- dataset:
+ description: 'output index for all log_likelihoods. '
+ length:
type: integer
- description: dataset containing this biomarker measurement
- display_unit:
+ nullable: true
+ description: length of array representing parameter. null for scalar
+ parent:
type: integer
- description: unit to use when sending or displaying biomarker values
- stored_time_unit:
+ readOnly: true
+ child:
type: integer
- description: unit for the time values stored in :model:`pkpdapp.Biomarker`
- display_time_unit:
+ variable:
type: integer
- description: unit to use when sending or displaying time values
+ nullable: true
+ description: input model variable for this parameter.
required:
+ - child
+ - id
- name
- - stored_unit
- - dataset
- - display_unit
- - stored_time_unit
- - display_time_unit
- Pharmacokinetic:
+ - parent
+ Monolix:
type: object
properties:
- id:
- type: integer
- readOnly: true
- read_only:
- type: boolean
- description: true if object has been stored
- datetime:
- type: string
- format: date-time
- nullable: true
- description: datetime the object was stored.
- name:
+ data_csv:
type: string
- description: name of the model
- maxLength: 100
- description:
+ format: uri
+ writeOnly: true
+ model_txt:
type: string
- description: short description of the model
- mmt:
+ format: uri
+ writeOnly: true
+ project_mlxtran:
type: string
- description: the model represented using mmt (see https://myokit.readthedocs)
- time_max:
- type: number
- description: suggested maximum time to simulate for this model (in the time
- units specified by the mmt model)
+ format: uri
+ writeOnly: true
+ data:
+ type: string
+ readOnly: true
+ pd_model:
+ type: string
+ readOnly: true
+ pk_model:
+ type: string
+ readOnly: true
required:
- - name
- Pharmacodynamic:
+ - data
+ - data_csv
+ - model_txt
+ - pd_model
+ - pk_model
+ - project_mlxtran
+ PatchedAlgorithm:
type: object
properties:
id:
type: integer
readOnly: true
- components:
+ name:
type: string
+ description: name of the algorithm
+ maxLength: 100
+ category:
+ $ref: '#/components/schemas/CategoryEnum'
+ PatchedBiomarkerType:
+ type: object
+ properties:
+ id:
+ type: integer
readOnly: true
- variables:
- type: array
- items:
- type: string
+ data:
+ type: object
+ additionalProperties:
+ type: array
+ items: {}
+ nullable: true
readOnly: true
- mmt:
- type: string
- read_only:
+ is_continuous:
type: boolean
- description: true if object has been stored
- datetime:
- type: string
- format: date-time
- nullable: true
- description: datetime the object was stored.
+ readOnly: true
+ is_categorical:
+ type: boolean
+ readOnly: true
name:
type: string
- description: name of the model
+ description: name of the biomarker type
maxLength: 100
description:
type: string
- description: short description of the model
- time_max:
- type: number
- description: suggested maximum time to simulate for this model (in the time
- units specified by the mmt model)
- project:
- type: integer
nullable: true
- description: Project that "owns" this model
- required:
- - name
- DosedPharmacokinetic:
+ description: short description of the biomarker type
+ display:
+ type: boolean
+ description: True if this biomarker type will be displayed in the frontend,
+ False otherwise
+ color:
+ type: integer
+ description: Color index associated with this biomarker type. For plotting
+ purposes in the frontend
+ axis:
+ type: boolean
+ description: True/False if biomarker type displayed on LHS/RHS axis
+ stored_unit:
+ type: integer
+ description: unit for the value stored in :model:`pkpdapp.Biomarker`
+ dataset:
+ type: integer
+ description: dataset containing this biomarker measurement
+ display_unit:
+ type: integer
+ description: unit to use when sending or displaying biomarker values
+ stored_time_unit:
+ type: integer
+ description: unit for the time values stored in :model:`pkpdapp.Biomarker`
+ display_time_unit:
+ type: integer
+ description: unit to use when sending or displaying time values
+ PatchedCombinedModel:
type: object
properties:
id:
@@ -3089,42 +3855,28 @@ components:
mappings:
type: array
items:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- datetime:
- type: string
- format: date
- readOnly: true
- read_only:
- type: boolean
- readOnly: true
- pkpd_model:
- type: integer
- description: PKPD model that this mapping is for
- pk_variable:
- type: integer
- description: variable in PK part of model
- pd_variable:
- type: integer
- description: variable in PD part of model
- required:
- - pkpd_model
- - pk_variable
- - pd_variable
+ $ref: '#/components/schemas/PkpdMapping'
+ derived_variables:
+ type: array
+ items:
+ $ref: '#/components/schemas/DerivedVariable'
components:
type: string
readOnly: true
variables:
type: array
items:
- type: string
+ type: integer
readOnly: true
mmt:
type: string
readOnly: true
+ time_unit:
+ type: integer
+ readOnly: true
+ is_library_model:
+ type: boolean
+ readOnly: true
read_only:
type: boolean
description: true if object has been stored
@@ -3137,13 +3889,34 @@ components:
type: string
description: name of the model
maxLength: 100
- dose_compartment:
- type: string
- nullable: true
- description: compartment name to be dosed
- maxLength: 100
+ species:
+ allOf:
+ - $ref: '#/components/schemas/CombinedModelSpeciesEnum'
+ description: |-
+ species
+
+ * `H` - human
+ * `R` - rat
+ * `N` - non-human primate
+ * `M` - mouse
+ has_saturation:
+ type: boolean
+ description: whether the pk model has saturation
+ has_effect:
+ type: boolean
+ description: whether the pk model has effect compartment
+ has_lag:
+ type: boolean
+ description: whether the pk model has lag
+ has_bioavailability:
+ type: boolean
+ description: whether the pk model has bioavailability
+ has_hill_coefficient:
+ type: boolean
+ description: whether the pd model has hill coefficient
time_max:
type: number
+ format: double
description: suggested time to simulate after the last dose (in the time
units specified by the mmt model)
project:
@@ -3158,14 +3931,165 @@ components:
type: integer
nullable: true
description: PD part of model
- protocol:
+ pd_model2:
type: integer
nullable: true
- description: dosing protocol
- required:
- - mappings
- - name
- Inference:
+ description: second PD part of model
+ PatchedCompound:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ efficacy_experiments:
+ type: array
+ items:
+ $ref: '#/components/schemas/Efficacy'
+ name:
+ type: string
+ description: name of the compound
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the compound
+ molecular_mass:
+ type: number
+ format: double
+ description: molecular mass for compound for conversion from mol to grams
+ compound_type:
+ $ref: '#/components/schemas/CompoundTypeEnum'
+ fraction_unbound_plasma:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound plasma (unitless)
+ blood_to_plasma_ratio:
+ type: number
+ format: double
+ nullable: true
+ description: blood to plasma ratio (unitless)
+ intrinsic_clearance:
+ type: number
+ format: double
+ nullable: true
+ description: intrinsic clearance
+ intrinsic_clearance_assay:
+ $ref: '#/components/schemas/IntrinsicClearanceAssayEnum'
+ fraction_unbound_including_cells:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound in plasma and red blood cells (unitless)
+ target_molecular_mass:
+ type: number
+ format: double
+ description: molecular mass for target for conversion from mol to grams
+ target_concentration:
+ type: number
+ format: double
+ nullable: true
+ description: target concentration
+ dissociation_constant:
+ type: number
+ format: double
+ nullable: true
+ description: dissociation constant
+ is_soluble:
+ type: boolean
+ description: is the compound target soluble
+ use_efficacy:
+ type: integer
+ nullable: true
+ molecular_mass_unit:
+ type: integer
+ description: unit for molecular mass (e.g. g/mol)
+ intrinsic_clearance_unit:
+ type: integer
+ description: unit for intrinsic clearance
+ target_molecular_mass_unit:
+ type: integer
+ description: unit for target molecular mass (e.g. g/mol)
+ target_concentration_unit:
+ type: integer
+ description: unit for target concentration
+ dissociation_unit:
+ type: integer
+ description: unit for dissociation constant
+ PatchedDataset:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ biomarker_types:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ protocols:
+ type: array
+ items:
+ $ref: '#/components/schemas/Protocol'
+ readOnly: true
+ name:
+ type: string
+ description: name of the dataset
+ maxLength: 100
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: date/time the experiment was conducted. All time measurements
+ are relative to this date/time, which is in YYYY-MM-DD HH:MM:SS format.
+ For example, 2020-07-18 14:30:59
+ description:
+ type: string
+ description: short description of the dataset
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ PatchedDose:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ start_time:
+ type: number
+ format: double
+ description: starting time point of dose, see protocol for units
+ amount:
+ type: number
+ format: double
+ description: amount of compound administered over the duration, see protocol
+ for units. Rate of administration is assumed constant
+ duration:
+ type: number
+ format: double
+ description: Duration of dose administration, see protocol for units. Duration
+ must be greater than 0.
+ repeats:
+ type: integer
+ description: 'Number of times to repeat the dose. '
+ repeat_interval:
+ type: number
+ format: double
+ description: 'Interval between repeated doses. See protocol for units. '
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ PatchedInference:
type: object
properties:
id:
@@ -3174,121 +4098,7 @@ components:
log_likelihoods:
type: array
items:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- parameters:
- type: array
- items:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- name:
- type: string
- description: name of log_likelihood parameter.
- maxLength: 100
- parent_index:
- type: integer
- nullable: true
- description: parameter index for distribution and equation parameters.
- blank for models (variable is used instead)
- child_index:
- type: integer
- description: 'output index for all log_likelihoods. '
- length:
- type: integer
- nullable: true
- description: length of array representing parameter. null for
- scalar
- parent:
- type: string
- readOnly: true
- child:
- type: integer
- variable:
- type: integer
- nullable: true
- description: input model variable for this parameter.
- required:
- - name
- - child
- model:
- type: string
- readOnly: true
- dataset:
- type: string
- readOnly: true
- time_variable:
- type: string
- readOnly: true
- is_a_prior:
- type: string
- readOnly: true
- name:
- type: string
- description: name of log_likelihood.
- maxLength: 100
- description:
- type: string
- nullable: true
- description: 'description of log_likelihood. For equations will be
- the code of that equation using Python syntax: arg1 * arg2^arg3'
- value:
- type: number
- nullable: true
- description: set if a fixed value is required
- time_independent_data:
- type: boolean
- description: 'True if biomarker_type refers to time-independent data.
- If there are multiple timepoints in biomarker_type then only the
- first is taken '
- observed:
- type: boolean
- description: 'True if this log_likelihood is observed '
- form:
- enum:
- - N
- - U
- - LN
- - F
- - S
- - E
- - M
- type: string
- inference:
- type: string
- readOnly: true
- description: 'Log_likelihood belongs to this inference object. '
- variable:
- type: integer
- nullable: true
- description: 'If form=MODEL, a variable (any) in the deterministic
- model. '
- biomarker_type:
- type: integer
- nullable: true
- description: data associated with this log_likelihood. This is used
- for measurement data (observed=True) or for covariates (observed=False).
- The random variable associated with this log_likelihood has the
- same shape as this data. For covariates the subject ids in the data
- correspond to the values of the random variable at that location.
- protocol_filter:
- type: integer
- nullable: true
- description: filter subject data on this protocol(null implies all
- subjects)
- children:
- type: array
- items:
- type: string
- readOnly: true
- required:
- - parameters
- - name
+ $ref: '#/components/schemas/LogLikelihood'
read_only:
type: boolean
description: true if object has been stored
@@ -3305,11 +4115,7 @@ components:
type: string
description: short description of what this inference does
initialization_strategy:
- enum:
- - D
- - R
- - F
- type: string
+ $ref: '#/components/schemas/InitializationStrategyEnum'
number_of_chains:
type: integer
description: number of chains
@@ -3335,6 +4141,7 @@ components:
maxLength: 40
metadata:
type: object
+ additionalProperties: {}
description: metadata for inference
project:
type: integer
@@ -3345,30 +4152,7 @@ components:
initialization_inference:
type: integer
nullable: true
- required:
- - log_likelihoods
- - name
- - project
- Algorithm:
- type: object
- properties:
- id:
- type: integer
- readOnly: true
- name:
- type: string
- description: name of the algorithm
- maxLength: 100
- category:
- enum:
- - SA
- - OP
- - OT
- type: string
- required:
- - name
- - category
- InferenceChain:
+ PatchedInferenceChain:
type: object
properties:
id:
@@ -3383,49 +4167,1182 @@ components:
inference:
type: integer
description: inference for this chain
- required:
- - inference
- DatasetCsv:
+ PatchedPharmacodynamic:
type: object
properties:
- csv:
+ id:
+ type: integer
+ readOnly: true
+ components:
type: string
- format: binary
- required:
- - csv
- Monolix:
- type: object
- properties:
- data_csv:
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ mmt:
+ type: string
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ is_library_model:
+ type: boolean
+ description: whether this model is a library model (i.e. it is not an uploaded
+ user model)
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ PatchedPharmacokinetic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ mmt:
+ type: string
+ description: the model represented using mmt (see https://myokit.readthedocs)
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ is_library_model:
+ type: boolean
+ description: whether this model is a library model (i.e. it is not an uploaded
+ user model)
+ PatchedProject:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ user_access:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProjectAccess'
+ protocols:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ name:
+ type: string
+ description: name of the project
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the project
+ created:
+ type: string
+ format: date-time
+ readOnly: true
+ species:
+ allOf:
+ - $ref: '#/components/schemas/ProjectSpeciesEnum'
+ description: |-
+ subject species
+
+ * `M` - Mouse
+ * `R` - Rat
+ * `H` - Human
+ * `K` - Monkey
+ * `O` - Other
+ compound:
+ type: integer
+ users:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ description: users with access to this project
+ PatchedProjectAccess:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: True if user has read access only
+ user:
+ type: integer
+ project:
+ type: integer
+ readOnly: true
+ PatchedProtocol:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ doses:
+ type: array
+ items:
+ $ref: '#/components/schemas/Dose'
+ dataset:
+ type: string
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the protocol
+ maxLength: 100
+ dose_type:
+ $ref: '#/components/schemas/DoseTypeEnum'
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this protocol.
+ compound:
+ type: integer
+ nullable: true
+ description: drug compound
+ time_unit:
+ type: integer
+ nullable: true
+ description: unit for the start_time and duration values stored in each
+ dose
+ amount_unit:
+ type: integer
+ nullable: true
+ description: unit for the amount value stored in each dose
+ PatchedSimulation:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ sliders:
+ type: array
+ items:
+ $ref: '#/components/schemas/SimulationSlider'
+ plots:
+ type: array
+ items:
+ $ref: '#/components/schemas/SimulationPlot'
+ name:
+ type: string
+ description: name of the simulation
+ maxLength: 100
+ nrows:
+ type: integer
+ description: number of subplot rows
+ ncols:
+ type: integer
+ description: number of subplot columns
+ time_max:
+ type: number
+ format: double
+ minimum: 0
+ description: maximum time for the simulation
+ abs_tolerance:
+ type: number
+ format: double
+ minimum: 0
+ description: absolute tolerance for the simulation
+ rel_tolerance:
+ type: number
+ format: double
+ minimum: 0
+ description: relative tolerance for the simulation
+ project:
+ type: integer
+ time_max_unit:
+ type: integer
+ description: unit for maximum time
+ PatchedSubject:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ id_in_dataset:
+ type: integer
+ description: unique id in the dataset
+ shape:
+ type: integer
+ description: Shape index associated with this subject. For plotting purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this subject will be displayed in the frontend, False
+ otherwise
+ metadata:
+ type: string
+ description: subject metadata
+ dataset:
+ type: integer
+ description: dataset containing this subject
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol for this subject.
+ PatchedUnit:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ compatible_units:
+ type: array
+ items:
+ type: object
+ additionalProperties:
+ type: string
+ readOnly: true
+ symbol:
+ type: string
+ description: symbol for unit display
+ maxLength: 50
+ g:
+ type: number
+ format: double
+ description: grams exponent
+ m:
+ type: number
+ format: double
+ description: meters exponent
+ s:
+ type: number
+ format: double
+ description: seconds exponent
+ A:
+ type: number
+ format: double
+ description: ampere exponent
+ K:
+ type: number
+ format: double
+ description: kelvin exponent
+ cd:
+ type: number
+ format: double
+ description: candela exponent
+ mol:
+ type: number
+ format: double
+ description: mole exponent
+ multiplier:
+ type: number
+ format: double
+ description: multiplier in powers of 10
+ PatchedUser:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ username:
+ type: string
+ description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+ only.
+ pattern: ^[\w.@+-]+$
+ maxLength: 150
+ first_name:
+ type: string
+ maxLength: 150
+ last_name:
+ type: string
+ maxLength: 150
+ email:
+ type: string
+ format: email
+ title: Email address
+ maxLength: 254
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ readOnly: true
+ project_set:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ PatchedVariable:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ is_public:
+ type: boolean
+ lower_bound:
+ type: number
+ format: double
+ nullable: true
+ description: lowest possible value for this variable
+ upper_bound:
+ type: number
+ format: double
+ nullable: true
+ description: largest possible value for this variable
+ default_value:
+ type: number
+ format: double
+ description: default value for this variable
+ is_log:
+ type: boolean
+ description: True if default_value is stored as the log of this value
+ name:
+ type: string
+ description: name of the variable
+ maxLength: 100
+ description:
+ type: string
+ nullable: true
+ description: description of the variable
+ binding:
+ type: string
+ nullable: true
+ description: myokit binding of the variable (e.g. time)
+ maxLength: 100
+ qname:
+ type: string
+ description: fully qualitifed name of the variable
+ maxLength: 200
+ unit_symbol:
+ type: string
+ nullable: true
+ description: if unit is None then this is the unit of this variable as a
+ string
+ maxLength: 20
+ constant:
+ type: boolean
+ description: True for a constant variable of the model, i.e. a parameter.
+ False if non-constant, i.e. an output of the model (default is True)
+ state:
+ type: boolean
+ description: True if it is a state variable of the model and has an initial
+ condition parameter (default is False)
+ color:
+ type: integer
+ description: Color index associated with this variable. For display purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this variable will be displayed in the frontend, False
+ otherwise
+ axis:
+ type: boolean
+ description: False/True if biomarker type displayed on LHS/RHS axis
+ unit:
+ type: integer
+ nullable: true
+ description: variable values are in this unit (note this might be different
+ from the unit in the stored sbml)
+ pd_model:
+ type: integer
+ nullable: true
+ description: pharmacodynamic model
+ pk_model:
+ type: integer
+ nullable: true
+ description: pharmacokinetic model
+ dosed_pk_model:
+ type: integer
+ nullable: true
+ description: dosed pharmacokinetic model
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol
+ Pharmacodynamic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ components:
type: string
- format: binary
- writeOnly: true
- model_txt:
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ mmt:
+ type: string
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ is_library_model:
+ type: boolean
+ description: whether this model is a library model (i.e. it is not an uploaded
+ user model)
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ required:
+ - components
+ - id
+ - name
+ - variables
+ PharmacodynamicSbml:
+ type: object
+ properties:
+ sbml:
type: string
- format: binary
writeOnly: true
- project_mlxtran:
+ required:
+ - sbml
+ Pharmacokinetic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ mmt:
+ type: string
+ description: the model represented using mmt (see https://myokit.readthedocs)
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ is_library_model:
+ type: boolean
+ description: whether this model is a library model (i.e. it is not an uploaded
+ user model)
+ required:
+ - id
+ - name
+ PkpdMapping:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ datetime:
+ type: string
+ format: date
+ readOnly: true
+ read_only:
+ type: boolean
+ readOnly: true
+ pkpd_model:
+ type: integer
+ description: PKPD model that this mapping is for
+ pk_variable:
+ type: integer
+ description: variable in PK part of model
+ pd_variable:
+ type: integer
+ description: variable in PD part of model
+ required:
+ - datetime
+ - id
+ - pd_variable
+ - pk_variable
+ - pkpd_model
+ - read_only
+ Profile:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ user:
+ type: integer
+ required:
+ - id
+ - user
+ Project:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ user_access:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProjectAccess'
+ protocols:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ name:
+ type: string
+ description: name of the project
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the project
+ created:
+ type: string
+ format: date-time
+ readOnly: true
+ species:
+ allOf:
+ - $ref: '#/components/schemas/ProjectSpeciesEnum'
+ description: |-
+ subject species
+
+ * `M` - Mouse
+ * `R` - Rat
+ * `H` - Human
+ * `K` - Monkey
+ * `O` - Other
+ compound:
+ type: integer
+ users:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ description: users with access to this project
+ required:
+ - compound
+ - created
+ - id
+ - name
+ - protocols
+ - user_access
+ - users
+ ProjectAccess:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: True if user has read access only
+ user:
+ type: integer
+ project:
+ type: integer
+ readOnly: true
+ required:
+ - id
+ - project
+ - user
+ ProjectSpeciesEnum:
+ enum:
+ - M
+ - R
+ - H
+ - K
+ - O
+ type: string
+ description: |-
+ * `M` - Mouse
+ * `R` - Rat
+ * `H` - Human
+ * `K` - Monkey
+ * `O` - Other
+ Protocol:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ doses:
+ type: array
+ items:
+ $ref: '#/components/schemas/Dose'
+ dataset:
+ type: string
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the protocol
+ maxLength: 100
+ dose_type:
+ $ref: '#/components/schemas/DoseTypeEnum'
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this protocol.
+ compound:
+ type: integer
+ nullable: true
+ description: drug compound
+ time_unit:
+ type: integer
+ nullable: true
+ description: unit for the start_time and duration values stored in each
+ dose
+ amount_unit:
+ type: integer
+ nullable: true
+ description: unit for the amount value stored in each dose
+ required:
+ - dataset
+ - doses
+ - id
+ - name
+ - subjects
+ - variables
+ Simulate:
+ type: object
+ properties:
+ outputs:
+ type: array
+ items:
+ type: string
+ variables:
+ type: object
+ additionalProperties:
+ type: number
+ format: double
+ time_max:
+ type: number
+ format: double
+ required:
+ - outputs
+ - variables
+ SimulateResponse:
+ type: object
+ properties:
+ time:
+ type: array
+ items:
+ type: number
+ format: double
+ outputs:
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ type: number
+ format: double
+ required:
+ - outputs
+ - time
+ Simulation:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ sliders:
+ type: array
+ items:
+ $ref: '#/components/schemas/SimulationSlider'
+ plots:
+ type: array
+ items:
+ $ref: '#/components/schemas/SimulationPlot'
+ name:
type: string
- format: binary
- writeOnly: true
- data:
+ description: name of the simulation
+ maxLength: 100
+ nrows:
+ type: integer
+ description: number of subplot rows
+ ncols:
+ type: integer
+ description: number of subplot columns
+ time_max:
+ type: number
+ format: double
+ minimum: 0
+ description: maximum time for the simulation
+ abs_tolerance:
+ type: number
+ format: double
+ minimum: 0
+ description: absolute tolerance for the simulation
+ rel_tolerance:
+ type: number
+ format: double
+ minimum: 0
+ description: relative tolerance for the simulation
+ project:
+ type: integer
+ time_max_unit:
+ type: integer
+ description: unit for maximum time
+ required:
+ - id
+ - name
+ - plots
+ - project
+ - sliders
+ - time_max_unit
+ SimulationCxLine:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ value:
+ type: number
+ format: double
+ description: value of the line
+ required:
+ - id
+ - value
+ SimulationPlot:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ y_axes:
+ type: array
+ items:
+ $ref: '#/components/schemas/SimulationYAxis'
+ cx_lines:
+ type: array
+ items:
+ $ref: '#/components/schemas/SimulationCxLine'
+ index:
+ type: integer
+ description: index of the plot in the simulation
+ x_scale:
+ allOf:
+ - $ref: '#/components/schemas/Y2ScaleEnum'
+ description: |-
+ scale for x axis
+
+ * `lin` - Linear
+ * `lg2` - Log2
+ * `lg10` - Log10
+ * `ln` - Ln
+ y_scale:
+ allOf:
+ - $ref: '#/components/schemas/Y2ScaleEnum'
+ description: |-
+ scale for y axis
+
+ * `lin` - Linear
+ * `lg2` - Log2
+ * `lg10` - Log10
+ * `ln` - Ln
+ y2_scale:
+ allOf:
+ - $ref: '#/components/schemas/Y2ScaleEnum'
+ description: |-
+ scale for rhs y axis
+
+ * `lin` - Linear
+ * `lg2` - Log2
+ * `lg10` - Log10
+ * `ln` - Ln
+ min:
+ type: number
+ format: double
+ nullable: true
+ description: lower bound for the y axis
+ max:
+ type: number
+ format: double
+ nullable: true
+ description: upper bound for the y axis
+ min2:
+ type: number
+ format: double
+ nullable: true
+ description: lower bound for the rhs y axis
+ max2:
+ type: number
+ format: double
+ nullable: true
+ description: upper bound for the rhs y axis
+ x_unit:
+ type: integer
+ description: unit for x axis
+ y_unit:
+ type: integer
+ nullable: true
+ description: unit for y axis
+ y_unit2:
+ type: integer
+ nullable: true
+ description: unit for rhs y axis
+ required:
+ - cx_lines
+ - id
+ - index
+ - x_unit
+ - y_axes
+ SimulationSlider:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ variable:
+ type: integer
+ required:
+ - id
+ - variable
+ SimulationYAxis:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ right:
+ type: boolean
+ description: True if the variable is plotted on the right y axis
+ variable:
+ type: integer
+ required:
+ - id
+ - variable
+ Subject:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ id_in_dataset:
+ type: integer
+ description: unique id in the dataset
+ shape:
+ type: integer
+ description: Shape index associated with this subject. For plotting purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this subject will be displayed in the frontend, False
+ otherwise
+ metadata:
type: string
+ description: subject metadata
+ dataset:
+ type: integer
+ description: dataset containing this subject
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol for this subject.
+ required:
+ - dataset
+ - id
+ - id_in_dataset
+ TypeEnum:
+ enum:
+ - RO
+ - FUP
+ - BPR
+ - TLG
+ type: string
+ description: |-
+ * `RO` - receptor occupancy
+ * `FUP` - faction unbound plasma
+ * `BPR` - blood plasma ratio
+ * `TLG` - dosing lag time
+ Unit:
+ type: object
+ properties:
+ id:
+ type: integer
readOnly: true
- pd_model:
+ compatible_units:
+ type: array
+ items:
+ type: object
+ additionalProperties:
+ type: string
+ readOnly: true
+ symbol:
type: string
+ description: symbol for unit display
+ maxLength: 50
+ g:
+ type: number
+ format: double
+ description: grams exponent
+ m:
+ type: number
+ format: double
+ description: meters exponent
+ s:
+ type: number
+ format: double
+ description: seconds exponent
+ A:
+ type: number
+ format: double
+ description: ampere exponent
+ K:
+ type: number
+ format: double
+ description: kelvin exponent
+ cd:
+ type: number
+ format: double
+ description: candela exponent
+ mol:
+ type: number
+ format: double
+ description: mole exponent
+ multiplier:
+ type: number
+ format: double
+ description: multiplier in powers of 10
+ required:
+ - compatible_units
+ - id
+ - symbol
+ User:
+ type: object
+ properties:
+ id:
+ type: integer
readOnly: true
- pk_model:
+ username:
+ type: string
+ description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+ only.
+ pattern: ^[\w.@+-]+$
+ maxLength: 150
+ first_name:
+ type: string
+ maxLength: 150
+ last_name:
+ type: string
+ maxLength: 150
+ email:
type: string
+ format: email
+ title: Email address
+ maxLength: 254
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ readOnly: true
+ project_set:
+ type: array
+ items:
+ type: integer
readOnly: true
required:
- - data_csv
- - model_txt
- - project_mlxtran
- PharmacodynamicSbml:
+ - id
+ - profile
+ - project_set
+ - username
+ Variable:
type: object
properties:
- sbml:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
type: string
- writeOnly: true
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ is_public:
+ type: boolean
+ lower_bound:
+ type: number
+ format: double
+ nullable: true
+ description: lowest possible value for this variable
+ upper_bound:
+ type: number
+ format: double
+ nullable: true
+ description: largest possible value for this variable
+ default_value:
+ type: number
+ format: double
+ description: default value for this variable
+ is_log:
+ type: boolean
+ description: True if default_value is stored as the log of this value
+ name:
+ type: string
+ description: name of the variable
+ maxLength: 100
+ description:
+ type: string
+ nullable: true
+ description: description of the variable
+ binding:
+ type: string
+ nullable: true
+ description: myokit binding of the variable (e.g. time)
+ maxLength: 100
+ qname:
+ type: string
+ description: fully qualitifed name of the variable
+ maxLength: 200
+ unit_symbol:
+ type: string
+ nullable: true
+ description: if unit is None then this is the unit of this variable as a
+ string
+ maxLength: 20
+ constant:
+ type: boolean
+ description: True for a constant variable of the model, i.e. a parameter.
+ False if non-constant, i.e. an output of the model (default is True)
+ state:
+ type: boolean
+ description: True if it is a state variable of the model and has an initial
+ condition parameter (default is False)
+ color:
+ type: integer
+ description: Color index associated with this variable. For display purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this variable will be displayed in the frontend, False
+ otherwise
+ axis:
+ type: boolean
+ description: False/True if biomarker type displayed on LHS/RHS axis
+ unit:
+ type: integer
+ nullable: true
+ description: variable values are in this unit (note this might be different
+ from the unit in the stored sbml)
+ pd_model:
+ type: integer
+ nullable: true
+ description: pharmacodynamic model
+ pk_model:
+ type: integer
+ nullable: true
+ description: pharmacokinetic model
+ dosed_pk_model:
+ type: integer
+ nullable: true
+ description: dosed pharmacokinetic model
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol
required:
- - sbml
+ - id
+ - name
+ - qname
+ Y2ScaleEnum:
+ enum:
+ - lin
+ - lg2
+ - lg10
+ - ln
+ type: string
+ description: |-
+ * `lin` - Linear
+ * `lg2` - Log2
+ * `lg10` - Log10
+ * `ln` - Ln
+ securitySchemes:
+ basicAuth:
+ type: http
+ scheme: basic
+ cookieAuth:
+ type: apiKey
+ in: cookie
+ name: sessionid
diff --git a/pkpdapp/schema.yml# b/pkpdapp/schema.yml#
new file mode 100644
index 00000000..6c37d1ca
--- /dev/null
+++ b/pkpdapp/schema.yml#
@@ -0,0 +1,4584 @@
+openapi: 3.0.3
+info:
+ title: PKPDApp API
+ version: 1.0.0
+ description: The API for the PKPDApp
+paths:
+ /api/algorithm/:
+ get:
+ operationId: algorithm_list
+ tags:
+ - algorithm
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Algorithm'
+ description: ''
+ post:
+ operationId: algorithm_create
+ tags:
+ - algorithm
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ description: ''
+ /api/algorithm/{id}/:
+ get:
+ operationId: algorithm_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ description: ''
+ put:
+ operationId: algorithm_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ description: ''
+ patch:
+ operationId: algorithm_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedAlgorithm'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedAlgorithm'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedAlgorithm'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Algorithm'
+ description: ''
+ delete:
+ operationId: algorithm_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this algorithm.
+ required: true
+ tags:
+ - algorithm
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/auce/:
+ post:
+ operationId: auce_create
+ tags:
+ - auce
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/biomarker_type/:
+ get:
+ operationId: biomarker_type_list
+ tags:
+ - biomarker_type
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/BiomarkerType'
+ description: ''
+ post:
+ operationId: biomarker_type_create
+ tags:
+ - biomarker_type
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ description: ''
+ /api/biomarker_type/{id}/:
+ get:
+ operationId: biomarker_type_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ description: ''
+ put:
+ operationId: biomarker_type_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ description: ''
+ patch:
+ operationId: biomarker_type_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedBiomarkerType'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedBiomarkerType'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedBiomarkerType'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/BiomarkerType'
+ description: ''
+ delete:
+ operationId: biomarker_type_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this biomarker type.
+ required: true
+ tags:
+ - biomarker_type
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/compound/:
+ get:
+ operationId: compound_list
+ tags:
+ - compound
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Compound'
+ description: ''
+ post:
+ operationId: compound_create
+ tags:
+ - compound
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ description: ''
+ /api/compound/{id}/:
+ get:
+ operationId: compound_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ description: ''
+ put:
+ operationId: compound_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ description: ''
+ patch:
+ operationId: compound_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedCompound'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedCompound'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedCompound'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Compound'
+ description: ''
+ delete:
+ operationId: compound_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this compound.
+ required: true
+ tags:
+ - compound
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/dataset/:
+ get:
+ operationId: dataset_list
+ tags:
+ - dataset
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Dataset'
+ description: ''
+ post:
+ operationId: dataset_create
+ tags:
+ - dataset
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ description: ''
+ /api/dataset/{id}/:
+ get:
+ operationId: dataset_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ description: ''
+ put:
+ operationId: dataset_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ description: ''
+ patch:
+ operationId: dataset_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedDataset'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedDataset'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedDataset'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dataset'
+ description: ''
+ delete:
+ operationId: dataset_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/dataset/{id}/csv/:
+ put:
+ operationId: dataset_csv_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dataset.
+ required: true
+ tags:
+ - dataset
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/DatasetCsv'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DatasetCsv'
+ description: ''
+ /api/dose/:
+ get:
+ operationId: dose_list
+ tags:
+ - dose
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Dose'
+ description: ''
+ post:
+ operationId: dose_create
+ tags:
+ - dose
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ description: ''
+ /api/dose/{id}/:
+ get:
+ operationId: dose_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ description: ''
+ put:
+ operationId: dose_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ description: ''
+ patch:
+ operationId: dose_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedDose'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedDose'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedDose'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Dose'
+ description: ''
+ delete:
+ operationId: dose_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dose.
+ required: true
+ tags:
+ - dose
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/dosed_pharmacokinetic/:
+ get:
+ operationId: dosed_pharmacokinetic_list
+ tags:
+ - dosed_pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ description: ''
+ post:
+ operationId: dosed_pharmacokinetic_create
+ tags:
+ - dosed_pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ description: ''
+ /api/dosed_pharmacokinetic/{id}/:
+ get:
+ operationId: dosed_pharmacokinetic_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dosed pharmacokinetic
+ model.
+ required: true
+ tags:
+ - dosed_pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ description: ''
+ put:
+ operationId: dosed_pharmacokinetic_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dosed pharmacokinetic
+ model.
+ required: true
+ tags:
+ - dosed_pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ description: ''
+ patch:
+ operationId: dosed_pharmacokinetic_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dosed pharmacokinetic
+ model.
+ required: true
+ tags:
+ - dosed_pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedDosedPharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedDosedPharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedDosedPharmacokinetic'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ description: ''
+ delete:
+ operationId: dosed_pharmacokinetic_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dosed pharmacokinetic
+ model.
+ required: true
+ tags:
+ - dosed_pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/dosed_pharmacokinetic/{id}/set_variables_from_inference/:
+ put:
+ operationId: dosed_pharmacokinetic_set_variables_from_inference_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this dosed pharmacokinetic
+ model.
+ required: true
+ tags:
+ - dosed_pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DosedPharmacokinetic'
+ description: ''
+ /api/dosed_pharmacokinetic/{id}/simulate:
+ post:
+ operationId: dosed_pharmacokinetic_simulate_create
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ required: true
+ tags:
+ - dosed_pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/inference/:
+ get:
+ operationId: inference_list
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Inference'
+ description: ''
+ post:
+ operationId: inference_create
+ tags:
+ - inference
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ description: ''
+ /api/inference/{id}/:
+ get:
+ operationId: inference_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ description: ''
+ put:
+ operationId: inference_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ description: ''
+ patch:
+ operationId: inference_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedInference'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedInference'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedInference'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inference'
+ description: ''
+ delete:
+ operationId: inference_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference.
+ required: true
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/inference/{id}/stop:
+ post:
+ operationId: inference_stop_create
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ required: true
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/inference/wizard:
+ post:
+ operationId: inference_wizard_create
+ description: |-
+ expecting data in the form:
+ {
+
+ # Inference parameters
+ 'id': 1
+ 'name': "my inference run",
+ 'project': 1,
+ 'algorithm': 2,
+ 'initialization_strategy': 'R',
+ 'initialization_inference': 2,
+ 'number_of_chains': 4,
+ 'max_number_of_iterations': 3000,
+ 'burn_in': 0,
+
+ # Model
+ 'model': {
+ 'form': 'PK',
+ 'id': 5
+ }
+ 'dataset': 3,
+
+ # Model parameters
+ 'parameters': [
+ {
+ 'name': 'myokit.parameter1'
+ 'form': 'N',
+ 'pooled': False,
+ 'parameters': [
+ '2 * biomarker[subject_weight]',
+ 'parameter[parameter1_variance]'
+ ]
+ },
+ {
+ 'name': 'parameter1_variance'
+ 'form': 'N',
+ 'parameters': [0, 1]
+ },
+ {
+ 'name': 'myokit.parameter2'
+ 'form': 'U',
+ 'parameters': [-1, 1]
+ },
+ {
+ 'name': 'myokit.parameter3'
+ 'form': 'F',
+ 'parameters': [123.5]
+ },
+ ]
+
+ # output
+ 'observations': [
+ {
+ 'model': 'myokit.plasma_concentration',
+ 'biomarker': 'concentration,
+ 'noise_form': 'N',
+ 'noise_param_form': 'N',
+ 'parameters': [0, 1]
+ },
+ {
+ 'model': 'myokit.bacteria_count',
+ 'biomarker': 'bacteria,
+ 'noise_form': 'LN',
+ 'noise_param_form': 'F'
+ 'parameters': [123.3]
+ },
+ ]
+ }
+
+ Uses model as the base model. If it is a PK or PKPD model, creates a model
+ for each protocol used in the dataset, replacing the protocol of the model
+ with each new one.
+
+ This set of models has a set of parameters. If pooled is True or not given,
+ then parameters of the same qname are assumed to be identical, if pooled is
+ False, then the value of this parameter is different across each subject.
+ All Variable fields from the original model are copied over to the new
+ models. Priors and fixed values for each parameter in this set are provided
+ in 'parameters'. Distribution parameters for each prior can be provided
+ using a python expression, or a number. If a python expression is used, the
+ keywords Parameter[] are used to refer to other parameters in
+ the list. Additional parameters can be added to the list (parameters not in
+ the model) to contruct hierarchical inference. You can refer to biomarkers
+ in the expression using the keyword Biomarker[].
+
+ The 'observations' field maps model output variables with biomarkers in the
+ dataset
+ tags:
+ - inference
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/inference_chain/:
+ get:
+ operationId: inference_chain_list
+ tags:
+ - inference_chain
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/InferenceChain'
+ description: ''
+ post:
+ operationId: inference_chain_create
+ tags:
+ - inference_chain
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ description: ''
+ /api/inference_chain/{id}/:
+ get:
+ operationId: inference_chain_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ description: ''
+ put:
+ operationId: inference_chain_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ description: ''
+ patch:
+ operationId: inference_chain_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedInferenceChain'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedInferenceChain'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedInferenceChain'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InferenceChain'
+ description: ''
+ delete:
+ operationId: inference_chain_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this inference chain.
+ required: true
+ tags:
+ - inference_chain
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/nca/:
+ post:
+ operationId: nca_create
+ tags:
+ - nca
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/pharmacodynamic/:
+ get:
+ operationId: pharmacodynamic_list
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ post:
+ operationId: pharmacodynamic_create
+ tags:
+ - pharmacodynamic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ /api/pharmacodynamic/{id}/:
+ get:
+ operationId: pharmacodynamic_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ put:
+ operationId: pharmacodynamic_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ patch:
+ operationId: pharmacodynamic_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedPharmacodynamic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedPharmacodynamic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedPharmacodynamic'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ delete:
+ operationId: pharmacodynamic_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/pharmacodynamic/{id}/mmt/:
+ put:
+ operationId: pharmacodynamic_mmt_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ /api/pharmacodynamic/{id}/sbml/:
+ put:
+ operationId: pharmacodynamic_sbml_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PharmacodynamicSbml'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PharmacodynamicSbml'
+ description: ''
+ /api/pharmacodynamic/{id}/set_variables_from_inference/:
+ put:
+ operationId: pharmacodynamic_set_variables_from_inference_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacodynamic model.
+ required: true
+ tags:
+ - pharmacodynamic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacodynamic'
+ description: ''
+ /api/pharmacodynamic/{id}/simulate:
+ post:
+ operationId: pharmacodynamic_simulate_create
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ required: true
+ tags:
+ - pharmacodynamic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/pharmacokinetic/:
+ get:
+ operationId: pharmacokinetic_list
+ tags:
+ - pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ description: ''
+ post:
+ operationId: pharmacokinetic_create
+ tags:
+ - pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ description: ''
+ /api/pharmacokinetic/{id}/:
+ get:
+ operationId: pharmacokinetic_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ description: ''
+ put:
+ operationId: pharmacokinetic_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ description: ''
+ patch:
+ operationId: pharmacokinetic_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedPharmacokinetic'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedPharmacokinetic'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedPharmacokinetic'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pharmacokinetic'
+ description: ''
+ delete:
+ operationId: pharmacokinetic_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this pharmacokinetic model.
+ required: true
+ tags:
+ - pharmacokinetic
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/project/:
+ get:
+ operationId: project_list
+ description: Enable partial updates
+ tags:
+ - project
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Project'
+ description: ''
+ post:
+ operationId: project_create
+ description: Enable partial updates
+ tags:
+ - project
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Project'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Project'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Project'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Project'
+ description: ''
+ /api/project/{id}/:
+ get:
+ operationId: project_retrieve
+ description: Enable partial updates
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Project'
+ description: ''
+ put:
+ operationId: project_update
+ description: Enable partial updates
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Project'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Project'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Project'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Project'
+ description: ''
+ patch:
+ operationId: project_partial_update
+ description: Enable partial updates
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedProject'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedProject'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedProject'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Project'
+ description: ''
+ delete:
+ operationId: project_destroy
+ description: Enable partial updates
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/project/{id}/monolix/:
+ put:
+ operationId: project_monolix_update
+ description: Enable partial updates
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project.
+ required: true
+ tags:
+ - project
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Monolix'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Monolix'
+ description: ''
+ /api/project_access/:
+ get:
+ operationId: project_access_list
+ tags:
+ - project_access
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProjectAccess'
+ description: ''
+ post:
+ operationId: project_access_create
+ tags:
+ - project_access
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ description: ''
+ /api/project_access/{id}/:
+ get:
+ operationId: project_access_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ description: ''
+ put:
+ operationId: project_access_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ description: ''
+ patch:
+ operationId: project_access_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedProjectAccess'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedProjectAccess'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedProjectAccess'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectAccess'
+ description: ''
+ delete:
+ operationId: project_access_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this project access.
+ required: true
+ tags:
+ - project_access
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/protocol/:
+ get:
+ operationId: protocol_list
+ tags:
+ - protocol
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Protocol'
+ description: ''
+ post:
+ operationId: protocol_create
+ tags:
+ - protocol
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ description: ''
+ /api/protocol/{id}/:
+ get:
+ operationId: protocol_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ description: ''
+ put:
+ operationId: protocol_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ description: ''
+ patch:
+ operationId: protocol_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedProtocol'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedProtocol'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedProtocol'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Protocol'
+ description: ''
+ delete:
+ operationId: protocol_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this protocol.
+ required: true
+ tags:
+ - protocol
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/session/:
+ get:
+ operationId: session_retrieve
+ tags:
+ - session
+ security:
+ - cookieAuth: []
+ - basicAuth: []
+ responses:
+ '200':
+ description: No response body
+ /api/subject/:
+ get:
+ operationId: subject_list
+ tags:
+ - subject
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Subject'
+ description: ''
+ post:
+ operationId: subject_create
+ tags:
+ - subject
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ description: ''
+ /api/subject/{id}/:
+ get:
+ operationId: subject_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
+ tags:
+ - subject
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ description: ''
+ put:
+ operationId: subject_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
+ tags:
+ - subject
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ description: ''
+ patch:
+ operationId: subject_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
+ tags:
+ - subject
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedSubject'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedSubject'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedSubject'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Subject'
+ description: ''
+ delete:
+ operationId: subject_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this subject.
+ required: true
+ tags:
+ - subject
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/unit/:
+ get:
+ operationId: unit_list
+ tags:
+ - unit
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Unit'
+ description: ''
+ post:
+ operationId: unit_create
+ tags:
+ - unit
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ description: ''
+ /api/unit/{id}/:
+ get:
+ operationId: unit_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ description: ''
+ put:
+ operationId: unit_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ description: ''
+ patch:
+ operationId: unit_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedUnit'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedUnit'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedUnit'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Unit'
+ description: ''
+ delete:
+ operationId: unit_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this unit.
+ required: true
+ tags:
+ - unit
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/user/:
+ get:
+ operationId: user_list
+ tags:
+ - user
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/User'
+ description: ''
+ post:
+ operationId: user_create
+ tags:
+ - user
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/User'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/User'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ /api/user/{id}/:
+ get:
+ operationId: user_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
+ required: true
+ tags:
+ - user
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ put:
+ operationId: user_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
+ required: true
+ tags:
+ - user
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/User'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/User'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ patch:
+ operationId: user_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
+ required: true
+ tags:
+ - user
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedUser'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedUser'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedUser'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: ''
+ delete:
+ operationId: user_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this user.
+ required: true
+ tags:
+ - user
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/variable/:
+ get:
+ operationId: variable_list
+ tags:
+ - variable
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ post:
+ operationId: variable_create
+ tags:
+ - variable
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ /api/variable/{id}/:
+ get:
+ operationId: variable_retrieve
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ put:
+ operationId: variable_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ required: true
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ patch:
+ operationId: variable_partial_update
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchedVariable'
+ application/x-www-form-urlencoded:
+ schema:
+ $ref: '#/components/schemas/PatchedVariable'
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/PatchedVariable'
+ security:
+ - cookieAuth: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Variable'
+ description: ''
+ delete:
+ operationId: variable_destroy
+ parameters:
+ - in: path
+ name: id
+ schema:
+ type: integer
+ description: A unique integer value identifying this variable.
+ required: true
+ tags:
+ - variable
+ security:
+ - cookieAuth: []
+ responses:
+ '204':
+ description: No response body
+ /api/whoami/:
+ get:
+ operationId: whoami_retrieve
+ tags:
+ - whoami
+ security:
+ - cookieAuth: []
+ - basicAuth: []
+ responses:
+ '200':
+ description: No response body
+components:
+ schemas:
+ Algorithm:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ name:
+ type: string
+ description: name of the algorithm
+ maxLength: 100
+ category:
+ $ref: '#/components/schemas/CategoryEnum'
+ required:
+ - category
+ - id
+ - name
+ BiomarkerType:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ data:
+ type: object
+ additionalProperties:
+ type: array
+ items: {}
+ nullable: true
+ readOnly: true
+ is_continuous:
+ type: boolean
+ readOnly: true
+ is_categorical:
+ type: boolean
+ readOnly: true
+ name:
+ type: string
+ description: name of the biomarker type
+ maxLength: 100
+ description:
+ type: string
+ nullable: true
+ description: short description of the biomarker type
+ display:
+ type: boolean
+ description: True if this biomarker type will be displayed in the frontend,
+ False otherwise
+ color:
+ type: integer
+ description: Color index associated with this biomarker type. For plotting
+ purposes in the frontend
+ axis:
+ type: boolean
+ description: True/False if biomarker type displayed on LHS/RHS axis
+ stored_unit:
+ type: integer
+ description: unit for the value stored in :model:`pkpdapp.Biomarker`
+ dataset:
+ type: integer
+ description: dataset containing this biomarker measurement
+ display_unit:
+ type: integer
+ description: unit to use when sending or displaying biomarker values
+ stored_time_unit:
+ type: integer
+ description: unit for the time values stored in :model:`pkpdapp.Biomarker`
+ display_time_unit:
+ type: integer
+ description: unit to use when sending or displaying time values
+ required:
+ - data
+ - dataset
+ - display_time_unit
+ - display_unit
+ - id
+ - is_categorical
+ - is_continuous
+ - name
+ - stored_time_unit
+ - stored_unit
+ CategoryEnum:
+ enum:
+ - SA
+ - OP
+ - OT
+ type: string
+ description: |-
+ * `SA` - Sampling
+ * `OP` - Optimisation
+ * `OT` - Optimisation
+ Compound:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ efficacy_experiments:
+ type: array
+ items:
+ $ref: '#/components/schemas/Efficacy'
+ name:
+ type: string
+ description: name of the compound
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the compound
+ molecular_mass:
+ type: number
+ format: double
+ description: molecular mass for compound for conversion from mol to grams
+ compound_type:
+ $ref: '#/components/schemas/CompoundTypeEnum'
+ fraction_unbound_plasma:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound plasma (unitless)
+ blood_to_plasma_ratio:
+ type: number
+ format: double
+ nullable: true
+ description: blood to plasma ratio (unitless)
+ intrinsic_clearence:
+ type: number
+ format: double
+ nullable: true
+ description: intrinsic clearance
+ intrinsic_clearence_assay:
+ $ref: '#/components/schemas/IntrinsicClearenceAssayEnum'
+ fraction_unbound_including_cells:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound in plasma and red blood cells (unitless)
+ target_concentration:
+ type: number
+ format: double
+ nullable: true
+ description: target concentration
+ dissociation_constant:
+ type: number
+ format: double
+ nullable: true
+ description: dissociation constant
+ calculate_receptor_occupancy:
+ type: boolean
+ description: calculate receptor occupancy
+ is_soluble:
+ type: boolean
+ description: is the compound target soluble
+ molecular_mass_unit:
+ type: integer
+ description: unit for molecular mass (e.g. g/mol)
+ intrinsic_clearence_unit:
+ type: integer
+ description: unit for intrinsic clearance
+ target_concentration_unit:
+ type: integer
+ description: unit for target concentration
+ dissociation_unit:
+ type: integer
+ description: unit for dissociation constant
+ required:
+ - efficacy_experiments
+ - id
+ - molecular_mass
+ - name
+ CompoundTypeEnum:
+ enum:
+ - SM
+ - LM
+ type: string
+ description: |-
+ * `SM` - Small Molecule
+ * `LM` - Large Molecule
+ Dataset:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ biomarker_types:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ protocols:
+ type: array
+ items:
+ $ref: '#/components/schemas/Protocol'
+ readOnly: true
+ name:
+ type: string
+ description: name of the dataset
+ maxLength: 100
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: date/time the experiment was conducted. All time measurements
+ are relative to this date/time, which is in YYYY-MM-DD HH:MM:SS format.
+ For example, 2020-07-18 14:30:59
+ description:
+ type: string
+ description: short description of the dataset
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ required:
+ - biomarker_types
+ - id
+ - name
+ - protocols
+ - subjects
+ DatasetCsv:
+ type: object
+ properties:
+ csv:
+ type: string
+ format: uri
+ required:
+ - csv
+ Dose:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ start_time:
+ type: number
+ format: double
+ description: starting time point of dose, see protocol for units
+ amount:
+ type: number
+ format: double
+ description: amount of compound administered over the duration, see protocol
+ for units. Rate of administration is assumed constant
+ duration:
+ type: number
+ format: double
+ description: Duration of dose administration, see protocol for units. Duration
+ must be greater than 0.
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ protocol:
+ type: integer
+ description: protocol containing this dose
+ required:
+ - amount
+ - id
+ - protocol
+ - start_time
+ DoseTypeEnum:
+ enum:
+ - D
+ - I
+ type: string
+ description: |-
+ * `D` - IV
+ * `I` - Extravascular
+ DosedPharmacokinetic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ mappings:
+ type: array
+ items:
+ $ref: '#/components/schemas/PkpdMapping'
+ components:
+ type: string
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ mmt:
+ type: string
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ dose_compartment:
+ type: string
+ nullable: true
+ description: compartment name to be dosed
+ maxLength: 100
+ time_max:
+ type: number
+ format: double
+ description: suggested time to simulate after the last dose (in the time
+ units specified by the mmt model)
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ pk_model:
+ type: integer
+ nullable: true
+ description: model
+ pd_model:
+ type: integer
+ nullable: true
+ description: PD part of model
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol
+ required:
+ - components
+ - id
+ - mappings
+ - mmt
+ - name
+ - variables
+ Efficacy:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ name:
+ type: string
+ description: name of the experiment
+ maxLength: 100
+ c50:
+ type: number
+ format: double
+ description: half maximal effective concentration
+ hill_coefficient:
+ type: number
+ format: double
+ description: Hill coefficient measure of binding
+ c50_unit:
+ type: integer
+ description: unit for c50
+ compound:
+ type: integer
+ description: compound for efficacy experiment
+ required:
+ - c50
+ - c50_unit
+ - compound
+ - id
+ - name
+ FormEnum:
+ enum:
+ - N
+ - U
+ - LN
+ - F
+ - S
+ - E
+ - M
+ type: string
+ description: |-
+ * `N` - Normal
+ * `U` - Uniform
+ * `LN` - Log-Normal
+ * `F` - Fixed
+ * `S` - Sum
+ * `E` - Equation
+ * `M` - Model
+ Inference:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ log_likelihoods:
+ type: array
+ items:
+ $ref: '#/components/schemas/LogLikelihood'
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the dataset
+ maxLength: 100
+ description:
+ type: string
+ description: short description of what this inference does
+ initialization_strategy:
+ $ref: '#/components/schemas/InitializationStrategyEnum'
+ number_of_chains:
+ type: integer
+ description: number of chains
+ max_number_of_iterations:
+ type: integer
+ description: maximum number of iterations
+ burn_in:
+ type: integer
+ description: final iteration of burn-in
+ number_of_iterations:
+ type: integer
+ description: number of iterations calculated
+ time_elapsed:
+ type: integer
+ description: Elapsed run time for inference in seconds
+ number_of_function_evals:
+ type: integer
+ description: number of function evaluations
+ task_id:
+ type: string
+ nullable: true
+ description: If executing, this is the celery task id
+ maxLength: 40
+ metadata:
+ type: object
+ additionalProperties: {}
+ description: metadata for inference
+ project:
+ type: integer
+ description: Project that "owns" this inference object
+ algorithm:
+ type: integer
+ description: algorithm used to perform the inference
+ initialization_inference:
+ type: integer
+ nullable: true
+ required:
+ - id
+ - log_likelihoods
+ - name
+ - project
+ InferenceChain:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ data:
+ type: string
+ readOnly: true
+ outputs:
+ type: string
+ readOnly: true
+ inference:
+ type: integer
+ description: inference for this chain
+ required:
+ - data
+ - id
+ - inference
+ - outputs
+ InitializationStrategyEnum:
+ enum:
+ - D
+ - R
+ - F
+ type: string
+ description: |-
+ * `D` - Default Value of model
+ * `R` - Random from prior
+ * `F` - From other inference
+ IntrinsicClearenceAssayEnum:
+ enum:
+ - MS
+ - HC
+ type: string
+ description: |-
+ * `MS` - Microsomes
+ * `HC` - Hepatocytes
+ LogLikelihood:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ parameters:
+ type: array
+ items:
+ $ref: '#/components/schemas/LogLikelihoodParameter'
+ model:
+ type: array
+ items:
+ type: string
+ minLength: 2
+ maxLength: 2
+ nullable: true
+ readOnly: true
+ dataset:
+ type: integer
+ nullable: true
+ readOnly: true
+ time_variable:
+ type: integer
+ nullable: true
+ readOnly: true
+ is_a_prior:
+ type: boolean
+ readOnly: true
+ name:
+ type: string
+ description: name of log_likelihood.
+ maxLength: 100
+ description:
+ type: string
+ nullable: true
+ description: 'description of log_likelihood. For equations will be the code
+ of that equation using Python syntax: arg1 * arg2^arg3'
+ value:
+ type: number
+ format: double
+ nullable: true
+ description: set if a fixed value is required
+ time_independent_data:
+ type: boolean
+ description: 'True if biomarker_type refers to time-independent data. If
+ there are multiple timepoints in biomarker_type then only the first is
+ taken '
+ observed:
+ type: boolean
+ description: 'True if this log_likelihood is observed '
+ form:
+ $ref: '#/components/schemas/FormEnum'
+ inference:
+ type: integer
+ readOnly: true
+ description: 'Log_likelihood belongs to this inference object. '
+ variable:
+ type: integer
+ nullable: true
+ description: 'If form=MODEL, a variable (any) in the deterministic model. '
+ biomarker_type:
+ type: integer
+ nullable: true
+ description: data associated with this log_likelihood. This is used for
+ measurement data (observed=True) or for covariates (observed=False). The
+ random variable associated with this log_likelihood has the same shape
+ as this data. For covariates the subject ids in the data correspond to
+ the values of the random variable at that location.
+ protocol_filter:
+ type: integer
+ nullable: true
+ description: filter subject data on this protocol(null implies all subjects)
+ children:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ required:
+ - children
+ - dataset
+ - id
+ - inference
+ - is_a_prior
+ - model
+ - name
+ - parameters
+ - time_variable
+ LogLikelihoodParameter:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ name:
+ type: string
+ description: name of log_likelihood parameter.
+ maxLength: 100
+ parent_index:
+ type: integer
+ nullable: true
+ description: parameter index for distribution and equation parameters. blank
+ for models (variable is used instead)
+ child_index:
+ type: integer
+ description: 'output index for all log_likelihoods. '
+ length:
+ type: integer
+ nullable: true
+ description: length of array representing parameter. null for scalar
+ parent:
+ type: integer
+ readOnly: true
+ child:
+ type: integer
+ variable:
+ type: integer
+ nullable: true
+ description: input model variable for this parameter.
+ required:
+ - child
+ - id
+ - name
+ - parent
+ Monolix:
+ type: object
+ properties:
+ data_csv:
+ type: string
+ format: uri
+ writeOnly: true
+ model_txt:
+ type: string
+ format: uri
+ writeOnly: true
+ project_mlxtran:
+ type: string
+ format: uri
+ writeOnly: true
+ data:
+ type: string
+ readOnly: true
+ pd_model:
+ type: string
+ readOnly: true
+ pk_model:
+ type: string
+ readOnly: true
+ required:
+ - data
+ - data_csv
+ - model_txt
+ - pd_model
+ - pk_model
+ - project_mlxtran
+ PatchedAlgorithm:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ name:
+ type: string
+ description: name of the algorithm
+ maxLength: 100
+ category:
+ $ref: '#/components/schemas/CategoryEnum'
+ PatchedBiomarkerType:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ data:
+ type: object
+ additionalProperties:
+ type: array
+ items: {}
+ nullable: true
+ readOnly: true
+ is_continuous:
+ type: boolean
+ readOnly: true
+ is_categorical:
+ type: boolean
+ readOnly: true
+ name:
+ type: string
+ description: name of the biomarker type
+ maxLength: 100
+ description:
+ type: string
+ nullable: true
+ description: short description of the biomarker type
+ display:
+ type: boolean
+ description: True if this biomarker type will be displayed in the frontend,
+ False otherwise
+ color:
+ type: integer
+ description: Color index associated with this biomarker type. For plotting
+ purposes in the frontend
+ axis:
+ type: boolean
+ description: True/False if biomarker type displayed on LHS/RHS axis
+ stored_unit:
+ type: integer
+ description: unit for the value stored in :model:`pkpdapp.Biomarker`
+ dataset:
+ type: integer
+ description: dataset containing this biomarker measurement
+ display_unit:
+ type: integer
+ description: unit to use when sending or displaying biomarker values
+ stored_time_unit:
+ type: integer
+ description: unit for the time values stored in :model:`pkpdapp.Biomarker`
+ display_time_unit:
+ type: integer
+ description: unit to use when sending or displaying time values
+ PatchedCompound:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ efficacy_experiments:
+ type: array
+ items:
+ $ref: '#/components/schemas/Efficacy'
+ name:
+ type: string
+ description: name of the compound
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the compound
+ molecular_mass:
+ type: number
+ format: double
+ description: molecular mass for compound for conversion from mol to grams
+ compound_type:
+ $ref: '#/components/schemas/CompoundTypeEnum'
+ fraction_unbound_plasma:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound plasma (unitless)
+ blood_to_plasma_ratio:
+ type: number
+ format: double
+ nullable: true
+ description: blood to plasma ratio (unitless)
+ intrinsic_clearence:
+ type: number
+ format: double
+ nullable: true
+ description: intrinsic clearance
+ intrinsic_clearence_assay:
+ $ref: '#/components/schemas/IntrinsicClearenceAssayEnum'
+ fraction_unbound_including_cells:
+ type: number
+ format: double
+ nullable: true
+ description: fraction unbound in plasma and red blood cells (unitless)
+ target_concentration:
+ type: number
+ format: double
+ nullable: true
+ description: target concentration
+ dissociation_constant:
+ type: number
+ format: double
+ nullable: true
+ description: dissociation constant
+ calculate_receptor_occupancy:
+ type: boolean
+ description: calculate receptor occupancy
+ is_soluble:
+ type: boolean
+ description: is the compound target soluble
+ molecular_mass_unit:
+ type: integer
+ description: unit for molecular mass (e.g. g/mol)
+ intrinsic_clearence_unit:
+ type: integer
+ description: unit for intrinsic clearance
+ target_concentration_unit:
+ type: integer
+ description: unit for target concentration
+ dissociation_unit:
+ type: integer
+ description: unit for dissociation constant
+ PatchedDataset:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ biomarker_types:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ protocols:
+ type: array
+ items:
+ $ref: '#/components/schemas/Protocol'
+ readOnly: true
+ name:
+ type: string
+ description: name of the dataset
+ maxLength: 100
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: date/time the experiment was conducted. All time measurements
+ are relative to this date/time, which is in YYYY-MM-DD HH:MM:SS format.
+ For example, 2020-07-18 14:30:59
+ description:
+ type: string
+ description: short description of the dataset
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ PatchedDose:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ start_time:
+ type: number
+ format: double
+ description: starting time point of dose, see protocol for units
+ amount:
+ type: number
+ format: double
+ description: amount of compound administered over the duration, see protocol
+ for units. Rate of administration is assumed constant
+ duration:
+ type: number
+ format: double
+ description: Duration of dose administration, see protocol for units. Duration
+ must be greater than 0.
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ protocol:
+ type: integer
+ description: protocol containing this dose
+ PatchedDosedPharmacokinetic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ mappings:
+ type: array
+ items:
+ $ref: '#/components/schemas/PkpdMapping'
+ components:
+ type: string
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ mmt:
+ type: string
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ dose_compartment:
+ type: string
+ nullable: true
+ description: compartment name to be dosed
+ maxLength: 100
+ time_max:
+ type: number
+ format: double
+ description: suggested time to simulate after the last dose (in the time
+ units specified by the mmt model)
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ pk_model:
+ type: integer
+ nullable: true
+ description: model
+ pd_model:
+ type: integer
+ nullable: true
+ description: PD part of model
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol
+ PatchedInference:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ log_likelihoods:
+ type: array
+ items:
+ $ref: '#/components/schemas/LogLikelihood'
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the dataset
+ maxLength: 100
+ description:
+ type: string
+ description: short description of what this inference does
+ initialization_strategy:
+ $ref: '#/components/schemas/InitializationStrategyEnum'
+ number_of_chains:
+ type: integer
+ description: number of chains
+ max_number_of_iterations:
+ type: integer
+ description: maximum number of iterations
+ burn_in:
+ type: integer
+ description: final iteration of burn-in
+ number_of_iterations:
+ type: integer
+ description: number of iterations calculated
+ time_elapsed:
+ type: integer
+ description: Elapsed run time for inference in seconds
+ number_of_function_evals:
+ type: integer
+ description: number of function evaluations
+ task_id:
+ type: string
+ nullable: true
+ description: If executing, this is the celery task id
+ maxLength: 40
+ metadata:
+ type: object
+ additionalProperties: {}
+ description: metadata for inference
+ project:
+ type: integer
+ description: Project that "owns" this inference object
+ algorithm:
+ type: integer
+ description: algorithm used to perform the inference
+ initialization_inference:
+ type: integer
+ nullable: true
+ PatchedInferenceChain:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ data:
+ type: string
+ readOnly: true
+ outputs:
+ type: string
+ readOnly: true
+ inference:
+ type: integer
+ description: inference for this chain
+ PatchedPharmacodynamic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ components:
+ type: string
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ mmt:
+ type: string
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ PatchedPharmacokinetic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ mmt:
+ type: string
+ description: the model represented using mmt (see https://myokit.readthedocs)
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ PatchedProject:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ user_access:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProjectAccess'
+ name:
+ type: string
+ description: name of the project
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the project
+ compound:
+ type: integer
+ users:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ description: users with access to this project
+ PatchedProjectAccess:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: True if user has read access only
+ user:
+ type: integer
+ project:
+ type: integer
+ readOnly: true
+ PatchedProtocol:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ doses:
+ type: array
+ items:
+ $ref: '#/components/schemas/Dose'
+ readOnly: true
+ dose_ids:
+ type: array
+ items:
+ type: integer
+ writeOnly: true
+ writeOnly: true
+ dosed_pk_models:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ dataset:
+ type: string
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the protocol
+ maxLength: 100
+ dose_type:
+ $ref: '#/components/schemas/DoseTypeEnum'
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this protocol.
+ compound:
+ type: integer
+ nullable: true
+ description: drug compound
+ time_unit:
+ type: integer
+ nullable: true
+ description: unit for the start_time and duration values stored in each
+ dose
+ amount_unit:
+ type: integer
+ nullable: true
+ description: unit for the amount value stored in each dose
+ PatchedSubject:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ id_in_dataset:
+ type: integer
+ description: unique id in the dataset
+ shape:
+ type: integer
+ description: Shape index associated with this subject. For plotting purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this subject will be displayed in the frontend, False
+ otherwise
+ metadata:
+ type: string
+ description: subject metadata
+ dataset:
+ type: integer
+ description: dataset containing this subject
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol for this subject.
+ PatchedUnit:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ compatible_units:
+ type: array
+ items:
+ type: object
+ additionalProperties:
+ type: string
+ readOnly: true
+ symbol:
+ type: string
+ description: symbol for unit display
+ maxLength: 50
+ g:
+ type: number
+ format: double
+ description: grams exponent
+ m:
+ type: number
+ format: double
+ description: meters exponent
+ s:
+ type: number
+ format: double
+ description: seconds exponent
+ A:
+ type: number
+ format: double
+ description: ampere exponent
+ K:
+ type: number
+ format: double
+ description: kelvin exponent
+ cd:
+ type: number
+ format: double
+ description: candela exponent
+ mol:
+ type: number
+ format: double
+ description: mole exponent
+ multiplier:
+ type: number
+ format: double
+ description: multiplier in powers of 10
+ PatchedUser:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ username:
+ type: string
+ description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+ only.
+ pattern: ^[\w.@+-]+$
+ maxLength: 150
+ first_name:
+ type: string
+ maxLength: 150
+ last_name:
+ type: string
+ maxLength: 150
+ email:
+ type: string
+ format: email
+ title: Email address
+ maxLength: 254
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ readOnly: true
+ project_set:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ PatchedVariable:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ is_public:
+ type: boolean
+ lower_bound:
+ type: number
+ format: double
+ description: lowest possible value for this variable
+ upper_bound:
+ type: number
+ format: double
+ description: largest possible value for this variable
+ default_value:
+ type: number
+ format: double
+ description: default value for this variable
+ is_log:
+ type: boolean
+ description: True if default_value is stored as the log of this value
+ name:
+ type: string
+ description: name of the variable
+ maxLength: 100
+ binding:
+ type: string
+ nullable: true
+ description: myokit binding of the variable (e.g. time)
+ maxLength: 100
+ qname:
+ type: string
+ description: fully qualitifed name of the variable
+ maxLength: 200
+ constant:
+ type: boolean
+ description: True for a constant variable of the model, i.e. a parameter.
+ False if non-constant, i.e. an output of the model (default is True)
+ state:
+ type: boolean
+ description: True if it is a state variable of the model and has an initial
+ condition parameter (default is False)
+ color:
+ type: integer
+ description: Color index associated with this variable. For display purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this variable will be displayed in the frontend, False
+ otherwise
+ axis:
+ type: boolean
+ description: False/True if biomarker type displayed on LHS/RHS axis
+ unit:
+ type: integer
+ nullable: true
+ description: variable values are in this unit (note this might be different
+ from the unit in the stored sbml)
+ pd_model:
+ type: integer
+ nullable: true
+ description: pharmacodynamic model
+ pk_model:
+ type: integer
+ nullable: true
+ description: pharmacokinetic model
+ dosed_pk_model:
+ type: integer
+ nullable: true
+ description: dosed pharmacokinetic model
+ Pharmacodynamic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ components:
+ type: string
+ readOnly: true
+ variables:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ mmt:
+ type: string
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this model
+ required:
+ - components
+ - id
+ - name
+ - variables
+ PharmacodynamicSbml:
+ type: object
+ properties:
+ sbml:
+ type: string
+ writeOnly: true
+ required:
+ - sbml
+ Pharmacokinetic:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the model
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the model
+ mmt:
+ type: string
+ description: the model represented using mmt (see https://myokit.readthedocs)
+ time_max:
+ type: number
+ format: double
+ description: suggested maximum time to simulate for this model (in the time
+ units specified by the mmt model)
+ required:
+ - id
+ - name
+ PkpdMapping:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ datetime:
+ type: string
+ format: date
+ readOnly: true
+ read_only:
+ type: boolean
+ readOnly: true
+ pkpd_model:
+ type: integer
+ description: PKPD model that this mapping is for
+ pk_variable:
+ type: integer
+ description: variable in PK part of model
+ pd_variable:
+ type: integer
+ description: variable in PD part of model
+ required:
+ - datetime
+ - id
+ - pd_variable
+ - pk_variable
+ - pkpd_model
+ - read_only
+ Profile:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ user:
+ type: integer
+ required:
+ - id
+ - user
+ Project:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ user_access:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProjectAccess'
+ name:
+ type: string
+ description: name of the project
+ maxLength: 100
+ description:
+ type: string
+ description: short description of the project
+ compound:
+ type: integer
+ users:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ description: users with access to this project
+ required:
+ - compound
+ - id
+ - name
+ - user_access
+ - users
+ ProjectAccess:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: True if user has read access only
+ user:
+ type: integer
+ project:
+ type: integer
+ readOnly: true
+ required:
+ - id
+ - project
+ - user
+ Protocol:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ doses:
+ type: array
+ items:
+ $ref: '#/components/schemas/Dose'
+ readOnly: true
+ dose_ids:
+ type: array
+ items:
+ type: integer
+ writeOnly: true
+ writeOnly: true
+ dosed_pk_models:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ dataset:
+ type: string
+ readOnly: true
+ subjects:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ name:
+ type: string
+ description: name of the protocol
+ maxLength: 100
+ dose_type:
+ $ref: '#/components/schemas/DoseTypeEnum'
+ project:
+ type: integer
+ nullable: true
+ description: Project that "owns" this protocol.
+ compound:
+ type: integer
+ nullable: true
+ description: drug compound
+ time_unit:
+ type: integer
+ nullable: true
+ description: unit for the start_time and duration values stored in each
+ dose
+ amount_unit:
+ type: integer
+ nullable: true
+ description: unit for the amount value stored in each dose
+ required:
+ - dataset
+ - dose_ids
+ - dosed_pk_models
+ - doses
+ - id
+ - name
+ - subjects
+ Subject:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ id_in_dataset:
+ type: integer
+ description: unique id in the dataset
+ shape:
+ type: integer
+ description: Shape index associated with this subject. For plotting purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this subject will be displayed in the frontend, False
+ otherwise
+ metadata:
+ type: string
+ description: subject metadata
+ dataset:
+ type: integer
+ description: dataset containing this subject
+ protocol:
+ type: integer
+ nullable: true
+ description: dosing protocol for this subject.
+ required:
+ - dataset
+ - id
+ - id_in_dataset
+ Unit:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ compatible_units:
+ type: array
+ items:
+ type: object
+ additionalProperties:
+ type: string
+ readOnly: true
+ symbol:
+ type: string
+ description: symbol for unit display
+ maxLength: 50
+ g:
+ type: number
+ format: double
+ description: grams exponent
+ m:
+ type: number
+ format: double
+ description: meters exponent
+ s:
+ type: number
+ format: double
+ description: seconds exponent
+ A:
+ type: number
+ format: double
+ description: ampere exponent
+ K:
+ type: number
+ format: double
+ description: kelvin exponent
+ cd:
+ type: number
+ format: double
+ description: candela exponent
+ mol:
+ type: number
+ format: double
+ description: mole exponent
+ multiplier:
+ type: number
+ format: double
+ description: multiplier in powers of 10
+ required:
+ - compatible_units
+ - id
+ - symbol
+ User:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ username:
+ type: string
+ description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+ only.
+ pattern: ^[\w.@+-]+$
+ maxLength: 150
+ first_name:
+ type: string
+ maxLength: 150
+ last_name:
+ type: string
+ maxLength: 150
+ email:
+ type: string
+ format: email
+ title: Email address
+ maxLength: 254
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ readOnly: true
+ project_set:
+ type: array
+ items:
+ type: integer
+ readOnly: true
+ required:
+ - id
+ - profile
+ - project_set
+ - username
+ Variable:
+ type: object
+ properties:
+ id:
+ type: integer
+ readOnly: true
+ read_only:
+ type: boolean
+ description: true if object has been stored
+ datetime:
+ type: string
+ format: date-time
+ nullable: true
+ description: datetime the object was stored.
+ is_public:
+ type: boolean
+ lower_bound:
+ type: number
+ format: double
+ description: lowest possible value for this variable
+ upper_bound:
+ type: number
+ format: double
+ description: largest possible value for this variable
+ default_value:
+ type: number
+ format: double
+ description: default value for this variable
+ is_log:
+ type: boolean
+ description: True if default_value is stored as the log of this value
+ name:
+ type: string
+ description: name of the variable
+ maxLength: 100
+ binding:
+ type: string
+ nullable: true
+ description: myokit binding of the variable (e.g. time)
+ maxLength: 100
+ qname:
+ type: string
+ description: fully qualitifed name of the variable
+ maxLength: 200
+ constant:
+ type: boolean
+ description: True for a constant variable of the model, i.e. a parameter.
+ False if non-constant, i.e. an output of the model (default is True)
+ state:
+ type: boolean
+ description: True if it is a state variable of the model and has an initial
+ condition parameter (default is False)
+ color:
+ type: integer
+ description: Color index associated with this variable. For display purposes
+ in the frontend
+ display:
+ type: boolean
+ description: True if this variable will be displayed in the frontend, False
+ otherwise
+ axis:
+ type: boolean
+ description: False/True if biomarker type displayed on LHS/RHS axis
+ unit:
+ type: integer
+ nullable: true
+ description: variable values are in this unit (note this might be different
+ from the unit in the stored sbml)
+ pd_model:
+ type: integer
+ nullable: true
+ description: pharmacodynamic model
+ pk_model:
+ type: integer
+ nullable: true
+ description: pharmacokinetic model
+ dosed_pk_model:
+ type: integer
+ nullable: true
+ description: dosed pharmacokinetic model
+ required:
+ - id
+ - name
+ - qname
+ securitySchemes:
+ basicAuth:
+ type: http
+ scheme: basic
+ cookieAuth:
+ type: apiKey
+ in: cookie
+ name: sessionid
diff --git a/requirements.txt b/requirements.txt
index e31459d7..d9b14896 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,6 +20,8 @@ django-polymorphic>=3.1.0
drf-writable-nested>=0.6.3
celery>=5.1.2
tdigest>=0.5.2.2
-pymc3>=3.10
+pymc3>=3.11.5
django-auth-ldap>=4.1.0
pyyaml>=6.0.0
+drf-spectacular>=0.26.2
+openpyxl>=3.1.2
\ No newline at end of file