geney 1.3.73__py2.py3-none-any.whl → 1.3.75__py2.py3-none-any.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 geney might be problematic. Click here for more details.

geney/Gene.py CHANGED
@@ -90,7 +90,9 @@ class Gene:
90
90
  # Find gene data files in the configured organism MRNA path
91
91
  gene_files = list((config[organism]['MRNA_PATH'] / 'protein_coding').glob(f'*_{gene_name}.pkl'))
92
92
  if not gene_files:
93
- raise FileNotFoundError(f"No files available for gene '{gene_name}'.")
93
+ print(f"No files available for gene '{gene_name}'.")
94
+ return None
95
+ # raise FileNotFoundError(f"No files available for gene '{gene_name}'.")
94
96
 
95
97
  # Load gene data from the first matching file
96
98
  data = unload_pickle(gene_files[0])
@@ -148,7 +150,8 @@ class Gene:
148
150
  return None #Transcript()
149
151
 
150
152
  if tid not in self.transcripts:
151
- raise AttributeError(f"Transcript '{tid}' not found in gene '{self.gene_name}'.")
153
+ return None
154
+ # raise AttributeError(f"Transcript '{tid}' not found in gene '{self.gene_name}'.")
152
155
 
153
156
  return Transcript(self.transcripts[tid], organism=self.organism)
154
157
 
geney/oncosplice.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from Bio import pairwise2
2
2
  import re
3
3
  import hashlib
4
+ from datetime import datetime
4
5
  from tqdm import tqdm
5
6
  import pandas as pd
6
7
  import numpy as np
@@ -282,6 +283,16 @@ def summarize_missplicing_event(pes, pir, es, ne, ir):
282
283
  else:
283
284
  return '-'
284
285
 
286
+ def missense_effect(r, v):
287
+ if len(r.protein) != len(v.protein):
288
+ return '', ''
289
+
290
+ for i, (x, y) in enumerate(zip(r.protein, v.protein)):
291
+ if x != y:
292
+ aa_change = f'{x}>{y}'
293
+ codon_change = f'{r.orf[i*3:i*3+3]}>{v.orf[i*3:i*3+3]}'
294
+ return aa_change, codon_change
295
+ return '', ''
285
296
 
286
297
  # Annotating
287
298
  def OncospliceAnnotator(reference_transcript, variant_transcript, mut, ref_attributes=[], var_attributes=[]):
