openprotein-python 0.14.0__tar.gz → 0.14.2__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 (212) hide show
  1. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/PKG-INFO +1 -1
  2. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/clustering/api.py +8 -16
  3. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/clustering/clustering.py +8 -14
  4. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/api.py +8 -40
  5. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/poet2.py +25 -4
  6. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/api.py +6 -5
  7. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/prompt/api.py +6 -1
  8. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/svd/api.py +3 -10
  9. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/umap/api.py +3 -10
  10. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/.gitignore +0 -0
  11. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/LICENSE.txt +0 -0
  12. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/README.md +0 -0
  13. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/__init__.py +0 -0
  14. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/_version.py +0 -0
  15. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/align/__init__.py +0 -0
  16. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/align/align.py +0 -0
  17. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/align/api.py +0 -0
  18. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/align/future.py +0 -0
  19. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/align/msa.py +0 -0
  20. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/align/schemas.py +0 -0
  21. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/__init__.py +0 -0
  22. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/align.py +0 -0
  23. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/assaydata.py +0 -0
  24. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/deprecated/__init__.py +0 -0
  25. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/deprecated/design.py +0 -0
  26. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/deprecated/poet.py +0 -0
  27. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/deprecated/predict.py +0 -0
  28. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/deprecated/train.py +0 -0
  29. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/design.py +0 -0
  30. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/designer.py +0 -0
  31. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/embedding.py +0 -0
  32. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/error.py +0 -0
  33. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/fold.py +0 -0
  34. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/job.py +0 -0
  35. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/predict.py +0 -0
  36. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/predictor.py +0 -0
  37. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/prompt.py +0 -0
  38. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/svd.py +0 -0
  39. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/train.py +0 -0
  40. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/api/umap.py +0 -0
  41. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/__init__.py +0 -0
  42. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/deprecated.py +0 -0
  43. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/__init__.py +0 -0
  44. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/align/__init__.py +0 -0
  45. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/align/base.py +0 -0
  46. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/align/msa.py +0 -0
  47. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/align/prompt.py +0 -0
  48. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/assaydata.py +0 -0
  49. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/deprecated/__init__.py +0 -0
  50. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/deprecated/design.py +0 -0
  51. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/deprecated/poet.py +0 -0
  52. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/deprecated/predict.py +0 -0
  53. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/deprecated/train.py +0 -0
  54. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/design.py +0 -0
  55. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/designer.py +0 -0
  56. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/__init__.py +0 -0
  57. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/base.py +0 -0
  58. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/esm.py +0 -0
  59. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/future.py +0 -0
  60. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/openprotein.py +0 -0
  61. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/poet.py +0 -0
  62. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/poet2.py +0 -0
  63. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/embeddings/test.py +0 -0
  64. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/fold/__init__.py +0 -0
  65. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/fold/alphafold2.py +0 -0
  66. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/fold/base.py +0 -0
  67. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/fold/boltz.py +0 -0
  68. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/fold/esmfold.py +0 -0
  69. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/fold/future.py +0 -0
  70. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/futures.py +0 -0
  71. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/predict.py +0 -0
  72. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/predictor/__init__.py +0 -0
  73. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/predictor/predict.py +0 -0
  74. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/predictor/predictor.py +0 -0
  75. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/predictor/validate.py +0 -0
  76. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/prompt.py +0 -0
  77. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/svd.py +0 -0
  78. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/train.py +0 -0
  79. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/models/umap.py +0 -0
  80. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/__init__.py +0 -0
  81. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/align.py +0 -0
  82. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/assaydata.py +0 -0
  83. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/deprecated/__init__.py +0 -0
  84. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/deprecated/design.py +0 -0
  85. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/deprecated/predict.py +0 -0
  86. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/deprecated/train.py +0 -0
  87. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/design.py +0 -0
  88. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/designer.py +0 -0
  89. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/embeddings.py +0 -0
  90. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/fold.py +0 -0
  91. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/job.py +0 -0
  92. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/predict.py +0 -0
  93. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/predictor.py +0 -0
  94. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/prompt.py +0 -0
  95. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/svd.py +0 -0
  96. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/train.py +0 -0
  97. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/app/services/umap.py +0 -0
  98. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/base.py +0 -0
  99. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/chains.py +0 -0
  100. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/clustering/__init__.py +0 -0
  101. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/clustering/models.py +0 -0
  102. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/clustering/schemas.py +0 -0
  103. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/common/__init__.py +0 -0
  104. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/common/features.py +0 -0
  105. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/common/model_metadata.py +0 -0
  106. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/common/reduction.py +0 -0
  107. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/common/residue_contants.py +0 -0
  108. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/config.py +0 -0
  109. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/csv.py +0 -0
  110. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/data/__init__.py +0 -0
  111. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/data/api.py +0 -0
  112. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/data/assaydataset.py +0 -0
  113. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/data/data.py +0 -0
  114. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/data/schemas.py +0 -0
  115. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/design/__init__.py +0 -0
  116. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/design/api.py +0 -0
  117. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/design/design.py +0 -0
  118. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/design/future.py +0 -0
  119. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/design/schemas.py +0 -0
  120. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/__init__.py +0 -0
  121. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/ablang.py +0 -0
  122. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/embeddings.py +0 -0
  123. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/esm.py +0 -0
  124. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/future.py +0 -0
  125. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/models.py +0 -0
  126. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/openprotein.py +0 -0
  127. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/poet.py +0 -0
  128. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/embeddings/schemas.py +0 -0
  129. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/errors.py +0 -0
  130. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fasta.py +0 -0
  131. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/__init__.py +0 -0
  132. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/alphafold2.py +0 -0
  133. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/boltz.py +0 -0
  134. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/common.py +0 -0
  135. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/complex.py +0 -0
  136. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/esmfold.py +0 -0
  137. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/esmfold2.py +0 -0
  138. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/fold.py +0 -0
  139. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/future.py +0 -0
  140. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/minifold.py +0 -0
  141. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/models.py +0 -0
  142. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/protenix.py +0 -0
  143. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/rosettafold3.py +0 -0
  144. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/fold/schemas.py +0 -0
  145. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/jobs/__init__.py +0 -0
  146. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/jobs/api.py +0 -0
  147. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/jobs/futures.py +0 -0
  148. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/jobs/jobs.py +0 -0
  149. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/jobs/schemas.py +0 -0
  150. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/__init__.py +0 -0
  151. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/base.py +0 -0
  152. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/foundation/boltzgen.py +0 -0
  153. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/foundation/boltzgen_schema.py +0 -0
  154. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/foundation/esmif1.py +0 -0
  155. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/foundation/proteinmpnn.py +0 -0
  156. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/foundation/rfdiffusion.py +0 -0
  157. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/models.py +0 -0
  158. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/models/structure_generation.py +0 -0
  159. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/molecules/__init__.py +0 -0
  160. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/molecules/chains.py +0 -0
  161. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/molecules/complex.py +0 -0
  162. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/molecules/protein.py +0 -0
  163. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/molecules/structure.py +0 -0
  164. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/molecules/template.py +0 -0
  165. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/__init__.py +0 -0
  166. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/api.py +0 -0
  167. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/models.py +0 -0
  168. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/prediction.py +0 -0
  169. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/predictor.py +0 -0
  170. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/schemas.py +0 -0
  171. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/predictor/validate.py +0 -0
  172. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/prompt/__init__.py +0 -0
  173. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/prompt/models.py +0 -0
  174. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/prompt/prompt.py +0 -0
  175. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/prompt/schemas.py +0 -0
  176. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/protein.py +0 -0
  177. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/scaffolds.py +0 -0
  178. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/__init__.py +0 -0
  179. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/align.py +0 -0
  180. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/assaydata.py +0 -0
  181. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/deprecated/__init__.py +0 -0
  182. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/deprecated/design.py +0 -0
  183. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/deprecated/poet.py +0 -0
  184. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/deprecated/predict.py +0 -0
  185. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/deprecated/train.py +0 -0
  186. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/design.py +0 -0
  187. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/designer.py +0 -0
  188. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/embeddings.py +0 -0
  189. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/features.py +0 -0
  190. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/fold.py +0 -0
  191. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/job.py +0 -0
  192. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/predict.py +0 -0
  193. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/predictor.py +0 -0
  194. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/prompt.py +0 -0
  195. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/svd.py +0 -0
  196. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/train.py +0 -0
  197. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/schemas/umap.py +0 -0
  198. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/svd/__init__.py +0 -0
  199. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/svd/models.py +0 -0
  200. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/svd/schemas.py +0 -0
  201. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/svd/svd.py +0 -0
  202. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/umap/__init__.py +0 -0
  203. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/umap/models.py +0 -0
  204. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/umap/schemas.py +0 -0
  205. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/umap/umap.py +0 -0
  206. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/utils/__init__.py +0 -0
  207. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/utils/chain_id.py +0 -0
  208. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/utils/cif.py +0 -0
  209. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/utils/numpy.py +0 -0
  210. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/utils/sequence.py +0 -0
  211. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/openprotein/utils/uuid.py +0 -0
  212. {openprotein_python-0.14.0 → openprotein_python-0.14.2}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openprotein-python
