biotite 1.5.0__cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_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 (354) 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 +216 -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 +447 -0
  22. biotite/application/tantan/__init__.py +12 -0
  23. biotite/application/tantan/app.py +199 -0
  24. biotite/application/util.py +77 -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 +208 -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/afdb/__init__.py +12 -0
  34. biotite/database/afdb/download.py +197 -0
  35. biotite/database/entrez/__init__.py +15 -0
  36. biotite/database/entrez/check.py +60 -0
  37. biotite/database/entrez/dbnames.py +101 -0
  38. biotite/database/entrez/download.py +228 -0
  39. biotite/database/entrez/key.py +44 -0
  40. biotite/database/entrez/query.py +263 -0
  41. biotite/database/error.py +16 -0
  42. biotite/database/pubchem/__init__.py +21 -0
  43. biotite/database/pubchem/download.py +258 -0
  44. biotite/database/pubchem/error.py +30 -0
  45. biotite/database/pubchem/query.py +819 -0
  46. biotite/database/pubchem/throttle.py +98 -0
  47. biotite/database/rcsb/__init__.py +13 -0
  48. biotite/database/rcsb/download.py +161 -0
  49. biotite/database/rcsb/query.py +963 -0
  50. biotite/database/uniprot/__init__.py +13 -0
  51. biotite/database/uniprot/check.py +40 -0
  52. biotite/database/uniprot/download.py +126 -0
  53. biotite/database/uniprot/query.py +292 -0
  54. biotite/file.py +244 -0
  55. biotite/interface/__init__.py +19 -0
  56. biotite/interface/openmm/__init__.py +20 -0
  57. biotite/interface/openmm/state.py +93 -0
  58. biotite/interface/openmm/system.py +227 -0
  59. biotite/interface/pymol/__init__.py +201 -0
  60. biotite/interface/pymol/cgo.py +346 -0
  61. biotite/interface/pymol/convert.py +185 -0
  62. biotite/interface/pymol/display.py +267 -0
  63. biotite/interface/pymol/object.py +1228 -0
  64. biotite/interface/pymol/shapes.py +178 -0
  65. biotite/interface/pymol/startup.py +169 -0
  66. biotite/interface/rdkit/__init__.py +19 -0
  67. biotite/interface/rdkit/mol.py +490 -0
  68. biotite/interface/version.py +94 -0
  69. biotite/interface/warning.py +19 -0
  70. biotite/sequence/__init__.py +84 -0
  71. biotite/sequence/align/__init__.py +199 -0
  72. biotite/sequence/align/alignment.py +702 -0
  73. biotite/sequence/align/banded.cpython-313-x86_64-linux-gnu.so +0 -0
  74. biotite/sequence/align/banded.pyx +652 -0
  75. biotite/sequence/align/buckets.py +71 -0
  76. biotite/sequence/align/cigar.py +425 -0
  77. biotite/sequence/align/kmeralphabet.cpython-313-x86_64-linux-gnu.so +0 -0
  78. biotite/sequence/align/kmeralphabet.pyx +595 -0
  79. biotite/sequence/align/kmersimilarity.cpython-313-x86_64-linux-gnu.so +0 -0
  80. biotite/sequence/align/kmersimilarity.pyx +233 -0
  81. biotite/sequence/align/kmertable.cpython-313-x86_64-linux-gnu.so +0 -0
  82. biotite/sequence/align/kmertable.pyx +3411 -0
  83. biotite/sequence/align/localgapped.cpython-313-x86_64-linux-gnu.so +0 -0
  84. biotite/sequence/align/localgapped.pyx +892 -0
  85. biotite/sequence/align/localungapped.cpython-313-x86_64-linux-gnu.so +0 -0
  86. biotite/sequence/align/localungapped.pyx +279 -0
  87. biotite/sequence/align/matrix.py +631 -0
  88. biotite/sequence/align/matrix_data/3Di.mat +24 -0
  89. biotite/sequence/align/matrix_data/BLOSUM100.mat +31 -0
  90. biotite/sequence/align/matrix_data/BLOSUM30.mat +31 -0
  91. biotite/sequence/align/matrix_data/BLOSUM35.mat +31 -0
  92. biotite/sequence/align/matrix_data/BLOSUM40.mat +31 -0
  93. biotite/sequence/align/matrix_data/BLOSUM45.mat +31 -0
  94. biotite/sequence/align/matrix_data/BLOSUM50.mat +31 -0
  95. biotite/sequence/align/matrix_data/BLOSUM50_13p.mat +25 -0
  96. biotite/sequence/align/matrix_data/BLOSUM50_14.3.mat +25 -0
  97. biotite/sequence/align/matrix_data/BLOSUM50_5.0.mat +25 -0
  98. biotite/sequence/align/matrix_data/BLOSUM55.mat +31 -0
  99. biotite/sequence/align/matrix_data/BLOSUM60.mat +31 -0
  100. biotite/sequence/align/matrix_data/BLOSUM62.mat +31 -0
  101. biotite/sequence/align/matrix_data/BLOSUM62_13p.mat +25 -0
  102. biotite/sequence/align/matrix_data/BLOSUM62_14.3.mat +25 -0
  103. biotite/sequence/align/matrix_data/BLOSUM62_5.0.mat +25 -0
  104. biotite/sequence/align/matrix_data/BLOSUM65.mat +31 -0
  105. biotite/sequence/align/matrix_data/BLOSUM70.mat +31 -0
  106. biotite/sequence/align/matrix_data/BLOSUM75.mat +31 -0
  107. biotite/sequence/align/matrix_data/BLOSUM80.mat +31 -0
  108. biotite/sequence/align/matrix_data/BLOSUM85.mat +31 -0
  109. biotite/sequence/align/matrix_data/BLOSUM90.mat +31 -0
  110. biotite/sequence/align/matrix_data/BLOSUMN.mat +31 -0
  111. biotite/sequence/align/matrix_data/CorBLOSUM49_5.0.mat +25 -0
  112. biotite/sequence/align/matrix_data/CorBLOSUM57_13p.mat +25 -0
  113. biotite/sequence/align/matrix_data/CorBLOSUM57_14.3.mat +25 -0
  114. biotite/sequence/align/matrix_data/CorBLOSUM61_5.0.mat +25 -0
  115. biotite/sequence/align/matrix_data/CorBLOSUM66_13p.mat +25 -0
  116. biotite/sequence/align/matrix_data/CorBLOSUM67_14.3.mat +25 -0
  117. biotite/sequence/align/matrix_data/DAYHOFF.mat +32 -0
  118. biotite/sequence/align/matrix_data/GONNET.mat +26 -0
  119. biotite/sequence/align/matrix_data/IDENTITY.mat +25 -0
  120. biotite/sequence/align/matrix_data/MATCH.mat +25 -0
  121. biotite/sequence/align/matrix_data/NUC.mat +25 -0
  122. biotite/sequence/align/matrix_data/PAM10.mat +34 -0
  123. biotite/sequence/align/matrix_data/PAM100.mat +34 -0
  124. biotite/sequence/align/matrix_data/PAM110.mat +34 -0
  125. biotite/sequence/align/matrix_data/PAM120.mat +34 -0
  126. biotite/sequence/align/matrix_data/PAM130.mat +34 -0
  127. biotite/sequence/align/matrix_data/PAM140.mat +34 -0
  128. biotite/sequence/align/matrix_data/PAM150.mat +34 -0
  129. biotite/sequence/align/matrix_data/PAM160.mat +34 -0
  130. biotite/sequence/align/matrix_data/PAM170.mat +34 -0
  131. biotite/sequence/align/matrix_data/PAM180.mat +34 -0
  132. biotite/sequence/align/matrix_data/PAM190.mat +34 -0
  133. biotite/sequence/align/matrix_data/PAM20.mat +34 -0
  134. biotite/sequence/align/matrix_data/PAM200.mat +34 -0
  135. biotite/sequence/align/matrix_data/PAM210.mat +34 -0
  136. biotite/sequence/align/matrix_data/PAM220.mat +34 -0
  137. biotite/sequence/align/matrix_data/PAM230.mat +34 -0
  138. biotite/sequence/align/matrix_data/PAM240.mat +34 -0
  139. biotite/sequence/align/matrix_data/PAM250.mat +34 -0
  140. biotite/sequence/align/matrix_data/PAM260.mat +34 -0
  141. biotite/sequence/align/matrix_data/PAM270.mat +34 -0
  142. biotite/sequence/align/matrix_data/PAM280.mat +34 -0
  143. biotite/sequence/align/matrix_data/PAM290.mat +34 -0
  144. biotite/sequence/align/matrix_data/PAM30.mat +34 -0
  145. biotite/sequence/align/matrix_data/PAM300.mat +34 -0
  146. biotite/sequence/align/matrix_data/PAM310.mat +34 -0
  147. biotite/sequence/align/matrix_data/PAM320.mat +34 -0
  148. biotite/sequence/align/matrix_data/PAM330.mat +34 -0
  149. biotite/sequence/align/matrix_data/PAM340.mat +34 -0
  150. biotite/sequence/align/matrix_data/PAM350.mat +34 -0
  151. biotite/sequence/align/matrix_data/PAM360.mat +34 -0
  152. biotite/sequence/align/matrix_data/PAM370.mat +34 -0
  153. biotite/sequence/align/matrix_data/PAM380.mat +34 -0
  154. biotite/sequence/align/matrix_data/PAM390.mat +34 -0
  155. biotite/sequence/align/matrix_data/PAM40.mat +34 -0
  156. biotite/sequence/align/matrix_data/PAM400.mat +34 -0
  157. biotite/sequence/align/matrix_data/PAM410.mat +34 -0
  158. biotite/sequence/align/matrix_data/PAM420.mat +34 -0
  159. biotite/sequence/align/matrix_data/PAM430.mat +34 -0
  160. biotite/sequence/align/matrix_data/PAM440.mat +34 -0
  161. biotite/sequence/align/matrix_data/PAM450.mat +34 -0
  162. biotite/sequence/align/matrix_data/PAM460.mat +34 -0
  163. biotite/sequence/align/matrix_data/PAM470.mat +34 -0
  164. biotite/sequence/align/matrix_data/PAM480.mat +34 -0
  165. biotite/sequence/align/matrix_data/PAM490.mat +34 -0
  166. biotite/sequence/align/matrix_data/PAM50.mat +34 -0
  167. biotite/sequence/align/matrix_data/PAM500.mat +34 -0
  168. biotite/sequence/align/matrix_data/PAM60.mat +34 -0
  169. biotite/sequence/align/matrix_data/PAM70.mat +34 -0
  170. biotite/sequence/align/matrix_data/PAM80.mat +34 -0
  171. biotite/sequence/align/matrix_data/PAM90.mat +34 -0
  172. biotite/sequence/align/matrix_data/PB.license +21 -0
  173. biotite/sequence/align/matrix_data/PB.mat +18 -0
  174. biotite/sequence/align/matrix_data/RBLOSUM52_5.0.mat +25 -0
  175. biotite/sequence/align/matrix_data/RBLOSUM59_13p.mat +25 -0
  176. biotite/sequence/align/matrix_data/RBLOSUM59_14.3.mat +25 -0
  177. biotite/sequence/align/matrix_data/RBLOSUM64_5.0.mat +25 -0
  178. biotite/sequence/align/matrix_data/RBLOSUM69_13p.mat +25 -0
  179. biotite/sequence/align/matrix_data/RBLOSUM69_14.3.mat +25 -0
  180. biotite/sequence/align/multiple.cpython-313-x86_64-linux-gnu.so +0 -0
  181. biotite/sequence/align/multiple.pyx +619 -0
  182. biotite/sequence/align/pairwise.cpython-313-x86_64-linux-gnu.so +0 -0
  183. biotite/sequence/align/pairwise.pyx +585 -0
  184. biotite/sequence/align/permutation.cpython-313-x86_64-linux-gnu.so +0 -0
  185. biotite/sequence/align/permutation.pyx +313 -0
  186. biotite/sequence/align/primes.txt +821 -0
  187. biotite/sequence/align/selector.cpython-313-x86_64-linux-gnu.so +0 -0
  188. biotite/sequence/align/selector.pyx +954 -0
  189. biotite/sequence/align/statistics.py +264 -0
  190. biotite/sequence/align/tracetable.cpython-313-x86_64-linux-gnu.so +0 -0
  191. biotite/sequence/align/tracetable.pxd +64 -0
  192. biotite/sequence/align/tracetable.pyx +370 -0
  193. biotite/sequence/alphabet.py +555 -0
  194. biotite/sequence/annotation.py +836 -0
  195. biotite/sequence/codec.cpython-313-x86_64-linux-gnu.so +0 -0
  196. biotite/sequence/codec.pyx +155 -0
  197. biotite/sequence/codon.py +476 -0
  198. biotite/sequence/codon_tables.txt +202 -0
  199. biotite/sequence/graphics/__init__.py +33 -0
  200. biotite/sequence/graphics/alignment.py +1101 -0
  201. biotite/sequence/graphics/color_schemes/3di_flower.json +48 -0
  202. biotite/sequence/graphics/color_schemes/autumn.json +51 -0
  203. biotite/sequence/graphics/color_schemes/blossom.json +51 -0
  204. biotite/sequence/graphics/color_schemes/clustalx_dna.json +11 -0
  205. biotite/sequence/graphics/color_schemes/clustalx_protein.json +28 -0
  206. biotite/sequence/graphics/color_schemes/flower.json +51 -0
  207. biotite/sequence/graphics/color_schemes/jalview_buried.json +31 -0
  208. biotite/sequence/graphics/color_schemes/jalview_hydrophobicity.json +31 -0
  209. biotite/sequence/graphics/color_schemes/jalview_prop_helix.json +31 -0
  210. biotite/sequence/graphics/color_schemes/jalview_prop_strand.json +31 -0
  211. biotite/sequence/graphics/color_schemes/jalview_prop_turn.json +31 -0
  212. biotite/sequence/graphics/color_schemes/jalview_taylor.json +28 -0
  213. biotite/sequence/graphics/color_schemes/jalview_zappo.json +28 -0
  214. biotite/sequence/graphics/color_schemes/ocean.json +51 -0
  215. biotite/sequence/graphics/color_schemes/pb_flower.json +40 -0
  216. biotite/sequence/graphics/color_schemes/rainbow_dna.json +11 -0
  217. biotite/sequence/graphics/color_schemes/rainbow_protein.json +30 -0
  218. biotite/sequence/graphics/color_schemes/spring.json +51 -0
  219. biotite/sequence/graphics/color_schemes/sunset.json +51 -0
  220. biotite/sequence/graphics/color_schemes/wither.json +51 -0
  221. biotite/sequence/graphics/colorschemes.py +170 -0
  222. biotite/sequence/graphics/dendrogram.py +231 -0
  223. biotite/sequence/graphics/features.py +544 -0
  224. biotite/sequence/graphics/logo.py +102 -0
  225. biotite/sequence/graphics/plasmid.py +712 -0
  226. biotite/sequence/io/__init__.py +12 -0
  227. biotite/sequence/io/fasta/__init__.py +22 -0
  228. biotite/sequence/io/fasta/convert.py +283 -0
  229. biotite/sequence/io/fasta/file.py +265 -0
  230. biotite/sequence/io/fastq/__init__.py +19 -0
  231. biotite/sequence/io/fastq/convert.py +117 -0
  232. biotite/sequence/io/fastq/file.py +507 -0
  233. biotite/sequence/io/genbank/__init__.py +17 -0
  234. biotite/sequence/io/genbank/annotation.py +269 -0
  235. biotite/sequence/io/genbank/file.py +573 -0
  236. biotite/sequence/io/genbank/metadata.py +336 -0
  237. biotite/sequence/io/genbank/sequence.py +173 -0
  238. biotite/sequence/io/general.py +201 -0
  239. biotite/sequence/io/gff/__init__.py +26 -0
  240. biotite/sequence/io/gff/convert.py +128 -0
  241. biotite/sequence/io/gff/file.py +449 -0
  242. biotite/sequence/phylo/__init__.py +36 -0
  243. biotite/sequence/phylo/nj.cpython-313-x86_64-linux-gnu.so +0 -0
  244. biotite/sequence/phylo/nj.pyx +221 -0
  245. biotite/sequence/phylo/tree.cpython-313-x86_64-linux-gnu.so +0 -0
  246. biotite/sequence/phylo/tree.pyx +1169 -0
  247. biotite/sequence/phylo/upgma.cpython-313-x86_64-linux-gnu.so +0 -0
  248. biotite/sequence/phylo/upgma.pyx +164 -0
  249. biotite/sequence/profile.py +561 -0
  250. biotite/sequence/search.py +117 -0
  251. biotite/sequence/seqtypes.py +720 -0
  252. biotite/sequence/sequence.py +373 -0
  253. biotite/setup_ccd.py +197 -0
  254. biotite/structure/__init__.py +135 -0
  255. biotite/structure/alphabet/__init__.py +25 -0
  256. biotite/structure/alphabet/encoder.py +332 -0
  257. biotite/structure/alphabet/encoder_weights_3di.kerasify +0 -0
  258. biotite/structure/alphabet/i3d.py +109 -0
  259. biotite/structure/alphabet/layers.py +86 -0
  260. biotite/structure/alphabet/pb.license +21 -0
  261. biotite/structure/alphabet/pb.py +170 -0
  262. biotite/structure/alphabet/unkerasify.py +128 -0
  263. biotite/structure/atoms.py +1562 -0
  264. biotite/structure/basepairs.py +1403 -0
  265. biotite/structure/bonds.cpython-313-x86_64-linux-gnu.so +0 -0
  266. biotite/structure/bonds.pyx +2036 -0
  267. biotite/structure/box.py +724 -0
  268. biotite/structure/celllist.cpython-313-x86_64-linux-gnu.so +0 -0
  269. biotite/structure/celllist.pyx +864 -0
  270. biotite/structure/chains.py +310 -0
  271. biotite/structure/charges.cpython-313-x86_64-linux-gnu.so +0 -0
  272. biotite/structure/charges.pyx +520 -0
  273. biotite/structure/compare.py +683 -0
  274. biotite/structure/density.py +109 -0
  275. biotite/structure/dotbracket.py +213 -0
  276. biotite/structure/error.py +39 -0
  277. biotite/structure/filter.py +591 -0
  278. biotite/structure/geometry.py +817 -0
  279. biotite/structure/graphics/__init__.py +13 -0
  280. biotite/structure/graphics/atoms.py +243 -0
  281. biotite/structure/graphics/rna.py +298 -0
  282. biotite/structure/hbond.py +425 -0
  283. biotite/structure/info/__init__.py +24 -0
  284. biotite/structure/info/atom_masses.json +121 -0
  285. biotite/structure/info/atoms.py +98 -0
  286. biotite/structure/info/bonds.py +149 -0
  287. biotite/structure/info/ccd.py +200 -0
  288. biotite/structure/info/components.bcif +0 -0
  289. biotite/structure/info/groups.py +128 -0
  290. biotite/structure/info/masses.py +121 -0
  291. biotite/structure/info/misc.py +137 -0
  292. biotite/structure/info/radii.py +267 -0
  293. biotite/structure/info/standardize.py +185 -0
  294. biotite/structure/integrity.py +213 -0
  295. biotite/structure/io/__init__.py +29 -0
  296. biotite/structure/io/dcd/__init__.py +13 -0
  297. biotite/structure/io/dcd/file.py +67 -0
  298. biotite/structure/io/general.py +243 -0
  299. biotite/structure/io/gro/__init__.py +14 -0
  300. biotite/structure/io/gro/file.py +343 -0
  301. biotite/structure/io/mol/__init__.py +20 -0
  302. biotite/structure/io/mol/convert.py +112 -0
  303. biotite/structure/io/mol/ctab.py +420 -0
  304. biotite/structure/io/mol/header.py +120 -0
  305. biotite/structure/io/mol/mol.py +149 -0
  306. biotite/structure/io/mol/sdf.py +940 -0
  307. biotite/structure/io/netcdf/__init__.py +13 -0
  308. biotite/structure/io/netcdf/file.py +64 -0
  309. biotite/structure/io/pdb/__init__.py +20 -0
  310. biotite/structure/io/pdb/convert.py +389 -0
  311. biotite/structure/io/pdb/file.py +1380 -0
  312. biotite/structure/io/pdb/hybrid36.cpython-313-x86_64-linux-gnu.so +0 -0
  313. biotite/structure/io/pdb/hybrid36.pyx +242 -0
  314. biotite/structure/io/pdbqt/__init__.py +15 -0
  315. biotite/structure/io/pdbqt/convert.py +113 -0
  316. biotite/structure/io/pdbqt/file.py +688 -0
  317. biotite/structure/io/pdbx/__init__.py +23 -0
  318. biotite/structure/io/pdbx/bcif.py +674 -0
  319. biotite/structure/io/pdbx/cif.py +1091 -0
  320. biotite/structure/io/pdbx/component.py +251 -0
  321. biotite/structure/io/pdbx/compress.py +362 -0
  322. biotite/structure/io/pdbx/convert.py +2113 -0
  323. biotite/structure/io/pdbx/encoding.cpython-313-x86_64-linux-gnu.so +0 -0
  324. biotite/structure/io/pdbx/encoding.pyx +1078 -0
  325. biotite/structure/io/trajfile.py +696 -0
  326. biotite/structure/io/trr/__init__.py +13 -0
  327. biotite/structure/io/trr/file.py +43 -0
  328. biotite/structure/io/util.py +38 -0
  329. biotite/structure/io/xtc/__init__.py +13 -0
  330. biotite/structure/io/xtc/file.py +43 -0
  331. biotite/structure/mechanics.py +72 -0
  332. biotite/structure/molecules.py +337 -0
  333. biotite/structure/pseudoknots.py +622 -0
  334. biotite/structure/rdf.py +245 -0
  335. biotite/structure/repair.py +302 -0
  336. biotite/structure/residues.py +716 -0
  337. biotite/structure/rings.py +451 -0
  338. biotite/structure/sasa.cpython-313-x86_64-linux-gnu.so +0 -0
  339. biotite/structure/sasa.pyx +322 -0
  340. biotite/structure/segments.py +328 -0
  341. biotite/structure/sequence.py +110 -0
  342. biotite/structure/spacegroups.json +1567 -0
  343. biotite/structure/spacegroups.license +26 -0
  344. biotite/structure/sse.py +306 -0
  345. biotite/structure/superimpose.py +511 -0
  346. biotite/structure/tm.py +581 -0
  347. biotite/structure/transform.py +736 -0
  348. biotite/structure/util.py +160 -0
  349. biotite/version.py +34 -0
  350. biotite/visualize.py +375 -0
  351. biotite-1.5.0.dist-info/METADATA +162 -0
  352. biotite-1.5.0.dist-info/RECORD +354 -0
  353. biotite-1.5.0.dist-info/WHEEL +6 -0
  354. biotite-1.5.0.dist-info/licenses/LICENSE.rst +30 -0
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "sunset",
3
+ "alphabet": [
4
+ "A",
5
+ "C",
6
+ "D",
7
+ "E",
8
+ "F",
9
+ "G",
10
+ "H",
11
+ "I",
12
+ "K",
13
+ "L",
14
+ "M",
15
+ "N",
16
+ "P",
17
+ "Q",
18
+ "R",
19
+ "S",
20
+ "T",
21
+ "V",
22
+ "W",
23
+ "Y",
24
+ "B",
25
+ "Z",
26
+ "X",
27
+ "*"
28
+ ],
29
+ "colors": {
30
+ "A": "#fea0fd",
31
+ "C": "#fc0cfe",
32
+ "D": "#2e7bbe",
33
+ "E": "#677892",
34
+ "F": "#ff385d",
35
+ "G": "#2799ff",
36
+ "H": "#dbc58e",
37
+ "I": "#fa21a1",
38
+ "K": "#debecc",
39
+ "L": "#e01e82",
40
+ "M": "#d13e7b",
41
+ "N": "#abc8f5",
42
+ "P": "#5766f9",
43
+ "Q": "#8c6e81",
44
+ "R": "#85746a",
45
+ "S": "#e7b4fd",
46
+ "T": "#a658b7",
47
+ "V": "#fe51b8",
48
+ "W": "#ff3701",
49
+ "Y": "#cb5339"
50
+ }
51
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "wither",
3
+ "alphabet": [
4
+ "A",
5
+ "C",
6
+ "D",
7
+ "E",
8
+ "F",
9
+ "G",
10
+ "H",
11
+ "I",
12
+ "K",
13
+ "L",
14
+ "M",
15
+ "N",
16
+ "P",
17
+ "Q",
18
+ "R",
19
+ "S",
20
+ "T",
21
+ "V",
22
+ "W",
23
+ "Y",
24
+ "B",
25
+ "Z",
26
+ "X",
27
+ "*"
28
+ ],
29
+ "colors": {
30
+ "A": "#b36139",
31
+ "C": "#ef0300",
32
+ "D": "#068855",
33
+ "E": "#028489",
34
+ "F": "#da06b6",
35
+ "G": "#797c00",
36
+ "H": "#0f73ee",
37
+ "I": "#ea0063",
38
+ "K": "#0a81a2",
39
+ "L": "#de1a76",
40
+ "M": "#a10c56",
41
+ "N": "#0f5e46",
42
+ "P": "#1c8701",
43
+ "Q": "#19577b",
44
+ "R": "#0a7dbc",
45
+ "S": "#6e5842",
46
+ "T": "#843f07",
47
+ "V": "#da3952",
48
+ "W": "#4600ff",
49
+ "Y": "#8607b4"
50
+ }
51
+ }
@@ -0,0 +1,170 @@
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.sequence.graphics"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["get_color_scheme", "list_color_scheme_names", "load_color_scheme"]
8
+
9
+ import glob
10
+ import json
11
+ import os
12
+ from os.path import dirname, join, realpath
13
+ from biotite.sequence.alphabet import Alphabet
14
+
15
+
16
+ def load_color_scheme(file_name):
17
+ """
18
+ Load a color scheme from a JSON file.
19
+
20
+ A color scheme is a list of colors that correspond to symbols of an
21
+ alphabet. The color for a symbol is list of colors indexed by the
22
+ corresponding symbol code.
23
+
24
+ Parameters
25
+ ----------
26
+ file_name : str
27
+ The file name of the JSON file containing the scheme.
28
+
29
+ Returns
30
+ -------
31
+ scheme : dict
32
+ A dictionary representing the color scheme, It contains the
33
+ following keys, if the input file is proper:
34
+
35
+ - **name** - Name of the scheme.
36
+ - **alphabet** - :class:`Alphabet` instance describing the
37
+ type of sequence the scheme can be used for.
38
+ - **colors** - List of *Matplotlib* compatible colors
39
+ """
40
+ with open(file_name, "r") as file:
41
+ scheme = json.load(file)
42
+ alphabet = Alphabet(scheme["alphabet"])
43
+ # Store alphabet as 'Alphabet' object
44
+ scheme["alphabet"] = alphabet
45
+ colors = [None] * len(alphabet)
46
+ for key, value in scheme["colors"].items():
47
+ index = alphabet.encode(key)
48
+ colors[index] = value
49
+ # Store colors as symbol code ordered list of colors,
50
+ # rather than dictionary
51
+ scheme["colors"] = colors
52
+ return scheme
53
+
54
+
55
+ def get_color_scheme(name, alphabet, default="#FFFFFF"):
56
+ """
57
+ Get a color scheme by name and alphabet.
58
+
59
+ A color scheme is a list of colors that correspond to symbols of an
60
+ alphabet. The color for a symbol is list of colors indexed by the
61
+ corresponding symbol code.
62
+
63
+ Parameters
64
+ ----------
65
+ name : str
66
+ The name of the color scheme.
67
+ alphabet : Alphabet
68
+ The alphabet to obtain the scheme for. The alphabet of the
69
+ scheme must equal or extend this parameter.
70
+ default : str or tuple, optional
71
+ A *Matplotlib* compatible color that is used for symbols that
72
+ have no defined color in the scheme.
73
+
74
+ Returns
75
+ -------
76
+ colors : list
77
+ A list of *Matplotlib* compatible colors. The colors in the list
78
+ have the same order as the symbols in the given `alphabet`.
79
+ Since the alphabet of the color scheme may extend the given
80
+ `alphabet`, the list of colors can be longer than the
81
+ `alphabet`.
82
+
83
+ Notes
84
+ -----
85
+ There can be multiple color schemes with the same name but for
86
+ different alphabets (e.g. one for dna and one for protein
87
+ sequences).
88
+
89
+ Examples
90
+ --------
91
+
92
+ >>> alphabet = NucleotideSequence.alphabet_unamb
93
+ >>> color_scheme = get_color_scheme("rainbow", alphabet)
94
+ >>> print(color_scheme)
95
+ ['#3737f5', '#37f537', '#f5f537', '#f53737']
96
+ """
97
+ # Try exact alphabet match first
98
+ for scheme in _color_schemes:
99
+ if scheme["name"] == name and scheme["alphabet"] == alphabet:
100
+ return _fit_color_scheme(alphabet, scheme, default)
101
+ # If no exact match was found, try to find a scheme for an alphabet
102
+ # that extends the given alphabet
103
+ for scheme in _color_schemes:
104
+ if scheme["name"] == name and scheme["alphabet"].extends(alphabet):
105
+ return _fit_color_scheme(alphabet, scheme, default)
106
+
107
+ raise ValueError(f"Unkown scheme '{name}' for given alphabet")
108
+
109
+
110
+ def list_color_scheme_names(alphabet, strict=False):
111
+ """
112
+ Get a list of available color scheme names for a given alphabet.
113
+
114
+ Parameters
115
+ ----------
116
+ alphabet : Alphabet
117
+ The alphabet to get the color scheme names for.
118
+ strict : bool, optional
119
+ If set to true, only schemes with an exact match to the given
120
+ alphabet are included in the list.
121
+ If set to false, schemes with an alphabet that extends the given
122
+ alphabet are also included.
123
+
124
+ Returns
125
+ -------
126
+ schemes : list of str
127
+ A list of available color schemes.
128
+ """
129
+ scheme_list = []
130
+ for scheme in _color_schemes:
131
+ if strict and scheme["alphabet"] == alphabet:
132
+ scheme_list.append(scheme["name"])
133
+ if not strict and scheme["alphabet"].extends(alphabet):
134
+ scheme_list.append(scheme["name"])
135
+ return scheme_list
136
+
137
+
138
+ _scheme_dir = join(dirname(realpath(__file__)), "color_schemes")
139
+
140
+ _color_schemes = []
141
+
142
+ for file_name in glob.glob(_scheme_dir + os.sep + "*.json"):
143
+ scheme = load_color_scheme(file_name)
144
+ _color_schemes.append(scheme)
145
+
146
+
147
+ def _fit_color_scheme(alphabet, color_scheme, default_color):
148
+ """
149
+ Fit a color scheme to the given alphabet.
150
+
151
+ Parameters
152
+ ----------
153
+ alphabet : Alphabet
154
+ The alphabet to get the color scheme for.
155
+ color_scheme : dict
156
+ The color scheme.
157
+ default_color : str or tuple
158
+ The default color.
159
+
160
+ Returns
161
+ -------
162
+ scheme : list of str
163
+ The colors from the scheme.
164
+ """
165
+ colors = color_scheme["colors"]
166
+ # Replace None values with default color
167
+ colors = [color if color is not None else default_color for color in colors]
168
+ # Only return colors that are in scope of this alphabet
169
+ # and not the extended alphabet
170
+ return colors[: len(alphabet)]
@@ -0,0 +1,231 @@
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.sequence.graphics"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["plot_dendrogram"]
8
+
9
+ import numpy as np
10
+
11
+
12
+ def plot_dendrogram(
13
+ axes,
14
+ tree,
15
+ orientation="left",
16
+ use_distances=True,
17
+ labels=None,
18
+ label_size=None,
19
+ color="black",
20
+ show_distance=True,
21
+ **kwargs,
22
+ ):
23
+ """
24
+ Plot a dendrogram from a (phylogenetic) tree.
25
+
26
+ Parameters
27
+ ----------
28
+ axes : Axes
29
+ A *Matplotlib* axes, that is used as plotting area.
30
+ tree : Tree
31
+ The tree to be visualized.
32
+ orientation : {'left', 'right', 'bottom', 'top'}, optional
33
+ The position of the root node in the plot
34
+ use_distances : bool, optional
35
+ If true, the `distance` attribute of the :class:`TreeNode`
36
+ objects are used as distance measure.
37
+ Otherwise the topological distance is used.
38
+ labels : list of str, optional
39
+ The leaf node labels.
40
+ The label of a leaf node is the entry at the position of its
41
+ `index` attribute.
42
+ label_size : float, optional
43
+ The font size of the labels.
44
+ color : tuple or str, optional
45
+ A *Matplotlib* compatible color, that is used to draw the lines
46
+ of the dendrogram.
47
+ show_distance : bool, optional
48
+ If true, the distance from the root is shown on the
49
+ corresponding axis.
50
+ **kwargs
51
+ Additional parameters that are used to draw the dendrogram
52
+ lines.
53
+ """
54
+
55
+ indices = tree.root.get_indices()
56
+ leaf_dict = {indices[i]: i for i in indices}
57
+
58
+ # Required for setting the plot limits
59
+ max_distance = 0
60
+
61
+ def _plot_node(node, distance):
62
+ """
63
+ Draw the lines from the given node to its children.
64
+
65
+ Parameters
66
+ ----------
67
+ dist : float
68
+ the distance of the node from root
69
+
70
+ Returns
71
+ -------
72
+ pos : float
73
+ the postion of the node on the 'label' axis
74
+ """
75
+ # The term 'distance'
76
+ # refers to positions along the 'distance' axis
77
+ # the term 'pos'
78
+ # refers to positions along the other axis
79
+ nonlocal max_distance
80
+ if max_distance < distance:
81
+ max_distance = distance
82
+ if node.is_leaf():
83
+ # No children -> no line can be drawn
84
+ return leaf_dict[node.index]
85
+ else:
86
+ children = node.children
87
+ if use_distances:
88
+ child_distances = [distance + c.distance for c in children]
89
+ else:
90
+ # Use topologic distance of children to this node,
91
+ # which is always 1
92
+ child_distances = [distance + 1 for c in children]
93
+ child_pos = [
94
+ _plot_node(child, child_distance)
95
+ for child, child_distance in zip(children, child_distances)
96
+ ]
97
+ # Position of this node is in the center of the child nodes
98
+ center_pos = sum(child_pos) / len(child_pos)
99
+ if orientation in ["left", "right"]:
100
+ # Line connecting the childs
101
+ axes.plot(
102
+ [distance, distance],
103
+ [child_pos[0], child_pos[-1]],
104
+ color=color,
105
+ marker="None",
106
+ **kwargs,
107
+ )
108
+ # Lines depicting the distances of the childs
109
+ for child_dist, pos in zip(child_distances, child_pos):
110
+ axes.plot(
111
+ [distance, child_dist],
112
+ [pos, pos],
113
+ color=color,
114
+ marker="None",
115
+ **kwargs,
116
+ )
117
+ elif orientation in ["bottom", "top"]:
118
+ # Line connecting the childs
119
+ axes.plot(
120
+ [child_pos[0], child_pos[-1]],
121
+ [distance, distance],
122
+ color=color,
123
+ marker="None",
124
+ **kwargs,
125
+ )
126
+ # Lines depicting the distances of the childs
127
+ for child_dist, pos in zip(child_distances, child_pos):
128
+ axes.plot(
129
+ [pos, pos],
130
+ [distance, child_dist],
131
+ color=color,
132
+ marker="None",
133
+ **kwargs,
134
+ )
135
+ else:
136
+ raise ValueError(f"'{orientation}' is not a valid orientation")
137
+ return center_pos
138
+
139
+ _plot_node(tree.root, 0)
140
+
141
+ if labels is not None:
142
+ # Sort labels using the order of indices in the tree
143
+ # A list cannot be directly indexed with a list,
144
+ # hence the conversion to a ndarray
145
+ labels = np.array(labels)[indices].tolist()
146
+ else:
147
+ labels = [str(i) for i in indices]
148
+ # The distance axis does not start at 0,
149
+ # since the root line would not properly rendered
150
+ # Hence the limit is set a to small fraction of the entire axis
151
+ # beyond 0
152
+ zero_limit = -0.01 * max_distance
153
+ if orientation == "left":
154
+ axes.set_xlim(zero_limit, max_distance)
155
+ axes.set_ylim(-1, len(indices))
156
+ axes.set_yticks(np.arange(0, len(indices)))
157
+ axes.set_yticklabels(labels)
158
+ axes.yaxis.set_tick_params(
159
+ left=False,
160
+ right=False,
161
+ labelleft=False,
162
+ labelright=True,
163
+ labelsize=label_size,
164
+ )
165
+ axes.xaxis.set_tick_params(
166
+ bottom=True,
167
+ top=False,
168
+ labelbottom=show_distance,
169
+ labeltop=False,
170
+ labelsize=label_size,
171
+ )
172
+ elif orientation == "right":
173
+ axes.set_xlim(max_distance, zero_limit)
174
+ axes.set_ylim(-1, len(indices))
175
+ axes.set_yticks(np.arange(0, len(indices)))
176
+ axes.set_yticklabels(labels)
177
+ axes.yaxis.set_tick_params(
178
+ left=False,
179
+ right=False,
180
+ labelleft=True,
181
+ labelright=False,
182
+ labelsize=label_size,
183
+ )
184
+ axes.xaxis.set_tick_params(
185
+ bottom=True,
186
+ top=False,
187
+ labelbottom=show_distance,
188
+ labeltop=False,
189
+ labelsize=label_size,
190
+ )
191
+ elif orientation == "bottom":
192
+ axes.set_ylim(zero_limit, max_distance)
193
+ axes.set_xlim(-1, len(indices))
194
+ axes.set_xticks(np.arange(0, len(indices)))
195
+ axes.set_xticklabels(labels)
196
+ axes.xaxis.set_tick_params(
197
+ bottom=False,
198
+ top=False,
199
+ labelbottom=False,
200
+ labeltop=True,
201
+ labelsize=label_size,
202
+ )
203
+ axes.yaxis.set_tick_params(
204
+ left=True,
205
+ right=False,
206
+ labelleft=show_distance,
207
+ labelright=False,
208
+ labelsize=label_size,
209
+ )
210
+ elif orientation == "top":
211
+ axes.set_ylim(max_distance, zero_limit)
212
+ axes.set_xlim(-1, len(indices))
213
+ axes.set_xticks(np.arange(0, len(indices)))
214
+ axes.set_xticklabels(labels)
215
+ axes.xaxis.set_tick_params(
216
+ bottom=False,
217
+ top=False,
218
+ labelbottom=True,
219
+ labeltop=False,
220
+ labelsize=label_size,
221
+ )
222
+ axes.yaxis.set_tick_params(
223
+ left=True,
224
+ right=False,
225
+ labelleft=show_distance,
226
+ labelright=False,
227
+ labelsize=label_size,
228
+ )
229
+ else:
230
+ raise ValueError(f"'{orientation}' is not a valid orientation")
231
+ axes.set_frame_on(False)