@@ -301,12 +312,15 @@ def OncospliceAnnotator(reference_transcript, variant_transcript, mut, ref_attri
301
312
  report['affected_intron'] = affected_intron
302
313
  report['mutation_distance_from_5'] = distance_from_5
303
314
  report['mutation_distance_from_3'] = distance_from_3
315
+ aa_c, c_c = missense_effect(reference_transcript, variant_transcript)
316
+ report['missense_effect'] = aa_c
317
+ report['codon_change'] = c_c
304
318
  return report
305
319
 
306
320
 
307
- def oncosplice(mut_id, splicing_threshold=0.5, protein_coding=True, cons_required=False, primary_transcript=False,
321
+ def oncosplice(mut_id, splicing_threshold=0.5, protein_coding=True, primary_transcript=False,
308
322
  window_length=13, organism='hg38', splicing_engine=None, splicing_db=None, verbose=False,
309
- tis_engine=None, tis_db=None):
323
+ tis_engine=None, target_transcripts=None):
310
324
 
311
325
  gene = Gene.from_file(mut_id.split(':')[0], organism=organism)
312
326
  reference_gene_proteins = {
@@ -315,10 +329,13 @@ def oncosplice(mut_id, splicing_threshold=0.5, protein_coding=True, cons_require
315
329
 
316
330
  mutations = [MutSeqMat.from_mutid(m) for m in mut_id.split('|')]
317
331
  if gene.rev:
318
- mutations = [m.reverse_complement(inplace=True) for m in mutations[::-1]]
332
+ mutations = [m.reverse_complement() for m in mutations[::-1]]
319
333
 
320
334
  results = []
321
335
  for reference_transcript in tqdm(gene, desc=f'Processing {mut_id}...'):
336
+ if target_transcripts is not None and reference_transcript.transcript_id not in target_transcripts:
337
+ continue
338
+
322
339
  # if (cons_required and not reference_transcript.cons_available) or (
323
340
  # protein_coding and not reference_transcript.transcript_biotype == 'protein_coding'):
324
341
  if protein_coding and not reference_transcript.transcript_biotype == 'protein_coding':
@@ -338,9 +355,6 @@ def oncosplice(mut_id, splicing_threshold=0.5, protein_coding=True, cons_require
338
355
  mutated_transcript.mutate(mutation, inplace=True)
339
356
 
340
357
  reference_transcript.generate_mature_mrna().generate_protein()
341
- # if ('*' in reference_transcript.protein[:-1]):
342
- # print(f"> Errors in reference transcript {reference_transcript.transcript_id}")
343
- # continue
344
358
 
345
359
  if len(reference_transcript.protein) < window_length:
346
360
  print(f"> Window length issue {reference_transcript.transcript_id}")
@@ -415,15 +429,173 @@ def oncosplice(mut_id, splicing_threshold=0.5, protein_coding=True, cons_require
415
429
  results.append(report)
416
430
 
417
431
  if len(results) == 0:
418
- print("Nothing...")
419
- return None
432
+ # print("Nothing...")
433
+ return pd.DataFrame()
420
434
 
421
435
  return pd.DataFrame(results)[
422
436
  ['mut_id', 'transcript_id', 'isoform_id', 'primary_transcript', 'missplicing', 'full_missplicing',
423
437
  'exon_changes', 'splicing_codes', 'affected_exon', 'affected_intron', 'mutation_distance_from_5',
424
- 'mutation_distance_from_3', 'reference_resemblance', 'oncosplice_score', 'percentile',
438
+ 'mutation_distance_from_3', 'missense_effect', 'codon_change', 'reference_resemblance', 'oncosplice_score', 'percentile',
425
439
  'isoform_prevalence', 'reference_protein', 'variant_protein', 'splicing_engine']]
426
440
 
441
+
442
+ def process_splicing_path(new_boundaries, reference_transcript, mutated_transcript,
443
+ current_mutations, missplicing, mut_id, transcript_id,
444
+ splicing_engine, window_length, start_time):
445
+ """
446
+ Processes a single alternative splicing path and returns an annotation report.
447
+ """
448
+ # Update acceptors and donors
449
+ mutated_transcript.acceptors = new_boundaries['acceptors']
450
+ mutated_transcript.donors = new_boundaries['donors']
451
+ mutated_transcript.generate_mature_mrna().generate_protein()
452
+
453
+ # Align reference and mutated proteins
454
+ alignment = get_logical_alignment(reference_transcript.protein, mutated_transcript.protein)
455
+ deleted, inserted = find_indels_with_mismatches_as_deletions(alignment.seqA, alignment.seqB)
456
+ modified_positions = find_modified_positions(len(reference_transcript.protein), deleted, inserted)
457
+
458
+ # Compute conservation impact
459
+ temp_cons = np.convolve(reference_transcript.cons_vector * modified_positions,
460
+ np.ones(window_length)) / window_length
461
+ affected_cons_scores = max(temp_cons)
462
+
463
+ # Compute percentile of conservation change
464
+ sorted_cons = sorted(reference_transcript.cons_vector)
465
+ percentile = (
466
+ sorted_cons.index(next(x for x in sorted_cons if x >= affected_cons_scores)) / len(sorted_cons)
467
+ )
468
+
469
+ # Generate annotation report
470
+ report = OncospliceAnnotator(reference_transcript, mutated_transcript, current_mutations[0])
471
+ report.update({
472
+ 'mut_id': mut_id,
473
+ 'transcript_id': transcript_id,
474
+ 'splicing_engine': splicing_engine if splicing_engine is not None else 'None',
475
+ 'oncosplice_score': affected_cons_scores,
476
+ 'percentile': percentile,
477
+ 'isoform_id': short_hash_of_list(mutated_transcript.exons),
478
+ 'isoform_prevalence': new_boundaries['path_weight'],
479
+ 'full_missplicing': missplicing.aberrant_splicing,
480
+ 'missplicing': missplicing.max_delta,
481
+ 'execution_time': start_time,
482
+ 'status': 'Success'
483
+ })
484
+ return report
485
+
486
+
487
+ def oncosplice_df(row, splicing_threshold=0.5, window_length=13,
488
+ organism='hg38', splicing_engine='spliceai'):
489
+ """
490
+ Process a given mutation-transcript pair to analyze alternative splicing events
491
+ and their oncogenic potential.
492
+
493
+ Ensures that every `mut_id` and `transcript_id` is included in the output,
494
+ even if processing fails, with an appropriate failure status.
495
+
496
+ Parameters:
497
+ - row (pd.Series): A row from a DataFrame containing `mut_id` and `transcript_id`
498
+ - splicing_threshold (float): The threshold for splicing disruption detection
499
+ - window_length (int): The window size for conservation analysis
500
+ - organism (str): Genome assembly version
501
+ - splicing_engine (str or None): The splicing prediction engine to use
502
+
503
+ Returns:
504
+ - pd.DataFrame: Processed results of the oncosplice analysis
505
+ - Run "pd.concat(applied_function_output.to_list(), ignore_index=True)" to build result dataframe
506
+ """
507
+
508
+ start_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Log function start time
509
+ mut_id, transcript_id = row.mut_id, row.transcript_id
510
+
511
+ # Default response template (to ensure all IDs are included)
512
+ base_result = {
513
+ 'mut_id': mut_id,
514
+ 'transcript_id': transcript_id,
515
+ 'status': 'Success', # Will be updated if an issue occurs
516
+ 'execution_time': start_time
517
+ }
518
+
519
+ # Load gene and transcript
520
+ gene = Gene.from_file(mut_id.split(':')[0], organism=organism)
521
+ if gene is None:
522
+ base_result['status'] = 'Gene not found'
523
+ return pd.DataFrame([base_result])
524
+
525
+ mutations = [MutSeqMat.from_mutid(m) for m in mut_id.split('|')]
526
+ reference_transcript = gene.transcript(transcript_id)
527
+
528
+ if reference_transcript is None:
529
+ base_result['status'] = 'Transcript not found'
530
+ return pd.DataFrame([base_result])
531
+
532
+ # Generate the reference transcript
533
+ reference_transcript = (
534
+ reference_transcript.generate_pre_mrna()
535
+ .generate_mature_mrna()
536
+ .generate_protein()
537
+ )
538
+
539
+ # Skip non-protein-coding transcripts
540
+ if reference_transcript.transcript_biotype != 'protein_coding':
541
+ base_result['status'] = 'Non-protein-coding transcript'
542
+ return pd.DataFrame([base_result])
543
+
544
+ # Filter mutations relevant to this transcript
545
+ current_mutations = [m for m in mutations if m in reference_transcript]
546
+ if not current_mutations:
547
+ base_result['status'] = 'No relevant mutations'
548
+ return pd.DataFrame([base_result])
549
+
550
+ # Define mutation center
551
+ center = np.mean([m.indices[0] for m in current_mutations]) // 1
552
+
553
+ # Clone and apply mutations
554
+ mutated_transcript = reference_transcript.clone()
555
+ for mutation in current_mutations:
556
+ mutated_transcript.mutate(mutation, inplace=True)
557
+
558
+ # Adjust window length if necessary
559
+ window_length = min(window_length, len(reference_transcript.protein))
560
+
561
+ # Transform conservation vector
562
+ reference_transcript.cons_vector = transform_conservation_vector(
563
+ reference_transcript.cons_vector, window=window_length
564
+ )
565
+
566
+ # Identify missplicing events
567
+ if splicing_engine is None:
568
+ missplicing = Missplicing()
569
+ else:
570
+ missplicing = find_transcript_missplicing_seqs(
571
+ reference_transcript.pre_mrna.get_context(center, context=7500, padding='N'),
572
+ mutated_transcript.pre_mrna.get_context(center, context=7500, padding='N'),
573
+ reference_transcript.donors, reference_transcript.acceptors,
574
+ threshold=splicing_threshold, engine=splicing_engine
575
+ )
576
+
577
+ # Generate alternative splicing paths
578
+ alternative_splicing_paths = develop_aberrant_splicing(reference_transcript, missplicing)
579
+ results = [
580
+ process_splicing_path(new_boundaries, reference_transcript, mutated_transcript,
581
+ current_mutations, missplicing, mut_id, transcript_id,
582
+ splicing_engine, window_length, start_time)
583
+ for new_boundaries in alternative_splicing_paths
584
+ ]
585
+
586
+ # Return results as DataFrame
587
+ if not results:
588
+ base_result['status'] = 'No alternative splicing detected'
589
+ return pd.DataFrame([base_result])
590
+
591
+ return pd.DataFrame(results)[
592
+ ['mut_id', 'transcript_id', 'isoform_id', 'primary_transcript', 'missplicing', 'full_missplicing',
593
+ 'exon_changes', 'splicing_codes', 'affected_exon', 'affected_intron', 'mutation_distance_from_5',
594
+ 'mutation_distance_from_3', 'missense_effect', 'codon_change', 'oncosplice_score', 'percentile',
595
+ 'isoform_prevalence', 'reference_protein', 'variant_protein', 'splicing_engine', 'execution_time', 'status']
596
+ ]
597
+
598
+
427
599
  #
428
600
  # import asyncio
429
601
  # async def oncosplice_prototype(mut_id, splicing_threshold=0.5, protein_coding=True, primary_transcript=False,
geney/spliceai_utils.py CHANGED
@@ -1,9 +1,6 @@
1
-
2
1
  #### SpliceAI Modules
3
2
  from keras.models import load_model
4
- # from pkg_resources import resource_filename
5
3
  from importlib import resources
6
- # from spliceai.utils import one_hot_encode
7
4
  import numpy as np
8
5
  import tensorflow as tf
9
6
  import sys
@@ -17,18 +14,25 @@ else:
17
14
  # tf.config.threading.set_intra_op_parallelism_threads(1)
18
15
  # tf.config.threading.set_inter_op_parallelism_threads(1)
19
16
 
20
- if sys.platform == 'darwin':
21
- sai_paths = ('models/spliceai{}.h5'.format(x) for x in range(1, 6))
22
- # sai_models = [load_model(resource_filename('spliceai', x)) for x in sai_paths]
23
- sai_models = [load_model(resources.files('spliceai').joinpath(f)) for f in sai_paths]
24
- else:
25
- sai_paths = ['/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai1.h5',
26
- '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai2.h5',
27
- '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai3.h5',
28
- '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai4.h5',
29
- '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai5.h5']
30
-
31
- sai_models = [load_model(f) for f in sai_paths]
17
+ # List the model filenames relative to the spliceai package.
18
+ model_filenames = [f"models/spliceai{i}.h5" for i in range(1, 6)]
19
+
20
+ # Load each model using the package resources.
21
+ sai_models = [load_model(resources.files("spliceai").joinpath(filename))
22
+ for filename in model_filenames]
23
+
24
+ # if sys.platform == 'darwin':
25
+ # sai_paths = ('models/spliceai{}.h5'.format(x) for x in range(1, 6))
26
+ # # sai_models = [load_model(resource_filename('spliceai', x)) for x in sai_paths]
27
+ # sai_models = [load_model(resources.files('spliceai').joinpath(f)) for f in sai_paths]
28
+ # else:
29
+ # sai_paths = ['/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai1.h5',
30
+ # '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai2.h5',
31
+ # '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai3.h5',
32
+ # '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai4.h5',
33
+ # '/tamir2/nicolaslynn/home/miniconda3/lib/python3.10/site-packages/spliceai/models/spliceai5.h5']
34
+
35
+ # sai_models = [load_model(f) for f in sai_paths]
32
36
 
33
37
 
34
38
  def one_hot_encode(seq):
geney/splicing_utils.py CHANGED
@@ -221,29 +221,34 @@ def find_transcript_splicing(transcript, engine: str = 'spliceai') -> Tuple[Dict
221
221
  return donor_probs, acceptor_probs
222
222
 
223
223
 
224
- def find_transcript_missplicing(mut_id, transcript=None, threshold=0.5, engine='spliceai', organism='hg38', db=None, force_recompute=False):
224
+ def missplicing_df(mut_id, **kwargs):
225
+ return find_transcript_missplicing(mut_id, **kwargs).max_delta
226
+
227
+
228
+ def find_transcript_missplicing(mut_id, transcript=None, threshold=0.5, engine='spliceai', organism='hg38'):
225
229
  gene = Gene.from_file(mut_id.split(':')[0], organism=organism)
226
230
  reference_transcript = gene.transcript(transcript) if transcript is not None else gene.transcript()
227
-
228
- if db is not None:
229
- cached_data = db.get_mutation_data(engine, gene.gene_name, mut_id, reference_transcript.transcript_id)
230
- if cached_data and not force_recompute:
231
- return Missplicing(cached_data)
231
+ if reference_transcript is None:
232
+ return Missplicing()
233
+ #
234
+ # if db is not None:
235
+ # cached_data = db.get_mutation_data(engine, gene.gene_name, mut_id, reference_transcript.transcript_id)
236
+ # if cached_data and not force_recompute:
237
+ # return Missplicing(cached_data)
232
238
 
233
239
  variant_transcript = reference_transcript.clone()
234
240
  mutations = [MutSeqMat.from_mutid(m) for m in mut_id.split('|')]
235
241
  mutations = [m for m in mutations if m in reference_transcript]
236
242
  if len(mutations) == 0:
237
- return Missplicing({'missed_acceptors': {}, 'missed_donors': {}, 'discovered_acceptors': {}, 'discovered_donors': {}})
243
+ return Missplicing()
238
244
 
239
245
  center = int(np.mean([m.indices[0] for m in mutations]))
240
246
  for mutation in mutations:
241
247
  variant_transcript.mutate(mutation, inplace=True)
242
248
 
243
249
  missplicing = find_transcript_missplicing_seqs(reference_transcript.pre_mrna.get_context(center, 7500, padding='N'), variant_transcript.pre_mrna.get_context(center, 7500, padding='N'), reference_transcript.donors, reference_transcript.acceptors, threshold=threshold, engine=engine)
244
- if db is not None:
245
- db.store_mutation_data(engine, gene.gene_name, mut_id, reference_transcript.transcript_id, missplicing.missplicing)
246
-
250
+ # if db is not None:
251
+ # db.store_mutation_data(engine, gene.gene_name, mut_id, reference_transcript.transcript_id, missplicing.missplicing)
247
252
  return missplicing
248
253
 
249
254
  # from functools import reduce
@@ -650,7 +655,7 @@ def process_pairwise_epistasis_explicit(mid, engine='spliceai'):
650
655
 
651
656
 
652
657
  class Missplicing:
653
- def __init__(self, splicing_dict=None, threshold=0.5):
658
+ def __init__(self, splicing_dict={'missed_acceptors': {}, 'missed_donors': {}, 'discovered_acceptors': {}, 'discovered_donors': {}}, threshold=0.5):
654
659
  """
655
660
  Initialize a Missplicing object.
656
661
 
geney/tcga_utils.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  import pandas as pd
3
2
  import random
4
3
  from pathlib import Path
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geney
3
- Version: 1.3.73
3
+ Version: 1.3.75
4
4
  Summary: A Python package for gene expression modeling.
5
5
  Home-page: https://github.com/nicolaslynn/geney
6
6
  Author: Nicolas Lynn
@@ -1,5 +1,5 @@
1
1
  geney/Fasta_segment.py,sha256=99HxNGNh_MfdVW6hhtlb1vOn7eSmT7oFoEfHDFMxG8w,11275
2
- geney/Gene.py,sha256=oAdwuguD1qWMTrS158ApW4s3MRcb1ZJlinzVeCZcYwE,6966
2
+ geney/Gene.py,sha256=2eznhavDoO4rktisy3U0uz480OsktppEwH5pxC2qoog,7083
3
3
  geney/SeqMats.py,sha256=9-eJnfU2w3LGc0XvVvFEO_QrBneTkC6xkZKDfTcEw5o,19282
4
4
  geney/Transcript.py,sha256=CpfxYkuCwFILozrtLuiWnlr1mRnMKn4o84HVJislgYs,14499
5
5
  geney/__init__.py,sha256=eBdDl42N6UhcYeZDjOnv199Z88fI5_8Y6xW8447OKXM,755
@@ -11,21 +11,21 @@ geney/graphic_utils.py,sha256=oMsBpB9YeEn96gGpKh4MmtagJffWZbk-xPrIwHvkFhA,11016
11
11
  geney/gtex_utils.py,sha256=asL2lHyU5KsbWpV096vkf1Ka7hSo_RRfZqw7p5nERmE,1919
12
12
  geney/immune_utils.py,sha256=ZRni5ttrhpYBnmNr0d0ZatIbNPYs4nmQuoUO00SpsS4,5271
13
13
  geney/mutation_utils.py,sha256=C_kv2MB_L8LlhX3W2ooXjJ3uDoJ8zX1WeDtZKoBZJkI,1547
14
- geney/oncosplice.py,sha256=YZvAnbe8gj9fPvs2DldeQpqhhe_QR9xBLe_0tcm9tdg,24793
14
+ geney/oncosplice.py,sha256=OptwyMhTaL5ptmdPxyuC2Iwm4feQf0n1ZjN0o9hwZ1w,32051
15
15
  geney/pangolin_utils.py,sha256=9jdBXlOcRaUdfi-UpUxHA0AkTMZkUF-Lt7HVZ1nEm3s,2973
16
16
  geney/power_utils.py,sha256=MehZFUdkJ2EFUot709yPEDxSkXmH5XevMebX2HD768A,7330
17
17
  geney/seqmat_utils.py,sha256=wzb3PX5it5bpIFQvcxyzlxfhoJTbHHbsjg0rzh05iVs,19753
18
- geney/spliceai_utils.py,sha256=tVY0T6F6l3fNoaktpn7Kq0oH5ZM0ThFYt9nPi_lfakw,3077
19
- geney/splicing_utils.py,sha256=mAiZXBzb0IzZ_O0CIhxR36q8H9xqPXJOUk2fU1UTqc8,47313
18
+ geney/spliceai_utils.py,sha256=V5DccGjm2GZQINSVxJYPoN8iYQzU4gE9tINy6gmHjOM,3304
19
+ geney/splicing_utils.py,sha256=UkG2YphjLNUYsv3o3RGUTW1ScHbEMOLL2M_7WbgDVME,47466
20
20
  geney/survival_utils.py,sha256=KnAzEviMuXh6SnVXId9PgsFLSbgkduTvYoIthxN7FPA,6886
21
- geney/tcga_utils.py,sha256=D_BNHm-D_K408dlcJm3hzH2c6QNFjQsKvUcOPiQRk7g,17612
21
+ geney/tcga_utils.py,sha256=uJhVnTbTysj0XrEw_YeDKRSLexsqgBLYQdhl7_hnr64,17611
22
22
  geney/tis_utils.py,sha256=la0CZroaKe5RgAyFd4Bf_DqQncklWgAY2823xVst98o,7813
23
23
  geney/utils.py,sha256=KBdwNIywo7INVEQEsuIXauEJobvReE9TXAi5qqXanSI,2775
24
24
  geney/translation_initiation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  geney/translation_initiation/tis_utils.py,sha256=AF3siFjuQH-Rs44EV-80zHdbxRMvN4woLFSHroWIETc,4448
26
26
  geney/translation_initiation/resources/kozak_pssm.json,sha256=pcd0Olziutq-6H3mFWDCD9cujQ_AlZO-iiOvBl82hqE,1165
27
27
  geney/translation_initiation/resources/tis_regressor_model.joblib,sha256=IXb4DUDhJ5rBDKcqMk9zE3ECTZZcdj7Jixz3KpoZ7OA,2592025
28
- geney-1.3.73.dist-info/METADATA,sha256=zBDPXEkIQIf58meB91wGEvGGPfe1rlR7-XZX9toMKdM,990
29
- geney-1.3.73.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
30
- geney-1.3.73.dist-info/top_level.txt,sha256=O-FuNUMb5fn9dhZ-dYCgF0aZtfi1EslMstnzhc5IIVo,6
31
- geney-1.3.73.dist-info/RECORD,,
28
+ geney-1.3.75.dist-info/METADATA,sha256=RJ7URjz5xQLQy1P8fISap3pWB7qdvknUp-c2Zjgtk9I,990
29
+ geney-1.3.75.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
30
+ geney-1.3.75.dist-info/top_level.txt,sha256=O-FuNUMb5fn9dhZ-dYCgF0aZtfi1EslMstnzhc5IIVo,6
31
+ geney-1.3.75.dist-info/RECORD,,
File without changes