openprotein-python 0.11.1__tar.gz → 0.12.1__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 (205) hide show
  1. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/PKG-INFO +1 -1
  2. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/__init__.py +1 -0
  3. openprotein_python-0.12.1/openprotein/embeddings/ablang.py +21 -0
  4. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/api.py +9 -2
  5. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/future.py +37 -20
  6. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/poet2.py +19 -3
  7. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/errors.py +5 -1
  8. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/__init__.py +28 -8
  9. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/alphafold2.py +11 -21
  10. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/api.py +10 -102
  11. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/boltz.py +28 -107
  12. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/common.py +109 -5
  13. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/esmfold.py +3 -3
  14. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/fold.py +3 -0
  15. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/future.py +33 -61
  16. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/minifold.py +8 -4
  17. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/models.py +17 -9
  18. openprotein_python-0.12.1/openprotein/fold/protenix.py +157 -0
  19. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/rosettafold3.py +10 -20
  20. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/jobs/futures.py +33 -23
  21. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/__init__.py +6 -2
  22. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/foundation/boltzgen.py +25 -46
  23. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/foundation/proteinmpnn.py +29 -6
  24. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/foundation/rfdiffusion.py +23 -46
  25. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/structure_generation.py +26 -4
  26. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/molecules/template.py +6 -0
  27. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/prompt/models.py +10 -3
  28. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/prompt/prompt.py +15 -2
  29. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/utils/chain_id.py +3 -5
  30. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/pyproject.toml +32 -20
  31. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/.gitignore +0 -0
  32. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/LICENSE.txt +0 -0
  33. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/README.md +0 -0
  34. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/__init__.py +0 -0
  35. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/_version.py +0 -0
  36. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/align/__init__.py +0 -0
  37. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/align/align.py +0 -0
  38. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/align/api.py +0 -0
  39. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/align/future.py +0 -0
  40. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/align/msa.py +0 -0
  41. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/align/schemas.py +0 -0
  42. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/__init__.py +0 -0
  43. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/align.py +0 -0
  44. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/assaydata.py +0 -0
  45. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/deprecated/__init__.py +0 -0
  46. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/deprecated/design.py +0 -0
  47. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/deprecated/poet.py +0 -0
  48. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/deprecated/predict.py +0 -0
  49. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/deprecated/train.py +0 -0
  50. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/design.py +0 -0
  51. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/designer.py +0 -0
  52. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/embedding.py +0 -0
  53. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/error.py +0 -0
  54. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/fold.py +0 -0
  55. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/job.py +0 -0
  56. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/predict.py +0 -0
  57. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/predictor.py +0 -0
  58. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/prompt.py +0 -0
  59. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/svd.py +0 -0
  60. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/train.py +0 -0
  61. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/api/umap.py +0 -0
  62. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/__init__.py +0 -0
  63. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/deprecated.py +0 -0
  64. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/__init__.py +0 -0
  65. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/align/__init__.py +0 -0
  66. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/align/base.py +0 -0
  67. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/align/msa.py +0 -0
  68. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/align/prompt.py +0 -0
  69. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/assaydata.py +0 -0
  70. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/deprecated/__init__.py +0 -0
  71. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/deprecated/design.py +0 -0
  72. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/deprecated/poet.py +0 -0
  73. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/deprecated/predict.py +0 -0
  74. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/deprecated/train.py +0 -0
  75. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/design.py +0 -0
  76. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/designer.py +0 -0
  77. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/__init__.py +0 -0
  78. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/base.py +0 -0
  79. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/esm.py +0 -0
  80. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/future.py +0 -0
  81. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/openprotein.py +0 -0
  82. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/poet.py +0 -0
  83. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/poet2.py +0 -0
  84. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/embeddings/test.py +0 -0
  85. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/fold/__init__.py +0 -0
  86. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/fold/alphafold2.py +0 -0
  87. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/fold/base.py +0 -0
  88. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/fold/boltz.py +0 -0
  89. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/fold/esmfold.py +0 -0
  90. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/fold/future.py +0 -0
  91. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/futures.py +0 -0
  92. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/predict.py +0 -0
  93. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/predictor/__init__.py +0 -0
  94. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/predictor/predict.py +0 -0
  95. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/predictor/predictor.py +0 -0
  96. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/predictor/validate.py +0 -0
  97. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/prompt.py +0 -0
  98. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/svd.py +0 -0
  99. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/train.py +0 -0
  100. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/models/umap.py +0 -0
  101. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/__init__.py +0 -0
  102. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/align.py +0 -0
  103. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/assaydata.py +0 -0
  104. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/deprecated/__init__.py +0 -0
  105. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/deprecated/design.py +0 -0
  106. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/deprecated/predict.py +0 -0
  107. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/deprecated/train.py +0 -0
  108. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/design.py +0 -0
  109. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/designer.py +0 -0
  110. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/embeddings.py +0 -0
  111. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/fold.py +0 -0
  112. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/job.py +0 -0
  113. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/predict.py +0 -0
  114. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/predictor.py +0 -0
  115. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/prompt.py +0 -0
  116. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/svd.py +0 -0
  117. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/train.py +0 -0
  118. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/app/services/umap.py +0 -0
  119. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/base.py +0 -0
  120. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/chains.py +0 -0
  121. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/common/__init__.py +0 -0
  122. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/common/features.py +0 -0
  123. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/common/model_metadata.py +0 -0
  124. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/common/reduction.py +0 -0
  125. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/common/residue_contants.py +0 -0
  126. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/config.py +0 -0
  127. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/csv.py +0 -0
  128. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/data/__init__.py +0 -0
  129. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/data/api.py +0 -0
  130. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/data/assaydataset.py +0 -0
  131. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/data/data.py +0 -0
  132. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/data/schemas.py +0 -0
  133. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/design/__init__.py +0 -0
  134. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/design/api.py +0 -0
  135. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/design/design.py +0 -0
  136. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/design/future.py +0 -0
  137. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/design/schemas.py +0 -0
  138. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/embeddings.py +0 -0
  139. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/esm.py +0 -0
  140. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/models.py +0 -0
  141. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/openprotein.py +0 -0
  142. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/poet.py +0 -0
  143. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/embeddings/schemas.py +0 -0
  144. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fasta.py +0 -0
  145. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/complex.py +0 -0
  146. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/fold/schemas.py +0 -0
  147. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/jobs/__init__.py +0 -0
  148. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/jobs/api.py +0 -0
  149. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/jobs/jobs.py +0 -0
  150. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/jobs/schemas.py +0 -0
  151. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/base.py +0 -0
  152. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/foundation/boltzgen_schema.py +0 -0
  153. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/models/models.py +0 -0
  154. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/molecules/__init__.py +0 -0
  155. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/molecules/chains.py +0 -0
  156. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/molecules/complex.py +0 -0
  157. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/molecules/protein.py +0 -0
  158. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/molecules/structure.py +0 -0
  159. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/__init__.py +0 -0
  160. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/api.py +0 -0
  161. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/models.py +0 -0
  162. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/prediction.py +0 -0
  163. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/predictor.py +0 -0
  164. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/schemas.py +0 -0
  165. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/predictor/validate.py +0 -0
  166. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/prompt/__init__.py +0 -0
  167. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/prompt/api.py +0 -0
  168. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/prompt/schemas.py +0 -0
  169. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/protein.py +0 -0
  170. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/scaffolds.py +0 -0
  171. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/__init__.py +0 -0
  172. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/align.py +0 -0
  173. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/assaydata.py +0 -0
  174. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/deprecated/__init__.py +0 -0
  175. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/deprecated/design.py +0 -0
  176. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/deprecated/poet.py +0 -0
  177. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/deprecated/predict.py +0 -0
  178. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/deprecated/train.py +0 -0
  179. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/design.py +0 -0
  180. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/designer.py +0 -0
  181. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/embeddings.py +0 -0
  182. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/features.py +0 -0
  183. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/fold.py +0 -0
  184. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/job.py +0 -0
  185. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/predict.py +0 -0
  186. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/predictor.py +0 -0
  187. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/prompt.py +0 -0
  188. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/svd.py +0 -0
  189. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/train.py +0 -0
  190. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/schemas/umap.py +0 -0
  191. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/svd/__init__.py +0 -0
  192. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/svd/api.py +0 -0
  193. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/svd/models.py +0 -0
  194. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/svd/schemas.py +0 -0
  195. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/svd/svd.py +0 -0
  196. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/umap/__init__.py +0 -0
  197. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/umap/api.py +0 -0
  198. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/umap/models.py +0 -0
  199. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/umap/schemas.py +0 -0
  200. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/umap/umap.py +0 -0
  201. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/utils/__init__.py +0 -0
  202. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/utils/cif.py +0 -0
  203. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/utils/numpy.py +0 -0
  204. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/utils/sequence.py +0 -0
  205. {openprotein_python-0.11.1 → openprotein_python-0.12.1}/openprotein/utils/uuid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openprotein-python
