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
biotite/version.py ADDED
@@ -0,0 +1,16 @@
1
+ # file generated by setuptools_scm
2
+ # don't change, don't track in version control
3
+ TYPE_CHECKING = False
4
+ if TYPE_CHECKING:
5
+ from typing import Tuple, Union
6
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
7
+ else:
8
+ VERSION_TUPLE = object
9
+
10
+ version: str
11
+ __version__: str
12
+ __version_tuple__: VERSION_TUPLE
13
+ version_tuple: VERSION_TUPLE
14
+
15
+ __version__ = version = '1.1.0'
16
+ __version_tuple__ = version_tuple = (1, 1, 0)
biotite/visualize.py ADDED
@@ -0,0 +1,265 @@
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__ = ["colors", "set_font_size_in_coord", "AdaptiveFancyArrow"]
8
+
9
+ from collections import OrderedDict
10
+ import numpy as np
11
+ from numpy.linalg import norm
12
+
13
+ # Biotite themed colors
14
+ colors = OrderedDict(
15
+ [
16
+ ("brightorange", "#ffb569ff"),
17
+ ("lightorange", "#ff982dff"),
18
+ ("orange", "#ff8405ff"),
19
+ ("dimorange", "#dc7000ff"),
20
+ ("darkorange", "#b45c00ff"),
21
+ ("brightgreen", "#98e97fff"),
22
+ ("lightgreen", "#6fe04cff"),
23
+ ("green", "#52da2aff"),
24
+ ("dimgreen", "#45bc20ff"),
25
+ ("darkgreen", "#389a1aff"),
26
+ ]
27
+ )
28
+
29
+
30
+ def set_font_size_in_coord(text, width=None, height=None, mode="unlocked"):
31
+ """
32
+ Specifiy the font size of an existing `Text` object in coordinates
33
+ of the object's reference coordiante system.
34
+
35
+ Instead of having the font size fixed in 'pt', the size of the text
36
+ scales to the specied width/height and adapts to changes in the
37
+ plot's width/height.
38
+ The scaling can be proportional or non-proportional, depending
39
+ the `mode`.
40
+
41
+ Parameters
42
+ ----------
43
+ text : Text:
44
+ The matplotlib `Text` to be scaled.
45
+ width, height : float, optional
46
+ The new width/height of `text` in its
47
+ reference coordinate system.
48
+ At least one value must be supplied.
49
+ mode : {'proportional', 'unlocked', 'maximum', 'minimum'}, optional
50
+ The scaling mode:
51
+
52
+ - *proportional* - The width and height are scaled by the
53
+ same extent.
54
+ Either `width` or `height` must be set for this mode.
55
+ - *unlocked* - The width and the height are scaled by
56
+ different extents, changing the aspect ratio.
57
+ Both `width` and `height` must be set for this mode.
58
+ - *maximum* - The width and the height are scaled by
59
+ the same extent, so that they are at maximum as large
60
+ as the supplied `width`/`height`.
61
+ Both `width` and `height` must be set for this mode.
62
+ - *minimum* - The width and the height are scaled by
63
+ the same extent, so that they are at minimum as large
64
+ as the supplied `width`/`height`.
65
+ Both `width` and `height` must be set for this mode.
66
+
67
+ Notes
68
+ -----
69
+ This function uses the :func:`get_window_extent()` method of the
70
+ :class:`Text` object.
71
+ According to experience, this function does not give the the exact
72
+ visual boundaries of the text.
73
+ Consequently, the scaled text might be slightly smaller or larger
74
+ than the specified width/height.
75
+ This behavior is not equal for all initial font sizes (in 'pt'),
76
+ the boundaries for an initial size of 1 'pt' seem to be most exact.
77
+ """
78
+ from matplotlib.patheffects import AbstractPathEffect
79
+ from matplotlib.transforms import Affine2D, Bbox
80
+
81
+ class TextScaler(AbstractPathEffect):
82
+ def __init__(self, text, width, height, mode):
83
+ self._text = text
84
+ self._mode = mode
85
+ self._width = width
86
+ self._height = height
87
+
88
+ def draw_path(self, renderer, gc, tpath, affine, rgbFace=None): # noqa: N803
89
+ ax = self._text.axes
90
+ try:
91
+ renderer = ax.get_figure().canvas.get_renderer()
92
+ except Exception:
93
+ # Use cached renderer for backends, where
94
+ # `get_renderer()` is not available
95
+ # Based on the strategy from `Text.get_window_extent()`
96
+ renderer = ax.get_figure()._cachedRenderer
97
+ if renderer is None:
98
+ raise
99
+ bbox = text.get_window_extent(renderer)
100
+ bbox = Bbox(ax.transData.inverted().transform(bbox))
101
+
102
+ if self._mode == "proportional":
103
+ if self._width is None:
104
+ # Proportional scaling based on height
105
+ scale_y = self._height / bbox.height
106
+ scale_x = scale_y
107
+ elif self._height is None:
108
+ # Proportional scaling based on width
109
+ scale_x = self._width / bbox.width
110
+ scale_y = scale_x
111
+ elif self._mode == "unlocked":
112
+ scale_x = self._width / bbox.width
113
+ scale_y = self._height / bbox.height
114
+ elif self._mode == "minimum":
115
+ scale_x = self._width / bbox.width
116
+ scale_y = self._height / bbox.height
117
+ scale = max(scale_x, scale_y)
118
+ scale_x, scale_y = scale, scale
119
+ elif self._mode == "maximum":
120
+ scale_x = self._width / bbox.width
121
+ scale_y = self._height / bbox.height
122
+ scale = min(scale_x, scale_y)
123
+ scale_x, scale_y = scale, scale
124
+
125
+ affine = Affine2D().scale(scale_x, scale_y) + affine
126
+ renderer.draw_path(gc, tpath, affine, rgbFace)
127
+
128
+ if mode in ["unlocked", "minimum", "maximum"]:
129
+ if width is None or height is None:
130
+ raise TypeError(f"Width and height must be set in '{mode}' mode")
131
+ elif mode == "proportional":
132
+ if not (width is None and height is not None) or not (
133
+ height is None and width is not None
134
+ ):
135
+ raise TypeError(f"Either width or height must be set in '{mode}' mode")
136
+ else:
137
+ raise ValueError(f"Unknown mode '{mode}'")
138
+ text.set_path_effects([TextScaler(text, width, height, mode)])
139
+
140
+
141
+ try:
142
+ # Only create this class when matplotlib is installed
143
+ from matplotlib.patches import FancyArrow
144
+ from matplotlib.transforms import Bbox
145
+
146
+ class AdaptiveFancyArrow(FancyArrow):
147
+ """
148
+ A `FancyArrow` with fixed head shape.
149
+
150
+ The length of the head is proportional to the width of the head
151
+ in display coordinates.
152
+ If the head length is longer than the length of the entire
153
+ arrow, the head length is limited to the arrow length.
154
+
155
+ Parameters
156
+ ----------
157
+ x,y : float
158
+ The arrow's start position.
159
+ dx, dy : float
160
+ The arrow's direction vector, inclduing the arrow head.
161
+ tail_width, head_width : float
162
+ The width of the arrow's tail and head in its reference
163
+ coordinate system
164
+ head_ratio : float, optional
165
+ The length of the arrow head as faction of the arrow width
166
+ (display coordinates).
167
+ draw_head: bool, optional
168
+ If false, the arrow has no head. The result is a rectangle.
169
+ shape : str, optional
170
+ The `shape` parameter in the constructor of `FancyArrow`.
171
+ **kwargs
172
+ Other parameters that are used in the constructor of
173
+ `FancyArrow`.
174
+ """
175
+
176
+ def __init__(
177
+ self,
178
+ x,
179
+ y,
180
+ dx,
181
+ dy,
182
+ tail_width,
183
+ head_width,
184
+ head_ratio,
185
+ draw_head=True,
186
+ shape="full",
187
+ **kwargs,
188
+ ):
189
+ self._x = x
190
+ self._y = y
191
+ self._dx = dx
192
+ self._dy = dy
193
+ self._tail_width = tail_width
194
+ self._head_width = head_width
195
+ self._head_ratio = head_ratio
196
+ self._draw_head = draw_head
197
+ self._shape = shape
198
+ self._kwargs = kwargs
199
+ if not draw_head:
200
+ head_width = tail_width
201
+ super().__init__(
202
+ x,
203
+ y,
204
+ dx,
205
+ dy,
206
+ width=tail_width,
207
+ head_width=head_width,
208
+ overhang=0,
209
+ shape=shape,
210
+ length_includes_head=True,
211
+ **kwargs,
212
+ )
213
+
214
+ def draw(self, renderer):
215
+ arrow_box = Bbox([(0, 0), (0, self._head_width)])
216
+ arrow_box_display = self.axes.transData.transform_bbox(arrow_box)
217
+ head_length_display = np.abs(arrow_box_display.height * self._head_ratio)
218
+ arrow_box_display.x1 = arrow_box_display.x0 + head_length_display
219
+ # Transfrom back to data coordinates for plotting
220
+ arrow_box = self.axes.transData.inverted().transform_bbox(arrow_box_display)
221
+ head_length = arrow_box.width
222
+ arrow_length = norm((self._dx, self._dy))
223
+ if head_length > arrow_length:
224
+ # If the head would be longer than the entire arrow,
225
+ # only draw the arrow head with reduced length
226
+ head_length = arrow_length
227
+ if not self._draw_head:
228
+ head_length = 0
229
+
230
+ # Renew the arrow's properties
231
+ super().__init__(
232
+ self._x,
233
+ self._y,
234
+ self._dx,
235
+ self._dy,
236
+ width=self._tail_width,
237
+ head_width=self._head_width,
238
+ overhang=0,
239
+ shape=self._shape,
240
+ head_length=head_length,
241
+ length_includes_head=True,
242
+ axes=self.axes,
243
+ transform=self.get_transform(),
244
+ **self._kwargs,
245
+ )
246
+ self.set_clip_path(self.axes.patch)
247
+ super().draw(renderer)
248
+
249
+ # Override to replace docstring
250
+ # Removes warning:
251
+ # unknown document: /tutorials/intermediate/constrainedlayout_guide
252
+ def get_in_layout(self):
253
+ """ """
254
+ return super().get_in_layout()
255
+
256
+ def set_in_layout(self, in_layout):
257
+ """ """
258
+ return super().set_in_layout(in_layout)
259
+
260
+ except ImportError:
261
+ # Dummy class that propagates a meaningful error,
262
+ # i.e. that Matplotlib is not installed
263
+ class AdaptiveFancyArrow:
264
+ def __init__(*args, **kwargs):
265
+ raise ModuleNotFoundError("No module named 'matplotlib'")
@@ -0,0 +1,190 @@
1
+ Metadata-Version: 2.3
2
+ Name: biotite
3
+ Version: 1.1.0
4
+ Summary: A comprehensive library for computational molecular biology
5
+ Project-URL: homepage, https://www.biotite-python.org
6
+ Project-URL: repository, https://github.com/biotite-dev/biotite
7
+ Project-URL: documentation, https://www.biotite-python.org
8
+ Author: The Biotite contributors
9
+ License: BSD 3-Clause License
10
+ --------------------
11
+
12
+ Copyright 2017, The Biotite contributors
13
+ All rights reserved.
14
+
15
+ Redistribution and use in source and binary forms, with or without modification,
16
+ are permitted provided that the following conditions are met:
17
+
18
+ 1. Redistributions of source code must retain the above copyright notice, this
19
+ list of conditions and the following disclaimer.
20
+
21
+ 2. Redistributions in binary form must reproduce the above copyright notice,
22
+ this list of conditions and the following disclaimer in the documentation and/or
23
+ other materials provided with the distribution.
24
+
25
+ 3. Neither the name of the copyright holder nor the names of its contributors
26
+ may be used to endorse or promote products derived from this software without
27
+ specific prior written permission.
28
+
29
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
30
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
32
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
33
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
36
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
+ License-File: LICENSE.rst
40
+ Classifier: Development Status :: 5 - Production/Stable
41
+ Classifier: Intended Audience :: Developers
42
+ Classifier: Intended Audience :: Science/Research
43
+ Classifier: License :: OSI Approved :: BSD License
44
+ Classifier: Natural Language :: English
45
+ Classifier: Operating System :: MacOS
46
+ Classifier: Operating System :: Microsoft :: Windows
47
+ Classifier: Operating System :: POSIX :: Linux
48
+ Classifier: Programming Language :: Python :: 3
49
+ Classifier: Programming Language :: Python :: Implementation :: CPython
50
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
51
+ Requires-Python: >=3.10
52
+ Requires-Dist: biotraj<2.0,>=1.0
53
+ Requires-Dist: msgpack>=0.5.6
54
+ Requires-Dist: networkx>=2.0
55
+ Requires-Dist: numpy>=1.25
56
+ Requires-Dist: requests>=2.12
57
+ Provides-Extra: lint
58
+ Requires-Dist: ruff==0.6.9; extra == 'lint'
59
+ Provides-Extra: test
60
+ Requires-Dist: pytest; extra == 'test'
61
+ Requires-Dist: pytest-codspeed; extra == 'test'
62
+ Description-Content-Type: text/x-rst
63
+
64
+ .. image:: https://img.shields.io/pypi/v/biotite.svg
65
+ :target: https://pypi.python.org/pypi/biotite
66
+ :alt: Biotite at PyPI
67
+ .. image:: https://img.shields.io/pypi/pyversions/biotite.svg
68
+ :alt: Python version
69
+ .. image:: https://github.com/biotite-dev/biotite/actions/workflows/test_and_deploy.yml/badge.svg
70
+ :target: https://github.com/biotite-dev/biotite/actions/workflows/test_and_deploy.yml
71
+ :alt: Test status
72
+
73
+ .. image:: https://www.biotite-python.org/_static/assets/general/biotite_logo_m.png
74
+ :alt: The Biotite Project
75
+
76
+ Biotite project
77
+ ===============
78
+
79
+ *Biotite* is your Swiss army knife for bioinformatics.
80
+ Whether you want to identify homologous sequence regions in a protein family
81
+ or you would like to find disulfide bonds in a protein structure: *Biotite*
82
+ has the right tool for you.
83
+ This package bundles popular tasks in computational molecular biology
84
+ into a uniform *Python* library.
85
+ It can handle a major part of the typical workflow
86
+ for sequence and biomolecular structure data:
87
+
88
+ - Searching and fetching data from biological databases
89
+ - Reading and writing popular sequence/structure file formats
90
+ - Analyzing and editing sequence/structure data
91
+ - Visualizing sequence/structure data
92
+ - Interfacing external applications for further analysis
93
+
94
+ *Biotite* internally stores most of the data as *NumPy* `ndarray` objects,
95
+ enabling
96
+
97
+ - fast C-accelerated analysis,
98
+ - intuitive usability through *NumPy*-like indexing syntax,
99
+ - extensibility through direct access of the internal *NumPy* arrays.
100
+
101
+ As a result the user can skip writing code for basic functionality (like
102
+ file parsers) and can focus on what their code makes unique - from
103
+ small analysis scripts to entire bioinformatics software packages.
104
+
105
+ If you use *Biotite* in a scientific publication, please cite:
106
+
107
+ | Kunzmann, P. & Hamacher, K. BMC Bioinformatics (2018) 19:346.
108
+ | `<https://doi.org/10.1186/s12859-018-2367-z>`_
109
+
110
+
111
+ Installation
112
+ ------------
113
+
114
+ *Biotite* requires the following packages:
115
+
116
+ - **numpy**
117
+ - **requests**
118
+ - **msgpack**
119
+ - **networkx**
120
+
121
+ Some functions require some extra packages:
122
+
123
+ - **matplotlib** - Required for plotting purposes.
124
+
125
+ *Biotite* can be installed via *Conda*...
126
+
127
+ .. code-block:: console
128
+
129
+ $ conda install -c conda-forge biotite
130
+
131
+ ... or *pip*
132
+
133
+ .. code-block:: console
134
+
135
+ $ pip install biotite
136
+
137
+
138
+ Usage
139
+ -----
140
+
141
+ Here is a small example that downloads two protein sequences from the
142
+ *NCBI Entrez* database and aligns them:
143
+
144
+ .. code-block:: python
145
+
146
+ import biotite.sequence.align as align
147
+ import biotite.sequence.io.fasta as fasta
148
+ import biotite.database.entrez as entrez
149
+
150
+ # Download FASTA file for the sequences of avidin and streptavidin
151
+ file_name = entrez.fetch_single_file(
152
+ uids=["CAC34569", "ACL82594"], file_name="sequences.fasta",
153
+ db_name="protein", ret_type="fasta"
154
+ )
155
+
156
+ # Parse the downloaded FASTA file
157
+ # and create 'ProteinSequence' objects from it
158
+ fasta_file = fasta.FastaFile.read(file_name)
159
+ avidin_seq, streptavidin_seq = fasta.get_sequences(fasta_file).values()
160
+
161
+ # Align sequences using the BLOSUM62 matrix with affine gap penalty
162
+ matrix = align.SubstitutionMatrix.std_protein_matrix()
163
+ alignments = align.align_optimal(
164
+ avidin_seq, streptavidin_seq, matrix,
165
+ gap_penalty=(-10, -1), terminal_penalty=False
166
+ )
167
+ print(alignments[0])
168
+
169
+ .. code-block::
170
+
171
+ MVHATSPLLLLLLLSLALVAPGLSAR------KCSLTGKWDNDLGSNMTIGAVNSKGEFTGTYTTAV-TA
172
+ -------------------DPSKESKAQAAVAEAGITGTWYNQLGSTFIVTA-NPDGSLTGTYESAVGNA
173
+
174
+ TSNEIKESPLHGTQNTINKRTQPTFGFTVNWKFS----ESTTVFTGQCFIDRNGKEV-LKTMWLLRSSVN
175
+ ESRYVLTGRYDSTPATDGSGT--ALGWTVAWKNNYRNAHSATTWSGQYV---GGAEARINTQWLLTSGTT
176
+
177
+ DIGDDWKATRVGINIFTRLRTQKE---------------------
178
+ -AANAWKSTLVGHDTFTKVKPSAASIDAAKKAGVNNGNPLDAVQQ
179
+
180
+ More documentation, including a tutorial, an example gallery and the API
181
+ reference is available at `<https://www.biotite-python.org/>`_.
182
+
183
+
184
+ Contribution
185
+ ------------
186
+
187
+ Interested in improving *Biotite*?
188
+ Have a look at the
189
+ `contribution guidelines <https://www.biotite-python.org/contribute.html>`_.
190
+ Feel free to join our community chat on `Discord <https://discord.gg/cUjDguF>`_.