biotite 1.1.0__cp313-cp313-macosx_10_13_x86_64.whl

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.

Potentially problematic release.


This version of biotite might be problematic. Click here for more details.

Files changed (332) hide show
  1. biotite/__init__.py +18 -0
  2. biotite/application/__init__.py +69 -0
  3. biotite/application/application.py +276 -0
  4. biotite/application/autodock/__init__.py +12 -0
  5. biotite/application/autodock/app.py +500 -0
  6. biotite/application/blast/__init__.py +14 -0
  7. biotite/application/blast/alignment.py +92 -0
  8. biotite/application/blast/webapp.py +428 -0
  9. biotite/application/clustalo/__init__.py +12 -0
  10. biotite/application/clustalo/app.py +223 -0
  11. biotite/application/dssp/__init__.py +12 -0
  12. biotite/application/dssp/app.py +159 -0
  13. biotite/application/localapp.py +342 -0
  14. biotite/application/mafft/__init__.py +12 -0
  15. biotite/application/mafft/app.py +116 -0
  16. biotite/application/msaapp.py +363 -0
  17. biotite/application/muscle/__init__.py +13 -0
  18. biotite/application/muscle/app3.py +227 -0
  19. biotite/application/muscle/app5.py +163 -0
  20. biotite/application/sra/__init__.py +18 -0
  21. biotite/application/sra/app.py +452 -0
  22. biotite/application/tantan/__init__.py +12 -0
  23. biotite/application/tantan/app.py +199 -0
  24. biotite/application/util.py +57 -0
  25. biotite/application/viennarna/__init__.py +18 -0
  26. biotite/application/viennarna/rnaalifold.py +310 -0
  27. biotite/application/viennarna/rnafold.py +254 -0
  28. biotite/application/viennarna/rnaplot.py +206 -0
  29. biotite/application/viennarna/util.py +77 -0
  30. biotite/application/webapp.py +76 -0
  31. biotite/copyable.py +71 -0
  32. biotite/database/__init__.py +23 -0
  33. biotite/database/entrez/__init__.py +15 -0
  34. biotite/database/entrez/check.py +60 -0
  35. biotite/database/entrez/dbnames.py +91 -0
  36. biotite/database/entrez/download.py +229 -0
  37. biotite/database/entrez/key.py +44 -0
  38. biotite/database/entrez/query.py +262 -0
  39. biotite/database/error.py +16 -0
  40. biotite/database/pubchem/__init__.py +21 -0
  41. biotite/database/pubchem/download.py +258 -0
  42. biotite/database/pubchem/error.py +20 -0
  43. biotite/database/pubchem/query.py +830 -0
  44. biotite/database/pubchem/throttle.py +98 -0
  45. biotite/database/rcsb/__init__.py +13 -0
  46. biotite/database/rcsb/download.py +159 -0
  47. biotite/database/rcsb/query.py +964 -0
  48. biotite/database/uniprot/__init__.py +13 -0
  49. biotite/database/uniprot/check.py +40 -0
  50. biotite/database/uniprot/download.py +129 -0
  51. biotite/database/uniprot/query.py +293 -0
  52. biotite/file.py +232 -0
  53. biotite/sequence/__init__.py +84 -0
  54. biotite/sequence/align/__init__.py +203 -0
  55. biotite/sequence/align/alignment.py +680 -0
  56. biotite/sequence/align/banded.cpython-313-darwin.so +0 -0
  57. biotite/sequence/align/banded.pyx +652 -0
  58. biotite/sequence/align/buckets.py +71 -0
  59. biotite/sequence/align/cigar.py +425 -0
  60. biotite/sequence/align/kmeralphabet.cpython-313-darwin.so +0 -0
  61. biotite/sequence/align/kmeralphabet.pyx +595 -0
  62. biotite/sequence/align/kmersimilarity.cpython-313-darwin.so +0 -0
  63. biotite/sequence/align/kmersimilarity.pyx +233 -0
  64. biotite/sequence/align/kmertable.cpython-313-darwin.so +0 -0
  65. biotite/sequence/align/kmertable.pyx +3411 -0
  66. biotite/sequence/align/localgapped.cpython-313-darwin.so +0 -0
  67. biotite/sequence/align/localgapped.pyx +892 -0
  68. biotite/sequence/align/localungapped.cpython-313-darwin.so +0 -0
  69. biotite/sequence/align/localungapped.pyx +279 -0
  70. biotite/sequence/align/matrix.py +622 -0
  71. biotite/sequence/align/matrix_data/3Di.mat +24 -0
  72. biotite/sequence/align/matrix_data/BLOSUM100.mat +31 -0
  73. biotite/sequence/align/matrix_data/BLOSUM30.mat +31 -0
  74. biotite/sequence/align/matrix_data/BLOSUM35.mat +31 -0
  75. biotite/sequence/align/matrix_data/BLOSUM40.mat +31 -0
  76. biotite/sequence/align/matrix_data/BLOSUM45.mat +31 -0
  77. biotite/sequence/align/matrix_data/BLOSUM50.mat +31 -0
  78. biotite/sequence/align/matrix_data/BLOSUM50_13p.mat +25 -0
  79. biotite/sequence/align/matrix_data/BLOSUM50_14.3.mat +25 -0
  80. biotite/sequence/align/matrix_data/BLOSUM50_5.0.mat +25 -0
  81. biotite/sequence/align/matrix_data/BLOSUM55.mat +31 -0
  82. biotite/sequence/align/matrix_data/BLOSUM60.mat +31 -0
  83. biotite/sequence/align/matrix_data/BLOSUM62.mat +31 -0
  84. biotite/sequence/align/matrix_data/BLOSUM62_13p.mat +25 -0
  85. biotite/sequence/align/matrix_data/BLOSUM62_14.3.mat +25 -0
  86. biotite/sequence/align/matrix_data/BLOSUM62_5.0.mat +25 -0
  87. biotite/sequence/align/matrix_data/BLOSUM65.mat +31 -0
  88. biotite/sequence/align/matrix_data/BLOSUM70.mat +31 -0
  89. biotite/sequence/align/matrix_data/BLOSUM75.mat +31 -0
  90. biotite/sequence/align/matrix_data/BLOSUM80.mat +31 -0
  91. biotite/sequence/align/matrix_data/BLOSUM85.mat +31 -0
  92. biotite/sequence/align/matrix_data/BLOSUM90.mat +31 -0
  93. biotite/sequence/align/matrix_data/BLOSUMN.mat +31 -0
  94. biotite/sequence/align/matrix_data/CorBLOSUM49_5.0.mat +25 -0
  95. biotite/sequence/align/matrix_data/CorBLOSUM57_13p.mat +25 -0
  96. biotite/sequence/align/matrix_data/CorBLOSUM57_14.3.mat +25 -0
  97. biotite/sequence/align/matrix_data/CorBLOSUM61_5.0.mat +25 -0
  98. biotite/sequence/align/matrix_data/CorBLOSUM66_13p.mat +25 -0
  99. biotite/sequence/align/matrix_data/CorBLOSUM67_14.3.mat +25 -0
  100. biotite/sequence/align/matrix_data/DAYHOFF.mat +32 -0
  101. biotite/sequence/align/matrix_data/GONNET.mat +26 -0
  102. biotite/sequence/align/matrix_data/IDENTITY.mat +25 -0
  103. biotite/sequence/align/matrix_data/MATCH.mat +25 -0
  104. biotite/sequence/align/matrix_data/NUC.mat +25 -0
  105. biotite/sequence/align/matrix_data/PAM10.mat +34 -0
  106. biotite/sequence/align/matrix_data/PAM100.mat +34 -0
  107. biotite/sequence/align/matrix_data/PAM110.mat +34 -0
  108. biotite/sequence/align/matrix_data/PAM120.mat +34 -0
  109. biotite/sequence/align/matrix_data/PAM130.mat +34 -0
  110. biotite/sequence/align/matrix_data/PAM140.mat +34 -0
  111. biotite/sequence/align/matrix_data/PAM150.mat +34 -0
  112. biotite/sequence/align/matrix_data/PAM160.mat +34 -0
  113. biotite/sequence/align/matrix_data/PAM170.mat +34 -0
  114. biotite/sequence/align/matrix_data/PAM180.mat +34 -0
  115. biotite/sequence/align/matrix_data/PAM190.mat +34 -0
  116. biotite/sequence/align/matrix_data/PAM20.mat +34 -0
  117. biotite/sequence/align/matrix_data/PAM200.mat +34 -0
  118. biotite/sequence/align/matrix_data/PAM210.mat +34 -0
  119. biotite/sequence/align/matrix_data/PAM220.mat +34 -0
  120. biotite/sequence/align/matrix_data/PAM230.mat +34 -0
  121. biotite/sequence/align/matrix_data/PAM240.mat +34 -0
  122. biotite/sequence/align/matrix_data/PAM250.mat +34 -0
  123. biotite/sequence/align/matrix_data/PAM260.mat +34 -0
  124. biotite/sequence/align/matrix_data/PAM270.mat +34 -0
  125. biotite/sequence/align/matrix_data/PAM280.mat +34 -0
  126. biotite/sequence/align/matrix_data/PAM290.mat +34 -0
  127. biotite/sequence/align/matrix_data/PAM30.mat +34 -0
  128. biotite/sequence/align/matrix_data/PAM300.mat +34 -0
  129. biotite/sequence/align/matrix_data/PAM310.mat +34 -0
  130. biotite/sequence/align/matrix_data/PAM320.mat +34 -0
  131. biotite/sequence/align/matrix_data/PAM330.mat +34 -0
  132. biotite/sequence/align/matrix_data/PAM340.mat +34 -0
  133. biotite/sequence/align/matrix_data/PAM350.mat +34 -0
  134. biotite/sequence/align/matrix_data/PAM360.mat +34 -0
  135. biotite/sequence/align/matrix_data/PAM370.mat +34 -0
  136. biotite/sequence/align/matrix_data/PAM380.mat +34 -0
  137. biotite/sequence/align/matrix_data/PAM390.mat +34 -0
  138. biotite/sequence/align/matrix_data/PAM40.mat +34 -0
  139. biotite/sequence/align/matrix_data/PAM400.mat +34 -0
  140. biotite/sequence/align/matrix_data/PAM410.mat +34 -0
  141. biotite/sequence/align/matrix_data/PAM420.mat +34 -0
  142. biotite/sequence/align/matrix_data/PAM430.mat +34 -0
  143. biotite/sequence/align/matrix_data/PAM440.mat +34 -0
  144. biotite/sequence/align/matrix_data/PAM450.mat +34 -0
  145. biotite/sequence/align/matrix_data/PAM460.mat +34 -0
  146. biotite/sequence/align/matrix_data/PAM470.mat +34 -0
  147. biotite/sequence/align/matrix_data/PAM480.mat +34 -0
  148. biotite/sequence/align/matrix_data/PAM490.mat +34 -0
  149. biotite/sequence/align/matrix_data/PAM50.mat +34 -0
  150. biotite/sequence/align/matrix_data/PAM500.mat +34 -0
  151. biotite/sequence/align/matrix_data/PAM60.mat +34 -0
  152. biotite/sequence/align/matrix_data/PAM70.mat +34 -0
  153. biotite/sequence/align/matrix_data/PAM80.mat +34 -0
  154. biotite/sequence/align/matrix_data/PAM90.mat +34 -0
  155. biotite/sequence/align/matrix_data/PB.license +21 -0
  156. biotite/sequence/align/matrix_data/PB.mat +18 -0
  157. biotite/sequence/align/matrix_data/RBLOSUM52_5.0.mat +25 -0
  158. biotite/sequence/align/matrix_data/RBLOSUM59_13p.mat +25 -0
  159. biotite/sequence/align/matrix_data/RBLOSUM59_14.3.mat +25 -0
  160. biotite/sequence/align/matrix_data/RBLOSUM64_5.0.mat +25 -0
  161. biotite/sequence/align/matrix_data/RBLOSUM69_13p.mat +25 -0
  162. biotite/sequence/align/matrix_data/RBLOSUM69_14.3.mat +25 -0
  163. biotite/sequence/align/multiple.cpython-313-darwin.so +0 -0
  164. biotite/sequence/align/multiple.pyx +620 -0
  165. biotite/sequence/align/pairwise.cpython-313-darwin.so +0 -0
  166. biotite/sequence/align/pairwise.pyx +587 -0
  167. biotite/sequence/align/permutation.cpython-313-darwin.so +0 -0
  168. biotite/sequence/align/permutation.pyx +313 -0
  169. biotite/sequence/align/primes.txt +821 -0
  170. biotite/sequence/align/selector.cpython-313-darwin.so +0 -0
  171. biotite/sequence/align/selector.pyx +954 -0
  172. biotite/sequence/align/statistics.py +264 -0
  173. biotite/sequence/align/tracetable.cpython-313-darwin.so +0 -0
  174. biotite/sequence/align/tracetable.pxd +64 -0
  175. biotite/sequence/align/tracetable.pyx +370 -0
  176. biotite/sequence/alphabet.py +555 -0
  177. biotite/sequence/annotation.py +830 -0
  178. biotite/sequence/codec.cpython-313-darwin.so +0 -0
  179. biotite/sequence/codec.pyx +155 -0
  180. biotite/sequence/codon.py +477 -0
  181. biotite/sequence/codon_tables.txt +202 -0
  182. biotite/sequence/graphics/__init__.py +33 -0
  183. biotite/sequence/graphics/alignment.py +1115 -0
  184. biotite/sequence/graphics/color_schemes/3di_flower.json +48 -0
  185. biotite/sequence/graphics/color_schemes/autumn.json +51 -0
  186. biotite/sequence/graphics/color_schemes/blossom.json +51 -0
  187. biotite/sequence/graphics/color_schemes/clustalx_dna.json +11 -0
  188. biotite/sequence/graphics/color_schemes/clustalx_protein.json +28 -0
  189. biotite/sequence/graphics/color_schemes/flower.json +51 -0
  190. biotite/sequence/graphics/color_schemes/jalview_buried.json +31 -0
  191. biotite/sequence/graphics/color_schemes/jalview_hydrophobicity.json +31 -0
  192. biotite/sequence/graphics/color_schemes/jalview_prop_helix.json +31 -0
  193. biotite/sequence/graphics/color_schemes/jalview_prop_strand.json +31 -0
  194. biotite/sequence/graphics/color_schemes/jalview_prop_turn.json +31 -0
  195. biotite/sequence/graphics/color_schemes/jalview_taylor.json +28 -0
  196. biotite/sequence/graphics/color_schemes/jalview_zappo.json +28 -0
  197. biotite/sequence/graphics/color_schemes/ocean.json +51 -0
  198. biotite/sequence/graphics/color_schemes/pb_flower.json +40 -0
  199. biotite/sequence/graphics/color_schemes/rainbow_dna.json +11 -0
  200. biotite/sequence/graphics/color_schemes/rainbow_protein.json +30 -0
  201. biotite/sequence/graphics/color_schemes/spring.json +51 -0
  202. biotite/sequence/graphics/color_schemes/sunset.json +51 -0
  203. biotite/sequence/graphics/color_schemes/wither.json +51 -0
  204. biotite/sequence/graphics/colorschemes.py +170 -0
  205. biotite/sequence/graphics/dendrogram.py +229 -0
  206. biotite/sequence/graphics/features.py +544 -0
  207. biotite/sequence/graphics/logo.py +104 -0
  208. biotite/sequence/graphics/plasmid.py +712 -0
  209. biotite/sequence/io/__init__.py +12 -0
  210. biotite/sequence/io/fasta/__init__.py +22 -0
  211. biotite/sequence/io/fasta/convert.py +284 -0
  212. biotite/sequence/io/fasta/file.py +265 -0
  213. biotite/sequence/io/fastq/__init__.py +19 -0
  214. biotite/sequence/io/fastq/convert.py +117 -0
  215. biotite/sequence/io/fastq/file.py +507 -0
  216. biotite/sequence/io/genbank/__init__.py +17 -0
  217. biotite/sequence/io/genbank/annotation.py +269 -0
  218. biotite/sequence/io/genbank/file.py +573 -0
  219. biotite/sequence/io/genbank/metadata.py +336 -0
  220. biotite/sequence/io/genbank/sequence.py +171 -0
  221. biotite/sequence/io/general.py +201 -0
  222. biotite/sequence/io/gff/__init__.py +26 -0
  223. biotite/sequence/io/gff/convert.py +128 -0
  224. biotite/sequence/io/gff/file.py +450 -0
  225. biotite/sequence/phylo/__init__.py +36 -0
  226. biotite/sequence/phylo/nj.cpython-313-darwin.so +0 -0
  227. biotite/sequence/phylo/nj.pyx +221 -0
  228. biotite/sequence/phylo/tree.cpython-313-darwin.so +0 -0
  229. biotite/sequence/phylo/tree.pyx +1169 -0
  230. biotite/sequence/phylo/upgma.cpython-313-darwin.so +0 -0
  231. biotite/sequence/phylo/upgma.pyx +164 -0
  232. biotite/sequence/profile.py +567 -0
  233. biotite/sequence/search.py +118 -0
  234. biotite/sequence/seqtypes.py +713 -0
  235. biotite/sequence/sequence.py +374 -0
  236. biotite/setup_ccd.py +197 -0
  237. biotite/structure/__init__.py +133 -0
  238. biotite/structure/alphabet/__init__.py +25 -0
  239. biotite/structure/alphabet/encoder.py +332 -0
  240. biotite/structure/alphabet/encoder_weights_3di.kerasify +0 -0
  241. biotite/structure/alphabet/i3d.py +110 -0
  242. biotite/structure/alphabet/layers.py +86 -0
  243. biotite/structure/alphabet/pb.license +21 -0
  244. biotite/structure/alphabet/pb.py +171 -0
  245. biotite/structure/alphabet/unkerasify.py +122 -0
  246. biotite/structure/atoms.py +1554 -0
  247. biotite/structure/basepairs.py +1404 -0
  248. biotite/structure/bonds.cpython-313-darwin.so +0 -0
  249. biotite/structure/bonds.pyx +1972 -0
  250. biotite/structure/box.py +588 -0
  251. biotite/structure/celllist.cpython-313-darwin.so +0 -0
  252. biotite/structure/celllist.pyx +849 -0
  253. biotite/structure/chains.py +314 -0
  254. biotite/structure/charges.cpython-313-darwin.so +0 -0
  255. biotite/structure/charges.pyx +520 -0
  256. biotite/structure/compare.py +274 -0
  257. biotite/structure/density.py +109 -0
  258. biotite/structure/dotbracket.py +214 -0
  259. biotite/structure/error.py +39 -0
  260. biotite/structure/filter.py +590 -0
  261. biotite/structure/geometry.py +655 -0
  262. biotite/structure/graphics/__init__.py +13 -0
  263. biotite/structure/graphics/atoms.py +243 -0
  264. biotite/structure/graphics/rna.py +295 -0
  265. biotite/structure/hbond.py +428 -0
  266. biotite/structure/info/__init__.py +24 -0
  267. biotite/structure/info/atom_masses.json +121 -0
  268. biotite/structure/info/atoms.py +81 -0
  269. biotite/structure/info/bonds.py +149 -0
  270. biotite/structure/info/ccd.py +202 -0
  271. biotite/structure/info/components.bcif +0 -0
  272. biotite/structure/info/groups.py +131 -0
  273. biotite/structure/info/masses.py +121 -0
  274. biotite/structure/info/misc.py +138 -0
  275. biotite/structure/info/radii.py +197 -0
  276. biotite/structure/info/standardize.py +186 -0
  277. biotite/structure/integrity.py +215 -0
  278. biotite/structure/io/__init__.py +29 -0
  279. biotite/structure/io/dcd/__init__.py +13 -0
  280. biotite/structure/io/dcd/file.py +67 -0
  281. biotite/structure/io/general.py +243 -0
  282. biotite/structure/io/gro/__init__.py +14 -0
  283. biotite/structure/io/gro/file.py +344 -0
  284. biotite/structure/io/mol/__init__.py +20 -0
  285. biotite/structure/io/mol/convert.py +112 -0
  286. biotite/structure/io/mol/ctab.py +415 -0
  287. biotite/structure/io/mol/header.py +120 -0
  288. biotite/structure/io/mol/mol.py +149 -0
  289. biotite/structure/io/mol/sdf.py +914 -0
  290. biotite/structure/io/netcdf/__init__.py +13 -0
  291. biotite/structure/io/netcdf/file.py +64 -0
  292. biotite/structure/io/pdb/__init__.py +20 -0
  293. biotite/structure/io/pdb/convert.py +307 -0
  294. biotite/structure/io/pdb/file.py +1290 -0
  295. biotite/structure/io/pdb/hybrid36.cpython-313-darwin.so +0 -0
  296. biotite/structure/io/pdb/hybrid36.pyx +242 -0
  297. biotite/structure/io/pdbqt/__init__.py +15 -0
  298. biotite/structure/io/pdbqt/convert.py +113 -0
  299. biotite/structure/io/pdbqt/file.py +688 -0
  300. biotite/structure/io/pdbx/__init__.py +23 -0
  301. biotite/structure/io/pdbx/bcif.py +656 -0
  302. biotite/structure/io/pdbx/cif.py +1075 -0
  303. biotite/structure/io/pdbx/component.py +245 -0
  304. biotite/structure/io/pdbx/compress.py +321 -0
  305. biotite/structure/io/pdbx/convert.py +1745 -0
  306. biotite/structure/io/pdbx/encoding.cpython-313-darwin.so +0 -0
  307. biotite/structure/io/pdbx/encoding.pyx +1031 -0
  308. biotite/structure/io/trajfile.py +693 -0
  309. biotite/structure/io/trr/__init__.py +13 -0
  310. biotite/structure/io/trr/file.py +43 -0
  311. biotite/structure/io/xtc/__init__.py +13 -0
  312. biotite/structure/io/xtc/file.py +43 -0
  313. biotite/structure/mechanics.py +73 -0
  314. biotite/structure/molecules.py +352 -0
  315. biotite/structure/pseudoknots.py +628 -0
  316. biotite/structure/rdf.py +245 -0
  317. biotite/structure/repair.py +304 -0
  318. biotite/structure/residues.py +572 -0
  319. biotite/structure/sasa.cpython-313-darwin.so +0 -0
  320. biotite/structure/sasa.pyx +322 -0
  321. biotite/structure/segments.py +178 -0
  322. biotite/structure/sequence.py +111 -0
  323. biotite/structure/sse.py +308 -0
  324. biotite/structure/superimpose.py +689 -0
  325. biotite/structure/transform.py +530 -0
  326. biotite/structure/util.py +168 -0
  327. biotite/version.py +16 -0
  328. biotite/visualize.py +265 -0
  329. biotite-1.1.0.dist-info/METADATA +190 -0
  330. biotite-1.1.0.dist-info/RECORD +332 -0
  331. biotite-1.1.0.dist-info/WHEEL +4 -0
  332. biotite-1.1.0.dist-info/licenses/LICENSE.rst +30 -0
