kssdtree 2.0.1__tar.gz → 2.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. {kssdtree-2.0.1/kssdtree.egg-info → kssdtree-2.0.2}/PKG-INFO +1 -1
  2. {kssdtree-2.0.1 → kssdtree-2.0.2/kssdtree.egg-info}/PKG-INFO +1 -1
  3. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdtree.egg-info/requires.txt +1 -0
  4. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdtree.py +86 -75
  5. {kssdtree-2.0.1 → kssdtree-2.0.2}/setup.py +7 -20
  6. {kssdtree-2.0.1 → kssdtree-2.0.2}/toolutils.py +5 -0
  7. {kssdtree-2.0.1 → kssdtree-2.0.2}/MANIFEST.in +0 -0
  8. {kssdtree-2.0.1 → kssdtree-2.0.2}/README.md +0 -0
  9. {kssdtree-2.0.1 → kssdtree-2.0.2}/align.c +0 -0
  10. {kssdtree-2.0.1 → kssdtree-2.0.2}/buildtree.c +0 -0
  11. {kssdtree-2.0.1 → kssdtree-2.0.2}/bytescale.c +0 -0
  12. {kssdtree-2.0.1 → kssdtree-2.0.2}/cluster.c +0 -0
  13. {kssdtree-2.0.1 → kssdtree-2.0.2}/co2mco.c +0 -0
  14. {kssdtree-2.0.1 → kssdtree-2.0.2}/command_composite.c +0 -0
  15. {kssdtree-2.0.1 → kssdtree-2.0.2}/command_dist.c +0 -0
  16. {kssdtree-2.0.1 → kssdtree-2.0.2}/command_dist_wrapper.c +0 -0
  17. {kssdtree-2.0.1 → kssdtree-2.0.2}/command_set.c +0 -0
  18. {kssdtree-2.0.1 → kssdtree-2.0.2}/command_shuffle.c +0 -0
  19. {kssdtree-2.0.1 → kssdtree-2.0.2}/distancemat.c +0 -0
  20. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnj.c +0 -0
  21. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/bytescale.h +0 -0
  22. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/dnj.h +0 -0
  23. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/filebuff.h +0 -0
  24. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/hclust.h +0 -0
  25. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/matrix.h +0 -0
  26. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/mman.h +0 -0
  27. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/nj.h +0 -0
  28. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/nwck.h +0 -0
  29. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/pherror.h +0 -0
  30. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/phy.h +0 -0
  31. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/qseqs.h +0 -0
  32. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/str.h +0 -0
  33. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/threader.h +0 -0
  34. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/tmp.h +0 -0
  35. {kssdtree-2.0.1 → kssdtree-2.0.2}/dnjheaders/vector.h +0 -0
  36. {kssdtree-2.0.1 → kssdtree-2.0.2}/filebuff.c +0 -0
  37. {kssdtree-2.0.1 → kssdtree-2.0.2}/global_basic.c +0 -0
  38. {kssdtree-2.0.1 → kssdtree-2.0.2}/hclust.c +0 -0
  39. {kssdtree-2.0.1 → kssdtree-2.0.2}/iseq2comem.c +0 -0
  40. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/co2mco.h +0 -0
  41. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/command_composite.h +0 -0
  42. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/command_dist.h +0 -0
  43. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/command_dist_wrapper.h +0 -0
  44. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/command_set.h +0 -0
  45. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/command_shuffle.h +0 -0
  46. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/global_basic.h +0 -0
  47. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/iseq2comem.h +0 -0
  48. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/mman.h +0 -0
  49. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdheaders/mytime.h +0 -0
  50. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdtree.egg-info/SOURCES.txt +0 -0
  51. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdtree.egg-info/dependency_links.txt +0 -0
  52. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdtree.egg-info/not-zip-safe +0 -0
  53. {kssdtree-2.0.1 → kssdtree-2.0.2}/kssdtree.egg-info/top_level.txt +0 -0
  54. {kssdtree-2.0.1 → kssdtree-2.0.2}/matrix.c +0 -0
  55. {kssdtree-2.0.1 → kssdtree-2.0.2}/mman.c +0 -0
  56. {kssdtree-2.0.1 → kssdtree-2.0.2}/mytime.c +0 -0
  57. {kssdtree-2.0.1 → kssdtree-2.0.2}/nj.c +0 -0
  58. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/align.h +0 -0
  59. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/buildtree.h +0 -0
  60. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/cluster.h +0 -0
  61. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/distancemat.h +0 -0
  62. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/sequence.h +0 -0
  63. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/tree.h +0 -0
  64. {kssdtree-2.0.1 → kssdtree-2.0.2}/njheaders/util.h +0 -0
  65. {kssdtree-2.0.1 → kssdtree-2.0.2}/nwck.c +0 -0
  66. {kssdtree-2.0.1 → kssdtree-2.0.2}/pherror.c +0 -0
  67. {kssdtree-2.0.1 → kssdtree-2.0.2}/phy.c +0 -0
  68. {kssdtree-2.0.1 → kssdtree-2.0.2}/pydnj.c +0 -0
  69. {kssdtree-2.0.1 → kssdtree-2.0.2}/pykssd.c +0 -0
  70. {kssdtree-2.0.1 → kssdtree-2.0.2}/pynj.c +0 -0
  71. {kssdtree-2.0.1 → kssdtree-2.0.2}/qseqs.c +0 -0
  72. {kssdtree-2.0.1 → kssdtree-2.0.2}/sequence.c +0 -0
  73. {kssdtree-2.0.1 → kssdtree-2.0.2}/setup.cfg +0 -0
  74. {kssdtree-2.0.1 → kssdtree-2.0.2}/str.c +0 -0
  75. {kssdtree-2.0.1 → kssdtree-2.0.2}/tmp.c +0 -0
  76. {kssdtree-2.0.1 → kssdtree-2.0.2}/tree.c +0 -0
  77. {kssdtree-2.0.1 → kssdtree-2.0.2}/util.c +0 -0
  78. {kssdtree-2.0.1 → kssdtree-2.0.2}/vector.c +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kssdtree
