From ee842bf514871e81d0546ee61efb4cd60c8dc525 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 6 May 2024 13:14:53 -0500 Subject: [PATCH] Updated all tests. Everything passes if ran on a computer with a CUDA enabled GPU. --- metapredict/backend/architectures.py | 9 +- metapredict/backend/network_parameters.py | 32 ++++-- metapredict/backend/predictor.py | 20 ++-- .../tests/input_data/test_scores_100_v3.npy | Bin 0 -> 179397 bytes metapredict/tests/local_data.py | 20 ++-- metapredict/tests/test_batch_vs_single.py | 4 +- metapredict/tests/test_metapredict.py | 106 +++++++++++++----- .../tests/test_uniprot_functionality.py | 28 ++--- metapredict/tests/test_write_fasta.py | 5 +- 9 files changed, 144 insertions(+), 80 deletions(-) create mode 100644 metapredict/tests/input_data/test_scores_100_v3.npy diff --git a/metapredict/backend/architectures.py b/metapredict/backend/architectures.py index 0b0a73c..89d4118 100644 --- a/metapredict/backend/architectures.py +++ b/metapredict/backend/architectures.py @@ -12,7 +12,10 @@ import torch.nn as nn import pytorch_lightning as L - +''' +USED BY V1 and V2 disorder predictors! +USED BY V1 pLDDT predictor! +''' class BRNN_MtM(nn.Module): """A PyTorch many-to-many bidirectional recurrent neural network @@ -117,6 +120,10 @@ def forward(self, x): # return decoded hidden state return fc_out +''' +USED BY V3 disorder predictor! +USED BY V2 pLDDT predictor! +''' class BRNN_MtM_lightning(L.LightningModule): """A PyTorch many-to-many bidirectional recurrent neural network diff --git a/metapredict/backend/network_parameters.py b/metapredict/backend/network_parameters.py index be1563f..c5ec840 100644 --- a/metapredict/backend/network_parameters.py +++ b/metapredict/backend/network_parameters.py @@ -1,20 +1,22 @@ #!/usr/bin/env python """ -This holds all of the information on the networks we have in the /backend/networks folder. -This includes networks that we have published and those that were tested but not published. +This holds all of the information on the networks we have in /backend/networks for disorder +and /backend/ppLDDT/networks for pLDDT. +This includes networks that we have published and those that we tested but didn't end up using. Explainations for networks can be found by calling the 'info' key in the dictionary for the -network. Why make this? Great question. The reason is that a lot of the names for the -networks in the networks folder are downright terrible (metaDisorder.pt is... bad). However, +network. +Why make this? Great question. The reason is that a lot of the names for the +networks in the /networks folder are downright terrible (metaDisorder.pt is... bad). However, I don't want to change the names of those networks at this point because it would make them -hard to track down if anyone has kept track of the network names for whatever reason. -So - this is my Not So Clever Workaround™. +hard to track down. This is my Not So Clever Workaround™. The other reason for this module is to hold the hyperparameters for networks we made before we started using Pytorch-lightning. The importance of this is Pytorch-lightning holds more easily accessible hyperparameter information that you don't need to dynamically load. However, we can't use this functionalty for the old networks, so the workaround is to just have things hardcoded here. This will also future proof us in case the Pytorch-lightning functionality -changes for whatever reason. +changes for whatever reason. It's also a nice place to look things up to see what parameters +we used for each network. """ # import the cutoff value parameters for each network from parameters. @@ -81,7 +83,7 @@ 'momentum': 0.9968434498981696, 'last_epoch': 100, 'disorder_threshold': METAPREDICT_V3_THRESHOLD, - 'info': 'Similar to v2 metapredict as far as training data except real pLDDT scores pLDDT scores were based on AF2 V4 structures. Values were smoothed over a 25 residue sliding window post processing. Our current putative V3 network.', + 'info': 'Similar to v2 metapredict as far as training data except we used real pLDDT scores based on AF2 V4 structures instead of predicted pLDDT. In addition, values were smoothed over a 25 residue sliding window before being used for training. Depending on some additional testing, this is likely to be our next released network.', 'type': 'disorder' } @@ -103,7 +105,7 @@ 'epochs': 200, 'used_lightning': False, 'disorder_threshold': 'N/A', - 'info': "pLDDT predictor network implemented in AlphaPredict. Original pLDDT predictor. Trained on same proteomes as metapredict V1 (legacy) pLDDT scores. Output scores from this predictor were used to make the metapredict V2 network.", + 'info': "pLDDT predictor network implemented in AlphaPredict. Original pLDDT predictor. Trained on same proteomes as metapredict V1 (legacy) pLDDT scores. Output scores from this predictor combined with metapredict legacy disorder scores were used to make the metapredict V2 network.", 'type': 'pLDDT' } @@ -126,13 +128,23 @@ 'used_lightning': True, 'last_epoch': 20, 'disorder_threshold': 'N/A', - 'info': "Network made by Jeff. Trained on pLDDT scores from swissprot AF2 V4 PDBs. March 2024.", + 'info': "Network made by Jeff. Trained on pLDDT scores from swissprot AF2 V4 PDBs. March 2024.", 'type': 'pLDDT' } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-= ADD USER-FACING STUFF HERE -=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# +''' +Everything user-facing needs to be added here. For a version, +add 'V#' as a new key to the dictionary. That should then have +a value that is an additional key with two values: +'weights': the name of the file that holds the weights for the network +'parameters': the dictionary that holds the hyperparameters for the network. +the dictionary specified in 'parameters' needs to be defined with the same +key : value pairs as the dictionaries above. +''' + # dict to hold the networks that are user-facing. metapredict_networks = { diff --git a/metapredict/backend/predictor.py b/metapredict/backend/predictor.py index 4322cad..fe274c3 100644 --- a/metapredict/backend/predictor.py +++ b/metapredict/backend/predictor.py @@ -1,12 +1,21 @@ #!/usr/bin/env python """ Functionality previously scattered across various different modules. -This holds all of the functionality for disorder prediction. +This holds all of the functionality for disorder and pLDDT prediction. This includes batch and single sequence. Device selection can be carried out from the predict function. Output data type also from the predict function. """ +# general imports +import os +from packaging import version as packaging_version +import time +import numpy as np +import torch +from torch.utils.data import DataLoader +from tqdm import tqdm + # local imports from metapredict.backend.data_structures import DisorderObject as _DisorderObject from metapredict.backend import domain_definition as _domain_definition @@ -16,15 +25,6 @@ from metapredict.backend import architectures from metapredict.metapredict_exceptions import MetapredictError -# other imports -import os -from packaging import version as packaging_version -import time -import numpy as np -import torch -from torch.utils.data import DataLoader -from tqdm import tqdm - # .................................................................................... # def build_DisorderObject(s, diff --git a/metapredict/tests/input_data/test_scores_100_v3.npy b/metapredict/tests/input_data/test_scores_100_v3.npy new file mode 100644 index 0000000000000000000000000000000000000000..64d3e5e4d91eb64ac28295b367ed0bd7fd3878dd GIT binary patch literal 179397 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
>apLS{&L1*NNrdeIGLQ@ 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%0DI5QseJ@pP@ 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 literal 0 HcmV?d00001 diff --git a/metapredict/tests/local_data.py b/metapredict/tests/local_data.py index e433f85..5f31ccc 100644 --- a/metapredict/tests/local_data.py +++ b/metapredict/tests/local_data.py @@ -2,20 +2,20 @@ S1 = [1.0548, 1.0966, 1.0619, 1.0872, 1.0678, 1.0785, 1.0885, 1.0404, 1.0323, 1.025, 1.0061, 1.0017, 1.0072, 0.9979, 1.0325, 1.0321, 1.0389, 1.0446, 1.0608, 1.0877, 1.0933, 1.0918, 1.0955, 1.0765, 1.0584, 1.0329, 1.0343, 1.019, 1.0574, 1.1003, 1.0504, 1.0736, 1.0826, 1.0779, 1.1032, 1.0842, 1.0516, 1.0469, 1.0436, 1.0654, 1.082, 1.0712, 1.1191, 1.1262, 1.0432, 1.1303, 1.2076, 1.1519, 1.1554, 0.9382] -S2 = [0.8485, 0.9222, 0.9204, 0.9215, 0.9362, 0.9381, 0.9368, 0.9358, 0.942, 0.9427, 0.9527, 0.9565, 0.9492, 0.9492, 0.9618, 0.9609, 0.9643, 0.9605, 0.9493, 0.9719, 0.967, 0.9726, 0.9888, 0.9635, 0.9583, 0.9657, 0.9616, 0.9536, 0.9434, 0.9542, 0.9734, 0.9692, 0.955, 0.9331, 0.9353, 0.9465, 0.9584, 0.9583, 0.9759, 0.9534, 0.9703, 0.9494, 0.9667, 0.9819, 0.98, 0.9829, 0.9794, 0.9922, 0.9883, 0.9965, 1, 0.9869, 0.963, 0.9674, 0.9582, 0.9473, 0.9463, 0.9457, 0.9479, 0.9614, 0.9597, 0.9566, 0.9743, 0.9647, 0.9468, 0.9397, 0.9294, 0.93, 0.9189, 0.932, 0.9128, 0.9049, 0.8988, 0.9235, 0.9005, 0.8974, 0.8922, 0.8865, 0.8796, 0.875, 0.8879, 0.8783, 0.8754, 0.876, 0.8877, 0.8912, 0.8923, 0.8806, 0.8929, 0.8795, 0.8763, 0.8831, 0.8804, 0.8746, 0.8804, 0.9028, 0.893, 0.8656, 0.8083, 0.6598] +# changed to be V3 scores now. +S2 = [0.8642, 0.9292, 0.9504, 0.9533, 0.962, 0.9659, 0.9707, 0.966, 0.9658, 0.9679, 0.9688, 0.96, 0.9635, 0.9659, 0.9689, 0.977, 0.965, 0.9687, 0.9686, 0.968, 0.9666, 0.9704, 0.9681, 0.9661, 0.9711, 0.9712, 0.9631, 0.9672, 0.9662, 0.9676, 0.9643, 0.9681, 0.9636, 0.9699, 0.9689, 0.9749, 0.9756, 0.9766, 0.9736, 0.9726, 0.9772, 0.9679, 0.9667, 0.9738, 0.9728, 0.9743, 0.9753, 0.9718, 0.9762, 0.9807, 0.9794, 0.9826, 0.9827, 0.9794, 0.981, 0.9855, 0.9724, 0.9776, 0.9749, 0.9723, 0.9705, 0.9721, 0.9782, 0.9767, 0.9908, 0.9863, 0.9941, 0.9871, 0.9947, 0.994, 0.9906, 0.9843, 0.9877, 0.9854, 0.9813, 0.9722, 0.9731, 0.971, 0.9799, 0.9719, 0.9698, 0.9702, 0.9603, 0.9625, 0.9565, 0.9585, 0.952, 0.9579, 0.9526, 0.9443, 0.9438, 0.9309, 0.9299, 0.9081, 0.9046, 0.8851, 0.8646, 0.8594, 0.8523, 0.8574] +# changed to v3 scores now. +S3 = [0.8642, 0.9292, 0.9504, 0.9533, 0.962, 0.9659, 0.9707, 0.966, 0.9658, 0.9679, 0.9688, 0.96, 0.9635, 0.9659, 0.9689, 0.977, 0.965, 0.9687, 0.9686, 0.968, 0.9666, 0.9704, 0.9681, 0.9661, 0.9711, 0.9712, 0.9631, 0.9672, 0.9662, 0.9676, 0.9643, 0.9681, 0.9636, 0.9699, 0.9689, 0.9749, 0.9756, 0.9766, 0.9736, 0.9726, 0.9772, 0.9679, 0.9667, 0.9738, 0.9728, 0.9743, 0.9753, 0.9718, 0.9762, 0.9807, 0.9794, 0.9826, 0.9827, 0.9794, 0.981, 0.9855, 0.9724, 0.9776, 0.9749, 0.9723, 0.9705, 0.9721, 0.9782, 0.9767, 0.9908, 0.9863, 0.9941, 0.9871, 0.9947, 0.994, 0.9906, 0.9843, 0.9877, 0.9854, 0.9813, 0.9722, 0.9731, 0.971, 0.9799, 0.9719, 0.9698, 0.9702, 0.9603, 0.9625, 0.9565, 0.9585, 0.952, 0.9579, 0.9526, 0.9443, 0.9438, 0.9309, 0.9299, 0.9081, 0.9046, 0.8851, 0.8646, 0.8594, 0.8523, 0.8574] -S3 = [0.8485, 0.9222, 0.9204, 0.9215, 0.9362, 0.9381, 0.9368, 0.9358, 0.942, 0.9427, 0.9527, 0.9565, 0.9492, 0.9492, 0.9618, 0.9609, 0.9643, 0.9605, 0.9493, 0.9719, 0.967, 0.9726, 0.9888, 0.9635, 0.9583, 0.9657, 0.9616, 0.9536, 0.9434, 0.9542, 0.9734, 0.9692, 0.955, 0.9331, 0.9353, 0.9465, 0.9584, 0.9583, 0.9759, 0.9534, 0.9703, 0.9494, 0.9667, 0.9819, 0.98, 0.9829, 0.9794, 0.9922, 0.9883, 0.9965, 1.0048, 0.9869, 0.963, 0.9674, 0.9582, 0.9473, 0.9463, 0.9457, 0.9479, 0.9614, 0.9597, 0.9566, 0.9743, 0.9647, 0.9468, 0.9397, 0.9294, 0.93, 0.9189, 0.932, 0.9128, 0.9049, 0.8988, 0.9235, 0.9005, 0.8974, 0.8922, 0.8865, 0.8796, 0.875, 0.8879, 0.8783, 0.8754, 0.876, 0.8877, 0.8912, 0.8923, 0.8806, 0.8929, 0.8795, 0.8763, 0.8831, 0.8804, 0.8746, 0.8804, 0.9028, 0.893, 0.8656, 0.8083, 0.6598] - - -S4 = [0.899, 0.9049, 0.9077, 0.8968, 0.8831, 0.8844, 0.874, 0.8589, 0.8449, 0.8532, 0.85, 0.8539, 0.8511, 0.8263, 0.796, 0.739, 0.6641, 0.582, 0.5121, 0.4577, 0.3952, 0.3391, 0.2939, 0.2475, 0.2076, 0.1942, 0.1901, 0.1846, 0.1683, 0.1607, 0.1606, 0.1549, 0.1462, 0.1357, 0.1333, 0.1259, 0.1142, 0.117, 0.0999, 0.0838, 0.0662, 0.0518, 0.0514, 0.071, 0.094, 0.1382, 0.1875, 0.2052, 0.2083, 0.1949, 0.1849, 0.1847, 0.1915, 0.1981, 0.2072, 0.2192, 0.2323, 0.231, 0.2447, 0.2592, 0.2552, 0.2275, 0.222, 0.2208, 0.2229, 0.2276, 0.2245, 0.224, 0.213, 0.1919, 0.1645, 0.1417, 0.12, 0.0919, 0.0577, 0.0383, 0.0389, 0.045, 0.0606, 0.0599, 0.0677, 0.0915, 0.1168, 0.1569, 0.1911, 0.1919, 0.2055, 0.1949, 0.1881, 0.1697, 0.1517, 0.1501, 0.1564, 0.1701, 0.1992, 0.2172, 0.2438, 0.2857, 0.3298, 0.3586, 0.415, 0.4355, 0.4287, 0.4115] - -disorder_Q8N6T3 = [0.8977, 0.8808, 0.8288, 0.76, 0.6964, 0.6182, 0.5166, 0.4305, 0.3429, 0.2699, 0.2477, 0.2388, 0.2213, 0.2481, 0.2523, 0.3029, 0.3073, 0.3065, 0.2982, 0.2655, 0.2231, 0.1872, 0.1661, 0.1477, 0.1168, 0.0994, 0.0825, 0.0709, 0.0722, 0.0666, 0.0553, 0.059, 0.0303, 0.0239, 0.0206, 0.0165, 0.0221, 0.0197, 0.0276, 0.0216, 0.0101, 0.0077, 0.0294, 0.0465, 0.0587, 0.0717, 0.0736, 0.0702, 0.0669, 0.0563, 0.0607, 0.0521, 0.0412, 0.0315, 0.0249, 0.0233, 0.0227, 0.0225, 0.0221, 0.0405, 0.0423, 0.0439, 0.0457, 0.0467, 0.0408, 0.0368, 0.0384, 0.0376, 0.0338, 0.0317, 0.0344, 0.0405, 0.0533, 0.073, 0.096, 0.1329, 0.1557, 0.1873, 0.1961, 0.1745, 0.1454, 0.1233, 0.1029, 0.096, 0.0857, 0.0832, 0.086, 0.1201, 0.1472, 0.1591, 0.1633, 0.159, 0.138, 0.1326, 0.1065, 0.0897, 0.087, 0.0779, 0.0719, 0.0658, 0.0624, 0.0578, 0.0544, 0.0487, 0.0366, 0.0276, 0.0366, 0.0343, 0.0331, 0.0345, 0.0346, 0.0522, 0.0563, 0.0646, 0.099, 0.1193, 0.1504, 0.1963, 0.2574, 0.326, 0.3622, 0.4354, 0.488, 0.5155, 0.5949, 0.6679, 0.7152, 0.7484, 0.8124, 0.8528, 0.8748, 0.8859, 0.885, 0.882, 0.8646, 0.8395, 0.8597, 0.8784, 0.8948, 0.9012, 0.9201, 0.9081, 0.9031, 0.9109, 0.9172, 0.9312, 0.9198, 0.9163, 0.9366, 0.9318, 0.934, 0.9239, 0.9341, 0.9438, 0.9573, 0.9608, 0.972, 0.9464, 0.9396, 0.9131, 0.8843, 0.8674, 0.856, 0.8113, 0.7798, 0.7677, 0.7673, 0.7808, 0.7968, 0.8167, 0.8499, 0.8676, 0.8935, 0.9077, 0.9335, 0.9404, 0.9508, 0.9556, 0.9618, 0.9527, 0.9579, 0.9639, 0.9737, 0.9719, 0.9475, 0.9579, 0.943, 0.9214, 0.916, 0.8963, 0.8984, 0.9135, 0.93, 0.9273, 0.9296, 0.9268, 0.9206, 0.9175, 0.9134, 0.9175, 0.9236, 0.9118, 0.9097, 0.8938, 0.8997, 0.8966, 0.8929, 0.9089, 0.9294, 0.9276, 0.9388, 0.9483, 0.9512, 0.9565, 0.9609, 0.9609, 0.96, 0.9556, 0.96, 0.9603, 0.9789, 0.9724, 0.969, 0.9609, 0.9636, 0.9681, 0.9805, 0.9764, 0.9759, 0.9817, 0.9791, 0.9903, 0.9771, 0.9761, 0.9781, 0.9752, 0.9767, 0.9669, 0.9718, 0.9719, 0.9724, 0.9717, 0.9696, 0.972, 0.9567, 0.971, 0.9635, 0.9639, 0.9639, 0.9705, 0.9722, 0.9682, 0.9724, 0.9623, 0.9809, 0.983, 0.9712, 0.9679, 0.9829, 0.9863, 0.9865, 0.9811, 0.978, 0.984, 0.9852, 0.9742, 0.9639, 0.9683, 0.9696, 0.9669, 0.9617, 0.9591, 0.9695, 0.9543, 0.9544, 0.9614, 0.9518, 0.9499, 0.9607, 0.9589, 0.9572, 0.9627, 0.9588, 0.9444, 0.9471, 0.9482, 0.9512, 0.9768, 0.9634, 0.9638, 0.9539, 0.9406, 0.9348, 0.9446, 0.9445, 0.9444, 0.9551, 0.9633, 0.9524, 0.9319, 0.9336, 0.9529, 0.9568, 0.9479, 0.9509, 0.9592, 0.9728, 0.9787, 0.9647, 0.9801, 0.9763, 0.9785, 0.9725, 0.9674, 0.9699, 0.9561, 0.9712, 0.9633, 0.9655, 0.9703, 0.9674, 0.9625, 0.9686, 0.9658, 0.9684, 0.962, 0.9605, 0.9613, 0.9689, 0.9744, 0.9624, 0.9578, 0.9723, 0.9659, 0.9684, 0.9532, 0.9436, 0.9492, 0.9447, 0.953, 0.9534, 0.9561, 0.9603, 0.9466, 0.9459, 0.9494, 0.9495, 0.9629, 0.9771, 0.9926, 0.9995, 0.9962, 0.9967, 0.9941, 0.9839, 0.9774, 0.9682, 0.9623, 0.975, 0.9782, 0.9677, 0.9656, 0.9721, 0.9823, 0.9887, 0.9819, 0.9762, 0.9704, 0.9687, 0.9787, 0.9683, 0.9617, 0.9707, 0.9607, 0.9757, 0.9675, 0.971, 0.9676, 0.9655, 0.9776, 0.968, 0.9614, 0.9653, 0.9591, 0.9532, 0.9467, 0.9504, 0.9418, 0.947, 0.9597, 0.9627, 0.9499, 0.9359, 0.9501, 0.9607, 0.9304, 0.9277, 0.9253, 0.9144, 0.9173, 0.9173, 0.9191, 0.9093, 0.8939, 0.8386, 0.6994] - -disorder_Q8N6T3_legacy = [0.7461, 0.8075, 0.7773, 0.6604, 0.6343, 0.5719, 0.5358, 0.5232, 0.4448, 0.2933, 0.277, 0.2673, 0.2077, 0.2074, 0.1521, 0.1699, 0.1857, 0.2058, 0.246, 0.2684, 0.2435, 0.1316, 0.0503, 0.0257, 0.0486, 0.0346, 0.0427, 0.0572, 0.0538, 0.0269, 0.0508, 0.0507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0064, 0.0185, 0.0797, 0.1116, 0.0787, 0.0639, 0.0512, 0.049, 0.0525, 0.0472, 0.0225, 0.0334, 0.0042, 0.0218, 0, 0.0143, 0.0445, 0.0499, 0.002, 0.0314, 0.0308, 0.0358, 0.0044, 0, 0, 0, 0, 0.0105, 0.0302, 0.0583, 0.1134, 0.101, 0.102, 0.1436, 0.1448, 0.1495, 0.1376, 0.1421, 0.1361, 0.1326, 0.0763, 0.1008, 0.0999, 0.0993, 0.1952, 0.2651, 0.2128, 0.1745, 0.1702, 0.1764, 0.139, 0.1222, 0.1258, 0.1025, 0.0811, 0.0818, 0.0784, 0.1059, 0.074, 0.0425, 0.0409, 0.0542, 0.0175, 0.0154, 0.0158, 0.0155, 0.0172, 0.0183, 0.0393, 0.0366, 0.0037, 0, 0.0145, 0.0861, 0.1439, 0.2164, 0.2925, 0.2934, 0.2877, 0.301, 0.3471, 0.3555, 0.4321, 0.4669, 0.5037, 0.5182, 0.5651, 0.6368, 0.6485, 0.6736, 0.7132, 0.659, 0.6539, 0.6615, 0.681, 0.6653, 0.6465, 0.6019, 0.5848, 0.4986, 0.5553, 0.5291, 0.4811, 0.4653, 0.5131, 0.5171, 0.4802, 0.495, 0.521, 0.5363, 0.5596, 0.5302, 0.5277, 0.4877, 0.5215, 0.4801, 0.4757, 0.443, 0.4216, 0.4076, 0.3912, 0.2864, 0.2768, 0.2973, 0.2187, 0.2052, 0.2378, 0.2357, 0.2415, 0.2258, 0.2866, 0.2941, 0.2695, 0.3307, 0.3516, 0.3436, 0.3678, 0.3906, 0.395, 0.4186, 0.3888, 0.4336, 0.4776, 0.52, 0.5259, 0.5714, 0.5963, 0.5975, 0.6033, 0.5707, 0.5227, 0.5016, 0.4794, 0.4371, 0.4165, 0.4024, 0.3357, 0.2171, 0.2291, 0.2229, 0.1969, 0.1583, 0.1665, 0.1864, 0.1742, 0.2009, 0.2454, 0.2547, 0.2394, 0.2797, 0.2733, 0.2351, 0.2942, 0.2866, 0.2971, 0.2742, 0.2961, 0.2954, 0.2595, 0.3305, 0.3424, 0.3362, 0.3567, 0.3718, 0.3884, 0.4263, 0.4287, 0.4781, 0.506, 0.4689, 0.5434, 0.5708, 0.572, 0.5403, 0.5672, 0.5448, 0.5262, 0.4974, 0.5204, 0.5085, 0.439, 0.4893, 0.462, 0.4672, 0.3906, 0.4254, 0.4178, 0.4187, 0.3566, 0.325, 0.3557, 0.3704, 0.3264, 0.3421, 0.3393, 0.3349, 0.299, 0.3291, 0.3296, 0.3583, 0.3612, 0.3253, 0.3233, 0.3789, 0.3753, 0.3426, 0.3729, 0.3683, 0.3809, 0.3363, 0.3927, 0.3901, 0.3392, 0.3814, 0.4111, 0.4043, 0.3815, 0.4259, 0.4532, 0.4218, 0.4609, 0.4566, 0.4381, 0.4542, 0.3508, 0.3504, 0.3366, 0.269, 0.3088, 0.3388, 0.3491, 0.4548, 0.4169, 0.4696, 0.5162, 0.5427, 0.5567, 0.5963, 0.6779, 0.6962, 0.6854, 0.7189, 0.7549, 0.7694, 0.7659, 0.761, 0.7248, 0.7056, 0.6446, 0.657, 0.6388, 0.6216, 0.5916, 0.5441, 0.5643, 0.5438, 0.4859, 0.5158, 0.5023, 0.4843, 0.4628, 0.4067, 0.4476, 0.4361, 0.4655, 0.4339, 0.4617, 0.5006, 0.53, 0.5737, 0.5361, 0.5759, 0.6379, 0.6579, 0.7218, 0.7803, 0.8186, 0.8704, 0.9146, 0.9397, 0.9649, 0.9889, 0.9727, 0.936, 0.901, 0.8342, 0.8042, 0.8271, 0.7611, 0.7243, 0.7336, 0.7403, 0.7617, 0.7777, 0.8009, 0.8014, 0.7996, 0.8116, 0.7991, 0.7851, 0.7382, 0.7285, 0.7639, 0.7281, 0.6497, 0.6453, 0.7082, 0.7399, 0.7671, 0.8231, 0.8719, 0.9108, 0.9285, 0.971, 1, 1, 1, 1, 1, 1, 1, 1, 0.9961, 0.9298, 0.8983, 0.8999, 0.9049, 0.9109, 0.9496, 0.931, 0.8694, 0.8506, 0.9301, 0.902, 0.9031, 0.887, 0.8971, 0.8025, 0.8734, 0.9135, 0.8665, 0.9367, 0.9095, 0.794] +# updated to v3 +S4 = [0.8546, 0.912, 0.9237, 0.9204, 0.9052, 0.9003, 0.89, 0.8787, 0.8538, 0.825, 0.7945, 0.7703, 0.7358, 0.706, 0.6811, 0.65, 0.6257, 0.6093, 0.6187, 0.6069, 0.5672, 0.5343, 0.5039, 0.4669, 0.4262, 0.3792, 0.3469, 0.3176, 0.2873, 0.2589, 0.2379, 0.2197, 0.1964, 0.184, 0.1765, 0.1601, 0.1579, 0.1544, 0.1542, 0.1536, 0.1533, 0.1527, 0.1543, 0.1521, 0.1497, 0.1494, 0.1502, 0.1483, 0.1482, 0.1443, 0.1398, 0.1461, 0.1525, 0.1615, 0.1621, 0.1637, 0.165, 0.1635, 0.1631, 0.1563, 0.1555, 0.1548, 0.1529, 0.1516, 0.1536, 0.1503, 0.1408, 0.137, 0.1326, 0.1277, 0.1237, 0.1179, 0.1154, 0.1208, 0.1296, 0.1297, 0.1256, 0.1314, 0.1278, 0.1319, 0.134, 0.1359, 0.1406, 0.1442, 0.1538, 0.1605, 0.1658, 0.1731, 0.1802, 0.1935, 0.2108, 0.2245, 0.2353, 0.2433, 0.2479, 0.2544, 0.2594, 0.2573, 0.2509, 0.2467, 0.2289, 0.2258, 0.2122, 0.2053] +# updated to v3 +disorder_Q8N6T3 = [0.6292, 0.6242, 0.617, 0.6164, 0.6005, 0.5978, 0.565, 0.546, 0.5083, 0.4907, 0.4514, 0.4082, 0.3708, 0.3311, 0.3001, 0.2598, 0.2337, 0.2086, 0.1758, 0.1599, 0.1471, 0.1334, 0.1124, 0.0961, 0.0874, 0.0768, 0.0766, 0.0745, 0.0559, 0.0477, 0.0433, 0.0458, 0.0391, 0.0403, 0.0406, 0.0396, 0.0382, 0.0313, 0.0281, 0.0307, 0.0387, 0.0399, 0.043, 0.0466, 0.0482, 0.051, 0.0521, 0.05, 0.0442, 0.0482, 0.0425, 0.043, 0.046, 0.0501, 0.051, 0.0528, 0.0529, 0.0492, 0.0503, 0.0499, 0.0516, 0.0566, 0.0594, 0.0667, 0.0725, 0.0759, 0.0858, 0.0888, 0.092, 0.0947, 0.1046, 0.1094, 0.1144, 0.1121, 0.1125, 0.1142, 0.1136, 0.1139, 0.1112, 0.1117, 0.1151, 0.1253, 0.1306, 0.1338, 0.1357, 0.1368, 0.1439, 0.147, 0.1439, 0.1433, 0.1365, 0.1299, 0.1267, 0.1157, 0.1106, 0.1045, 0.1042, 0.1113, 0.116, 0.1168, 0.1118, 0.1056, 0.101, 0.0995, 0.0964, 0.1011, 0.101, 0.1053, 0.1085, 0.1159, 0.129, 0.141, 0.1612, 0.1787, 0.2033, 0.2295, 0.2574, 0.2907, 0.3269, 0.3667, 0.4028, 0.4448, 0.47, 0.5021, 0.5346, 0.577, 0.6097, 0.6457, 0.6787, 0.7108, 0.7391, 0.7699, 0.7902, 0.8104, 0.8355, 0.8538, 0.8748, 0.8864, 0.8979, 0.9037, 0.9083, 0.9115, 0.9098, 0.9254, 0.9279, 0.9267, 0.9295, 0.925, 0.9281, 0.9318, 0.9274, 0.919, 0.9117, 0.9044, 0.8987, 0.8954, 0.8862, 0.8838, 0.878, 0.8834, 0.8843, 0.8744, 0.8785, 0.8619, 0.8571, 0.8507, 0.8439, 0.8408, 0.8425, 0.8471, 0.8476, 0.8525, 0.8529, 0.8585, 0.8641, 0.8719, 0.8769, 0.8877, 0.8934, 0.8937, 0.9005, 0.8926, 0.8984, 0.8969, 0.8951, 0.9077, 0.8887, 0.8942, 0.8935, 0.8829, 0.8752, 0.8779, 0.8719, 0.8751, 0.8783, 0.8862, 0.89, 0.8863, 0.869, 0.8701, 0.8712, 0.8849, 0.8765, 0.8576, 0.8717, 0.8795, 0.8789, 0.8833, 0.8961, 0.8889, 0.8973, 0.902, 0.9067, 0.9151, 0.9216, 0.9241, 0.9193, 0.9186, 0.9174, 0.9169, 0.927, 0.9248, 0.9282, 0.9289, 0.9273, 0.9398, 0.9413, 0.9444, 0.9381, 0.9432, 0.9493, 0.9617, 0.9647, 0.9697, 0.9766, 0.9787, 0.9855, 0.9835, 0.99, 0.9773, 0.9842, 0.989, 0.9831, 0.9829, 0.9833, 0.9785, 0.9801, 0.9916, 0.9928, 0.9994, 0.9935, 0.9789, 0.9862, 0.9886, 0.9796, 0.9869, 0.9968, 0.9964, 0.9997, 0.9909, 0.9877, 0.9997, 0.9952, 0.9894, 0.9813, 0.9936, 0.9924, 0.9791, 0.9776, 0.9754, 0.9645, 0.9624, 0.9612, 0.95, 0.9485, 0.9386, 0.9445, 0.9446, 0.9418, 0.9455, 0.9322, 0.9412, 0.9168, 0.9179, 0.9181, 0.9124, 0.9227, 0.9196, 0.9394, 0.9324, 0.9174, 0.9172, 0.9091, 0.9094, 0.9139, 0.9088, 0.9191, 0.9216, 0.9285, 0.9304, 0.9316, 0.9292, 0.9287, 0.9341, 0.9387, 0.9442, 0.9481, 0.9501, 0.9531, 0.946, 0.9514, 0.9483, 0.9429, 0.9464, 0.9515, 0.9416, 0.9461, 0.9504, 0.9506, 0.951, 0.9588, 0.9566, 0.9573, 0.9613, 0.9666, 0.9657, 0.9562, 0.9521, 0.9533, 0.9549, 0.9552, 0.9564, 0.9551, 0.952, 0.9561, 0.9601, 0.9663, 0.9686, 0.9681, 0.9694, 0.9702, 0.9755, 0.9751, 0.9781, 0.9784, 0.9812, 0.9864, 0.9797, 0.9967, 0.9754, 0.9776, 0.9768, 0.9705, 0.969, 0.9703, 0.9704, 0.9656, 0.9728, 0.971, 0.9636, 0.9683, 0.983, 0.9796, 0.9917, 0.9749, 0.9691, 0.9765, 0.9706, 0.9725, 0.9715, 0.9744, 0.9698, 0.966, 0.9675, 0.9656, 0.963, 0.966, 0.9669, 0.9686, 0.9728, 0.9724, 0.9771, 0.968, 0.9607, 0.9647, 0.9466, 0.9511, 0.9359, 0.9426, 0.936, 0.9324, 0.9287, 0.9314, 0.9241, 0.9231, 0.9156, 0.9161, 0.9042, 0.9107, 0.9076, 0.895, 0.8939, 0.905, 0.9326, 0.9641, 0.9787] disorder_Q8N6T3_legacy = [0.7461, 0.8075, 0.7773, 0.6604, 0.6343, 0.5719, 0.5358, 0.5232, 0.4448, 0.2933, 0.277, 0.2673, 0.2077, 0.2074, 0.1521, 0.1699, 0.1857, 0.2058, 0.246, 0.2684, 0.2435, 0.1316, 0.0503, 0.0257, 0.0486, 0.0346, 0.0427, 0.0572, 0.0538, 0.0269, 0.0508, 0.0507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0064, 0.0185, 0.0797, 0.1116, 0.0787, 0.0639, 0.0512, 0.049, 0.0525, 0.0472, 0.0225, 0.0334, 0.0042, 0.0218, 0, 0.0143, 0.0445, 0.0499, 0.002, 0.0314, 0.0308, 0.0358, 0.0044, 0, 0, 0, 0, 0.0105, 0.0302, 0.0583, 0.1134, 0.101, 0.102, 0.1436, 0.1448, 0.1495, 0.1376, 0.1421, 0.1361, 0.1326, 0.0763, 0.1008, 0.0999, 0.0993, 0.1952, 0.2651, 0.2128, 0.1745, 0.1702, 0.1764, 0.139, 0.1222, 0.1258, 0.1025, 0.0811, 0.0818, 0.0784, 0.1059, 0.074, 0.0425, 0.0409, 0.0542, 0.0175, 0.0154, 0.0158, 0.0155, 0.0172, 0.0183, 0.0393, 0.0366, 0.0037, 0, 0.0145, 0.0861, 0.1439, 0.2164, 0.2925, 0.2934, 0.2877, 0.301, 0.3471, 0.3555, 0.4321, 0.4669, 0.5037, 0.5182, 0.5651, 0.6368, 0.6485, 0.6736, 0.7132, 0.659, 0.6539, 0.6615, 0.681, 0.6653, 0.6465, 0.6019, 0.5848, 0.4986, 0.5553, 0.5291, 0.4811, 0.4653, 0.5131, 0.5171, 0.4802, 0.495, 0.521, 0.5363, 0.5596, 0.5302, 0.5277, 0.4877, 0.5215, 0.4801, 0.4757, 0.443, 0.4216, 0.4076, 0.3912, 0.2864, 0.2768, 0.2973, 0.2187, 0.2052, 0.2378, 0.2357, 0.2415, 0.2258, 0.2866, 0.2941, 0.2695, 0.3307, 0.3516, 0.3436, 0.3678, 0.3906, 0.395, 0.4186, 0.3888, 0.4336, 0.4776, 0.52, 0.5259, 0.5714, 0.5963, 0.5975, 0.6033, 0.5707, 0.5227, 0.5016, 0.4794, 0.4371, 0.4165, 0.4024, 0.3357, 0.2171, 0.2291, 0.2229, 0.1969, 0.1583, 0.1665, 0.1864, 0.1742, 0.2009, 0.2454, 0.2547, 0.2394, 0.2797, 0.2733, 0.2351, 0.2942, 0.2866, 0.2971, 0.2742, 0.2961, 0.2954, 0.2595, 0.3305, 0.3424, 0.3362, 0.3567, 0.3718, 0.3884, 0.4263, 0.4287, 0.4781, 0.506, 0.4689, 0.5434, 0.5708, 0.572, 0.5403, 0.5672, 0.5448, 0.5262, 0.4974, 0.5204, 0.5085, 0.439, 0.4893, 0.462, 0.4672, 0.3906, 0.4254, 0.4178, 0.4187, 0.3566, 0.325, 0.3557, 0.3704, 0.3264, 0.3421, 0.3393, 0.3349, 0.299, 0.3291, 0.3296, 0.3583, 0.3612, 0.3253, 0.3233, 0.3789, 0.3753, 0.3426, 0.3729, 0.3683, 0.3809, 0.3363, 0.3927, 0.3901, 0.3392, 0.3814, 0.4111, 0.4043, 0.3815, 0.4259, 0.4532, 0.4218, 0.4609, 0.4566, 0.4381, 0.4542, 0.3508, 0.3504, 0.3366, 0.269, 0.3088, 0.3388, 0.3491, 0.4548, 0.4169, 0.4696, 0.5162, 0.5427, 0.5567, 0.5963, 0.6779, 0.6962, 0.6854, 0.7189, 0.7549, 0.7694, 0.7659, 0.761, 0.7248, 0.7056, 0.6446, 0.657, 0.6388, 0.6216, 0.5916, 0.5441, 0.5643, 0.5438, 0.4859, 0.5158, 0.5023, 0.4843, 0.4628, 0.4067, 0.4476, 0.4361, 0.4655, 0.4339, 0.4617, 0.5006, 0.53, 0.5737, 0.5361, 0.5759, 0.6379, 0.6579, 0.7218, 0.7803, 0.8186, 0.8704, 0.9146, 0.9397, 0.9649, 0.9889, 0.9727, 0.936, 0.901, 0.8342, 0.8042, 0.8271, 0.7611, 0.7243, 0.7336, 0.7403, 0.7617, 0.7777, 0.8009, 0.8014, 0.7996, 0.8116, 0.7991, 0.7851, 0.7382, 0.7285, 0.7639, 0.7281, 0.6497, 0.6453, 0.7082, 0.7399, 0.7671, 0.8231, 0.8719, 0.9108, 0.9285, 0.971, 1, 1, 1, 1, 1, 1, 1, 1, 0.9961, 0.9298, 0.8983, 0.8999, 0.9049, 0.9109, 0.9496, 0.931, 0.8694, 0.8506, 0.9301, 0.902, 0.9031, 0.887, 0.8971, 0.8025, 0.8734, 0.9135, 0.8665, 0.9367, 0.9095, 0.794] +disorder_Q8N6T3_2 = [0.8977, 0.8808, 0.8288, 0.76, 0.6964, 0.6182, 0.5166, 0.4305, 0.3429, 0.2699, 0.2477, 0.2388, 0.2213, 0.2481, 0.2523, 0.3029, 0.3073, 0.3065, 0.2982, 0.2655, 0.2231, 0.1872, 0.1661, 0.1477, 0.1168, 0.0994, 0.0825, 0.0709, 0.0722, 0.0666, 0.0553, 0.059, 0.0303, 0.0239, 0.0206, 0.0165, 0.0221, 0.0197, 0.0276, 0.0216, 0.0101, 0.0077, 0.0294, 0.0465, 0.0587, 0.0717, 0.0736, 0.0702, 0.0669, 0.0563, 0.0607, 0.0521, 0.0412, 0.0315, 0.0249, 0.0233, 0.0227, 0.0225, 0.0221, 0.0405, 0.0423, 0.0439, 0.0457, 0.0467, 0.0408, 0.0368, 0.0384, 0.0376, 0.0338, 0.0317, 0.0344, 0.0405, 0.0533, 0.073, 0.096, 0.1329, 0.1557, 0.1873, 0.1961, 0.1745, 0.1454, 0.1233, 0.1029, 0.096, 0.0857, 0.0832, 0.086, 0.1201, 0.1472, 0.1591, 0.1633, 0.159, 0.138, 0.1326, 0.1065, 0.0897, 0.087, 0.0779, 0.0719, 0.0658, 0.0624, 0.0578, 0.0544, 0.0487, 0.0366, 0.0276, 0.0366, 0.0343, 0.0331, 0.0345, 0.0346, 0.0522, 0.0563, 0.0646, 0.099, 0.1193, 0.1504, 0.1963, 0.2574, 0.326, 0.3622, 0.4354, 0.488, 0.5155, 0.5949, 0.6679, 0.7152, 0.7484, 0.8124, 0.8528, 0.8748, 0.8859, 0.885, 0.882, 0.8646, 0.8395, 0.8597, 0.8784, 0.8948, 0.9012, 0.9201, 0.9081, 0.9031, 0.9109, 0.9172, 0.9312, 0.9198, 0.9163, 0.9366, 0.9318, 0.934, 0.9239, 0.9341, 0.9438, 0.9573, 0.9608, 0.972, 0.9464, 0.9396, 0.9131, 0.8843, 0.8674, 0.856, 0.8113, 0.7798, 0.7677, 0.7673, 0.7808, 0.7968, 0.8167, 0.8499, 0.8676, 0.8935, 0.9077, 0.9335, 0.9404, 0.9508, 0.9556, 0.9618, 0.9527, 0.9579, 0.9639, 0.9737, 0.9719, 0.9475, 0.9579, 0.943, 0.9214, 0.916, 0.8963, 0.8984, 0.9135, 0.93, 0.9273, 0.9296, 0.9268, 0.9206, 0.9175, 0.9134, 0.9175, 0.9236, 0.9118, 0.9097, 0.8938, 0.8997, 0.8966, 0.8929, 0.9089, 0.9294, 0.9276, 0.9388, 0.9483, 0.9512, 0.9565, 0.9609, 0.9609, 0.96, 0.9556, 0.96, 0.9603, 0.9789, 0.9724, 0.969, 0.9609, 0.9636, 0.9681, 0.9805, 0.9764, 0.9759, 0.9817, 0.9791, 0.9903, 0.9771, 0.9761, 0.9781, 0.9752, 0.9767, 0.9669, 0.9718, 0.9719, 0.9724, 0.9717, 0.9696, 0.972, 0.9567, 0.971, 0.9635, 0.9639, 0.9639, 0.9705, 0.9722, 0.9682, 0.9724, 0.9623, 0.9809, 0.983, 0.9712, 0.9679, 0.9829, 0.9863, 0.9865, 0.9811, 0.978, 0.984, 0.9852, 0.9742, 0.9639, 0.9683, 0.9696, 0.9669, 0.9617, 0.9591, 0.9695, 0.9543, 0.9544, 0.9614, 0.9518, 0.9499, 0.9607, 0.9589, 0.9572, 0.9627, 0.9588, 0.9444, 0.9471, 0.9482, 0.9512, 0.9768, 0.9634, 0.9638, 0.9539, 0.9406, 0.9348, 0.9446, 0.9445, 0.9444, 0.9551, 0.9633, 0.9524, 0.9319, 0.9336, 0.9529, 0.9568, 0.9479, 0.9509, 0.9592, 0.9728, 0.9787, 0.9647, 0.9801, 0.9763, 0.9785, 0.9725, 0.9674, 0.9699, 0.9561, 0.9712, 0.9633, 0.9655, 0.9703, 0.9674, 0.9625, 0.9686, 0.9658, 0.9684, 0.962, 0.9605, 0.9613, 0.9689, 0.9744, 0.9624, 0.9578, 0.9723, 0.9659, 0.9684, 0.9532, 0.9436, 0.9492, 0.9447, 0.953, 0.9534, 0.9561, 0.9603, 0.9466, 0.9459, 0.9494, 0.9495, 0.9629, 0.9771, 0.9926, 0.9995, 0.9962, 0.9967, 0.9941, 0.9839, 0.9774, 0.9682, 0.9623, 0.975, 0.9782, 0.9677, 0.9656, 0.9721, 0.9823, 0.9887, 0.9819, 0.9762, 0.9704, 0.9687, 0.9787, 0.9683, 0.9617, 0.9707, 0.9607, 0.9757, 0.9675, 0.971, 0.9676, 0.9655, 0.9776, 0.968, 0.9614, 0.9653, 0.9591, 0.9532, 0.9467, 0.9504, 0.9418, 0.947, 0.9597, 0.9627, 0.9499, 0.9359, 0.9501, 0.9607, 0.9304, 0.9277, 0.9253, 0.9144, 0.9173, 0.9173, 0.9191, 0.9093, 0.8939, 0.8386, 0.6994] -disorder_Q8N6T3 = [0.8977, 0.8808, 0.8288, 0.76, 0.6964, 0.6182, 0.5166, 0.4305, 0.3429, 0.2699, 0.2477, 0.2388, 0.2213, 0.2481, 0.2523, 0.3029, 0.3073, 0.3065, 0.2982, 0.2655, 0.2231, 0.1872, 0.1661, 0.1477, 0.1168, 0.0994, 0.0825, 0.0709, 0.0722, 0.0666, 0.0553, 0.059, 0.0303, 0.0239, 0.0206, 0.0165, 0.0221, 0.0197, 0.0276, 0.0216, 0.0101, 0.0077, 0.0294, 0.0465, 0.0587, 0.0717, 0.0736, 0.0702, 0.0669, 0.0563, 0.0607, 0.0521, 0.0412, 0.0315, 0.0249, 0.0233, 0.0227, 0.0225, 0.0221, 0.0405, 0.0423, 0.0439, 0.0457, 0.0467, 0.0408, 0.0368, 0.0384, 0.0376, 0.0338, 0.0317, 0.0344, 0.0405, 0.0533, 0.073, 0.096, 0.1329, 0.1557, 0.1873, 0.1961, 0.1745, 0.1454, 0.1233, 0.1029, 0.096, 0.0857, 0.0832, 0.086, 0.1201, 0.1472, 0.1591, 0.1633, 0.159, 0.138, 0.1326, 0.1065, 0.0897, 0.087, 0.0779, 0.0719, 0.0658, 0.0624, 0.0578, 0.0544, 0.0487, 0.0366, 0.0276, 0.0366, 0.0343, 0.0331, 0.0345, 0.0346, 0.0522, 0.0563, 0.0646, 0.099, 0.1193, 0.1504, 0.1963, 0.2574, 0.326, 0.3622, 0.4354, 0.488, 0.5155, 0.5949, 0.6679, 0.7152, 0.7484, 0.8124, 0.8528, 0.8748, 0.8859, 0.885, 0.882, 0.8646, 0.8395, 0.8597, 0.8784, 0.8948, 0.9012, 0.9201, 0.9081, 0.9031, 0.9109, 0.9172, 0.9312, 0.9198, 0.9163, 0.9366, 0.9318, 0.934, 0.9239, 0.9341, 0.9438, 0.9573, 0.9608, 0.972, 0.9464, 0.9396, 0.9131, 0.8843, 0.8674, 0.856, 0.8113, 0.7798, 0.7677, 0.7673, 0.7808, 0.7968, 0.8167, 0.8499, 0.8676, 0.8935, 0.9077, 0.9335, 0.9404, 0.9508, 0.9556, 0.9618, 0.9527, 0.9579, 0.9639, 0.9737, 0.9719, 0.9475, 0.9579, 0.943, 0.9214, 0.916, 0.8963, 0.8984, 0.9135, 0.93, 0.9273, 0.9296, 0.9268, 0.9206, 0.9175, 0.9134, 0.9175, 0.9236, 0.9118, 0.9097, 0.8938, 0.8997, 0.8966, 0.8929, 0.9089, 0.9294, 0.9276, 0.9388, 0.9483, 0.9512, 0.9565, 0.9609, 0.9609, 0.96, 0.9556, 0.96, 0.9603, 0.9789, 0.9724, 0.969, 0.9609, 0.9636, 0.9681, 0.9805, 0.9764, 0.9759, 0.9817, 0.9791, 0.9903, 0.9771, 0.9761, 0.9781, 0.9752, 0.9767, 0.9669, 0.9718, 0.9719, 0.9724, 0.9717, 0.9696, 0.972, 0.9567, 0.971, 0.9635, 0.9639, 0.9639, 0.9705, 0.9722, 0.9682, 0.9724, 0.9623, 0.9809, 0.983, 0.9712, 0.9679, 0.9829, 0.9863, 0.9865, 0.9811, 0.978, 0.984, 0.9852, 0.9742, 0.9639, 0.9683, 0.9696, 0.9669, 0.9617, 0.9591, 0.9695, 0.9543, 0.9544, 0.9614, 0.9518, 0.9499, 0.9607, 0.9589, 0.9572, 0.9627, 0.9588, 0.9444, 0.9471, 0.9482, 0.9512, 0.9768, 0.9634, 0.9638, 0.9539, 0.9406, 0.9348, 0.9446, 0.9445, 0.9444, 0.9551, 0.9633, 0.9524, 0.9319, 0.9336, 0.9529, 0.9568, 0.9479, 0.9509, 0.9592, 0.9728, 0.9787, 0.9647, 0.9801, 0.9763, 0.9785, 0.9725, 0.9674, 0.9699, 0.9561, 0.9712, 0.9633, 0.9655, 0.9703, 0.9674, 0.9625, 0.9686, 0.9658, 0.9684, 0.962, 0.9605, 0.9613, 0.9689, 0.9744, 0.9624, 0.9578, 0.9723, 0.9659, 0.9684, 0.9532, 0.9436, 0.9492, 0.9447, 0.953, 0.9534, 0.9561, 0.9603, 0.9466, 0.9459, 0.9494, 0.9495, 0.9629, 0.9771, 0.9926, 0.9995, 0.9962, 0.9967, 0.9941, 0.9839, 0.9774, 0.9682, 0.9623, 0.975, 0.9782, 0.9677, 0.9656, 0.9721, 0.9823, 0.9887, 0.9819, 0.9762, 0.9704, 0.9687, 0.9787, 0.9683, 0.9617, 0.9707, 0.9607, 0.9757, 0.9675, 0.971, 0.9676, 0.9655, 0.9776, 0.968, 0.9614, 0.9653, 0.9591, 0.9532, 0.9467, 0.9504, 0.9418, 0.947, 0.9597, 0.9627, 0.9499, 0.9359, 0.9501, 0.9607, 0.9304, 0.9277, 0.9253, 0.9144, 0.9173, 0.9173, 0.9191, 0.9093, 0.8939, 0.8386, 0.6994] +disorder_Q8N6T3_3 = [0.6292, 0.6242, 0.617, 0.6164, 0.6005, 0.5978, 0.565, 0.546, 0.5083, 0.4907, 0.4514, 0.4082, 0.3708, 0.3311, 0.3001, 0.2598, 0.2337, 0.2086, 0.1758, 0.1599, 0.1471, 0.1334, 0.1124, 0.0961, 0.0874, 0.0768, 0.0766, 0.0745, 0.0559, 0.0477, 0.0433, 0.0458, 0.0391, 0.0403, 0.0406, 0.0396, 0.0382, 0.0313, 0.0281, 0.0307, 0.0387, 0.0399, 0.043, 0.0466, 0.0482, 0.051, 0.0521, 0.05, 0.0442, 0.0482, 0.0425, 0.043, 0.046, 0.0501, 0.051, 0.0528, 0.0529, 0.0492, 0.0503, 0.0499, 0.0516, 0.0566, 0.0594, 0.0667, 0.0725, 0.0759, 0.0858, 0.0888, 0.092, 0.0947, 0.1046, 0.1094, 0.1144, 0.1121, 0.1125, 0.1142, 0.1136, 0.1139, 0.1112, 0.1117, 0.1151, 0.1253, 0.1306, 0.1338, 0.1357, 0.1368, 0.1439, 0.147, 0.1439, 0.1433, 0.1365, 0.1299, 0.1267, 0.1157, 0.1106, 0.1045, 0.1042, 0.1113, 0.116, 0.1168, 0.1118, 0.1056, 0.101, 0.0995, 0.0964, 0.1011, 0.101, 0.1053, 0.1085, 0.1159, 0.129, 0.141, 0.1612, 0.1787, 0.2033, 0.2295, 0.2574, 0.2907, 0.3269, 0.3667, 0.4028, 0.4448, 0.47, 0.5021, 0.5346, 0.577, 0.6097, 0.6457, 0.6787, 0.7108, 0.7391, 0.7699, 0.7902, 0.8104, 0.8355, 0.8538, 0.8748, 0.8864, 0.8979, 0.9037, 0.9083, 0.9115, 0.9098, 0.9254, 0.9279, 0.9267, 0.9295, 0.925, 0.9281, 0.9318, 0.9274, 0.919, 0.9117, 0.9044, 0.8987, 0.8954, 0.8862, 0.8838, 0.878, 0.8834, 0.8843, 0.8744, 0.8785, 0.8619, 0.8571, 0.8507, 0.8439, 0.8408, 0.8425, 0.8471, 0.8476, 0.8525, 0.8529, 0.8585, 0.8641, 0.8719, 0.8769, 0.8877, 0.8934, 0.8937, 0.9005, 0.8926, 0.8984, 0.8969, 0.8951, 0.9077, 0.8887, 0.8942, 0.8935, 0.8829, 0.8752, 0.8779, 0.8719, 0.8751, 0.8783, 0.8862, 0.89, 0.8863, 0.869, 0.8701, 0.8712, 0.8849, 0.8765, 0.8576, 0.8717, 0.8795, 0.8789, 0.8833, 0.8961, 0.8889, 0.8973, 0.902, 0.9067, 0.9151, 0.9216, 0.9241, 0.9193, 0.9186, 0.9174, 0.9169, 0.927, 0.9248, 0.9282, 0.9289, 0.9273, 0.9398, 0.9413, 0.9444, 0.9381, 0.9432, 0.9493, 0.9617, 0.9647, 0.9697, 0.9766, 0.9787, 0.9855, 0.9835, 0.99, 0.9773, 0.9842, 0.989, 0.9831, 0.9829, 0.9833, 0.9785, 0.9801, 0.9916, 0.9928, 0.9994, 0.9935, 0.9789, 0.9862, 0.9886, 0.9796, 0.9869, 0.9968, 0.9964, 0.9997, 0.9909, 0.9877, 0.9997, 0.9952, 0.9894, 0.9813, 0.9936, 0.9924, 0.9791, 0.9776, 0.9754, 0.9645, 0.9624, 0.9612, 0.95, 0.9485, 0.9386, 0.9445, 0.9446, 0.9418, 0.9455, 0.9322, 0.9412, 0.9168, 0.9179, 0.9181, 0.9124, 0.9227, 0.9196, 0.9394, 0.9324, 0.9174, 0.9172, 0.9091, 0.9094, 0.9139, 0.9088, 0.9191, 0.9216, 0.9285, 0.9304, 0.9316, 0.9292, 0.9287, 0.9341, 0.9387, 0.9442, 0.9481, 0.9501, 0.9531, 0.946, 0.9514, 0.9483, 0.9429, 0.9464, 0.9515, 0.9416, 0.9461, 0.9504, 0.9506, 0.951, 0.9588, 0.9566, 0.9573, 0.9613, 0.9666, 0.9657, 0.9562, 0.9521, 0.9533, 0.9549, 0.9552, 0.9564, 0.9551, 0.952, 0.9561, 0.9601, 0.9663, 0.9686, 0.9681, 0.9694, 0.9702, 0.9755, 0.9751, 0.9781, 0.9784, 0.9812, 0.9864, 0.9797, 0.9967, 0.9754, 0.9776, 0.9768, 0.9705, 0.969, 0.9703, 0.9704, 0.9656, 0.9728, 0.971, 0.9636, 0.9683, 0.983, 0.9796, 0.9917, 0.9749, 0.9691, 0.9765, 0.9706, 0.9725, 0.9715, 0.9744, 0.9698, 0.966, 0.9675, 0.9656, 0.963, 0.966, 0.9669, 0.9686, 0.9728, 0.9724, 0.9771, 0.968, 0.9607, 0.9647, 0.9466, 0.9511, 0.9359, 0.9426, 0.936, 0.9324, 0.9287, 0.9314, 0.9241, 0.9231, 0.9156, 0.9161, 0.9042, 0.9107, 0.9076, 0.895, 0.8939, 0.905, 0.9326, 0.9641, 0.9787] \ No newline at end of file diff --git a/metapredict/tests/test_batch_vs_single.py b/metapredict/tests/test_batch_vs_single.py index 7c4b729..b3d88b8 100644 --- a/metapredict/tests/test_batch_vs_single.py +++ b/metapredict/tests/test_batch_vs_single.py @@ -18,7 +18,8 @@ fasta_filepath = "{}/input_data/testing.fasta".format(current_filepath) onehundred_seqs = "{}/input_data/test_seqs_100.fasta".format(current_filepath) -onehundred_scores = "{}/input_data/test_scores_100.npy".format(current_filepath) +# updated to test_scores_100_v3.npy because V3 is now default network. +onehundred_scores = "{}/input_data/test_scores_100_v3.npy".format(current_filepath) from . import build_seq @@ -138,6 +139,7 @@ def test_big_test_batch(): seqs = protfasta.read_fasta(onehundred_seqs) + batch_predictions = meta.predict_disorder_batch(seqs) for idx, k in enumerate(seqs): diff --git a/metapredict/tests/test_metapredict.py b/metapredict/tests/test_metapredict.py index 4832544..b17d026 100644 --- a/metapredict/tests/test_metapredict.py +++ b/metapredict/tests/test_metapredict.py @@ -7,8 +7,7 @@ # Import package, test suite, and other packages as needed import metapredict from metapredict import meta -import metapredict.backend.uniprot_predictions -from metapredict.backend.uniprot_predictions import fetch_sequence +from getSequence import getseq as fetch_sequence import pytest import sys import os @@ -26,7 +25,9 @@ fasta_filepath = "{}/input_data/testing.fasta".format(current_filepath) onehundred_seqs = "{}/input_data/test_seqs_100.fasta".format(current_filepath) -onehundred_scores = "{}/input_data/test_scores_100.npy".format(current_filepath) + +# updated scores to be v3. +onehundred_scores = "{}/input_data/test_scores_100_v3.npy".format(current_filepath) def test_metapredict_imported(): @@ -34,12 +35,38 @@ def test_metapredict_imported(): assert "metapredict" in sys.modules + +def score_compare(s1, s2): + """ + Function which compares two lists/arrays with an error-tollerance + of 1e-3. Used for comparing disorder profiles + + Parameters + ------------ + s1 : list/np.array + Numerical vector/array/list 1 + + s2 : list/np.array + Numerical vector/array/list 2 + + Returns + ---------- + Bool + Returns true if all elements are less than 1e-3, else + returns False + + """ + + return np.allclose(np.array(s1), np.array(s2), atol=1e-3) + + + # test the legacy metapredict predictor def test_legacy_metapredict_predictor(): # testing with normalization - assert meta.predict_disorder('AERDEDNRSKEKKRNKKTNGAGDEHRDKPWSNNSTHPTHRKNEGPMHGDP', legacy=True) == local_data.S0 + assert score_compare(meta.predict_disorder('AERDEDNRSKEKKRNKKTNGAGDEHRDKPWSNNSTHPTHRKNEGPMHGDP', version=1), local_data.S0) == True # testing without normalization - assert meta.predict_disorder('AERDEDNRSKEKKRNKKTNGAGDEHRDKPWSNNSTHPTHRKNEGPMHGDP', normalized=False, legacy=True) == local_data.S1 + assert score_compare(meta.predict_disorder('AERDEDNRSKEKKRNKKTNGAGDEHRDKPWSNNSTHPTHRKNEGPMHGDP', normalized=False, version=1), local_data.S1) == True with pytest.raises(MetapredictError): meta.predict_disorder('') @@ -48,35 +75,38 @@ def test_legacy_metapredict_predictor(): # test the new metapredict predictor def test_metapredict_predictor(): # testing with normalization - assert meta.predict_disorder('RDCAPNNGKKMDNQQHGDVSNQSDNRDSVQQQPPQMAGSQERQKSTESQQSPRSKENKQQAGHSHPESMPRSMSEKEPEMQHDESTGMQNHNRGMQSQDP') == local_data.S2 + assert score_compare(meta.predict_disorder('RDCAPNNGKKMDNQQHGDVSNQSDNRDSVQQQPPQMAGSQERQKSTESQQSPRSKENKQQAGHSHPESMPRSMSEKEPEMQHDESTGMQNHNRGMQSQDP'), local_data.S2)==True # testing without normalization - assert meta.predict_disorder('RDCAPNNGKKMDNQQHGDVSNQSDNRDSVQQQPPQMAGSQERQKSTESQQSPRSKENKQQAGHSHPESMPRSMSEKEPEMQHDESTGMQNHNRGMQSQDP', normalized=False) == local_data.S3 + assert score_compare(meta.predict_disorder('RDCAPNNGKKMDNQQHGDVSNQSDNRDSVQQQPPQMAGSQERQKSTESQQSPRSKENKQQAGHSHPESMPRSMSEKEPEMQHDESTGMQNHNRGMQSQDP', normalized=False), local_data.S3)==True def test_metapredict_functions(): # make sure the disorder domains prediction works testseq = 'MKAPSNGFLPSSNEGEKKPINSQLWHACAGPLVSLPPVGSLVVYFPQGHSEQVAASMQKQTDFIPNYPNLPSKLICLLHSVTLHADTETDEVYAQMTLQPVNKY' DisObj = meta.predict_disorder_domains(testseq, return_numpy=False) - assert DisObj.disorder == local_data.S4 + assert score_compare(DisObj.disorder, local_data.S4)==True # pytest doesn't like the np.array, so just goign to check the sum of the disorder instead. assert round(sum(DisObj.disorder)) == 32 # test boundaries functionality - assert DisObj.disordered_domain_boundaries[0] == [0, 19] - assert DisObj.folded_domain_boundaries[0] == [19, 104] + # updated for v3 + assert DisObj.disordered_domain_boundaries[0] == [0, 22] + # updated for v3 + assert DisObj.folded_domain_boundaries[0] == [22, 104] # test domain sequence functionality - assert DisObj.disordered_domains == ['MKAPSNGFLPSSNEGEKKP'] - assert DisObj.folded_domains == ['INSQLWHACAGPLVSLPPVGSLVVYFPQGHSEQVAASMQKQTDFIPNYPNLPSKLICLLHSVTLHADTETDEVYAQMTLQPVNKY'] + assert DisObj.disordered_domains == ['MKAPSNGFLPSSNEGEKKPINS'] + assert DisObj.folded_domains == ['QLWHACAGPLVSLPPVGSLVVYFPQGHSEQVAASMQKQTDFIPNYPNLPSKLICLLHSVTLHADTETDEVYAQMTLQPVNKY'] # test return sequence functionality assert DisObj.sequence == 'MKAPSNGFLPSSNEGEKKPINSQLWHACAGPLVSLPPVGSLVVYFPQGHSEQVAASMQKQTDFIPNYPNLPSKLICLLHSVTLHADTETDEVYAQMTLQPVNKY' # make sure the uniprot preidction works - assert meta.predict_disorder_uniprot('Q8N6T3') == local_data.disorder_Q8N6T3 + assert score_compare(meta.predict_disorder_uniprot('Q8N6T3'), local_data.disorder_Q8N6T3)==True # make sure the uniprot predictions with legacy predictor works - assert meta.predict_disorder_uniprot('Q8N6T3', legacy=True) == local_data.disorder_Q8N6T3_legacy + assert score_compare(meta.predict_disorder_uniprot('Q8N6T3', version=1), local_data.disorder_Q8N6T3_legacy)==True # make sure fetching uniprot sequence works ARFGAP1 = 'MASPRTRKVLKEVRVQDENNVCFECGAFNPQWVSVTYGIWICLECSGRHRGLGVHLSFVRSVTMDKWKDIELEKMKAGGNAKFREFLESQEDYDPCWSLQEKYNSRAAALFRDKVVALAEGREWSLESSPAQNWTPPQPRTLPSMVHRVSGQPQSVTASSDKAFEDWLNDDLGSYQGAQGNRYVGFGNTPPPQKKEDDFLNNAMSSLYSGWSSFTTGASRFASAAKEGATKFGSQASQKASELGHSLNENVLKPAQEKVKEGKIFDDVSSGVSQLASKVQGVGSKGWRDVTTFFSGKAEGPLDSPSEGHSYQNSGLDHFQNSNIDQSFWETFGSAEPTKTRKSPSSDSWTCADTSTERRSSDSWEVWGSASTNRNSNSDGGEGGEGTKKAVPPAVPTDDGWDNQNW' - assert fetch_sequence('Q8N6T3') == ARFGAP1 + # updated to use getSequence functionality + assert fetch_sequence('Q8N6T3')[1] == ARFGAP1 # make sure percent disorder predictions work expected = {0.05 : 87.4, @@ -86,7 +116,7 @@ def test_metapredict_functions(): # test out percent disorder using the legacy predictor for thresh in [0.05, 0.1, 0.2, 0.3]: - assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, legacy=True), 1) == expected[thresh] + assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, version=1), 1) == expected[thresh] expected = {0.05 : 90.1, 0.1 : 81.8, @@ -94,9 +124,18 @@ def test_metapredict_functions(): 0.3 : 73.6} for thresh in [0.05, 0.1, 0.2, 0.3]: - assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh), 1) == expected[thresh] + assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, version=2), 1) == expected[thresh] + expected = {0.05 : 94.3, + 0.1 : 87.9, + 0.2 : 76.4, + 0.3 : 74.6} + + for thresh in [0.05, 0.1, 0.2, 0.3]: + assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, version=3), 1) == expected[thresh] + + # expected thresholds change a tad when disorder_domains used expected = {0.05 : 90.1, 0.1 : 88.2, @@ -104,16 +143,32 @@ def test_metapredict_functions(): 0.3 : 70.7} for thresh in [0.05, 0.1, 0.2, 0.3]: - assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, mode='disorder_domains'), 1) == expected[thresh] + assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, mode='disorder_domains', version=2), 1) == expected[thresh] + + + # expected thresholds change a tad when disorder_domains used + expected = {0.05 : 100.0, + 0.1 : 88.4, + 0.2 : 76.4, + 0.3 : 74.6} + + for thresh in [0.05, 0.1, 0.2, 0.3]: + assert round(meta.percent_disorder(ARFGAP1, disorder_threshold=thresh, mode='disorder_domains', version=3), 1) == expected[thresh] # make sure fasta stuff works for legacy # updated May 2023 to deal with the fact that predict_disorder_fasta now returns a dictionary where values are np.ndarrays - assert np.allclose(meta.predict_disorder_fasta(fasta_filepath, legacy=True)['Q8N6T3'], np.array(local_data.disorder_Q8N6T3_legacy, dtype=np.float32)) + # updated 2024 to change legacy=False to version = 1 + assert np.allclose(meta.predict_disorder_fasta(fasta_filepath, version=1)['Q8N6T3'][1], np.array(local_data.disorder_Q8N6T3_legacy, dtype=np.float32)) # make sure FASTA stuff works for non-legacy predictions # updated May 2023 to deal with the fact that predict_disorder_fasta now returns a dictionary where values are np.ndarrays - assert np.allclose(meta.predict_disorder_fasta(fasta_filepath, legacy=False)['Q8N6T3'], np.array(local_data.disorder_Q8N6T3, dtype=np.float32)) + # updated 2024 to change legacy=False to version = 2 + assert np.allclose(meta.predict_disorder_fasta(fasta_filepath, version=2)['Q8N6T3'][1], np.array(local_data.disorder_Q8N6T3_2, dtype=np.float32)) + + + # added 2024 to change for v3 + assert np.allclose(meta.predict_disorder_fasta(fasta_filepath, version=3)['Q8N6T3'][1], np.array(local_data.disorder_Q8N6T3_3, dtype=np.float32)) def test_predict_disorder_fail(): @@ -144,15 +199,17 @@ def test_predict_disorder_return_numpy(): x = meta.predict_disorder(testseq, return_numpy=True) assert isinstance(x,np.ndarray) - x = meta.predict_disorder(testseq, return_numpy=True, legacy=True) + x = meta.predict_disorder(testseq, return_numpy=True, version=1) assert isinstance(x,np.ndarray) - x = meta.predict_disorder(testseq, return_numpy=True, legacy=True, normalized=False) + x = meta.predict_disorder(testseq, return_numpy=True, version=1, normalized=False) assert isinstance(x,np.ndarray) - x = meta.predict_disorder(testseq, return_numpy=True, legacy=False, normalized=False) + x = meta.predict_disorder(testseq, return_numpy=True, version=2, normalized=False) assert isinstance(x,np.ndarray) + x = meta.predict_disorder(testseq, return_numpy=True, version=3, normalized=False) + assert isinstance(x,np.ndarray) def test_predict_pLDDT(): testseq = 'MKAPSNGFLPSSNEGEKKPINSQLWHACAGPLVSLPPVGSLVVYFPQGHSEQVAASMQKQTDFIPNYPNLPSKLICLLHSVTLHADTETDEVYAQMTLQPVNKY' @@ -243,5 +300,4 @@ def test_big_test(): - - + \ No newline at end of file diff --git a/metapredict/tests/test_uniprot_functionality.py b/metapredict/tests/test_uniprot_functionality.py index 3ff6299..5fbebf7 100644 --- a/metapredict/tests/test_uniprot_functionality.py +++ b/metapredict/tests/test_uniprot_functionality.py @@ -27,51 +27,39 @@ def test_metapredict_imported(): # def test_predict_disorder_uniprot(): - # checks that this fails when an invalid uniprot accession is passed - with pytest.raises(MetapredictError): - meta.predict_disorder_uniprot('aaaa') - - # checks that when we pull p53 we get 393 residues of sweet, # sweet disorder prediction assert len(meta.predict_disorder_uniprot(P53_UID)) == 393 # check summed disorder is right - assert np.isclose(np.sum(meta.predict_disorder_uniprot(P53_UID)),181.7708, 0.0001) + assert np.isclose(np.sum(meta.predict_disorder_uniprot(P53_UID, version=2)),181.7708, 0.0001) # check legacy disorder is right - assert np.isclose(np.sum(meta.predict_disorder_uniprot(P53_UID, legacy=True)), 172.9651, 0.0001) + assert np.isclose(np.sum(meta.predict_disorder_uniprot(P53_UID, version=1)), 172.9651, 0.0001) # check summed disorder is right when we don't normalize (these are not magic values, # just the expected 'truth' for the 1.0 release - assert np.isclose(np.sum(meta.predict_disorder_uniprot(P53_UID, normalized=False, legacy=True)),173.5245, 0.0001) + assert np.isclose(np.sum(meta.predict_disorder_uniprot(P53_UID, normalized=False, version=1)),173.5245, 0.0001) # .................................................................................... # def test_graph_disorder_uniprot_(): - - # checks that this fails when an invalid uniprot accession is passed - with pytest.raises(MetapredictError): - meta.graph_disorder_uniprot('aaaa') - - # probably should have some tests here...? + # ... yeah... we probably should. I'm on hour 4 of updating + # everything from v2 to v3 though, so today is not that day. + pass + # .................................................................................... # def test_predict_disorder_domains_uniprot_(): - # checks that this fails when an invalid uniprot accession is passed - with pytest.raises(MetapredictError): - meta.predict_disorder_domains_uniprot('aaaa') - - # checks that when we pull p53 we get 393 residues of sweet, # sweet disorder prediction - dis_domains = meta.predict_disorder_domains_uniprot(P53_UID) + dis_domains = meta.predict_disorder_domains_uniprot(P53_UID, version=2) assert len(dis_domains.sequence) == 393 assert np.isclose(np.sum(dis_domains.disorder), 181.7708, 0.001) diff --git a/metapredict/tests/test_write_fasta.py b/metapredict/tests/test_write_fasta.py index fd35cb7..45840c9 100644 --- a/metapredict/tests/test_write_fasta.py +++ b/metapredict/tests/test_write_fasta.py @@ -14,15 +14,14 @@ def test_predict_disorder_fasta(): # can make PNGs - x = meta.predict_disorder_fasta(fasta_filepath) + x = meta.predict_disorder_fasta(fasta_filepath, version=2) assert len(x) == 3 - expected = {'Q8N6T3':283.84610000000004, 'p53':181.7707999999999, 'sp|P0DMV8|HS71A_HUMAN Heat shock 70 kDa protein 1A OS=Homo sapiens OX=9606 GN=HSPA1A PE=1 SV=1':78.36629999999997} for n in expected: - assert np.isclose(np.sum(x[n]),expected[n]) + assert np.isclose(np.sum(x[n][1]),expected[n]) def test_predict_disorder_fasta_write():