3
- Version: 0.14.0
3
+ Version: 0.14.2
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
@@ -17,17 +17,17 @@ PATH_PREFIX = "v1/clustering"
17
17
  def clustering_list_get(
18
18
  session: APISession,
19
19
  method: str | None = None,
20
- page_size: int | None = None,
21
- page_offset: int | None = None,
20
+ limit: int | None = None,
21
+ offset: int | None = None,
22
22
  ) -> list[ClusteringMetadata]:
23
23
  """List clustering jobs, optionally filtered by method."""
24
24
  params: dict = {}
25
25
  if method is not None:
26
26
  params["method"] = method
27
- if page_size is not None:
28
- params["page_size"] = page_size
29
- if page_offset is not None:
30
- params["page_offset"] = page_offset
27
+ if limit is not None:
28
+ params["limit"] = limit
29
+ if offset is not None:
30
+ params["offset"] = offset
31
31
  response = session.get(PATH_PREFIX, params=params or None)
32
32
  return TypeAdapter(list[ClusteringMetadata]).validate_python(response.json())
33
33
 
@@ -80,16 +80,9 @@ def clustering_hierarchical_post(
80
80
  assay_id: str | None = None,
81
81
  reduction: str | None = None,
82
82
  svd_id: str | None = None,
83
- force_recompute: bool = False,
84
83
  **kwargs,
85
84
  ) -> HierarchicalFitJob:
