pywombat 0.5.0__py3-none-any.whl → 1.0.1__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.
@@ -0,0 +1,641 @@
1
+ Metadata-Version: 2.4
2
+ Name: pywombat
3
+ Version: 1.0.1
4
+ Summary: A CLI tool for processing and filtering bcftools tabulated TSV files with pedigree support
5
+ Project-URL: Homepage, https://github.com/bourgeron-lab/pywombat
6
+ Project-URL: Repository, https://github.com/bourgeron-lab/pywombat
7
+ Project-URL: Issues, https://github.com/bourgeron-lab/pywombat/issues
8
+ Author-email: Freddy Cliquet <fcliquet@pasteur.fr>
9
+ License: MIT
10
+ Keywords: bioinformatics,genomics,pedigree,variant-calling,vcf
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
16
+ Requires-Python: >=3.12
17
+ Requires-Dist: click>=8.1.0
18
+ Requires-Dist: polars>=0.19.0
19
+ Requires-Dist: pyyaml>=6.0
20
+ Requires-Dist: tqdm>=4.67.1
21
+ Description-Content-Type: text/markdown
22
+
23
+ # PyWombat 🦘
24
+
25
+ A high-performance CLI tool for processing and filtering bcftools tabulated TSV files with advanced filtering capabilities, pedigree support, and de novo mutation detection.
26
+
27
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
28
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
29
+
30
+ ## Features
31
+
32
+ ✨ **Fast Processing**: Uses Polars for efficient data handling
33
+ 🔬 **Quality Filtering**: Configurable depth, quality, and VAF thresholds
34
+ 👨‍👩‍👧 **Pedigree Support**: Trio and family analysis with parent genotypes
35
+ 🧬 **De Novo Detection**: Sex-chromosome-aware DNM identification
36
+ 📊 **Flexible Output**: TSV, compressed TSV, or Parquet formats
37
+ 🎯 **Expression Filters**: Complex filtering with logical expressions
38
+ 🏷️ **Boolean Flag Support**: INFO field flags (PASS, DB, etc.) extracted as True/False columns
39
+ ⚡ **Streaming Mode**: Memory-efficient processing of large files
40
+
41
+ ---
42
+
43
+ ## Quick Start
44
+
45
+ ### One-Time Usage (Recommended for Most Users)
46
+
47
+ Use `uvx` to run PyWombat without installation:
48
+
49
+ ```bash
50
+ # Basic formatting
51
+ uvx pywombat input.tsv -o output
52
+
53
+ # With filtering
54
+ uvx pywombat input.tsv -F examples/rare_variants_high_impact.yml -o output
55
+
56
+ # De novo mutation detection
57
+ uvx pywombat input.tsv --pedigree pedigree.tsv \
58
+ -F examples/de_novo_mutations.yml -o denovo
59
+ ```
60
+
61
+ ### Installation for Development/Repeated Use
62
+
63
+ ```bash
64
+ # Clone the repository
65
+ git clone https://github.com/bourgeron-lab/pywombat.git
66
+ cd pywombat
67
+
68
+ # Install with uv
69
+ uv sync
70
+
71
+ # Run with uv run
72
+ uv run wombat input.tsv -o output
73
+ ```
74
+
75
+ ---
76
+
77
+ ## What Does PyWombat Do?
78
+
79
+ PyWombat transforms bcftools tabulated TSV files into analysis-ready formats by:
80
+
81
+ 1. **Expanding the `(null)` INFO column**: Extracts all `NAME=value` fields (e.g., `DP=30;AF=0.5;AC=2`) and boolean flags (e.g., `PASS`, `DB`) into separate columns
82
+ 2. **Melting sample columns**: Converts wide-format sample data into long format with one row per variant-sample combination
83
+ 3. **Extracting genotype data**: Parses `GT:DP:GQ:AD` format into separate columns with calculated VAF
84
+ 4. **Adding parent data**: Joins father/mother genotypes when pedigree is provided
85
+ 5. **Applying filters**: Quality filters, expression-based filters, or de novo detection
86
+
87
+ ### Example Transformation
88
+
89
+ **Input (Wide Format):**
90
+
91
+ ```tsv
92
+ #CHROM POS REF ALT (null) Sample1:GT:DP:GQ:AD Sample2:GT:DP:GQ:AD
93
+ chr1 100 A T DP=30;AF=0.5;PASS;AC=2 0/1:15:99:5,10 1/1:18:99:0,18
94
+ ```
95
+
96
+ **Output (Long Format):**
97
+
98
+ ```tsv
99
+ #CHROM POS REF ALT AC AF DP PASS sample sample_gt sample_dp sample_gq sample_ad sample_vaf
100
+ chr1 100 A T 2 0.5 30 true Sample1 0/1 15 99 10 0.6667
101
+ chr1 100 A T 2 0.5 30 true Sample2 1/1 18 99 18 1.0
102
+ ```
103
+
104
+ **Generated Columns:**
105
+
106
+ - INFO fields with `=`: Extracted as separate columns (e.g., `DP`, `AF`, `AC`)
107
+ - INFO boolean flags: Extracted as True/False columns (e.g., `PASS`, `DB`, `SOMATIC`)
108
+ - `sample`: Sample identifier
109
+ - `sample_gt`: Genotype (e.g., 0/1, 1/1)
110
+ - `sample_dp`: Read depth (total coverage)
111
+ - `sample_gq`: Genotype quality score
112
+ - `sample_ad`: Alternate allele depth (from second value in AD field)
113
+ - `sample_vaf`: Variant allele frequency (sample_ad / sample_dp)
114
+
115
+ ---
116
+
117
+ ## Basic Usage
118
+
119
+ ### Format Without Filtering
120
+
121
+ ```bash
122
+ # Output to file
123
+ uvx pywombat input.tsv -o output
124
+
125
+ # Output to stdout (useful for piping)
126
+ uvx pywombat input.tsv
127
+
128
+ # Compressed output
129
+ uvx pywombat input.tsv -o output -f tsv.gz
130
+
131
+ # Parquet format (fastest for large files)
132
+ uvx pywombat input.tsv -o output -f parquet
133
+
134
+ # With verbose output
135
+ uvx pywombat input.tsv -o output --verbose
136
+ ```
137
+
138
+ ### With Pedigree (Trio/Family Analysis)
139
+
140
+ Add parent genotype information for inheritance analysis:
141
+
142
+ ```bash
143
+ uvx pywombat input.tsv --pedigree pedigree.tsv -o output
144
+ ```
145
+
146
+ **Pedigree File Format** (tab-separated):
147
+
148
+ ```tsv
149
+ FID sample_id FatherBarcode MotherBarcode Sex Pheno
150
+ FAM1 Child1 Father1 Mother1 1 2
151
+ FAM1 Father1 0 0 1 1
152
+ FAM1 Mother1 0 0 2 1
153
+ ```
154
+
155
+ - `FID`: Family ID
156
+ - `sample_id`: Sample name (must match VCF)
157
+ - `FatherBarcode`: Father's sample name (0 = unknown)
158
+ - `MotherBarcode`: Mother's sample name (0 = unknown)
159
+ - `Sex`: 1=male, 2=female (or M/F)
160
+ - `Pheno`: 1=unaffected, 2=affected
161
+
162
+ **Output with pedigree includes additional columns:**
163
+
164
+ - `father_gt`, `father_dp`, `father_gq`, `father_ad`, `father_vaf`
165
+ - `mother_gt`, `mother_dp`, `mother_gq`, `mother_ad`, `mother_vaf`
166
+
167
+ ---
168
+
169
+ ## Advanced Filtering
170
+
171
+ PyWombat supports two types of filtering:
172
+
173
+ 1. **Expression-based filtering**: For rare variants, impact filtering, frequency filtering
174
+ 2. **De novo mutation detection**: Specialized logic for identifying DNMs in trios/families
175
+
176
+ ### 1. Rare Variant Filtering
177
+
178
+ Filter for ultra-rare, high-impact variants:
179
+
180
+ ```bash
181
+ uvx pywombat input.tsv \
182
+ -F examples/rare_variants_high_impact.yml \
183
+ -o rare_variants
184
+ ```
185
+
186
+ **Configuration** (`rare_variants_high_impact.yml`):
187
+
188
+ ```yaml
189
+ quality:
190
+ sample_dp_min: 10 # Minimum read depth
191
+ sample_gq_min: 19 # Minimum genotype quality
192
+ sample_vaf_het_min: 0.25 # Het VAF range: 25-75%
193
+ sample_vaf_het_max: 0.75
194
+ sample_vaf_homalt_min: 0.85 # Hom alt VAF ≥ 85%
195
+ apply_to_parents: true # Also filter parent genotypes
196
+ filter_no_alt_allele: true # Exclude 0/0 genotypes
197
+
198
+ expression: "VEP_CANONICAL = YES & VEP_IMPACT = HIGH & VEP_LoF = HC & VEP_LoF_flags = . & ( fafmax_faf95_max_genomes = null | fafmax_faf95_max_genomes <= 0.001 )"
199
+ ```
200
+
201
+ **What this does:**
202
+
203
+ - Filters for canonical transcripts with HIGH impact
204
+ - Loss-of-function (LoF) with high confidence, no flags
205
+ - Ultra-rare: ≤0.1% frequency in gnomAD genomes
206
+ - Stringent quality: DP≥10, GQ≥19, appropriate VAF
207
+
208
+ ### 2. De Novo Mutation Detection
209
+
210
+ Identify de novo mutations in trio data:
211
+
212
+ ```bash
213
+ uvx pywombat input.tsv \
214
+ --pedigree pedigree.tsv \
215
+ -F examples/de_novo_mutations.yml \
216
+ -o denovo
217
+ ```
218
+
219
+ **Configuration** (`de_novo_mutations.yml`):
220
+
221
+ ```yaml
222
+ quality:
223
+ sample_dp_min: 10
224
+ sample_gq_min: 18
225
+ sample_vaf_min: 0.20
226
+
227
+ dnm:
228
+ enabled: true
229
+ parent_dp_min: 10 # Parent quality thresholds
230
+ parent_gq_min: 18
231
+ parent_vaf_max: 0.02 # Max 2% VAF in parents
232
+
233
+ sample_vaf_hemizygous_min: 0.85 # For X male, Y, and hom variants
234
+
235
+ fafmax_faf95_max_genomes_max: 0.001 # Max 0.1% in gnomAD
236
+ genomes_filters_pass_only: true # Only PASS variants
237
+
238
+ par_regions: # Pseudo-autosomal regions (GRCh38)
239
+ grch38:
240
+ PAR1:
241
+ chrom: X
242
+ start: 10000
243
+ end: 2781479
244
+ PAR2:
245
+ chrom: X
246
+ start: 155701383
247
+ end: 156030895
248
+ ```
249
+
250
+ **Sex-Chromosome Aware Logic:**
251
+
252
+ - **Autosomes & PAR**: Both parents must be 0/0 with VAF<2%
253
+ - **X in males (non-PAR)**: Mother must be 0/0, father not informative
254
+ - **Y in males**: Father must be 0/0, mother N/A
255
+ - **Hemizygous variants**: Require VAF ≥ 85%
256
+
257
+ ---
258
+
259
+ ## Expression-Based Filtering
260
+
261
+ Create custom filters using logical expressions:
262
+
263
+ ### Available Operators
264
+
265
+ - **Comparison**: `=`, `!=`, `<`, `>`, `<=`, `>=`
266
+ - **Logical**: `&` (AND), `|` (OR)
267
+ - **Grouping**: `(`, `)`
268
+ - **Null checks**: `= null`, `!= null`
269
+
270
+ ### Example Expressions
271
+
272
+ ```yaml
273
+ # High or moderate impact with low frequency
274
+ expression: "(VEP_IMPACT = HIGH | VEP_IMPACT = MODERATE) & gnomad_AF < 0.001"
275
+
276
+ # Canonical transcripts with CADD score
277
+ expression: "VEP_CANONICAL = YES & CADD_PHRED >= 20"
278
+
279
+ # Specific consequence types
280
+ expression: "VEP_Consequence = frameshift_variant | VEP_Consequence = stop_gained"
281
+
282
+ # Multiple criteria
283
+ expression: "VEP_IMPACT = HIGH & VEP_CANONICAL = YES & gnomad_AF < 0.01 & CADD_PHRED >= 25"
284
+ ```
285
+
286
+ ---
287
+
288
+ ## Debug Mode
289
+
290
+ Inspect specific variants for troubleshooting:
291
+
292
+ ```bash
293
+ uvx pywombat input.tsv \
294
+ -F config.yml \
295
+ --debug chr11:70486013
296
+ ```
297
+
298
+ Shows:
299
+
300
+ - All rows matching the position
301
+ - VEP_SYMBOL if available
302
+ - All columns mentioned in filter expression
303
+ - Useful for understanding why variants pass/fail filters
304
+
305
+ ---
306
+
307
+ ## Output Formats
308
+
309
+ ### TSV (Default)
310
+
311
+ ```bash
312
+ uvx pywombat input.tsv -o output # Creates output.tsv
313
+ uvx pywombat input.tsv -o output -f tsv # Same as above
314
+ ```
315
+
316
+ ### Compressed TSV
317
+
318
+ ```bash
319
+ uvx pywombat input.tsv -o output -f tsv.gz # Creates output.tsv.gz
320
+ ```
321
+
322
+ ### Parquet (Fastest for Large Files)
323
+
324
+ ```bash
325
+ uvx pywombat input.tsv -o output -f parquet # Creates output.parquet
326
+ ```
327
+
328
+ **When to use Parquet:**
329
+
330
+ - Large cohorts (>100 samples)
331
+ - Downstream analysis with Polars/Pandas
332
+ - Need for fast repeated access
333
+ - Storage efficiency
334
+
335
+ ---
336
+
337
+ ## Example Workflows
338
+
339
+ ### 1. Rare Disease Gene Discovery
340
+
341
+ ```bash
342
+ # Step 1: Filter for rare, high-impact variants
343
+ uvx pywombat cohort.tsv \
344
+ -F examples/rare_variants_high_impact.yml \
345
+ -o rare_variants
346
+
347
+ # Step 2: Further filter with gene list (in downstream analysis)
348
+ # Use the output TSV with your favorite tools (R, Python, etc.)
349
+ ```
350
+
351
+ ### 2. Autism Trio Analysis
352
+
353
+ ```bash
354
+ # Identify de novo mutations in autism cohort
355
+ uvx pywombat autism_trios.tsv \
356
+ --pedigree autism_pedigree.tsv \
357
+ -F examples/de_novo_mutations.yml \
358
+ -o autism_denovo \
359
+ --verbose
360
+
361
+ # Review output for genes in autism risk lists
362
+ ```
363
+
364
+ ### 3. Multi-Family Rare Variant Analysis
365
+
366
+ ```bash
367
+ # Process multiple families together
368
+ uvx pywombat families.tsv \
369
+ --pedigree families_pedigree.tsv \
370
+ -F examples/rare_variants_high_impact.yml \
371
+ -o families_rare_variants \
372
+ -f parquet # Parquet for fast downstream analysis
373
+ ```
374
+
375
+ ### 4. Custom Expression Filter
376
+
377
+ Create `custom_filter.yml`:
378
+
379
+ ```yaml
380
+ quality:
381
+ sample_dp_min: 15
382
+ sample_gq_min: 20
383
+ sample_vaf_het_min: 0.30
384
+ sample_vaf_het_max: 0.70
385
+
386
+ expression: "VEP_IMPACT = HIGH & (gnomad_AF < 0.0001 | gnomad_AF = null)"
387
+ ```
388
+
389
+ Apply:
390
+
391
+ ```bash
392
+ uvx pywombat input.tsv -F custom_filter.yml -o output
393
+ ```
394
+
395
+ ---
396
+
397
+ ## Input Requirements
398
+
399
+ ### bcftools Tabulated Format
400
+
401
+ PyWombat expects TSV files created with bcftools:
402
+
403
+ ```bash
404
+ # From VCF to tabulated TSV
405
+ bcftools query -HH -f '%CHROM\t%POS\t%REF\t%ALT\t%FILTER\t%INFO[\t%GT:%DP:%GQ:%AD]\n' \
406
+ input.vcf.gz > input.tsv
407
+
408
+ # With specific INFO fields
409
+ bcftools query -HH \
410
+ -f '%CHROM\t%POS\t%REF\t%ALT\t%FILTER\t%INFO/DP;%INFO/AF;%INFO/AC[\t%GT:%DP:%GQ:%AD]\n' \
411
+ input.vcf.gz > input.tsv
412
+ ```
413
+
414
+ **Expected format:**
415
+
416
+ - Tab-separated values
417
+ - Header row with column names (use `-HH` for proper headers)
418
+ - `(null)` column containing INFO fields
419
+ - Sample columns in `GT:DP:GQ:AD` format (or similar)
420
+ - Optional FILTER column for quality control
421
+
422
+ ### VEP Annotations
423
+
424
+ For expression-based filtering on VEP annotations, a two-step process is required:
425
+
426
+ #### Step 1: Split VEP CSQ Field
427
+
428
+ **IMPORTANT**: PyWombat requires VEP annotations to be split into individual fields with the `VEP_` prefix:
429
+
430
+ ```bash
431
+ # Split VEP CSQ field - creates one row per transcript/consequence
432
+ # This prefixes all CSQ columns with "VEP_" (e.g., VEP_SYMBOL, VEP_IMPACT)
433
+ bcftools +split-vep -c - -p VEP_ -O b -o annotated.split.bcf input.vcf.gz
434
+ ```
435
+
436
+ #### Step 2: Convert to Tabulated Format
437
+
438
+ ```bash
439
+ # Extract to TSV with genotype information
440
+ bcftools query -HH \
441
+ -f '%CHROM\t%POS\t%REF\t%ALT\t%FILTER\t%INFO[\t%GT:%DP:%GQ:%AD]\n' \
442
+ annotated.split.bcf > annotated.tsv
443
+ ```
444
+
445
+ #### Complete VEP Workflow
446
+
447
+ ```bash
448
+ # 1. Annotate with VEP
449
+ vep -i input.vcf.gz \
450
+ --cache --offline \
451
+ --format vcf \
452
+ --vcf \
453
+ --everything \
454
+ --canonical \
455
+ --plugin LoF \
456
+ -o annotated.vcf.gz
457
+
458
+ # 2. Split VEP CSQ field (REQUIRED for PyWombat)
459
+ bcftools +split-vep -c - -p VEP_ -O b -o annotated.split.bcf annotated.vcf.gz
460
+
461
+ # 3. Convert to tabulated format
462
+ bcftools query -HH \
463
+ -f '%CHROM\t%POS\t%REF\t%ALT\t%FILTER\t%INFO[\t%GT:%DP:%GQ:%AD]\n' \
464
+ annotated.split.bcf > annotated.tsv
465
+
466
+ # 4. Process with PyWombat
467
+ uvx pywombat annotated.tsv -F examples/rare_variants_high_impact.yml -o output
468
+ ```
469
+
470
+ **Why split-vep is required:**
471
+
472
+ - Creates one row per transcript/consequence (instead of all in one CSQ field)
473
+ - Prefixes VEP fields with `VEP_` making them accessible in expressions
474
+ - Enables filtering on `VEP_CANONICAL`, `VEP_IMPACT`, `VEP_LoF`, etc.
475
+
476
+ #### Pipeline Optimization
477
+
478
+ For production workflows, these commands can be piped together:
479
+
480
+ ```bash
481
+ # Efficient pipeline (single pass through data)
482
+ bcftools +split-vep -c - -p VEP_ input.vcf.gz | \
483
+ bcftools query -HH -f '%CHROM\t%POS\t%REF\t%ALT\t%FILTER\t%INFO[\t%GT:%DP:%GQ:%AD]\n' | \
484
+ uvx pywombat - -F config.yml -o output
485
+ ```
486
+
487
+ **Note**: For multiple filter configurations, it's more efficient to save the intermediate TSV file rather than regenerating it each time.
488
+
489
+ ### gnomAD Annotations
490
+
491
+ For frequency filtering, annotate with gnomAD:
492
+
493
+ ```bash
494
+ # Using bcftools annotate
495
+ bcftools annotate -a gnomad.genomes.vcf.gz \
496
+ -c INFO/AF,INFO/fafmax_faf95_max \
497
+ input.vcf.gz -o annotated.vcf.gz
498
+ ```
499
+
500
+ ---
501
+
502
+ ## Configuration Examples
503
+
504
+ See the [`examples/`](examples/) directory for complete configuration files:
505
+
506
+ - **[`rare_variants_high_impact.yml`](examples/rare_variants_high_impact.yml)**: Ultra-rare, high-impact variants
507
+ - **[`de_novo_mutations.yml`](examples/de_novo_mutations.yml)**: De novo mutation detection with sex-chromosome handling
508
+
509
+ Each configuration file is fully documented with:
510
+
511
+ - Parameter descriptions
512
+ - Use case recommendations
513
+ - Customization tips
514
+ - Example command lines
515
+
516
+ ---
517
+
518
+ ## Performance Tips
519
+
520
+ 1. **Use streaming mode** (default): Efficient for most workflows
521
+ 2. **Parquet output**: Faster for large files and repeated analysis
522
+ 3. **Pre-filter with bcftools**: Filter by region/gene before PyWombat
523
+ 4. **Compressed input**: PyWombat handles `.gz` files natively
524
+ 5. **Filter early**: Apply quality filters before complex expression filters
525
+
526
+ ---
527
+
528
+ ## Development
529
+
530
+ ### Setup
531
+
532
+ ```bash
533
+ # Clone repository
534
+ git clone https://github.com/bourgeron-lab/pywombat.git
535
+ cd pywombat
536
+
537
+ # Install dependencies
538
+ uv sync
539
+
540
+ # Run tests (if available)
541
+ uv run pytest
542
+ ```
543
+
544
+ ### Project Structure
545
+
546
+ ```
547
+ pywombat/
548
+ ├── src/pywombat/
549
+ │ ├── __init__.py
550
+ │ └── cli.py # Main CLI implementation
551
+ ├── examples/ # Configuration examples
552
+ │ ├── README.md
553
+ │ ├── rare_variants_high_impact.yml
554
+ │ └── de_novo_mutations.yml
555
+ ├── tests/ # Test files and data
556
+ ├── pyproject.toml # Project metadata
557
+ └── README.md
558
+ ```
559
+
560
+ ### Technology Stack
561
+
562
+ - **[Polars](https://pola.rs/)**: Fast DataFrame operations
563
+ - **[Click](https://click.palletsprojects.com/)**: CLI interface
564
+ - **[PyYAML](https://pyyaml.org/)**: Configuration parsing
565
+ - **[uv](https://github.com/astral-sh/uv)**: Package management
566
+
567
+ ---
568
+
569
+ ## Troubleshooting
570
+
571
+ ### Common Issues
572
+
573
+ **Issue**: `Column '(null)' not found`
574
+
575
+ - **Solution**: Ensure input is bcftools tabulated format with INFO column
576
+
577
+ **Issue**: `No parent genotypes found`
578
+
579
+ - **Solution**: Check pedigree file format and sample name matching
580
+
581
+ **Issue**: `DNM filter requires pedigree`
582
+
583
+ - **Solution**: Add `--pedigree` option when using de novo config
584
+
585
+ **Issue**: Variants missing from output
586
+
587
+ - **Solution**: Use `--debug chr:pos` to see why variants are filtered
588
+
589
+ **Issue**: Memory errors on large files
590
+
591
+ - **Solution**: Files are processed in streaming mode by default; if issues persist, pre-filter with bcftools
592
+
593
+ ### Getting Help
594
+
595
+ 1. Check `--help` for command options: `uvx pywombat --help`
596
+ 2. Review example configurations in [`examples/`](examples/)
597
+ 3. Use `--debug` mode to inspect specific variants
598
+ 4. Use `--verbose` to see filtering steps
599
+
600
+ ---
601
+
602
+ ## Citation
603
+
604
+ If you use PyWombat in your research, please cite:
605
+
606
+ ```
607
+ PyWombat: A tool for processing and filtering bcftools tabulated files
608
+ Bourgeron Lab, Institut Pasteur
609
+ https://github.com/bourgeron-lab/pywombat
610
+ ```
611
+
612
+ ---
613
+
614
+ ## License
615
+
616
+ MIT License - see [LICENSE](LICENSE) file for details
617
+
618
+ ---
619
+
620
+ ## Contributing
621
+
622
+ Contributions are welcome! Please:
623
+
624
+ 1. Fork the repository
625
+ 2. Create a feature branch
626
+ 3. Make your changes
627
+ 4. Submit a pull request
628
+
629
+ ---
630
+
631
+ ## Authors
632
+
633
+ - **Freddy Cliquet** - [Bourgeron Lab](https://research.pasteur.fr/en/team/human-genetics-and-cognitive-functions/), Institut Pasteur
634
+
635
+ ---
636
+
637
+ ## Acknowledgments
638
+
639
+ - Bourgeron Lab for project support
640
+ - Institut Pasteur for infrastructure
641
+ - Polars team for the excellent DataFrame library
@@ -0,0 +1,6 @@
1
+ pywombat/__init__.py,sha256=iIPN9vJtsIUhl_DiKNnknxCamLinfayodLLFK8y-aJg,54
2
+ pywombat/cli.py,sha256=eaChYSTxEc3lXxVRKe3X8bRGKmgxUE0Vuy9Cr5wPTi4,74853
3
+ pywombat-1.0.1.dist-info/METADATA,sha256=G0xdJEOwfB-J1ZOy6qphijM4JBygZppMeRs0J8mzSj0,17168
4
+ pywombat-1.0.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
5
+ pywombat-1.0.1.dist-info/entry_points.txt,sha256=Vt7U2ypbiEgCBlEV71ZPk287H5_HKmPBT4iBu6duEcE,44
6
+ pywombat-1.0.1.dist-info/RECORD,,