@@ -0,0 +1,13 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ """
6
+ A subpackage for downloading files from the UniProt.
7
+ """
8
+
9
+ __name__ = "biotite.database.uniprot"
10
+ __author__ = "Maximilian Greil"
11
+
12
+ from .download import *
13
+ from .query import *
@@ -0,0 +1,40 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite.database.uniprot"
6
+ __author__ = "Maximilian Greil"
7
+ __all__ = ["assert_valid_response"]
8
+
9
+ from biotite.database.error import RequestError
10
+
11
+
12
+ # Taken from https://www.uniprot.org/help/api_retrieve_entries
13
+ def assert_valid_response(response):
14
+ """
15
+ Checks whether the response is valid.
16
+
17
+ Parameters
18
+ ----------
19
+ response_status_code: int
20
+ Status code of request.get.
21
+ """
22
+ if len(response.content) == 0:
23
+ raise RequestError("No content returned")
24
+ match response.status_code:
25
+ case 400:
26
+ raise RequestError("Bad request. There is a problem with your input.")
27
+ case 404:
28
+ raise RequestError("Not found. The resource you requested doesn't exist.")
29
+ case 410:
30
+ raise RequestError("Gone. The resource you requested was removed.")
31
+ case 500:
32
+ raise RequestError(
33
+ "Internal server error. "
34
+ "Most likely a temporary problem, "
35
+ "but if the problem persists please contact UniProt team."
36
+ )
37
+ case 503:
38
+ raise RequestError(
39
+ "Service not available. The server is being updated, try again later."
40
+ )
@@ -0,0 +1,129 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite.database.uniprot"
6
+ __author__ = "Maximilian Greil"
7
+ __all__ = ["fetch"]
8
+
9
+ import io
10
+ import os
11
+ from os.path import getsize, isdir, isfile, join
12
+ import requests
13
+ from biotite.database.uniprot.check import assert_valid_response
14
+
15
+ _fetch_url = "https://rest.uniprot.org/"
16
+
17
+
18
+ def _get_database_name(id):
19
+ """
20
+ Get the correct UniProt database from the ID of the file to be downloaded.
21
+
22
+ Parameters
23
+ ----------
24
+ id: str
25
+ ID of the file to be downloaded.
26
+
27
+ Returns
28
+ -------
29
+ name : str
30
+ E-utility UniProt database name.
31
+ """
32
+ if id[:3] == "UPI":
33
+ return "uniparc"
34
+ elif id[:6] == "UniRef":
35
+ return "uniref"
36
+ return "uniprotkb"
37
+
38
+
39
+ def fetch(ids, format, target_path=None, overwrite=False, verbose=False):
40
+ """
41
+ Download files from the UniProt in various formats.
42
+
43
+ Available databases are UniProtKB, UniRef and UniParc.
44
+
45
+ This function requires an internet connection.
46
+
47
+ Parameters
48
+ ----------
49
+ ids : str or iterable object of str
50
+ A single ID or a list of IDs of the file(s)
51
+ to be downloaded.
52
+ format : {'fasta', 'gff', 'txt', 'xml', 'rdf', 'tab'}
53
+ The format of the files to be downloaded.
54
+ target_path : str, optional
55
+ The target directory of the downloaded files.
56
+ By default, the file content is stored in a file-like object
57
+ (`StringIO` or `BytesIO`, respectively).
58
+ overwrite : bool, optional
59
+ If true, existing files will be overwritten. Otherwise the
60
+ respective file will only be downloaded if the file does not
61
+ exist yet in the specified target directory or if the file is
62
+ empty. (Default: False)
63
+ verbose: bool, optional
64
+ If true, the function will output the download progress.
65
+ (Default: False)
66
+
67
+ Returns
68
+ -------
69
+ files : str or StringIO or BytesIO or list of (str or StringIO or BytesIO)
70
+ The file path(s) to the downloaded files.
71
+ If a single string (a single ID) was given in `ids`,
72
+ a single string is returned. If a list (or other iterable
73
+ object) was given, a list of strings is returned.
74
+ If no `target_path` was given, the file contents are stored in
75
+ either `StringIO` or `BytesIO` objects.
76
+
77
+ Examples
78
+ --------
79
+
80
+ >>> import os.path
81
+ >>> file = fetch("P12345", "fasta", path_to_directory)
82
+ >>> print(os.path.basename(file))
83
+ P12345.fasta
84
+ >>> files = fetch(["P12345", "Q8K9I1"], "fasta", path_to_directory)
85
+ >>> print([os.path.basename(file) for file in files])
86
+ ['P12345.fasta', 'Q8K9I1.fasta']
87
+ """
88
+ # If only a single ID is present,
89
+ # put it into a single element list
90
+ if isinstance(ids, str):
91
+ ids = [ids]
92
+ single_element = True
93
+ else:
94
+ single_element = False
95
+ # Create the target folder, if not existing
96
+ if target_path is not None and not isdir(target_path):
97
+ os.makedirs(target_path)
98
+ files = []
99
+ for i, id in enumerate(ids):
100
+ db_name = _get_database_name(id)
101
+ # Verbose output
102
+ if verbose:
103
+ print(f"Fetching file {i + 1:d} / {len(ids):d} ({id})...", end="\r")
104
+ # Fetch file from database
105
+ if target_path is not None:
106
+ file = join(target_path, id + "." + format)
107
+ else:
108
+ # 'file = None' -> store content in a file-like object
109
+ file = None
110
+ if file is None or not isfile(file) or getsize(file) == 0 or overwrite:
111
+ if format in ["fasta", "gff", "txt", "xml", "rdf", "tab"]:
112
+ r = requests.get(_fetch_url + db_name + "/" + id + "." + format)
113
+ content = r.text
114
+ assert_valid_response(r)
115
+ else:
116
+ raise ValueError(f"Format '{format}' is not supported")
117
+ if file is None:
118
+ file = io.StringIO(content)
119
+ else:
120
+ with open(file, "w+") as f:
121
+ f.write(content)
122
+ files.append(file)
123
+ if verbose:
124
+ print("\nDone")
125
+ # If input was a single ID, return only a single path
126
+ if single_element:
127
+ return files[0]
128
+ else:
129
+ return files
@@ -0,0 +1,293 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite.database.uniprot"
6
+ __author__ = "Maximilian Greil"
7
+ __all__ = ["Query", "SimpleQuery", "CompositeQuery", "search"]
8
+
9
+ import abc
10
+ import requests
11
+ from biotite.database.uniprot.check import assert_valid_response
12
+
13
+ _base_url = "https://rest.uniprot.org/uniprotkb/search/"
14
+
15
+
16
+ class Query(metaclass=abc.ABCMeta):
17
+ """
18
+ Base class for a wrapper around a search term
19
+ for the UniProt search service.
20
+ """
21
+
22
+ def __init__(self):
23
+ pass
24
+
25
+ @abc.abstractmethod
26
+ def __str__(self):
27
+ pass
28
+
29
+ def __or__(self, operand):
30
+ return CompositeQuery("OR", self, operand)
31
+
32
+ def __and__(self, operand):
33
+ return CompositeQuery("AND", self, operand)
34
+
35
+ def __xor__(self, operand):
36
+ return CompositeQuery("NOT", self, operand)
37
+
38
+
39
+ class CompositeQuery(Query):
40
+ """
41
+ A representation of an composite query
42
+ for the UniProt search service.
43
+
44
+ A composite query is a combination of two other queries,
45
+ combined either with an 'AND', 'OR' or 'NOT' operator.
46
+
47
+ Usually the user does not create instances of this class directly,
48
+ but :class:`Query` instances are combined with
49
+ ``|`` (OR), ``&`` (AND) or ``^`` (NOT).
50
+
51
+ Parameters
52
+ ----------
53
+ operator: str, {"AND", "OR", "NOT"}
54
+ The combination operator.
55
+ queries : iterable object of SimpleQuery
56
+ The queries to be combined.
57
+ """
58
+
59
+ def __init__(self, operator, query1, query2):
60
+ super().__init__()
61
+ self._op = operator
62
+ self._q1 = query1
63
+ self._q2 = query2
64
+
65
+ def __str__(self):
66
+ return "{:} {:} {:}".format(str(self._q1), self._op, str(self._q2))
67
+
68
+
69
+ def _check_brackets(term):
70
+ """
71
+ Check if term contains correct number of round brackets and square brackets.
72
+
73
+ Parameters
74
+ ----------
75
+ term: str
76
+ The search term.
77
+
78
+ Returns
79
+ -------
80
+ bool
81
+ True if term contains correct number of round brackets and square brackets, otherwise False.
82
+ """
83
+ square_count = 0
84
+ round_count = 0
85
+ for i in term:
86
+ if i == "[":
87
+ square_count += 1
88
+ elif i == "]":
89
+ square_count -= 1
90
+ if i == "(":
91
+ round_count += 1
92
+ elif i == ")":
93
+ round_count -= 1
94
+ if square_count < 0:
95
+ return False
96
+ if round_count < 0:
97
+ return False
98
+ return square_count == 0 and round_count == 0
99
+
100
+
101
+ class SimpleQuery(Query):
102
+ """
103
+ A simple query for the UniProt search service without
104
+ combination via 'AND', 'OR' or 'NOT'. A query consists of a search
105
+ term and an optional field.
106
+
107
+ A list of available search fields with description can be found
108
+ `here <https://www.uniprot.org/help/query-fields>`_.
109
+
110
+ Parameters
111
+ ----------
112
+ field : str
113
+ The field to search the term in.
114
+ The list of possible fields and the required search term
115
+ formatting can be found
116
+ `here <https://www.uniprot.org/help/query-fields>`_.
117
+ term: str
118
+ The search term.
119
+ """
120
+
121
+ # Field identifiers are taken from
122
+ # https://www.uniprot.org/help/query-fields
123
+ _fields = [
124
+ "accession",
125
+ "active",
126
+ "ft_init_met",
127
+ "ft_signal",
128
+ "ft_transit",
129
+ "ft_propep",
130
+ "ft_chain",
131
+ "ft_peptide",
132
+ "ft_topo_dom",
133
+ "ft_transmem",
134
+ "ft_intramem",
135
+ "ft_domain",
136
+ "ft_repeat",
137
+ "ft_zn_fing",
138
+ "ft_dna_bind",
139
+ "ft_region",
140
+ "ft_coiled",
141
+ "ft_motif",
142
+ "ft_compbias",
143
+ "ft_act_site",
144
+ "ft_binding",
145
+ "ft_site",
146
+ "ft_non_std",
147
+ "ft_mod_res",
148
+ "ft_lipid",
149
+ "ft_carbohyd",
150
+ "ft_disulfid",
151
+ "ft_crosslnk",
152
+ "ft_var_seq",
153
+ "ft_variant",
154
+ "ft_mutagen",
155
+ "ft_unsure",
156
+ "ft_conflict",
157
+ "ft_non_cons",
158
+ "ft_non_ter",
159
+ "ft_helix",
160
+ "ft_turn",
161
+ "ft_strand",
162
+ "lit_author",
163
+ "protein_name",
164
+ "chebi",
165
+ "citation",
166
+ "uniref_cluster_90",
167
+ "xrefcount_pdb",
168
+ "date_created",
169
+ "database",
170
+ "xref",
171
+ "ec",
172
+ "cc_function",
173
+ "cc_catalytic_activity",
174
+ "cc_cofactor",
175
+ "cc_activity_regulation",
176
+ "cc_biophysicochemical_properties",
177
+ "cc_subunit",
178
+ "cc_pathway",
179
+ "cc_scl_term",
180
+ "cc_tissue_specificity",
181
+ "cc_developmental_stage",
182
+ "cc_induction",
183
+ "cc_domain",
184
+ "cc_ptm cc_rna_editing",
185
+ "cc_mass_spectrometry",
186
+ "cc_polymorphism",
187
+ "cc_disease",
188
+ "cc_disruption_phenotype",
189
+ "cc_allergen",
190
+ "cc_toxic_dose",
191
+ "cc_biotechnology",
192
+ "cc_pharmaceutical",
193
+ "cc_miscellaneous",
194
+ "cc_similarity",
195
+ "cc_caution",
196
+ "cc_sequence_caution",
197
+ "existence",
198
+ "family",
199
+ "fragment",
200
+ "gene",
201
+ "gene_exact",
202
+ "go",
203
+ "virus_host_name",
204
+ "virus_host_id",
205
+ "accession_id",
206
+ "inchikey",
207
+ "protein_name",
208
+ "interactor",
209
+ "keyword",
210
+ "length",
211
+ "lineage",
212
+ "mass",
213
+ "cc_mass_spectrometry",
214
+ "date_modified",
215
+ "protein_name",
216
+ "organelle",
217
+ "organism_name",
218
+ "organism_id",
219
+ "plasmid",
220
+ "proteome",
221
+ "proteomecomponent",
222
+ "sec_acc",
223
+ "reviewed",
224
+ "scope",
225
+ "sequence",
226
+ "date_sequence_modified",
227
+ "strain",
228
+ "taxonomy_name",
229
+ "taxonomy_id",
230
+ "tissue",
231
+ "cc_webresource",
232
+ ]
233
+
234
+ def __init__(self, field, term):
235
+ super().__init__()
236
+ if field not in SimpleQuery._fields:
237
+ raise ValueError(f"Unknown field identifier '{field}'")
238
+ if not _check_brackets(term):
239
+ raise ValueError(
240
+ "Query term contains illegal number of round brackets ( ) and/or square brackets [ ]"
241
+ )
242
+ for invalid_string in ['"', "AND", "OR", "NOT", "\t", "\n"]:
243
+ if invalid_string in term:
244
+ raise ValueError(f"Query contains illegal term {invalid_string}")
245
+ if " " in term:
246
+ term = f'"{term}"'
247
+ self._field = field
248
+ self._term = term
249
+
250
+ def __str__(self):
251
+ return f"{self._field}:{self._term}"
252
+
253
+
254
+ def search(query, number=500):
255
+ """
256
+ Get all UniProt IDs that meet the given query requirements,
257
+ via the UniProt search service.
258
+
259
+ This function requires an internet connection.
260
+
261
+ Parameters
262
+ ----------
263
+ query : Query
264
+ The search query.
265
+ number : int
266
+ The maximum number of IDs that are obtained.
267
+ (Default: 500)
268
+
269
+ Returns
270
+ -------
271
+ ids : list of str
272
+ A list of strings containing all UniProt IDs
273
+ that meet the query requirements.
274
+
275
+ Notes
276
+ -----
277
+ A list of available search fields with description can be found
278
+ `here <https://www.uniprot.org/help/query-fields>`_.
279
+
280
+ Examples
281
+ --------
282
+ >>> query = SimpleQuery("accession", "P12345") & \
283
+ SimpleQuery("reviewed", "true")
284
+ >>> ids = search(query)
285
+ >>> print(sorted(ids))
286
+ ['P12345']
287
+ """
288
+
289
+ params = {"query": str(query), "format": "list", "size": str(number)}
290
+ r = requests.get(_base_url, params=params)
291
+ content = r.text
292
+ assert_valid_response(r)
293
+ return content.split("\n")[:-1]
biotite/file.py ADDED
@@ -0,0 +1,232 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = [
8
+ "File",
9
+ "TextFile",
10
+ "InvalidFileError",
11
+ "SerializationError",
12
+ "DeserializationError",
13
+ ]
14
+
15
+ import abc
16
+ import copy
17
+ import io
18
+ from os import PathLike
19
+ from biotite.copyable import Copyable
20
+
21
+
22
+ class File(Copyable, metaclass=abc.ABCMeta):
23
+ """
24
+ Base class for all file classes.
25
+ The constructor creates an empty file, that can be filled with data
26
+ using the class specific setter methods.
27
+ Conversely, the class method :func:`read()` reads a file from disk
28
+ (or a file-like object from other sources).
29
+ In order to write the instance content into a file the
30
+ :func:`write()` method is used.
31
+ """
32
+
33
+ @classmethod
34
+ @abc.abstractmethod
35
+ def read(cls, file):
36
+ """
37
+ Parse a file (or file-like object).
38
+
39
+ Parameters
40
+ ----------
41
+ file : file-like object or str
42
+ The file to be read.
43
+ Alternatively a file path can be supplied.
44
+
45
+ Returns
46
+ -------
47
+ file_object : File
48
+ An instance from the respective :class:`File` subclass
49
+ representing the parsed file.
50
+ """
51
+ pass
52
+
53
+ @abc.abstractmethod
54
+ def write(self, file):
55
+ """
56
+ Write the contents of this :class:`File` object into a file.
57
+
58
+ Parameters
59
+ ----------
60
+ file_name : file-like object or str
61
+ The file to be written to.
62
+ Alternatively a file path can be supplied.
63
+ """
64
+ pass
65
+
66
+
67
+ class TextFile(File, metaclass=abc.ABCMeta):
68
+ """
69
+ Base class for all line based text files.
70
+ When reading a file, the text content is saved as list of strings,
71
+ one for each line.
72
+ When writing a file, this list is written into the file.
73
+
74
+ Attributes
75
+ ----------
76
+ lines : list
77
+ List of string representing the lines in the text file.
78
+ PROTECTED: Do not modify from outside.
79
+ """
80
+
81
+ def __init__(self):
82
+ super().__init__()
83
+ self.lines = []
84
+
85
+ @classmethod
86
+ def read(cls, file, *args, **kwargs):
87
+ # File name
88
+ if is_open_compatible(file):
89
+ with open(file, "r") as f:
90
+ lines = f.read().splitlines()
91
+ # File object
92
+ else:
93
+ if not is_text(file):
94
+ raise TypeError("A file opened in 'text' mode is required")
95
+ lines = file.read().splitlines()
96
+ file_object = cls(*args, **kwargs)
97
+ file_object.lines = lines
98
+ return file_object
99
+
100
+ @staticmethod
101
+ def read_iter(file):
102
+ """
103
+ Create an iterator over each line of the given text file.
104
+
105
+ Parameters
106
+ ----------
107
+ file : file-like object or str
108
+ The file to be read.
109
+ Alternatively a file path can be supplied.
110
+
111
+ Yields
112
+ ------
113
+ line : str
114
+ The current line in the file.
115
+ """
116
+ # File name
117
+ if is_open_compatible(file):
118
+ with open(file, "r") as f:
119
+ yield from f
120
+ # File object
121
+ else:
122
+ if not is_text(file):
123
+ raise TypeError("A file opened in 'text' mode is required")
124
+ yield from file
125
+
126
+ def write(self, file):
127
+ """
128
+ Write the contents of this object into a file
129
+ (or file-like object).
130
+
131
+ Parameters
132
+ ----------
133
+ file : file-like object or str
134
+ The file to be written to.
135
+ Alternatively a file path can be supplied.
136
+ """
137
+ if is_open_compatible(file):
138
+ with open(file, "w") as f:
139
+ f.write("\n".join(self.lines) + "\n")
140
+ else:
141
+ if not is_text(file):
142
+ raise TypeError("A file opened in 'text' mode is required")
143
+ file.write("\n".join(self.lines) + "\n")
144
+
145
+ @staticmethod
146
+ def write_iter(file, lines):
147
+ """
148
+ Iterate over the given `lines` of text and write each line into
149
+ the specified `file`.
150
+
151
+ In contrast to :meth:`write()`, each line of text is not stored
152
+ in an intermediate :class:`TextFile`, but is directly written
153
+ to the file.
154
+ Hence, this static method may save a large amount of memory if
155
+ a large file should be written, especially if the `lines`
156
+ are provided as generator.
157
+
158
+ Parameters
159
+ ----------
160
+ file : file-like object or str
161
+ The file to be written to.
162
+ Alternatively a file path can be supplied.
163
+ lines : generator or array-like of str
164
+ The lines of text to be written.
165
+ Must not include line break characters.
166
+ """
167
+ if is_open_compatible(file):
168
+ with open(file, "w") as f:
169
+ for line in lines:
170
+ f.write(line + "\n")
171
+ else:
172
+ if not is_text(file):
173
+ raise TypeError("A file opened in 'text' mode is required")
174
+ for line in lines:
175
+ file.write(line + "\n")
176
+
177
+ def __copy_fill__(self, clone):
178
+ super().__copy_fill__(clone)
179
+ clone.lines = copy.copy(self.lines)
180
+
181
+ def __str__(self):
182
+ return "\n".join(self.lines)
183
+
184
+
185
+ class InvalidFileError(Exception):
186
+ """
187
+ Indicates that the file is not suitable for the requested action,
188
+ either because the file does not contain the required data or
189
+ because the file is malformed.
190
+ """
191
+
192
+ pass
193
+
194
+
195
+ class SerializationError(Exception):
196
+ pass
197
+
198
+
199
+ class DeserializationError(Exception):
200
+ pass
201
+
202
+
203
+ def wrap_string(text, width):
204
+ """
205
+ A much simpler and hence much more efficient version of
206
+ `textwrap.wrap()`.
207
+
208
+ This function simply wraps the given `text` after `width`
209
+ characters, ignoring sentences, whitespaces, etc.
210
+ """
211
+ lines = []
212
+ for i in range(0, len(text), width):
213
+ lines.append(text[i : i + width])
214
+ return lines
215
+
216
+
217
+ def is_binary(file):
218
+ if isinstance(file, io.BufferedIOBase):
219
+ return True
220
+ # for file wrappers, e.g. 'TemporaryFile'
221
+ return hasattr(file, "file") and isinstance(file.file, io.BufferedIOBase)
222
+
223
+
224
+ def is_text(file):
225
+ if isinstance(file, io.TextIOBase):
226
+ return True
227
+ # for file wrappers, e.g. 'TemporaryFile'
228
+ return hasattr(file, "file") and isinstance(file.file, io.TextIOBase)
229
+
230
+
231
+ def is_open_compatible(file):
232
+ return isinstance(file, (str, bytes, PathLike))