b2bTools 3.0.7b2__tar.gz → 3.0.8b3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/PKG-INFO +3 -71
  2. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/__main__.py +1 -1
  3. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/Io.py +115 -15
  4. b2bTools-3.0.8b3/b2bTools/multipleSeq/Predictor.py +266 -0
  5. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/msa_core.py +14 -10
  6. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftCrypt.py +20 -21
  7. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/utils.py +1 -18
  8. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/sources/agmata_source.py +1 -1
  9. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/standalone.py +12 -6
  10. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/runpsipred_single.py +1 -1
  11. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/vettore_gen.py +1 -1
  12. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/hmmsearch_otf.py +4 -3
  13. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/wrapper_source/wrapper_utils.py +37 -14
  14. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/PKG-INFO +3 -71
  15. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/requires.txt +8 -13
  16. b2bTools-3.0.8b3/b2bTools_version/versioning.py +2 -0
  17. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py310.txt +2 -3
  18. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py311.txt +2 -2
  19. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py312.txt +2 -2
  20. b2bTools-3.0.8b3/requirements-py37.txt +10 -0
  21. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py38.txt +2 -3
  22. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py39.txt +2 -3
  23. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/setup.py +4 -4
  24. b2bTools-3.0.7b2/b2bTools/multipleSeq/Predictor.py +0 -153
  25. b2bTools-3.0.7b2/b2bTools_version/versioning.py +0 -2
  26. b2bTools-3.0.7b2/requirements-py37.txt +0 -12
  27. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/MANIFEST.in +0 -0
  28. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/README.md +0 -0
  29. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/__init__.py +0 -0
  30. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/Util.py +0 -0
  31. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/__init__.py +0 -0
  32. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/File.py +0 -0
  33. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/SaveFrame.py +0 -0
  34. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/TagTable.py +0 -0
  35. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/Text.py +0 -0
  36. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/Utils.py +0 -0
  37. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/__init__.py +0 -0
  38. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/base.py +0 -0
  39. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/__init__.py +0 -0
  40. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/__init__.py +0 -0
  41. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/Constants.py +0 -0
  42. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/Util.py +0 -0
  43. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/__init__.py +0 -0
  44. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/formatIO.py +0 -0
  45. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/__init__.py +0 -0
  46. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/chemShiftsIO.py +0 -0
  47. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/constants.py +0 -0
  48. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/coordinatesIO.py +0 -0
  49. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/csaIO.py +0 -0
  50. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/dihedralConstraintsIO.py +0 -0
  51. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/distanceConstraintsIO.py +0 -0
  52. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/generalIO.py +0 -0
  53. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hBondConstraintsIO.py +0 -0
  54. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hExchProtectionIO.py +0 -0
  55. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hExchRateIO.py +0 -0
  56. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hetNoeIO.py +0 -0
  57. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/jCouplingIO.py +0 -0
  58. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/nmrStarDict.py +0 -0
  59. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/orderParamIO.py +0 -0
  60. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/peopleAndCitationsIO.py +0 -0
  61. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/projectIO.py +0 -0
  62. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/rdcConstraintsIO.py +0 -0
  63. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/rdcIO.py +0 -0
  64. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/sequenceIO.py +0 -0
  65. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/t1RelaxIO.py +0 -0
  66. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/t1RhoRelaxIO.py +0 -0
  67. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/t2RelaxIO.py +0 -0
  68. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/util.py +0 -0
  69. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/general/Constants.py +0 -0
  70. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/general/__init__.py +0 -0
  71. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/Constants.py +0 -0
  72. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/Io.py +0 -0
  73. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/Util.py +0 -0
  74. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/__init__.py +0 -0
  75. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/__init__.py +0 -0
  76. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/alignments.py +0 -0
  77. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/fasta.py +0 -0
  78. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/nef.py +0 -0
  79. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/nmr_star.py +0 -0
  80. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/plotter.py +0 -0
  81. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/__init__.py +0 -0
  82. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/mapToMSA.py +0 -0
  83. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/msa_plot.py +0 -0
  84. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/msa_quantification.py +0 -0
  85. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/__init__.py +0 -0
  86. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/Predictor.py +0 -0
  87. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/__init__.py +0 -0
  88. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/alignment.py +0 -0
  89. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/__init__.py +0 -0
  90. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_NH.mtorch +0 -0
  91. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_NH_p27.mtorch +0 -0
  92. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_NH_p37.mtorch +0 -0
  93. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_commons.mtorch +0 -0
  94. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_commons_p27.mtorch +0 -0
  95. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_commons_p37.mtorch +0 -0
  96. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_full.mtorch +0 -0
  97. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_full_p27.mtorch +0 -0
  98. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_full_p37.mtorch +0 -0
  99. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/__init__.py +0 -0
  100. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/autoenc_solo4.py +0 -0
  101. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/autoenchoder_standalone_version.py +0 -0
  102. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/chemical_shifts_custom_model.py +0 -0
  103. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/parser.py +0 -0
  104. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/shiftcrypt_parser.py +0 -0
  105. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/requirements-dev.txt +0 -0
  106. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/requirements.txt +0 -0
  107. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/Predictor.py +0 -0
  108. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/__init__.py +0 -0
  109. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/agmata.py +0 -0
  110. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/bin/__init__.py +0 -0
  111. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/bin/agmata_c_final_linux +0 -0
  112. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/bin/agmata_c_final_mac +0 -0
  113. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/__init__.py +0 -0
  114. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/agmata_discriminative_converted.m +0 -0
  115. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/discriminative.m +0 -0
  116. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/model_parameters.m +0 -0
  117. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/sources/__init__.py +0 -0
  118. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/Predictor.py +0 -0
  119. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/__init__.py +0 -0
  120. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/disomine_converted.mtorch +0 -0
  121. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/gru80_final.mtorch +0 -0
  122. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/torch_NN_gru_80AUC_prova.py +0 -0
  123. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/.DS_Store +0 -0
  124. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/__init__.py +0 -0
  125. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/.DS_Store +0 -0
  126. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/__init__.py +0 -0
  127. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/__init__.py +0 -0
  128. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/__init__.py +0 -0
  129. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/chkparse +0 -0
  130. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/psipass2 +0 -0
  131. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/psipred +0 -0
  132. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/seq2mtx +0 -0
  133. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/__init__.py +0 -0
  134. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/chkparse +0 -0
  135. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/psipass2 +0 -0
  136. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/psipred +0 -0
  137. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/seq2mtx +0 -0
  138. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/__init__.py +0 -0
  139. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights.dat +0 -0
  140. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights.dat2 +0 -0
  141. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights.dat3 +0 -0
  142. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_p2.dat +0 -0
  143. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_s.dat +0 -0
  144. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_s.dat2 +0 -0
  145. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_s.dat3 +0 -0
  146. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/Predictor.py +0 -0
  147. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/__init__.py +0 -0
  148. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/__init__.py +0 -0
  149. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/README.txt +0 -0
  150. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/__init__.py +0 -0
  151. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read11.model.pkl.bz2 +0 -0
  152. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read13.model.pkl.bz2 +0 -0
  153. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read15.model.pkl.bz2 +0 -0
  154. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read17.model.pkl.bz2 +0 -0
  155. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read19.model.pkl.bz2 +0 -0
  156. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read21.model.pkl.bz2 +0 -0
  157. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read23.model.pkl.bz2 +0 -0
  158. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read25.model.pkl.bz2 +0 -0
  159. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read3.model.pkl.bz2 +0 -0
  160. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read5.model.pkl.bz2 +0 -0
  161. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read51.model.pkl.bz2 +0 -0
  162. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read7.model.pkl.bz2 +0 -0
  163. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read9.model.pkl.bz2 +0 -0
  164. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/__init__.py +0 -0
  165. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read11.model_new.pkl.bz2 +0 -0
  166. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read13.model_new.pkl.bz2 +0 -0
  167. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read15.model_new.pkl.bz2 +0 -0
  168. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read17.model_new.pkl.bz2 +0 -0
  169. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read19.model_new.pkl.bz2 +0 -0
  170. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read25.model_new.pkl.bz2 +0 -0
  171. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read3.model_new.pkl.bz2 +0 -0
  172. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read38.model_new.pkl.bz2 +0 -0
  173. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read5.model_new.pkl.bz2 +0 -0
  174. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read51.model_new.pkl.bz2 +0 -0
  175. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read7.model_new.pkl.bz2 +0 -0
  176. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read9.model_new.pkl.bz2 +0 -0
  177. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/__init__.py +0 -0
  178. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read11.model_new.pkl.bz2 +0 -0
  179. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read13.model_new.pkl.bz2 +0 -0
  180. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read15.model_new.pkl.bz2 +0 -0
  181. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read17.model_new.pkl.bz2 +0 -0
  182. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read19.model_new.pkl.bz2 +0 -0
  183. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read25.model_new.pkl.bz2 +0 -0
  184. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read3.model_new.pkl.bz2 +0 -0
  185. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read38.model_new.pkl.bz2 +0 -0
  186. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read5.model_new.pkl.bz2 +0 -0
  187. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read51.model_new.pkl.bz2 +0 -0
  188. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read7.model_new.pkl.bz2 +0 -0
  189. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read9.model_new.pkl.bz2 +0 -0
  190. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/__init__.py +0 -0
  191. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read11.model_new.pkl.bz2 +0 -0
  192. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read13.model_new.pkl.bz2 +0 -0
  193. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read15.model_new.pkl.bz2 +0 -0
  194. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read17.model_new.pkl.bz2 +0 -0
  195. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read19.model_new.pkl.bz2 +0 -0
  196. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read25.model_new.pkl.bz2 +0 -0
  197. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read3.model_new.pkl.bz2 +0 -0
  198. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read38.model_new.pkl.bz2 +0 -0
  199. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read5.model_new.pkl.bz2 +0 -0
  200. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read51.model_new.pkl.bz2 +0 -0
  201. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read7.model_new.pkl.bz2 +0 -0
  202. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read9.model_new.pkl.bz2 +0 -0
  203. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/__init__.py +0 -0
  204. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read11.model_new.pkl.bz2 +0 -0
  205. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read13.model_new.pkl.bz2 +0 -0
  206. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read15.model_new.pkl.bz2 +0 -0
  207. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read17.model_new.pkl.bz2 +0 -0
  208. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read19.model_new.pkl.bz2 +0 -0
  209. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read25.model_new.pkl.bz2 +0 -0
  210. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read3.model_new.pkl.bz2 +0 -0
  211. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read38.model_new.pkl.bz2 +0 -0
  212. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read5.model_new.pkl.bz2 +0 -0
  213. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read51.model_new.pkl.bz2 +0 -0
  214. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read7.model_new.pkl.bz2 +0 -0
  215. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read9.model_new.pkl.bz2 +0 -0
  216. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/README.txt +0 -0
  217. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/__init__.py +0 -0
  218. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read11.model.pkl.bz2 +0 -0
  219. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read13.model.pkl.bz2 +0 -0
  220. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read15.model.pkl.bz2 +0 -0
  221. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read17.model.pkl.bz2 +0 -0
  222. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read19.model.pkl.bz2 +0 -0
  223. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read21.model.pkl.bz2 +0 -0
  224. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read23.model.pkl.bz2 +0 -0
  225. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read25.model.pkl.bz2 +0 -0
  226. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read3.model.pkl.bz2 +0 -0
  227. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read5.model.pkl.bz2 +0 -0
  228. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read51.model.pkl.bz2 +0 -0
  229. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read7.model.pkl.bz2 +0 -0
  230. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read9.model.pkl.bz2 +0 -0
  231. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/Predictor.py +0 -0
  232. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/__init__.py +0 -0
  233. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/models/__init__.py +0 -0
  234. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/models/efModelRBF2016.proba.cPickle +0 -0
  235. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/models/efoldmine_converted.cPickle +0 -0
  236. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/Constants.py +0 -0
  237. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/PSPer.py +0 -0
  238. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/Predictor.py +0 -0
  239. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/__init__.py +0 -0
  240. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/PF00270_DEAD_seed.txt +0 -0
  241. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/__init__.py +0 -0
  242. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/phase_trans.hmm +0 -0
  243. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/rrm_align.pfam +0 -0
  244. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/__init__.py +0 -0
  245. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/emissions.m +0 -0
  246. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/scaler.m +0 -0
  247. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/scaler_new.m +0 -0
  248. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/phase_transition_hmm.py +0 -0
  249. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/source/__init__.py +0 -0
  250. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/source/utils.py +0 -0
  251. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/standalone.py +0 -0
  252. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/torch_NN_gru_80AUC_prova.py +0 -0
  253. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Predictor.py +4 -4
  254. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/README.md +0 -0
  255. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/__init__.py +0 -0
  256. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/constants.py +0 -0
  257. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/single_core.py +0 -0
  258. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/web_predictor.py +0 -0
  259. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/wrapper_source/__init__.py +0 -0
  260. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/wrapper_source/metadata.py +0 -0
  261. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/SOURCES.txt +0 -0
  262. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/dependency_links.txt +0 -0
  263. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/entry_points.txt +0 -0
  264. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/top_level.txt +0 -0
  265. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools_version/__init__.py +0 -0
  266. {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/setup.cfg +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: b2bTools
3
- Version: 3.0.7b2
3
+ Version: 3.0.8b3
4
4
  Summary: bio2Byte software suite to predict protein biophysical properties from their amino-acid sequences
5
5
  Home-page: https://bio2byte.be
6
6
  Author: Wim Vranken
7
7
  Author-email: Wim.Vranken@vub.be
8
- Maintainer: Jose Gavalda-Garcia, Adrian Diaz, Wim Vranken
9
- Maintainer-email: jose.gavalda.garcia@vub.be, adrian.diaz@vub.be, wim.vranken@vub.be
8
+ Maintainer: Adrián Díaz, Sophie-Luise Heidig, Wim Vranken
9
+ Maintainer-email: adrian.diaz@vub.be, wim.vranken@vub.be
10
10
  License: OSI Approved :: GNU General Public License v3 (GPLv3)
11
11
  Project-URL: Documentation, https://bio2byte.be/b2btools/package-documentation
12
12
  Project-URL: HTML interface, https://bio2byte.be/b2btools
@@ -29,74 +29,6 @@ Classifier: Intended Audience :: Education
29
29
  Classifier: Development Status :: 5 - Production/Stable
30
30
  Requires-Python: >=3.7, <3.13
31
31
  Description-Content-Type: text/markdown
32
- Requires-Dist: biopython~=1.81; python_version == "3.7"
33
- Requires-Dist: Cython~=0.29.37; python_version == "3.7"
34
- Requires-Dist: matplotlib~=3.5.3; python_version == "3.7"
35
- Requires-Dist: numpy~=1.21; python_version == "3.7"
36
- Requires-Dist: pandas~=1.1; python_version == "3.7"
37
- Requires-Dist: pomegranate~=0.14; python_version == "3.7"
38
- Requires-Dist: requests~=2.0; python_version == "3.7"
39
- Requires-Dist: scikit-learn~=1.0.2; python_version == "3.7"
40
- Requires-Dist: scipy==1.7.3; python_version == "3.7"
41
- Requires-Dist: torch==1.13.1; python_version == "3.7"
42
- Requires-Dist: torchvision==0.14.1; python_version == "3.7"
43
- Requires-Dist: urllib3~=1.26.6; python_version == "3.7"
44
- Requires-Dist: biopython~=1.81; python_version == "3.8"
45
- Requires-Dist: Cython~=0.29.37; python_version == "3.8"
46
- Requires-Dist: matplotlib~=3.5.3; python_version == "3.8"
47
- Requires-Dist: numpy~=1.24; python_version == "3.8"
48
- Requires-Dist: pandas~=1.1; python_version == "3.8"
49
- Requires-Dist: pomegranate~=0.14; python_version == "3.8"
50
- Requires-Dist: requests~=2.0; python_version == "3.8"
51
- Requires-Dist: scikit-learn~=1.0.2; python_version == "3.8"
52
- Requires-Dist: scipy==1.10.1; python_version == "3.8"
53
- Requires-Dist: torch==1.13.1; python_version == "3.8"
54
- Requires-Dist: torchvision==0.14.1; python_version == "3.8"
55
- Requires-Dist: urllib3~=1.26.6; python_version == "3.8"
56
- Requires-Dist: biopython~=1.81; python_version == "3.9"
57
- Requires-Dist: Cython~=0.29.37; python_version == "3.9"
58
- Requires-Dist: matplotlib~=3.5.3; python_version == "3.9"
59
- Requires-Dist: numpy~=1.24; python_version == "3.9"
60
- Requires-Dist: pandas~=1.1; python_version == "3.9"
61
- Requires-Dist: pomegranate~=0.14; python_version == "3.9"
62
- Requires-Dist: requests~=2.0; python_version == "3.9"
63
- Requires-Dist: scikit-learn~=1.0.2; python_version == "3.9"
64
- Requires-Dist: scipy==1.10.1; python_version == "3.9"
65
- Requires-Dist: torch==1.13.1; python_version == "3.9"
66
- Requires-Dist: torchvision==0.14.1; python_version == "3.9"
67
- Requires-Dist: urllib3~=1.26.6; python_version == "3.9"
68
- Requires-Dist: biopython~=1.83; python_version == "3.10"
69
- Requires-Dist: Cython~=0.29.37; python_version == "3.10"
70
- Requires-Dist: matplotlib~=3.5.3; python_version == "3.10"
71
- Requires-Dist: numpy~=1.26.4; python_version == "3.10"
72
- Requires-Dist: pandas~=1.5.3; python_version == "3.10"
73
- Requires-Dist: pomegranate~=0.14; python_version == "3.10"
74
- Requires-Dist: requests~=2.31.0; python_version == "3.10"
75
- Requires-Dist: scikit-learn~=1.0.2; python_version == "3.10"
76
- Requires-Dist: scipy~=1.12.0; python_version == "3.10"
77
- Requires-Dist: torch~=1.13.1; python_version == "3.10"
78
- Requires-Dist: torchvision~=0.14.1; python_version == "3.10"
79
- Requires-Dist: urllib3~=1.26.6; python_version == "3.10"
80
- Requires-Dist: biopython~=1.83; python_version == "3.11"
81
- Requires-Dist: matplotlib~=3.8.3; python_version == "3.11"
82
- Requires-Dist: numpy~=1.26.4; python_version == "3.11"
83
- Requires-Dist: pandas~=1.5.3; python_version == "3.11"
84
- Requires-Dist: pomegranate~=0.14.9; python_version == "3.11"
85
- Requires-Dist: requests~=2.31.0; python_version == "3.11"
86
- Requires-Dist: scikit-learn~=1.4.1.post1; python_version == "3.11"
87
- Requires-Dist: scipy~=1.12.0; python_version == "3.11"
88
- Requires-Dist: torch~=2.2.0; python_version == "3.11"
89
- Requires-Dist: urllib3~=1.26.18; python_version == "3.11"
90
- Requires-Dist: biopython~=1.83; python_version == "3.12"
91
- Requires-Dist: matplotlib~=3.8.3; python_version == "3.12"
92
- Requires-Dist: numpy~=1.26.4; python_version == "3.12"
93
- Requires-Dist: pandas~=2.1.0; python_version == "3.12"
94
- Requires-Dist: pomegranate~=0.14.9; python_version == "3.12"
95
- Requires-Dist: requests~=2.31.0; python_version == "3.12"
96
- Requires-Dist: scikit-learn~=1.4.1.post1; python_version == "3.12"
97
- Requires-Dist: scipy~=1.12.0; python_version == "3.12"
98
- Requires-Dist: torch~=2.2.0; python_version == "3.12"
99
- Requires-Dist: urllib3~=1.26.6; python_version == "3.12"
100
32
 
101
33
  <h1 align="center">
102
34
  <a href="bio2byte.be/b2btools" target="_blank" ref="noreferrer noopener">
@@ -109,7 +109,7 @@ def run(parsed_args):
109
109
  logging.info(f"Saving results for {sequence_key} in tabular format in: {output_tabular_file}")
110
110
  wrapper.get_all_predictions_tabular(output_tabular_file, sep=sep, sequence_key=sequence_key)
111
111
  else:
112
- logging.info(f"Saving results for {sequence_key} in tabular format in: {output_tabular_file}")
112
+ logging.info(f"Saving results in tabular format in: {output_tabular_file}")
113
113
  wrapper.get_all_predictions_tabular(output_tabular_file, sep=sep)
114
114
 
115
115
  if metadata_file:
@@ -1,14 +1,14 @@
1
- import time
2
- import os
1
+ import csv
3
2
  import json
4
- import requests
5
- from urllib.parse import urljoin
6
- from io import StringIO
3
+ import os
7
4
  import time
8
- import csv
5
+ from io import StringIO
6
+ from urllib.parse import urljoin
9
7
 
8
+ import requests
10
9
  from b2bTools.singleSeq import constants
11
10
 
11
+
12
12
  class B2bIo:
13
13
  def __init__(self, gapCode='-'):
14
14
  self.gapCode = gapCode
@@ -233,7 +233,7 @@ class B2bIo:
233
233
  elif lines[0].startswith("# STOCKHOLM"):
234
234
  fileType = 'STOCKHOLM'
235
235
  else:
236
- fastaCount = balibaseCount = psiCount = blastCount = emptyLine = fastaGaps = 0
236
+ fastaCount = balibaseCount = psiCount = blastCount = emptyLine = 0
237
237
  for line in lines:
238
238
  if line.startswith(">"):
239
239
  fastaCount += 1
@@ -245,13 +245,13 @@ class B2bIo:
245
245
  blastCount += 1
246
246
  elif not line.strip():
247
247
  emptyLine += 1
248
- elif fastaCount and line.count(gapCode):
249
- fastaGaps += 1
248
+ # elif fastaCount and line.count(gapCode):
249
+ # fastaGaps += 1
250
250
 
251
251
  if fastaCount > balibaseCount and fastaCount > blastCount:
252
252
  if fileName.endswith('a3m'):
253
253
  fileType = 'A3M'
254
- elif fastaGaps:
254
+ else: # <--- There could be alignments without gaps (-)
255
255
  fileType = 'FASTA'
256
256
  elif blastCount:
257
257
  fileType = 'Blast'
@@ -267,7 +267,7 @@ class B2bIo:
267
267
 
268
268
  assert fileType, "Alignment file not recognised"
269
269
 
270
- print("Reading {} alignment...".format(fileType))
270
+ # print("Reading {} alignment...".format(fileType))
271
271
 
272
272
  self.alignRefSeqID = None
273
273
  if fileType == 'CLUSTAL':
@@ -320,23 +320,26 @@ class B2bIo:
320
320
 
321
321
  return seqAlignments
322
322
 
323
- def readAlignmentsA3M(self, lines):
323
+ def readAlignmentsA3M_old(self, lines):
324
324
 
325
325
  """
326
326
  A3M file alignment, need some magic here to align things decently
327
327
  """
328
328
 
329
- startReading = True
329
+ # startReading = True
330
330
  sequences = {}
331
331
 
332
332
  for line in lines:
333
+ if line.startswith("#"):
334
+ continue
333
335
 
336
+ seqId = None
334
337
  cols = line.split()
335
338
 
336
339
  if cols:
337
-
338
340
  if cols[0].startswith('>'):
339
341
  seqId = self.getSeqIdKey(cols[0][1:])
342
+
340
343
  if not self.alignRefSeqID:
341
344
  self.alignRefSeqID = seqId
342
345
  else:
@@ -378,6 +381,103 @@ class B2bIo:
378
381
 
379
382
  return seqAlignments
380
383
 
384
+ def readAlignmentsA3M(self, lines):
385
+ """
386
+ Parse alignments from an A3M formatted file and produce aligned sequences.
387
+
388
+ In the A3M format, aligned columns are represented by uppercase letters,
389
+ whereas insertions relative to the reference are in lowercase. This function
390
+ collects sequences from the FASTA-like format (handling multi-line sequences)
391
+ and then constructs the multiple sequence alignment based on the reference sequence.
392
+ The first encountered sequence header is used as the reference.
393
+
394
+ Parameters
395
+ ----------
396
+ lines : List[str]
397
+ List of lines from the A3M file.
398
+
399
+ Returns
400
+ -------
401
+ Dict[str, str]
402
+ Dictionary that maps each sequence ID to its aligned sequence.
403
+ """
404
+ sequences = {}
405
+ current_seq_id = ""
406
+
407
+ # Process file lines: skip blank lines and comments, and handle headers and sequence lines.
408
+ for line in lines:
409
+ line = line.strip()
410
+ if not line:
411
+ self.setEmptyLineVars()
412
+ continue
413
+ if line.startswith("#"):
414
+ continue
415
+ if line.startswith('>'):
416
+ # Extract header fields split by tab and use only the first token as the sequence id.
417
+ header_fields = line[1:].strip().split("\t")
418
+ current_seq_id = self.getSeqIdKey(header_fields[0])
419
+
420
+ if current_seq_id not in sequences:
421
+ sequences[current_seq_id] = ""
422
+ if not hasattr(self, 'alignRefSeqID') or not self.alignRefSeqID:
423
+ self.alignRefSeqID = current_seq_id
424
+ else:
425
+ # Append the sequence portion to the current sequence.
426
+ if not current_seq_id:
427
+ # No valid header was encountered prior to this line; skip it.
428
+ continue
429
+ sequences[current_seq_id] += line.strip()
430
+
431
+ if not sequences:
432
+ return {}
433
+
434
+ # Initialize pointer indexes and alignment builders for each sequence.
435
+ seqIndexes = {seqId: 0 for seqId in sequences}
436
+ seqAlignments = {seqId: "" for seqId in sequences}
437
+ seqIds = list(sequences.keys())
438
+
439
+ # Ensure we have a valid reference sequence.
440
+ if self.alignRefSeqID not in sequences:
441
+ self.alignRefSeqID = seqIds[0]
442
+
443
+ ref_seq = sequences[self.alignRefSeqID]
444
+
445
+ # Walk through the reference sequence positions.
446
+ while seqIndexes[self.alignRefSeqID] < len(ref_seq):
447
+ currentColChars = []
448
+ # Build the current column from each sequence.
449
+ for seqId in seqIds:
450
+ # If the current sequence is shorter than expected, use gap.
451
+ if seqIndexes[seqId] < len(sequences[seqId]):
452
+ currentColChars.append(sequences[seqId][seqIndexes[seqId]])
453
+ else:
454
+ currentColChars.append(self.gapCode)
455
+ col_str = "".join(currentColChars)
456
+
457
+ # If all characters in the column are uppercase, it's an aligned column.
458
+ if col_str == col_str.upper():
459
+ for seqId in seqIds:
460
+ seqAlignments[seqId] += sequences[seqId][seqIndexes[seqId]]
461
+ seqIndexes[seqId] += 1
462
+ else:
463
+ # Otherwise, process insertions:
464
+ for seqId in seqIds:
465
+ if seqId == self.alignRefSeqID:
466
+ # Always consume a character for the reference.
467
+ seqAlignments[seqId] += sequences[seqId][seqIndexes[seqId]]
468
+ seqIndexes[seqId] += 1
469
+ else:
470
+ if (seqIndexes[seqId] < len(sequences[seqId])
471
+ and sequences[seqId][seqIndexes[seqId]].islower()):
472
+ # For an insertion character, add its uppercase version.
473
+ seqAlignments[seqId] += sequences[seqId][seqIndexes[seqId]].upper()
474
+ seqIndexes[seqId] += 1
475
+ else:
476
+ # For non-insertion (or missing) character, insert a gap.
477
+ seqAlignments[seqId] += self.gapCode
478
+
479
+ return seqAlignments
480
+
381
481
  def readAlignmentsBlast(self, lines):
382
482
 
383
483
  print("Warning: BLAST format, not the full sequences in the alignment!")
@@ -387,7 +487,7 @@ class B2bIo:
387
487
 
388
488
  refQuerySeqId = ""
389
489
 
390
- maxQueryLen = 0
490
+ # maxQueryLen = 0
391
491
 
392
492
  for line in lines:
393
493
 
@@ -0,0 +1,266 @@
1
+ import numpy as np
2
+ from b2bTools.general.Io import B2bIo
3
+ from b2bTools.singleSeq.constants import DISTRIBUTION_KEYS
4
+ from b2bTools.singleSeq.Predictor import MineSuite
5
+ from sklearn import mixture
6
+
7
+
8
+ class MineSuiteMSA(MineSuite):
9
+
10
+ scriptName = "b2bTools.msaBased.Predictor"
11
+
12
+ def predictSeqsFromMSA(self, msaFile, gapCode='-', predTypes=[]):
13
+ # This will read in alignment, should automatically detect format. Code is in general/Io.py
14
+ self.seqAlignments = self.readAlignments(msaFile, resetAlignRefSeqID=True, gapCode=gapCode)
15
+
16
+ single_sequences = [(seqId, self.seqAlignments[seqId].replace(gapCode, '')) for seqId in self.seqAlignments.keys()]
17
+
18
+ self.predictSeqs(single_sequences, predTypes=predTypes)
19
+
20
+ # Now self.allPredictions will give you the predictions for all the individual sequences in the MSA!
21
+
22
+ def predictAndMapSeqsFromMSA(self, msaFile, gapCode='-', dataRead=False, predTypes=[]):
23
+ # Read in data only if not yet present - can re-use this function within instance of class if data already present!
24
+ if not dataRead:
25
+ self.predictSeqsFromMSA(msaFile, gapCode=gapCode, predTypes=[*predTypes])
26
+
27
+ self.allSeqIds = list(self.seqAlignments.keys())
28
+ self.allSeqIds.sort()
29
+
30
+ # All the current prediction types
31
+ prediction_keynames = list(self.allPredictions[self.allSeqIds[0]].keys())
32
+
33
+ execution_times = []
34
+ single_values = []
35
+
36
+ if 'dynamine_execution_time' in prediction_keynames:
37
+ prediction_keynames.remove('dynamine_execution_time')
38
+ execution_times.append('dynamine_execution_time')
39
+
40
+ if 'disomine_execution_time' in prediction_keynames:
41
+ prediction_keynames.remove('disomine_execution_time')
42
+ execution_times.append('disomine_execution_time')
43
+
44
+ if 'efoldmine_execution_time' in prediction_keynames:
45
+ prediction_keynames.remove('efoldmine_execution_time')
46
+ execution_times.append('efoldmine_execution_time')
47
+
48
+ if 'agmata_execution_time' in prediction_keynames:
49
+ prediction_keynames.remove('agmata_execution_time')
50
+ execution_times.append('agmata_execution_time')
51
+
52
+ if 'psper_execution_time' in prediction_keynames:
53
+ prediction_keynames.remove('psper_execution_time')
54
+ execution_times.append('psper_execution_time')
55
+
56
+ if 'protein_score' in prediction_keynames:
57
+ prediction_keynames.remove('protein_score')
58
+ single_values.append('protein_score')
59
+
60
+ # self.predictionTypes = predictionTypes
61
+ self.prediction_keynames = prediction_keynames
62
+ self.allAlignedPredictions = {}
63
+
64
+ sequenceInfo = {}
65
+
66
+ for seq_id in self.allSeqIds:
67
+ current_aligned_residues = self.seqAlignments[seq_id]
68
+ current_prediction_values = self.allPredictions[seq_id]
69
+
70
+ sequenceInfo[seq_id] = []
71
+ self.allAlignedPredictions[seq_id] = {}
72
+
73
+ sequence_residue_index = 0
74
+ for current_aligned_residue in current_aligned_residues:
75
+ sequenceInfo[seq_id].append(current_aligned_residue)
76
+ residues_matching = current_aligned_residue != self.gapCode
77
+
78
+ for predictionType in prediction_keynames:
79
+ if predictionType not in self.allAlignedPredictions[seq_id]:
80
+ self.allAlignedPredictions[seq_id][predictionType] = []
81
+
82
+ if not residues_matching:
83
+ self.allAlignedPredictions[seq_id][predictionType].append(None)
84
+ else:
85
+ try:
86
+ current_residue, current_prediction_value, *_other_values = current_prediction_values[predictionType][sequence_residue_index]
87
+
88
+ assert current_residue == current_aligned_residue or current_residue == 'X', f"Amino acid code mismatch in aligned position {sequence_residue_index} (SingleSequence:AlignedSequence) {current_residue}:{current_aligned_residue}"
89
+
90
+ self.allAlignedPredictions[seq_id][predictionType].append(current_prediction_value)
91
+ except ValueError:
92
+ import ipdb; ipdb.set_trace()
93
+ from traceback import print_exc
94
+ print_exc()
95
+
96
+ raise ValueError(
97
+ f"Predicted value of type '{predictionType}' not found for input sequence '{seq_id}'")
98
+ except AssertionError as e:
99
+ print(self.allAlignedPredictions[seq_id])
100
+ raise AssertionError(f"{e} in sequence {seq_id}.\nCurrent aligned residues: {''.join(current_aligned_residues)}\nSingle sequence residues: {''.join([residue for residue, _ in current_prediction_values[predictionType]])}")
101
+
102
+ if residues_matching:
103
+ sequence_residue_index += 1
104
+
105
+ for single_value in [*single_values, *execution_times]:
106
+ valueFloat = current_prediction_values[single_value]
107
+ self.allAlignedPredictions[seq_id][single_value] = valueFloat
108
+
109
+ # self.allAlignedPredictions['sequence'] = sequenceInfo
110
+ self.sequenceInfo = sequenceInfo
111
+
112
+ def filterByRefSeq(self, refSeqId):
113
+
114
+ assert refSeqId in self.allSeqIds, 'Reference sequence ID {} missing in current prediction information!'.format(
115
+ refSeqId)
116
+
117
+ # Here filter so that get back values in reference to the sequence ID that is given.
118
+
119
+ def getDistributions(self):
120
+ # Now generate the info for quartiles, ... based on the alignRefSeqID, first entry in alignment file
121
+ self.alignedPredictionDistribs = {}
122
+
123
+ # Loop over whole alignment
124
+ alignment_length = len(self.seqAlignments[self.allSeqIds[0]])
125
+
126
+ for aligned_residue_index in range(alignment_length):
127
+ for prediction_name in self.prediction_keynames:
128
+ if prediction_name == "viterbi":
129
+ # Skip viterbi prediction
130
+ continue
131
+
132
+ if prediction_name not in self.alignedPredictionDistribs:
133
+ self.alignedPredictionDistribs[prediction_name] = {}
134
+
135
+ all_prediction_values = [aligned_predictions[prediction_name] for aligned_predictions in self.allAlignedPredictions.values()]
136
+ aligned_column_predicted_values = [prediction_values[aligned_residue_index] for prediction_values in all_prediction_values if prediction_values[aligned_residue_index] is not None]
137
+
138
+ # ADRIAN DIAZ: aligned_column_predicted_values can be empty!
139
+ # So, the distribution_info can be a tuple of None values
140
+ distribution_info = self.get_distributions_tuple(aligned_column_predicted_values)
141
+
142
+ for distribution_index, distribution_key in enumerate(DISTRIBUTION_KEYS):
143
+ # import ipdb; ipdb.set_trace()
144
+ if distribution_key not in self.alignedPredictionDistribs[prediction_name]:
145
+ self.alignedPredictionDistribs[prediction_name][distribution_key] = []
146
+
147
+ current_distribution_info = distribution_info[distribution_index]
148
+ self.alignedPredictionDistribs[prediction_name][distribution_key].append(current_distribution_info)
149
+
150
+ self.jsonData = B2bIo.getAllPredictionsJson_msa(self, results=self.alignedPredictionDistribs)
151
+
152
+ return self.jsonData
153
+
154
+ def get_distributions_tuple(self, valueList, outlierConstant=1.5) -> tuple:
155
+ # JR: I put this try-except cause in some MSA we may have only one sequence
156
+ # so the distribution values cannot be calculated
157
+
158
+ if not valueList:
159
+ return (None, None, None, None, None)
160
+
161
+ try:
162
+ median = np.median(valueList)
163
+ upper_quartile = np.percentile(valueList, 75)
164
+ lower_quartile = np.percentile(valueList, 25)
165
+
166
+ IQR = (upper_quartile - lower_quartile) * outlierConstant
167
+
168
+ return (median, upper_quartile, lower_quartile, upper_quartile + IQR, lower_quartile - IQR)
169
+ except (IndexError, ValueError):
170
+ return (None, None, None, None, None)
171
+
172
+ def getGMMScores(self):
173
+ # predictor_names = [
174
+ # *constants.DYNAMINE_PREDICTION_NAMES,
175
+ # *constants.DISOMINE_PREDICTION_NAMES,
176
+ # *constants.EFOLDMINE_PREDICTION_NAMES,
177
+ # *constants.AGMATA_PREDICTION_NAMES,
178
+ # ]
179
+
180
+ # Collect all biophysical predictions for training using median values from distributions
181
+ training_data = []
182
+ alignment_length = len(
183
+ self.alignedPredictionDistribs[self.prediction_keynames[0]]['median']
184
+ )
185
+
186
+ for aln_pos in range(alignment_length):
187
+ # For each alined position
188
+ training_data_current_aligned_position = []
189
+ for pred_type in self.prediction_keynames:
190
+ # For each prediction value
191
+ if pred_type in self.prediction_keynames and pred_type in self.alignedPredictionDistribs:
192
+ value = self.alignedPredictionDistribs[pred_type]['median'][aln_pos]
193
+
194
+ if value is not None and not np.isnan(value):
195
+ training_data_current_aligned_position.append(value)
196
+
197
+ if len(training_data_current_aligned_position) == len(self.prediction_keynames):
198
+ training_data.append(training_data_current_aligned_position)
199
+
200
+ # import ipdb; ipdb.set_trace()
201
+ # Stack the values for training
202
+ X_train = np.vstack(training_data)
203
+
204
+ # Initialize GMM classifier
205
+ gmm_classifier = mixture.GaussianMixture(n_components=1, covariance_type="full", verbose=3, verbose_interval=1)
206
+
207
+ # Fit GMM
208
+ gmm_classifier.fit(X_train)
209
+
210
+ # Calculate scores for each sequence
211
+ self.GMMScores = {}
212
+ for seq_id in self.allSeqIds:
213
+ sequence_gmm_scores = []
214
+
215
+ for aln_pos in range(alignment_length):
216
+ current_position_values = []
217
+ for pred_type in self.prediction_keynames:
218
+ if pred_type in self.allAlignedPredictions[seq_id]:
219
+ value = self.allAlignedPredictions[seq_id][pred_type][aln_pos]
220
+
221
+ if value is not None and not np.isnan(value):
222
+ current_position_values.append(value)
223
+
224
+ if current_position_values:
225
+ # Reshape to match training data format (1, n_features)
226
+ X = np.array(current_position_values).reshape(1, -1)
227
+ scores = gmm_classifier.score_samples(X)
228
+ sequence_gmm_scores.extend(scores.tolist())
229
+
230
+ self.GMMScores[seq_id] = sequence_gmm_scores
231
+
232
+ return self.GMMScores
233
+
234
+ def getCutoffResidues(self):
235
+ """
236
+ Identifies residues that are over the 95, 99 and 99.9 percentiles as estimated by the GMM using the median of the predictions.
237
+ Stores results in self.cutoffResidues dictionary.
238
+ """
239
+ if not hasattr(self, 'GMMScores'):
240
+ self.getGMMScores()
241
+
242
+ # Collect all scores to calculate percentiles
243
+ all_scores = []
244
+ for seq_id in self.GMMScores:
245
+ all_scores.extend(self.GMMScores[seq_id])
246
+
247
+ # Calculate percentile cutoffs
248
+ cutoff_95 = np.percentile(all_scores, 95)
249
+ cutoff_99 = np.percentile(all_scores, 99)
250
+ cutoff_99_9 = np.percentile(all_scores, 99.9)
251
+
252
+ # Store cutoff residues for each sequence
253
+ self.cutoffResidues = {}
254
+ for seq_id in self.GMMScores:
255
+ scores = self.GMMScores[seq_id]
256
+ residue_indexes_99_9 = [i for i, score in enumerate(scores) if score > cutoff_99_9]
257
+ residue_indexes_99 = [i for i, score in enumerate(scores) if score > cutoff_99 and i not in residue_indexes_99_9]
258
+ residue_indexes_95 = [i for i, score in enumerate(scores) if score > cutoff_95 and i not in residue_indexes_99 and i not in residue_indexes_99_9]
259
+
260
+ self.cutoffResidues[seq_id] = {
261
+ 'res99_9': residue_indexes_99_9,
262
+ 'res99': residue_indexes_99,
263
+ 'res95': residue_indexes_95,
264
+ }
265
+
266
+ return self.cutoffResidues
@@ -1,13 +1,15 @@
1
- import os, os.path
1
+ import argparse
2
+ import os
3
+ import os.path
2
4
  import time
3
5
  import urllib.parse
4
6
  import urllib.request
5
- import argparse
7
+
6
8
  import pandas as pd
7
- from Bio import SeqIO
8
- from Bio.Blast import NCBIWWW, NCBIXML
9
9
  from b2bTools.general.Io import B2bIo
10
10
  from b2bTools.multipleSeq.Predictor import MineSuiteMSA
11
+ from Bio import SeqIO
12
+ from Bio.Blast import NCBIWWW, NCBIXML
11
13
 
12
14
  ###############################################################################
13
15
  ###############################################################################
@@ -413,15 +415,16 @@ class predManager:
413
415
  # Same but now mapped to reference sequence ID in MSA, gaps are None
414
416
  self.ms.predictAndMapSeqsFromMSA(msa_file, dataRead=True)
415
417
  self.allAlignedPredictions = self.ms.allAlignedPredictions
418
+ self.sequenceInfo = self.ms.sequenceInfo
416
419
 
417
420
  self.jsondata_list = []
418
421
 
419
- try:
420
- # Create the results folder if it's not there yet
421
- if not os.path.exists("/results"):
422
- os.mkdir("/results")
423
- except BaseException:
424
- pass
422
+ # try:
423
+ # # Create the results folder if it's not there yet
424
+ # if not os.path.exists("/results"):
425
+ # os.mkdir("/results")
426
+ # except BaseException:
427
+ # pass
425
428
 
426
429
  # When we work with an alignment of MSAs
427
430
  if msa_map != None:
@@ -449,6 +452,7 @@ class predManager:
449
452
  # Same but now mapped to full MSA, gaps are None
450
453
  self.ms.predictAndMapSeqsFromMSA(msa_file, dataRead=True)
451
454
  self.allAlignedPredictions = self.ms.allAlignedPredictions
455
+ self.sequenceInfo = self.ms.sequenceInfo
452
456
 
453
457
  ###############################################################################
454
458
  ###############################################################################