3
- Version: 0.11.1
3
+ Version: 0.12.1
4
4
  Summary: OpenProtein Python interface.
5
5
  Author-email: Mark Gee <markgee@ne47.bio>, "Timothy Truong Jr." <ttruong@ne47.bio>, Tristan Bepler <tbepler@ne47.bio>
6
6
  License-Expression: MIT
@@ -10,6 +10,7 @@ from .openprotein import OpenProteinModel
10
10
  from .esm import ESMModel
11
11
  from .poet import PoETModel
12
12
  from .poet2 import PoET2Model
13
+ from .ablang import AbLang2Model
13
14
  from .schemas import (
14
15
  EmbeddedSequence,
15
16
  EmbeddingsJob,
@@ -0,0 +1,21 @@
1
+ """AbLang model."""
2
+
3
+ from .models import EmbeddingModel
4
+
5
+
6
+ class AbLang2Model(EmbeddingModel):
7
+ """
8
+ Community AbLang2 model that targets antibodies.
9
+
10
+ Examples
11
+ --------
12
+ View specific model details (inc supported tokens) with the `?` operator.
13
+
14
+ .. code-block:: python
15
+
16
+ >>> import openprotein
17
+ >>> session = openprotein.connect(username="user", password="password")
18
+ >>> session.embedding.ablang2?
19
+ """
20
+
21
+ model_id = ["ablang2"]
@@ -598,9 +598,16 @@ def request_generate_post(
598
598
  body["seed"] = random_seed
599
599
  if kwargs.get("prompt_id"):
600
600
  body["prompt_id"] = kwargs["prompt_id"]
601
- if kwargs.get("query_id"):
601
+ if kwargs.get("design_id"):
602
+ body["design_id"] = kwargs["design_id"]
603
+ query_id = kwargs.get("query_id")
604
+ if query_id is not None:
602
605
  assert model_id != "poet", f"Model with id {model_id} does not support query"
603
- body["query_id"] = kwargs["query_id"]
606
+ body["query_id"] = (
607
+ list(query_id)
608
+ if isinstance(query_id, list)
609
+ else query_id
610
+ )
604
611
  if "use_query_structure_in_decoder" in kwargs:
605
612
  body["use_query_structure_in_decoder"] = kwargs[
606
613
  "use_query_structure_in_decoder"
@@ -96,8 +96,10 @@ class EmbeddingsResultFuture(MappedFuture[bytes, np.ndarray]):
96
96
  return api.result_decode(data)
97
97
 
98
98
 
99
- Score = namedtuple("Score", ["name", "sequence", "score"])
100
- SingleSiteScore = namedtuple("SingleSiteScore", ["mut_code", "score"])
99
+ Score = namedtuple("Score", ["name", "sequence", "score", "query_id"])
100
+ Score.__new__.__defaults__ = (None,)
101
+ SingleSiteScore = namedtuple("SingleSiteScore", ["mut_code", "score", "query_id"])
102
+ SingleSiteScore.__new__.__defaults__ = (None,)
101
103
  S = TypeVar("S", bound=Union[Score, SingleSiteScore])
102
104
 
103
105
 
@@ -132,13 +134,18 @@ class EmbeddingsScoreFuture(BaseScoreFuture[Score]):
132
134
 
133
135
  def stream(self) -> Iterator[Score]:
134
136
  stream = api.request_get_score_result(session=self.session, job_id=self.id)
135
- # name, sequence, ...
136
- next(stream) # ignore header
137
+ header = next(stream)
138
+ has_query_id = len(header) > 0 and header[0].strip().lower() == "query_id"
137
139
  for line in stream:
138
- # combine scores into numpy array
139
- scores = np.array([float(s) for s in line[2:]])
140
- output = Score(name=line[0], sequence=line[1], score=scores)
141
- yield output
140
+ if has_query_id:
141
+ query_id = line[0] if line[0] else None
142
+ name, sequence = line[1], line[2]
143
+ scores = np.array([float(s) for s in line[3:]])
144
+ else:
145
+ query_id = None
146
+ name, sequence = line[0], line[1]
147
+ scores = np.array([float(s) for s in line[2:]])
148
+ yield Score(name=name, sequence=sequence, score=scores, query_id=query_id)
142
149
 
143
150
 
144
151
  class EmbeddingsScoreSingleSiteFuture(BaseScoreFuture[SingleSiteScore]):
@@ -148,13 +155,18 @@ class EmbeddingsScoreSingleSiteFuture(BaseScoreFuture[SingleSiteScore]):
148
155
 
149
156
  def stream(self) -> Iterator[SingleSiteScore]:
150
157
  stream = api.request_get_score_result(session=self.session, job_id=self.id)
151
- # name, sequence, ...
152
- next(stream) # ignore header
158
+ header = next(stream)
159
+ has_query_id = len(header) > 0 and header[0].strip().lower() == "query_id"
153
160
  for line in stream:
154
- # combine scores into numpy array
155
- scores = np.array([float(s) for s in line[1:]])
156
- output = SingleSiteScore(mut_code=line[0], score=scores)
157
- yield output
161
+ if has_query_id:
162
+ query_id = line[0] if line[0] else None
163
+ mut_code = line[1]
164
+ scores = np.array([float(s) for s in line[2:]])
165
+ else:
166
+ query_id = None
167
+ mut_code = line[0]
168
+ scores = np.array([float(s) for s in line[1:]])
169
+ yield SingleSiteScore(mut_code=mut_code, score=scores, query_id=query_id)
158
170
 
159
171
 
160
172
  class EmbeddingsGenerateFuture(BaseScoreFuture[Score]):
@@ -164,13 +176,18 @@ class EmbeddingsGenerateFuture(BaseScoreFuture[Score]):
164
176
 
165
177
  def stream(self) -> Iterator[Score]:
166
178
  stream = api.request_get_generate_result(session=self.session, job_id=self.id)
167
- # name, sequence, ...
168
- next(stream) # ignore header
179
+ header = next(stream)
180
+ has_query_id = len(header) > 0 and header[0].strip().lower() == "query_id"
169
181
  for line in stream:
170
- # combine scores into numpy array
171
- scores = np.array([float(s) for s in line[2:]])
172
- output = Score(name=line[0], sequence=line[1], score=scores)
173
- yield output
182
+ if has_query_id:
183
+ query_id = line[0] if line[0] else None
184
+ name, sequence = line[1], line[2]
185
+ scores = np.array([float(s) for s in line[3:]])
186
+ else:
187
+ query_id = None
188
+ name, sequence = line[0], line[1]
189
+ scores = np.array([float(s) for s in line[2:]])
190
+ yield Score(name=name, sequence=sequence, score=scores, query_id=query_id)
174
191
 
175
192
  @property
176
193
  def sequences(self):
@@ -20,6 +20,7 @@ from .models import EmbeddingModel
20
20
  from .poet import PoETModel
21
21
 
22
22
  if TYPE_CHECKING:
23
+ from openprotein.models.structure_generation import StructureGenerationFuture
23
24
  from openprotein.predictor import PredictorModel
24
25
  from openprotein.svd import SVDModel
25
26
  from openprotein.umap import UMAPModel
@@ -290,7 +291,16 @@ class PoET2Model(PoETModel, EmbeddingModel):
290
291
  def generate(
291
292
  self,
292
293
  prompt: str | Prompt | None,
293
- query: str | bytes | Protein | Complex | Query | None = None,
294
+ query: (
295
+ str
296
+ | bytes
297
+ | Protein
298
+ | Complex
299
+ | Query
300
+ | list[str | bytes | Protein | Complex | Query]
301
+ | None
302
+ ) = None,
303
+ design: "str | StructureGenerationFuture | None" = None,
294
304
  use_query_structure_in_decoder: bool = True,
295
305
  num_samples: int = 100,
296
306
  temperature: float = 1.0,
@@ -308,7 +318,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
308
318
  ----------
309
319
  prompt : str or Prompt or None, optional
310
320
  Prompt from an align workflow to condition PoET model.
311
- query : str or bytes or Protein or Complex or Query or None, optional
321
+ query : str or bytes or Protein or Complex or Query or list of these or None, optional
312
322
  Query to use with prompt.
313
323
  use_query_structure_in_decoder : bool, optional
314
324
  Whether to use query structure in decoder. Default is True.
@@ -340,9 +350,14 @@ class PoET2Model(PoETModel, EmbeddingModel):
340
350
  EmbeddingsGenerateFuture
341
351
  A future object representing the status and information about the generation job.
342
352
  """
353
+ from openprotein.models.structure_generation import StructureGenerationFuture
354
+
343
355
  prompt_api = getattr(self.session, "prompt", None)
344
356
  assert isinstance(prompt_api, PromptAPI)
345
- query_id = prompt_api._resolve_query(query=query)
357
+ query_id = prompt_api._resolve_query(query=query) if query is not None else None
358
+ design_id = (
359
+ design.job_id if isinstance(design, StructureGenerationFuture) else design
360
+ )
346
361
  if ensemble_weights is not None:
347
362
  # NB: for now, ensemble_method is None -> ensemble_method == "arithmetic"
348
363
  if ensemble_method is None or (ensemble_method == "arithmetic"):
@@ -364,6 +379,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
364
379
  max_length=max_length,
365
380
  seed=seed,
366
381
  query_id=query_id,
382
+ design_id=design_id,
367
383
  use_query_structure_in_decoder=use_query_structure_in_decoder,
368
384
  ensemble_weights=ensemble_weights,
369
385
  ensemble_method=ensemble_method,
@@ -1,6 +1,10 @@
1
1
  from pydantic import BaseModel
2
2
  from requests import Response
3
3
 
4
+ UPGRADE_MESSAGE = (
5
+ "If this issue persists, try upgrading the client: pip install --upgrade openprotein-python"
6
+ )
7
+
4
8
 
5
9
  # Errors for OpenProtein
6
10
  class InvalidParameterError(Exception):
@@ -28,7 +32,7 @@ class APIError(Exception):
28
32
  """APIError"""
29
33
 
30
34
  def __init__(self, message: str):
31
- self.message = message
35
+ self.message = f"{message}\n{UPGRADE_MESSAGE}"
32
36
  super().__init__(self.message)
33
37
 
34
38
 
@@ -1,13 +1,7 @@
1
1
  """
2
2
  Fold module for predicting structures on OpenProtein.
3
-
4
- isort:skip_file
5
3
  """
6
4
 
7
- from .schemas import FoldJob, FoldMetadata
8
- from .models import FoldModel
9
- from .esmfold import ESMFoldModel
10
- from .minifold import MiniFoldModel
11
5
  from .alphafold2 import AlphaFold2Model
12
6
  from .boltz import (
13
7
  Boltz1Model,
@@ -18,6 +12,32 @@ from .boltz import (
18
12
  BoltzConstraint,
19
13
  BoltzProperty,
20
14
  )
21
- from .rosettafold3 import RosettaFold3Model
22
- from .future import FoldResultFuture
15
+ from .esmfold import ESMFoldModel
23
16
  from .fold import FoldAPI
17
+ from .future import FoldResultFuture
18
+ from .minifold import MiniFoldModel
19
+ from .models import FoldModel
20
+ from .protenix import ProtenixConfidence, ProtenixModel
21
+ from .rosettafold3 import RosettaFold3Model
22
+ from .schemas import FoldJob, FoldMetadata
23
+
24
+ __all__ = [
25
+ "FoldJob",
26
+ "FoldMetadata",
27
+ "FoldModel",
28
+ "ESMFoldModel",
29
+ "MiniFoldModel",
30
+ "AlphaFold2Model",
31
+ "ProtenixConfidence",
32
+ "ProtenixModel",
33
+ "Boltz1Model",
34
+ "Boltz1xModel",
35
+ "Boltz2Model",
36
+ "BoltzAffinity",
37
+ "BoltzConfidence",
38
+ "BoltzConstraint",
39
+ "BoltzProperty",
40
+ "RosettaFold3Model",
41
+ "FoldResultFuture",
42
+ "FoldAPI",
43
+ ]
@@ -1,15 +1,17 @@
1
1
  """Community-based AlphaFold 2 model running using ColabFold."""
2
2
 
3
- import io
4
3
  import warnings
5
- from typing import Any, Sequence
4
+ from typing import Sequence
6
5
 
7
- from openprotein.align import AlignAPI, MSAFuture
6
+ from openprotein.align import MSAFuture
8
7
  from openprotein.base import APISession
9
8
  from openprotein.common import ModelMetadata
10
- from openprotein.fold.common import normalize_inputs, serialize_input
11
- from openprotein.fold.complex import id_generator
12
- from openprotein.molecules import Protein, DNA, RNA, Ligand, Complex
9
+ from openprotein.fold.common import (
10
+ msa_future_to_complex,
11
+ normalize_inputs,
12
+ serialize_input,
13
+ )
14
+ from openprotein.molecules import DNA, RNA, Complex, Ligand, Protein
13
15
 
14
16
  from . import api
15
17
  from .future import FoldResultFuture
@@ -33,7 +35,7 @@ class AlphaFold2Model(FoldModel):
33
35
 
34
36
  def fold(
35
37
  self,
36
- sequences: Sequence[Complex | Protein | str] | MSAFuture | None = None,
38
+ sequences: Sequence[Complex | Protein | str | bytes] | MSAFuture,
37
39
  num_recycles: int | None = None,
38
40
  num_models: int = 1,
39
41
  num_relax: int = 0,
@@ -44,7 +46,7 @@ class AlphaFold2Model(FoldModel):
44
46
 
45
47
  Parameters
46
48
  ----------
47
- sequences : List[Complex | Protein | str] | MSAFuture
49
+ sequences : Sequence[Complex | Protein | str | bytes] | MSAFuture
48
50
  List of protein sequences to include in folded output. `Protein` objects must be tagged with an `msa`, which can be a `Protein.single_sequence_mode` for single sequence mode. Alternatively, supply an `MSAFuture` to use all query sequences as a multimer.
49
51
  num_recycles : int
50
52
  number of times to recycle models
@@ -57,7 +59,6 @@ class AlphaFold2Model(FoldModel):
57
59
  -------
58
60
  job : Job
59
61
  """
60
- from openprotein.align import AlignAPI
61
62
 
62
63
  if "msa" in kwargs:
63
64
  warnings.warn(
@@ -71,18 +72,7 @@ class AlphaFold2Model(FoldModel):
71
72
 
72
73
  # build the normalized_models from msa
73
74
  if isinstance(sequences, MSAFuture):
74
- id_gen = id_generator()
75
- align_api = getattr(self.session, "align", None)
76
- assert isinstance(align_api, AlignAPI)
77
- msa = sequences # rename
78
- seed = align_api.get_seed(job_id=msa.job.job_id)
79
- _proteins: dict[str, Protein] = {}
80
- for seq in seed.split(":"):
81
- protein = Protein(sequence=seq)
82
- id = next(id_gen)
83
- protein.msa = msa.id
84
- _proteins[id] = protein
85
- normalized_complexes = [Complex(chains=_proteins)]
75
+ normalized_complexes = [msa_future_to_complex(self.session, sequences)]
86
76
 
87
77
  else:
88
78
  normalized_complexes = normalize_inputs(sequences)
@@ -199,93 +199,21 @@ def fold_get_extra_result(
199
199
  The result as a numpy array (for "pae", "pde", "plddt") or a list of dictionaries (for "confidence", "affinity").
200
200
  """
201
201
  if key in {"pae", "pde", "plddt", "ptm"}:
202
- formatter = lambda response: np.load(io.BytesIO(response.content))
203
- elif key in {"confidence", "affinity"}:
204
- formatter = lambda response: response.json()
205
- elif key in {"score", "metrics"}:
206
- import pandas as pd
207
-
208
- formatter = lambda response: pd.read_csv(io.StringIO(response.content.decode()))
209
- else:
210
- raise ValueError(f"Unexpected key: {key}")
211
- endpoint = PATH_PREFIX + f"/{job_id}/{sequence_or_index}/{key}"
212
- try:
213
- response = session.get(
214
- endpoint,
215
- )
216
- except HTTPError as e:
217
- if e.status_code == 400 and key == "affinity":
218
- raise ValueError("affinity not found for request") from None
219
- raise e
220
- output = formatter(response)
221
- return output
222
-
223
-
224
- def fold_get_complex_result(
225
- session: APISession, job_id: str, format: Literal["pdb", "mmcif"]
226
- ) -> bytes:
227
- """
228
- Get encoded result for a complex from the request ID.
229
202
 
230
- Parameters
231
- ----------
232
- session : APISession
233
- Session object for API communication.
234
- job_id : str
235
- Job ID to retrieve results from.
236
- format : {'pdb', 'mmcif'}
237
- Format of the result.
238
-
239
- Returns
240
- -------
241
- bytes
242
- Encoded result for the complex.
243
- """
244
- endpoint = PATH_PREFIX + f"/{job_id}/complex"
245
- response = session.get(
246
- endpoint,
247
- params={
248
- "format": format,
249
- },
250
- )
251
- return response.content
252
-
253
-
254
- def fold_get_complex_extra_result(
255
- session: APISession,
256
- job_id: str,
257
- key: Literal[
258
- "pae", "pde", "plddt", "ptm", "confidence", "affinity", "score", "metrics"
259
- ],
260
- ) -> "np.ndarray | list[dict] | pd.DataFrame":
261
- """
262
- Get extra result for a complex from the request ID.
263
-
264
- Parameters
265
- ----------
266
- session : APISession
267
- Session object for API communication.
268
- job_id : str
269
- Job ID to retrieve results from.
270
- key : {'pae', 'pde', 'plddt', 'ptm', 'confidence', 'affinity', 'score', 'metrics'}
271
- The type of result to retrieve.
272
-
273
- Returns
274
- -------
275
- numpy.ndarray or list of dict
276
- The result as a numpy array (for "pae", "pde", "plddt") or a list of dictionaries (for "confidence", "affinity").
277
- """
278
- if key in {"pae", "pde", "plddt", "ptm"}:
279
- formatter = lambda response: np.load(io.BytesIO(response.content))
203
+ def formatter(response):
204
+ return np.load(io.BytesIO(response.content))
280
205
  elif key in {"confidence", "affinity"}:
281
- formatter = lambda response: response.json()
206
+
207
+ def formatter(response):
208
+ return response.json()
282
209
  elif key in {"score", "metrics"}:
283
210
  import pandas as pd
284
211
 
285
- formatter = lambda response: pd.read_csv(io.StringIO(response.content.decode()))
212
+ def formatter(response):
213
+ return pd.read_csv(io.StringIO(response.content.decode()))
286
214
  else:
287
215
  raise ValueError(f"Unexpected key: {key}")
288
- endpoint = PATH_PREFIX + f"/{job_id}/complex/{key}"
216
+ endpoint = PATH_PREFIX + f"/{job_id}/{sequence_or_index}/{key}"
289
217
  try:
290
218
  response = session.get(
291
219
  endpoint,
@@ -321,28 +249,8 @@ def fold_models_post(
321
249
  The outer list represents the batch of requests, and the inner
322
250
  list represents the complex, with each item in the list being
323
251
  an entity in that complex. A monomer would thus be a single item.
324
- num_recycles : int, optional
325
- Number of recycles for structure prediction.
326
- num_models : int, optional
327
- Number of models to generate.
328
- num_relax : int, optional
329
- Number of relaxation steps.
330
- use_potentials : bool, optional
331
- Whether to use potentials.
332
- diffusion_samples : int, optional
333
- Number of diffusion samples (boltz).
334
- recycling_steps : int, optional
335
- Number of recycling steps (boltz).
336
- sampling_steps : int, optional
337
- Number of sampling steps (boltz).
338
- step_scale : float, optional
339
- Step scale (boltz).
340
- constraints : dict, optional
341
- Constraints to apply.
342
- templates : list, optional
343
- Templates to use.
344
- properties : dict, optional
345
- Additional properties.
252
+ **kwargs
253
+ Additional keyword arguments to be sent with POST body.
346
254
 
347
255
  Returns
348
256
  -------