86
- """POST to create a hierarchical clustering fit job.
87
-
88
- Parameters
89
- ----------
90
- force_recompute : bool
91
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
92
- """
85
+ """POST to create a hierarchical clustering fit job."""
93
86
  body: dict = {
94
87
  "model_id": model_id,
95
88
  "feature_type": feature_type,
@@ -112,6 +105,5 @@ def clustering_hierarchical_post(
112
105
  body["assay_id"] = assay_id
113
106
  body.update(**kwargs)
114
107
 
115
- params = {"force": "true"} if force_recompute else None
116
- response = session.post(f"{PATH_PREFIX}/hierarchical", json=body, params=params)
108
+ response = session.post(f"{PATH_PREFIX}/hierarchical", json=body)
117
109
  return HierarchicalFitJob.model_validate(response.json())
@@ -64,9 +64,7 @@ class ClusteringAPI:
64
64
  assay_id = (
65
65
  assay.assay_id
66
66
  if isinstance(assay, AssayMetadata)
67
- else assay.id
68
- if isinstance(assay, AssayDataset)
69
- else assay
67
+ else assay.id if isinstance(assay, AssayDataset) else assay
70
68
  )
71
69
  if sequences is not None and assay_id is not None:
72
70
  raise InvalidParameterError(
@@ -86,9 +84,7 @@ class ClusteringAPI:
86
84
  feature_type = (
87
85
  FeatureType.PLM
88
86
  if isinstance(model, EmbeddingModel)
89
- else FeatureType.SVD
90
- if isinstance(model, SVDModel)
91
- else feature_type
87
+ else FeatureType.SVD if isinstance(model, SVDModel) else feature_type
92
88
  )
93
89
  if feature_type is None:
94
90
  raise InvalidParameterError(
@@ -148,9 +144,6 @@ class ClusteringAPI:
148
144
  reduction.value if isinstance(reduction, ReductionType) else reduction
149
145
  )
150
146
 
151
- # Advanced flags such as `force_recompute` are accepted via **kwargs
152
- # only (intentionally kept out of the typed signature / autocomplete):
153
- # they bypass the backend result cache and are easy to misuse.
154
147
  job = api.clustering_hierarchical_post(
155
148
  session=self.session,
156
149
  model_id=model_id,
@@ -175,12 +168,13 @@ class ClusteringAPI:
175
168
  def list(
176
169
  self,
177
170
  method: str | None = None,
178
- page_size: int | None = None,
179
- page_offset: int | None = None,
171
+ limit: int | None = None,
172
+ offset: int | None = None,
180
173
  ) -> list[HierarchicalClusteringFuture]:
181
174
  """List clustering jobs, optionally filtering by method.
182
175
 
183
- Pass `page_size` / `page_offset` to paginate."""
176
+ Pass `limit` / `offset` to paginate (the clustering list endpoint
177
+ uses `limit`/`offset`, unlike the `jobs` endpoint's page_size/page_offset)."""
184
178
  # Single-method dispatch today; when new methods are added,
185
179
  # branch on metadata.method to pick the concrete future type.
186
180
  return [
@@ -188,7 +182,7 @@ class ClusteringAPI:
188
182
  for md in api.clustering_list_get(
189
183
  self.session,
190
184
  method=method,
191
- page_size=page_size,
192
- page_offset=page_offset,
185
+ limit=limit,
186
+ offset=offset,
193
187
  )
194
188
  ]
@@ -265,7 +265,6 @@ def request_post(
265
265
  model_id: str,
266
266
  sequences: list[bytes] | list[str],
267
267
  reduction: str | None = "MEAN",
268
- force_recompute: bool = False,
269
268
  **kwargs,
270
269
  ) -> EmbeddingsJob:
271
270
  """
@@ -282,8 +281,6 @@ def request_post(
282
281
  sequences to request results for
283
282
  reduction : str | None
284
283
  reduction to apply to the embeddings. options are None, "MEAN", or "SUM". defaul: "MEAN"
285
- force_recompute : bool
286
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
287
284
  **kwargs:
288
285
  Optional parameters for models, e.g. prompt_id for PoET
289
286
 
@@ -309,8 +306,7 @@ def request_post(
309
306
  ]
310
307
  if kwargs.get("decoder_type"):
311
308
  body["decoder_type"] = kwargs["decoder_type"]
312
- params = {"force": "true"} if force_recompute else None
313
- response = session.post(endpoint, json=body, params=params)
309
+ response = session.post(endpoint, json=body)
314
310
  return EmbeddingsJob.model_validate(response.json())
315
311
 
316
312
 
@@ -318,7 +314,6 @@ def request_logits_post(
318
314
  session: APISession,
319
315
  model_id: str,
320
316
  sequences: list[bytes] | list[str],
321
- force_recompute: bool = False,
322
317
  **kwargs,
323
318
  ) -> LogitsJob:
324
319
  """
@@ -333,8 +328,6 @@ def request_logits_post(
333
328
  model ID to request results from
334
329
  sequences : List[bytes]
335
330
  sequences to request results for
336
- force_recompute : bool
337
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
338
331
  **kwargs:
339
332
  Optional parameters for models, e.g. prompt_id for PoET
340
333
 
@@ -358,8 +351,7 @@ def request_logits_post(
358
351
  ]
359
352
  if kwargs.get("decoder_type"):
360
353
  body["decoder_type"] = kwargs["decoder_type"]
361
- params = {"force": "true"} if force_recompute else None
362
- response = session.post(endpoint, json=body, params=params)
354
+ response = session.post(endpoint, json=body)
363
355
  return LogitsJob.model_validate(response.json())
364
356
 
365
357
 
@@ -367,7 +359,6 @@ def request_attn_post(
367
359
  session: APISession,
368
360
  model_id: str,
369
361
  sequences: list[bytes] | list[str],
370
- force_recompute: bool = False,
371
362
  **kwargs,
372
363
  ) -> AttnJob:
373
364
  """
@@ -383,8 +374,6 @@ def request_attn_post(
383
374
  model ID to request results from
384
375
  sequences : List[bytes]
385
376
  sequences to request results for
386
- force_recompute : bool
387
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
388
377
  **kwargs:
389
378
  Optional parameters for models, e.g. prompt_id for PoET
390
379
 
@@ -406,8 +395,7 @@ def request_attn_post(
406
395
  body["use_query_structure_in_decoder"] = kwargs[
407
396
  "use_query_structure_in_decoder"
408
397
  ]
409
- params = {"force": "true"} if force_recompute else None
410
- response = session.post(endpoint, json=body, params=params)
398
+ response = session.post(endpoint, json=body)
411
399
  return AttnJob.model_validate(response.json())
412
400
 
413
401
 
@@ -415,7 +403,6 @@ def request_score_post(
415
403
  session: APISession,
416
404
  model_id: str,
417
405
  sequences: list[bytes] | list[str],
418
- force_recompute: bool = False,
419
406
  **kwargs,
420
407
  ) -> ScoreJob:
421
408
  """
@@ -431,8 +418,6 @@ def request_score_post(
431
418
  model ID to request results from
432
419
  sequences : List[bytes]
433
420
  sequences to request results for
434
- force_recompute : bool
435
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
436
421
 
437
422
  Returns
438
423
  -------
@@ -453,8 +438,7 @@ def request_score_post(
453
438
  ]
454
439
  if kwargs.get("decoder_type"):
455
440
  body["decoder_type"] = kwargs["decoder_type"]
456
- params = {"force": "true"} if force_recompute else None
457
- response = session.post(endpoint, json=body, params=params)
441
+ response = session.post(endpoint, json=body)
458
442
  return ScoreJob.model_validate(response.json())
459
443
 
460
444
 
@@ -464,7 +448,6 @@ def request_score_indel_post(
464
448
  base_sequence: bytes | str,
465
449
  insert: str | None = None,
466
450
  delete: list[int] | None = None,
467
- force_recompute: bool = False,
468
451
  **kwargs,
469
452
  ) -> ScoreIndelJob:
470
453
  """
@@ -484,8 +467,6 @@ def request_score_indel_post(
484
467
  Insertion fragment at each site.
485
468
  delete: int | None
486
469
  Range of size of fragment to delete at each site.
487
- force_recompute : bool
488
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
489
470
  **kwargs:
490
471
  Optional parameters for models, e.g. prompt_id for PoET
491
472
 
@@ -516,8 +497,7 @@ def request_score_indel_post(
516
497
  ]
517
498
  if kwargs.get("decoder_type"):
518
499
  body["decoder_type"] = kwargs["decoder_type"]
519
- params = {"force": "true"} if force_recompute else None
520
- response = session.post(endpoint, json=body, params=params)
500
+ response = session.post(endpoint, json=body)
521
501
  return ScoreIndelJob.model_validate(response.json())
522
502
 
523
503
 
@@ -525,7 +505,6 @@ def request_score_single_site_post(
525
505
  session: APISession,
526
506
  model_id: str,
527
507
  base_sequence: bytes | str,
528
- force_recompute: bool = False,
529
508
  **kwargs,
530
509
  ) -> ScoreSingleSiteJob:
531
510
  """
@@ -541,8 +520,6 @@ def request_score_single_site_post(
541
520
  model ID to request results from
542
521
  sequences : List[bytes]
543
522
  sequences to request results for
544
- force_recompute : bool
545
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
546
523
  **kwargs:
547
524
  Optional parameters for models, e.g. prompt_id for PoET
548
525
 
@@ -569,8 +546,7 @@ def request_score_single_site_post(
569
546
  ]
570
547
  if kwargs.get("decoder_type"):
571
548
  body["decoder_type"] = kwargs["decoder_type"]
572
- params = {"force": "true"} if force_recompute else None
573
- response = session.post(endpoint, json=body, params=params)
549
+ response = session.post(endpoint, json=body)
574
550
  return ScoreSingleSiteJob.model_validate(response.json())
575
551
 
576
552
 
@@ -583,7 +559,6 @@ def request_generate_post(
583
559
  topp: float | None = None,
584
560
  max_length: int = 1000,
585
561
  random_seed: int | None = None,
586
- force_recompute: bool = False,
587
562
  **kwargs,
588
563
  ) -> GenerateJob:
589
564
  """
@@ -597,8 +572,6 @@ def request_generate_post(
597
572
  Session object for API communication.
598
573
  model_id : str
599
574
  model ID to request results from
600
- force_recompute : bool
601
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
602
575
  **kwargs:
603
576
  Optional parameters for models, e.g. prompt_id for PoET
604
577
 
@@ -638,11 +611,7 @@ def request_generate_post(
638
611
  query_id = kwargs.get("query_id")
639
612
  if query_id is not None:
640
613
  assert model_id != "poet", f"Model with id {model_id} does not support query"
641
- body["query_id"] = (
642
- list(query_id)
643
- if isinstance(query_id, list)
644
- else query_id
645
- )
614
+ body["query_id"] = list(query_id) if isinstance(query_id, list) else query_id
646
615
  if "use_query_structure_in_decoder" in kwargs:
647
616
  body["use_query_structure_in_decoder"] = kwargs[
648
617
  "use_query_structure_in_decoder"
@@ -657,6 +626,5 @@ def request_generate_post(
657
626
  model_id != "poet"
658
627
  ), f"Model with id {model_id} does not support ensemble_method parameter"
659
628
  body["ensemble_method"] = ensemble_method
660
- params = {"force": "true"} if force_recompute else None
661
- response = session.post(endpoint, json=body, params=params)
629
+ response = session.post(endpoint, json=body)
662
630
  return GenerateJob.model_validate(response.json())
@@ -59,19 +59,20 @@ class PoET2Model(PoETModel, EmbeddingModel):
59
59
 
60
60
  def embed(
61
61
  self,
62
- sequences: list[bytes],
62
+ sequences: list[bytes] | list[str],
63
63
  reduction: ReductionType | None = ReductionType.MEAN,
64
64
  prompt: str | Prompt | None = None,
65
65
  query: str | bytes | Protein | Complex | Query | None = None,
66
66
  use_query_structure_in_decoder: bool = True,
67
67
  decoder_type: Literal["mlm", "clm"] | None = None,
68
+ **kwargs,
68
69
  ) -> EmbeddingsResultFuture:
69
70
  """
70
71
  Embed sequences using this model.
71
72
 
72
73
  Parameters
73
74
  ----------
74
- sequences : list of bytes
75
+ sequences : list of bytes or list of str
75
76
  Sequences to embed.
76
77
  reduction : ReductionType or None, optional
77
78
  Embeddings reduction to use (e.g. mean). Default is ReductionType.MEAN.
@@ -83,6 +84,8 @@ class PoET2Model(PoETModel, EmbeddingModel):
83
84
  Whether to use query structure in decoder. Default is True.
84
85
  decoder_type : {'mlm', 'clm'} or None, optional
85
86
  Decoder type. Default is None.
87
+ **kwargs
88
+ Additional keyword arguments.
86
89
 
87
90
  Returns
88
91
  -------
@@ -105,22 +108,24 @@ class PoET2Model(PoETModel, EmbeddingModel):
105
108
  query_id=query_id,
106
109
  use_query_structure_in_decoder=use_query_structure_in_decoder,
107
110
  decoder_type=decoder_type,
111
+ **kwargs,
108
112
  )
109
113
 
110
114
  def logits(
111
115
  self,
112
- sequences: list[bytes],
116
+ sequences: list[bytes] | list[str],
113
117
  prompt: str | Prompt | None = None,
114
118
  query: str | bytes | Protein | Complex | Query | None = None,
115
119
  use_query_structure_in_decoder: bool = True,
116
120
  decoder_type: Literal["mlm", "clm"] | None = None,
121
+ **kwargs,
117
122
  ) -> EmbeddingsResultFuture:
118
123
  """
119
124
  Compute logit embeddings for sequences using this model.
120
125
 
121
126
  Parameters
122
127
  ----------
123
- sequences : list of bytes
128
+ sequences : list of bytes or list of str
124
129
  Sequences to analyze.
125
130
  prompt : str or Prompt or None, optional
126
131
  Prompt or prompt_id or prompt from an align workflow to condition PoET model.
@@ -130,6 +135,8 @@ class PoET2Model(PoETModel, EmbeddingModel):
130
135
  Whether to use query structure in decoder. Default is True.
131
136
  decoder_type : {'mlm', 'clm'} or None, optional
132
137
  Decoder type. Default is None.
138
+ **kwargs
139
+ Additional keyword arguments.
133
140
 
134
141
  Returns
135
142
  -------
@@ -151,6 +158,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
151
158
  query_id=query_id,
152
159
  use_query_structure_in_decoder=use_query_structure_in_decoder,
153
160
  decoder_type=decoder_type,
161
+ **kwargs,
154
162
  )
155
163
 
156
164
  def score(
@@ -160,6 +168,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
160
168
  query: str | bytes | Protein | Complex | Query | None = None,
161
169
  use_query_structure_in_decoder: bool = True,
162
170
  decoder_type: Literal["mlm", "clm"] | None = None,
171
+ **kwargs,
163
172
  ) -> EmbeddingsScoreFuture:
164
173
  """
165
174
  Score query sequences using the specified prompt.
@@ -176,6 +185,8 @@ class PoET2Model(PoETModel, EmbeddingModel):
176
185
  Whether to use query structure in decoder. Default is True.
177
186
  decoder_type : {'mlm', 'clm'} or None, optional
178
187
  Decoder type. Default is None.
188
+ **kwargs
189
+ Additional keyword arguments.
179
190
 
180
191
  Returns
181
192
  -------
@@ -191,6 +202,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
191
202
  query_id=query_id,
192
203
  use_query_structure_in_decoder=use_query_structure_in_decoder,
193
204
  decoder_type=decoder_type,
205
+ **kwargs,
194
206
  )
195
207
 
196
208
  def indel(
@@ -247,6 +259,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
247
259
  decoder_type=decoder_type,
248
260
  insert=insert,
249
261
  delete=delete,
262
+ **kwargs,
250
263
  )
251
264
 
252
265
  def single_site(
@@ -256,6 +269,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
256
269
  query: str | bytes | Protein | Complex | Query | None = None,
257
270
  use_query_structure_in_decoder: bool = True,
258
271
  decoder_type: Literal["mlm", "clm"] | None = None,
272
+ **kwargs,
259
273
  ) -> EmbeddingsScoreSingleSiteFuture:
260
274
  """
261
275
  Score all single substitutions of the query sequence using the specified prompt.
@@ -272,6 +286,8 @@ class PoET2Model(PoETModel, EmbeddingModel):
272
286
  Whether to use query structure in decoder. Default is True.
273
287
  decoder_type : {'mlm', 'clm'} or None, optional
274
288
  Decoder type. Default is None.
289
+ **kwargs
290
+ Additional keyword arguments.
275
291
 
276
292
  Returns
277
293
  -------
@@ -287,6 +303,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
287
303
  query_id=query_id,
288
304
  use_query_structure_in_decoder=use_query_structure_in_decoder,
289
305
  decoder_type=decoder_type,
306
+ **kwargs,
290
307
  )
291
308
 
292
309
  def generate(
@@ -311,6 +328,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
311
328
  seed: int | None = None,
312
329
  ensemble_weights: Sequence[float] | None = None,
313
330
  ensemble_method: Literal["arithmetic", "geometric"] | None = None,
331
+ **kwargs,
314
332
  ) -> EmbeddingsGenerateFuture:
315
333
  """
316
334
  Generate protein sequences conditioned on a prompt.
@@ -345,6 +363,8 @@ class PoET2Model(PoETModel, EmbeddingModel):
345
363
  If "arithmetic", the weighted mean is used; if "geometric", the weighted
346
364
  geometric mean is used. If None (default), the method defaults to
347
365
  "arithmetic", but this behavior may change in the future.
366
+ **kwargs
367
+ Additional keyword arguments.
348
368
 
349
369
  Returns
350
370
  -------
@@ -384,6 +404,7 @@ class PoET2Model(PoETModel, EmbeddingModel):
384
404
  use_query_structure_in_decoder=use_query_structure_in_decoder,
385
405
  ensemble_weights=ensemble_weights,
386
406
  ensemble_method=ensemble_method,
407
+ **kwargs,
387
408
  )
388
409
 
389
410
  def fit_svd(
@@ -211,15 +211,18 @@ def fold_get_extra_result(
211
211
 
212
212
  def formatter(response):
213
213
  return np.load(io.BytesIO(response.content))
214
+
214
215
  elif key in {"confidence", "affinity"}:
215
216
 
216
217
  def formatter(response):
217
218
  return response.json()
219
+
218
220
  elif key in {"score", "metrics"}:
219
221
  import pandas as pd
220
222
 
221
223
  def formatter(response):
222
224
  return pd.read_csv(io.StringIO(response.content.decode()))
225
+
223
226
  else:
224
227
  raise ValueError(f"Unexpected key: {key}")
225
228
  endpoint = PATH_PREFIX + f"/{job_id}/{sequence_or_index}/{key}"
@@ -295,10 +298,12 @@ def fold_get_batch_extra_result(
295
298
 
296
299
  def formatter(response):
297
300
  return np.load(io.BytesIO(response.content))
301
+
298
302
  elif key in {"confidence", "affinity"}:
299
303
 
300
304
  def formatter(response):
301
305
  return response.json()
306
+
302
307
  else:
303
308
  raise ValueError(f"Unexpected key: {key}")
304
309
  endpoint = PATH_PREFIX + f"/{job_id}/results/{key}"
@@ -315,7 +320,6 @@ def fold_models_post(
315
320
  session: APISession,
316
321
  model_id: str,
317
322
  sequences: Sequence[Sequence[Mapping[str, Any]]],
318
- force_recompute: bool = False,
319
323
  **kwargs,
320
324
  ) -> FoldJob:
321
325
  """
@@ -335,8 +339,6 @@ def fold_models_post(
335
339
  The outer list represents the batch of requests, and the inner
336
340
  list represents the complex, with each item in the list being
337
341
  an entity in that complex. A monomer would thus be a single item.
338
- force_recompute : bool
339
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
340
342
  **kwargs
341
343
  Additional keyword arguments to be sent with POST body.
342
344
 
@@ -355,6 +357,5 @@ def fold_models_post(
355
357
  if v is not None:
356
358
  body[k] = v
357
359
 
358
- params = {"force": "true"} if force_recompute else None
359
- response = session.post(endpoint, json=body, params=params)
360
+ response = session.post(endpoint, json=body)
360
361
  return FoldJob.model_validate(response.json())
@@ -426,7 +426,12 @@ def create_query(
426
426
  "chemical/x-mmcif",
427
427
  )
428
428
  else:
429
- qf, filename, typ = query.make_fasta_bytes(), "query.fasta", "text/x-fasta"
429
+ name = query.name or "query"
430
+ qf, filename, typ = (
431
+ b">" + name.encode() + b"\n" + query.sequence + b"\n",
432
+ "query.fasta",
433
+ "text/x-fasta",
434
+ )
430
435
  elif isinstance(query, Complex):
431
436
  _assert_protein_only(query)
432
437
  has_structure = any(p.has_structure for p in query.get_proteins().values())
@@ -127,7 +127,6 @@ def svd_fit_post(
127
127
  assay_id: str | None = None,
128
128
  n_components: int = 1024,
129
129
  reduction: str | None = None,
130
- force_recompute: bool = False,
131
130
  **kwargs,
132
131
  ) -> SVDFitJob:
133
132
  """
@@ -151,8 +150,6 @@ def svd_fit_post(
151
150
  Type of embedding reduction to use for computing features.
152
151
  E.g. "MEAN" or "SUM". Useful when dealing with variable length
153
152
  sequence. Defaults to None.
154
- force_recompute : bool
155
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
156
153
  kwargs:
157
154
  Additional keyword arguments to be passed to foundational models, e.g. prompt_id for PoET models.
158
155
 
@@ -183,8 +180,7 @@ def svd_fit_post(
183
180
  # add kwargs for embeddings kwargs
184
181
  body.update(**kwargs)
185
182
 
186
- params = {"force": "true"} if force_recompute else None
187
- response = session.post(endpoint, json=body, params=params)
183
+ response = session.post(endpoint, json=body)
188
184
  # return job for metadata
189
185
  return SVDFitJob.model_validate(response.json())
190
186
 
@@ -193,7 +189,7 @@ def svd_embed_post(
193
189
  session: APISession,
194
190
  svd_id: str,
195
191
  sequences: list[bytes] | list[str],
196
- force_recompute: bool = False,
192
+ **kwargs,
197
193
  ) -> SVDEmbeddingsJob:
198
194
  """
199
195
  POST a request for embeddings from the given SVD model.
@@ -206,8 +202,6 @@ def svd_embed_post(
206
202
  SVD model to use
207
203
  sequences : List[bytes]
208
204
  sequences to SVD
209
- force_recompute : bool
210
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
211
205
 
212
206
  Returns
213
207
  -------
@@ -219,7 +213,6 @@ def svd_embed_post(
219
213
  body = {
220
214
  "sequences": sequences_unicode,
221
215
  }
222
- params = {"force": "true"} if force_recompute else None
223
- response = session.post(endpoint, json=body, params=params)
216
+ response = session.post(endpoint, json=body)
224
217
 
225
218
  return SVDEmbeddingsJob.model_validate(response.json())
@@ -172,7 +172,6 @@ def umap_fit_post(
172
172
  n_neighbors: int = 15,
173
173
  min_dist: float = 0.1,
174
174
  reduction: str | None = None,
175
- force_recompute: bool = False,
176
175
  **kwargs,
177
176
  ) -> UMAPFitJob:
178
177
  """
@@ -201,8 +200,6 @@ def umap_fit_post(
201
200
  Minimum distance in UMAP fitting. Defaults to 0.1.
202
201
  reduction : str | None
203
202
  Embedding reduction to use for fitting the UMAP. Defaults to None.
204
- force_recompute : bool
205
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
206
203
  kwargs:
207
204
  Additional keyword arguments to be passed to foundational models, e.g. prompt_id for PoET models.
208
205
 
@@ -236,8 +233,7 @@ def umap_fit_post(
236
233
  # add kwargs for embeddings kwargs
237
234
  body.update(**kwargs)
238
235
 
239
- params = {"force": "true"} if force_recompute else None
240
- response = session.post(endpoint, json=body, params=params)
236
+ response = session.post(endpoint, json=body)
241
237
  # return job for metadata
242
238
  return UMAPFitJob.model_validate(response.json())
243
239
 
@@ -246,7 +242,7 @@ def umap_embed_post(
246
242
  session: APISession,
247
243
  umap_id: str,
248
244
  sequences: list[bytes] | list[str],
249
- force_recompute: bool = False,
245
+ **kwargs,
250
246
  ) -> UMAPEmbeddingsJob:
251
247
  """
252
248
  POST a request for embeddings from the given UMAP model.
@@ -259,8 +255,6 @@ def umap_embed_post(
259
255
  UMAP model to use
260
256
  sequences : List[bytes]
261
257
  sequences to UMAP
262
- force_recompute : bool
263
- If True, send ?force=true so the backend bypasses the result cache and recomputes. Default: False.
264
258
 
265
259
  Returns
266
260
  -------
@@ -272,7 +266,6 @@ def umap_embed_post(
272
266
  body = {
273
267
  "sequences": sequences_unicode,
274
268
  }
275
- params = {"force": "true"} if force_recompute else None
276
- response = session.post(endpoint, json=body, params=params)
269
+ response = session.post(endpoint, json=body)
277
270
 
278
271
  return UMAPEmbeddingsJob.model_validate(response.json())