3
- Version: 2.0.1
3
+ Version: 2.0.2
4
4
  Summary: Kssdtree is a versatile Python package for phylogenetic analysis. It also provides one-stop tree construction and visualization. It can handle DNA sequences of both fasta or fastq format, whether gzipped or not.
5
5
  Home-page: https://github.com/yhlink/kssdtree
6
6
  Download-URL: https://pypi.org/project/kssdtree
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kssdtree
3
- Version: 2.0.1
3
+ Version: 2.0.2
4
4
  Summary: Kssdtree is a versatile Python package for phylogenetic analysis. It also provides one-stop tree construction and visualization. It can handle DNA sequences of both fasta or fastq format, whether gzipped or not.
5
5
  Home-page: https://github.com/yhlink/kssdtree
6
6
  Download-URL: https://pypi.org/project/kssdtree
@@ -1,3 +1,4 @@
1
1
  pyqt5
2
2
  ete3
3
3
  requests
4
+ pandas
@@ -44,7 +44,7 @@ def sketch(shuf_file=None, genome_files=None, output=None, set_opt=None):
44
44
  end_time = time.time()
45
45
  if end_time - start_time > 120:
46
46
  print(
47
- "Network timeout, please manually download from github (https://github.com/yhlink/kssdtree/tree/master/shuffle_file)")
47
+ "Network timeout, please manually download from https://zenodo.org/records/12699159")
48
48
  return False
49
49
  print('Download finished: ', shuf_file)
50
50
  elif shuf_file in ['L2K8.shuf', 'L2K9.shuf', 'L3K11.shuf', './L2K8.shuf', './L2K9.shuf', './L3K11.shuf']:
@@ -207,7 +207,12 @@ def visualize(newick=None, taxonomy=None, mode=None):
207
207
  return False
208
208
  if mode is None:
209
209
  mode = 'r'
210
- toolutils.view_tree(newick, taxonomy, mode=mode)
210
+ if taxonomy is not None and mode == 'c':
211
+ print('Warning: this pipeline only support 'r' (rectangle) mode !!!')
212
+ mode = 'r'
213
+ toolutils.view_tree(newick, taxonomy, mode=mode)
214
+ else:
215
+ toolutils.view_tree(newick, taxonomy, mode=mode)
211
216
  else:
212
217
  print('Args error!!!')
213
218
  return False
@@ -280,6 +285,9 @@ def subtract(ref_sketch=None, genome_sketch=None, output=None, flag=None):
280
285
  def quick(shuf_file=None, genome_files=None, output=None, reference=None, database=None, method='nj', mode='r', N=0):
281
286
  if reference is None and database is None:
282
287
  if shuf_file is not None and genome_files is not None and output is not None:
288
+ if toolutils.is_positive_integer(N) or toolutils.is_negative_integer(N):
289
+ print("N must = 0 !!!")
290
+ return False
283
291
  timeStamp = int(time.mktime(time.localtime(time.time())))
284
292
  temp_sketch = toolutils.rs() + '_sketch_' + str(timeStamp)
285
293
  temp_phy = toolutils.rs() + '_temp.phy'
@@ -325,7 +333,7 @@ def quick(shuf_file=None, genome_files=None, output=None, reference=None, databa
325
333
  elif reference is None and database == 'gtdbr214':
326
334
  if shuf_file is not None and genome_files is not None and output is not None:
327
335
  if not toolutils.is_positive_integer(N):
328
- print("N must >0 !!!")
336
+ print("N must > 0 !!!")
329
337
  return False
330
338
  if shuf_file != 'L3K9.shuf':
331
339
  print("shuf_file must be set to 'L3K9.shuf'")
@@ -354,83 +362,86 @@ def quick(shuf_file=None, genome_files=None, output=None, reference=None, databa
354
362
  return False
355
363
  elif reference is not None and database is None:
356
364
  if shuf_file is not None and genome_files is not None and output is not None and method in ['nj', 'dnj']:
357
- if shuf_file is not None and genome_files is not None and output is not None and method in ['nj', 'dnj']:
358
- if not toolutils.allowed_file(genome_files):
359
- num = toolutils.get_file_num(genome_files)
360
- if num == 1:
361
- print('genome_files is a folder containing at least two . fasta or .fastq files!!!')
362
- return False
363
- else:
364
- print('genome_files is a folder containing at least two . fasta or .fastq files, not a file!!!')
365
+ if toolutils.is_positive_integer(N) or toolutils.is_negative_integer(N):
366
+ print("N must = 0 !!!")
367
+ return False
368
+ if not toolutils.allowed_file(genome_files):
369
+ num = toolutils.get_file_num(genome_files)
370
+ if num == 1:
371
+ print('genome_files is a folder containing at least two . fasta or .fastq files!!!')
365
372
  return False
366
- timeStamp = int(time.mktime(time.localtime(time.time())))
367
- temp_reference_sketch = toolutils.rs() + '_ref_sketch_' + str(timeStamp)
368
- temp_genomes_sketch = toolutils.rs() + '_sketch_' + str(timeStamp)
369
- if not toolutils.allowed_file(reference):
370
- # cur_path = os.getcwd()
371
- # ref_path = os.path.join(cur_path, reference)
372
- num = toolutils.get_file_num(reference)
373
- if num == 1:
374
- temp_union_sketch = temp_reference_sketch
375
- else:
376
- temp_union_sketch = toolutils.rs() + '_ref_union_sketch_' + str(timeStamp)
377
- else:
373
+ else:
374
+ print('genome_files is a folder containing at least two . fasta or .fastq files, not a file!!!')
375
+ return False
376
+ timeStamp = int(time.mktime(time.localtime(time.time())))
377
+ temp_reference_sketch = toolutils.rs() + '_ref_sketch_' + str(timeStamp)
378
+ temp_genomes_sketch = toolutils.rs() + '_sketch_' + str(timeStamp)
379
+ if not toolutils.allowed_file(reference):
380
+ # cur_path = os.getcwd()
381
+ # ref_path = os.path.join(cur_path, reference)
382
+ num = toolutils.get_file_num(reference)
383
+ if num == 1:
378
384
  temp_union_sketch = temp_reference_sketch
379
- temp_subtract_sketch = toolutils.rs() + '_subtract_sketch_' + str(timeStamp)
380
- temp_phy = toolutils.rs() + '_temp.phy'
381
- print('Step1...')
382
- s1 = sketch(shuf_file=shuf_file, genome_files=reference, output=temp_reference_sketch, set_opt=True)
383
- if not s1:
384
- return False
385
- s2 = sketch(shuf_file=shuf_file, genome_files=genome_files, output=temp_genomes_sketch, set_opt=True)
386
- if not s2:
387
- return False
388
- print('Step2...')
389
- s3 = union(ref_sketch=temp_reference_sketch, output=temp_union_sketch)
390
- if not s3:
391
- return False
392
- s4 = subtract(ref_sketch=temp_union_sketch, genome_sketch=temp_genomes_sketch,
393
- output=temp_subtract_sketch, flag=1)
394
- if not s4:
395
- return False
396
- print('Step3...')
397
- if method == 'nj':
398
- s5 = dist(genome_sketch=temp_subtract_sketch, output=temp_phy,
399
- flag=0)
400
385
  else:
401
- s5 = dist(genome_sketch=temp_subtract_sketch, output=temp_phy,
402
- flag=1)
403
- if not s5:
404
- return False
405
- print('Step4...')
406
- s6 = build(phylip=temp_phy, output=output, method=method)
407
- if not s6:
408
- return False
409
- print('Step5...')
410
- print('Tree visualization finished!')
411
- visualize(newick=output, mode=mode)
412
- if platform.system() == 'Linux':
413
- current_directory = os.getcwd()
414
- temp_dir1 = os.path.join(current_directory, temp_reference_sketch)
415
- temp_dir2 = os.path.join(current_directory, temp_genomes_sketch)
416
- temp_dir3 = os.path.join(current_directory, temp_union_sketch)
417
- temp_dir4 = os.path.join(current_directory, temp_subtract_sketch)
418
- temp_dir5 = os.path.join(current_directory, 'distout')
419
- if os.path.exists(temp_dir1):
420
- shutil.rmtree(temp_dir1)
421
- if os.path.exists(temp_dir2):
422
- shutil.rmtree(temp_dir2)
423
- if os.path.exists(temp_dir3):
424
- shutil.rmtree(temp_dir3)
425
- if os.path.exists(temp_dir4):
426
- shutil.rmtree(temp_dir4)
427
- if os.path.exists(temp_dir5):
428
- shutil.rmtree(temp_dir5)
429
- if os.path.exists(temp_phy):
430
- os.remove(temp_phy)
386
+ temp_union_sketch = toolutils.rs() + '_ref_union_sketch_' + str(timeStamp)
431
387
  else:
432
- print('Args error, please see https://kssdtree.readthedocs.io/en/latest!!!')
388
+ temp_union_sketch = temp_reference_sketch
389
+ temp_subtract_sketch = toolutils.rs() + '_subtract_sketch_' + str(timeStamp)
390
+ temp_phy = toolutils.rs() + '_temp.phy'
391
+ print('Step1...')
392
+ s1 = sketch(shuf_file=shuf_file, genome_files=reference, output=temp_reference_sketch, set_opt=True)
393
+ if not s1:
433
394
  return False
395
+ s2 = sketch(shuf_file=shuf_file, genome_files=genome_files, output=temp_genomes_sketch, set_opt=True)
396
+ if not s2:
397
+ return False
398
+ print('Step2...')
399
+ s3 = union(ref_sketch=temp_reference_sketch, output=temp_union_sketch)
400
+ if not s3:
401
+ return False
402
+ s4 = subtract(ref_sketch=temp_union_sketch, genome_sketch=temp_genomes_sketch,
403
+ output=temp_subtract_sketch, flag=1)
404
+ if not s4:
405
+ return False
406
+ print('Step3...')
407
+ if method == 'nj':
408
+ s5 = dist(genome_sketch=temp_subtract_sketch, output=temp_phy,
409
+ flag=0)
410
+ else:
411
+ s5 = dist(genome_sketch=temp_subtract_sketch, output=temp_phy,
412
+ flag=1)
413
+ if not s5:
414
+ return False
415
+ print('Step4...')
416
+ s6 = build(phylip=temp_phy, output=output, method=method)
417
+ if not s6:
418
+ return False
419
+ print('Step5...')
420
+ print('Tree visualization finished!')
421
+ visualize(newick=output, mode=mode)
422
+ if platform.system() == 'Linux':
423
+ current_directory = os.getcwd()
424
+ temp_dir1 = os.path.join(current_directory, temp_reference_sketch)
425
+ temp_dir2 = os.path.join(current_directory, temp_genomes_sketch)
426
+ temp_dir3 = os.path.join(current_directory, temp_union_sketch)
427
+ temp_dir4 = os.path.join(current_directory, temp_subtract_sketch)
428
+ temp_dir5 = os.path.join(current_directory, 'distout')
429
+ if os.path.exists(temp_dir1):
430
+ shutil.rmtree(temp_dir1)
431
+ if os.path.exists(temp_dir2):
432
+ shutil.rmtree(temp_dir2)
433
+ if os.path.exists(temp_dir3):
434
+ shutil.rmtree(temp_dir3)
435
+ if os.path.exists(temp_dir4):
436
+ shutil.rmtree(temp_dir4)
437
+ if os.path.exists(temp_dir5):
438
+ shutil.rmtree(temp_dir5)
439
+ if os.path.exists(temp_phy):
440
+ os.remove(temp_phy)
441
+ else:
442
+ print('Args error, please see https://kssdtree.readthedocs.io/en/latest!!!')
443
+ return False
444
+
434
445
  else:
435
446
  print('Pipeline error, please see https://kssdtree.readthedocs.io/en/latest!!!')
436
447
  return False
@@ -2,8 +2,6 @@ import sys
2
2
  from setuptools import setup, Extension, find_packages
3
3
  from os import environ
4
4
  import os
5
- import platform
6
-
7
5
 
8
6
  # def get_gcc_version():
9
7
  # gcc_version = subprocess.check_output(['gcc', '--version']).decode('utf-8')
@@ -85,25 +83,16 @@ include_dirs1 = ['kssdheaders']
85
83
  include_dirs2 = ['njheaders']
86
84
  include_dirs3 = ['dnjheaders']
87
85
 
88
- if 'darwin' in sys.platform:
89
- if platform.machine() == 'arm64':
90
- require_pakages = []
91
- else:
92
- require_pakages = [
93
- 'pyqt5',
94
- 'ete3',
95
- 'requests'
96
- ]
97
- else:
98
- require_pakages = [
99
- 'pyqt5',
100
- 'ete3',
101
- 'requests'
102
- ]
86
+ require_pakages = [
87
+ 'pyqt5',
88
+ 'ete3',
89
+ 'requests',
90
+ 'pandas'
91
+ ]
103
92
 
104
93
  setup(
105
94
  name='kssdtree',
106
- version='2.0.1',
95
+ version='2.0.2',
107
96
  author='Hang Yang',
108
97
  author_email='yhlink1207@gmail.com',
109
98
  description="Kssdtree is a versatile Python package for phylogenetic analysis. It also provides one-stop tree construction and visualization. It can handle DNA sequences of both fasta or fastq format, whether gzipped or not. ",
@@ -125,5 +114,3 @@ setup(
125
114
  zip_safe=False,
126
115
  include_package_data=True
127
116
  )
128
-
129
-
@@ -24,6 +24,11 @@ def is_positive_integer(num):
24
24
  else:
25
25
  return False
26
26
 
27
+ def is_negative_integer(num):
28
+ if isinstance(num, int) and num < 0:
29
+ return True
30
+ else:
31
+ return False
27
32
 
28
33
  def randomcolor():
29
34
  colorArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes