pythonflex 0.1.5__tar.gz → 0.1.6__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.
- pythonflex-0.1.6/.vscode/settings.json +5 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/PKG-INFO +1 -1
- {pythonflex-0.1.5 → pythonflex-0.1.6}/pyproject.toml +1 -1
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/analysis.py +81 -58
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/examples/basic_usage.py +13 -32
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/examples/dataset_filtering.py +2 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/plotting.py +6 -4
- pythonflex-0.1.6/test/test_corrected_auc.py +33 -0
- pythonflex-0.1.6/test/test_inputs.py +44 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/.gitignore +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/.python-version +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/README.md +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/__init__.py +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/dataset/liver_cell_lines_500_genes.csv +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/dataset/melanoma_cell_lines_500_genes.csv +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/dataset/neuroblastoma_cell_lines_500_genes.csv +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/gold_standard/CORUM.parquet +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/gold_standard/GOBP.parquet +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/gold_standard/PATHWAY.parquet +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/gold_standard/corum.csv +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/gold_standard/gobp.csv +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/gold_standard/pathway.csv +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/logging_config.py +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/preprocessing.py +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/utils.py +0 -0
- {pythonflex-0.1.5 → pythonflex-0.1.6}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythonflex
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: pythonFLEX is a benchmarking toolkit for evaluating CRISPR screen results against biological gold standards. The toolkit computes gene-level and complex-level performance metrics, helping researchers systematically assess the biological relevance and resolution of their CRISPR screening data.
|
|
5
5
|
Author-email: Yasir Demirtaş <tyasird@hotmail.com>
|
|
6
6
|
Requires-Python: >=3.9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pythonflex"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.6"
|
|
4
4
|
description = "pythonFLEX is a benchmarking toolkit for evaluating CRISPR screen results against biological gold standards. The toolkit computes gene-level and complex-level performance metrics, helping researchers systematically assess the biological relevance and resolution of their CRISPR screening data."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -172,15 +172,14 @@ def pra(dataset_name, matrix, is_corr=False):
|
|
|
172
172
|
pr_auc = metrics.auc(recall, precision)
|
|
173
173
|
df["precision"] = precision
|
|
174
174
|
df["recall"] = recall
|
|
175
|
-
|
|
175
|
+
|
|
176
176
|
log.info(f"PR-AUC: {pr_auc:.4f}, Number of true positives: {df['prediction'].sum()}")
|
|
177
177
|
dsave(df, "pra", dataset_name)
|
|
178
178
|
dsave(pr_auc, "pr_auc", dataset_name)
|
|
179
|
-
|
|
180
|
-
return df, pr_auc
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
dsave( _corrected_auc(df) , "corrected_pr_auc", dataset_name)
|
|
183
180
|
|
|
181
|
+
log.done(f"Global PRA completed for {dataset_name}")
|
|
182
|
+
return df
|
|
184
183
|
|
|
185
184
|
|
|
186
185
|
|
|
@@ -189,6 +188,9 @@ def pra(dataset_name, matrix, is_corr=False):
|
|
|
189
188
|
# helper functions for PRA per-complex analysis
|
|
190
189
|
# --------------------------------------------------------------------------
|
|
191
190
|
|
|
191
|
+
def _corrected_auc(df: pd.DataFrame) -> float:
|
|
192
|
+
return np.trapz(df["precision"], df["recall"]) - df["precision"].iloc[-1]
|
|
193
|
+
|
|
192
194
|
def _build_gene_to_pair_indices(pairwise_df):
|
|
193
195
|
indices = pairwise_df.index.values
|
|
194
196
|
genes = pd.concat([pairwise_df['gene1'], pairwise_df['gene2']], ignore_index=True)
|
|
@@ -240,10 +242,15 @@ def _dump_pairwise_memmap(df: pd.DataFrame, tag: str) -> Path:
|
|
|
240
242
|
|
|
241
243
|
|
|
242
244
|
|
|
243
|
-
|
|
245
|
+
# Global variables for worker processes (compatible with older joblib)
|
|
246
|
+
PAIRWISE_DF = None
|
|
247
|
+
GENE2IDX = None
|
|
248
|
+
|
|
249
|
+
def _init_worker_globals(memmap_path, gene_to_pair_indices):
|
|
250
|
+
"""Initialize global variables for worker processes"""
|
|
244
251
|
global PAIRWISE_DF, GENE2IDX
|
|
245
252
|
PAIRWISE_DF = load(memmap_path)
|
|
246
|
-
GENE2IDX
|
|
253
|
+
GENE2IDX = gene_to_pair_indices
|
|
247
254
|
|
|
248
255
|
|
|
249
256
|
|
|
@@ -263,42 +270,52 @@ def delete_memmap(memmap_path, log, wait_seconds=0.1):
|
|
|
263
270
|
# --------------------------------------------------------------------------
|
|
264
271
|
# Process each chunk of terms
|
|
265
272
|
# --------------------------------------------------------------------------
|
|
266
|
-
def _process_chunk(chunk_terms, min_genes):
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
273
|
+
def _process_chunk(chunk_terms, min_genes, memmap_path, gene_to_pair_indices):
|
|
274
|
+
"""Process a chunk of terms - compatible with older joblib versions"""
|
|
275
|
+
try:
|
|
276
|
+
# Load data in each worker (compatible with older joblib)
|
|
277
|
+
pairwise_df = load(memmap_path)
|
|
278
|
+
local_auc_scores = {}
|
|
279
|
+
local_corrected_auc_scores = {}
|
|
280
|
+
|
|
281
|
+
for idx, row in chunk_terms.iterrows():
|
|
282
|
+
gene_set = set(row.used_genes)
|
|
283
|
+
if len(gene_set) < min_genes:
|
|
284
|
+
continue
|
|
275
285
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
286
|
+
candidate_indices = bitarray(len(pairwise_df))
|
|
287
|
+
for g in gene_set:
|
|
288
|
+
if g in gene_to_pair_indices:
|
|
289
|
+
candidate_indices[gene_to_pair_indices[g]] = True
|
|
290
|
+
if not candidate_indices.any():
|
|
291
|
+
continue
|
|
282
292
|
|
|
283
|
-
|
|
284
|
-
|
|
293
|
+
selected = np.unpackbits(candidate_indices).view(bool)[:len(pairwise_df)]
|
|
294
|
+
sub_df = pairwise_df.iloc[selected]
|
|
285
295
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
296
|
+
complex_id = str(idx)
|
|
297
|
+
pattern = r'(?:^|;)' + re.escape(complex_id) + r'(?:;|$)'
|
|
298
|
+
true_label = sub_df["complex_ids"].str.contains(pattern, regex=True).astype(int)
|
|
299
|
+
mask = (sub_df["complex_ids"] == "") | (true_label == 1)
|
|
300
|
+
preds = true_label[mask]
|
|
291
301
|
|
|
292
|
-
|
|
293
|
-
|
|
302
|
+
if preds.sum() == 0:
|
|
303
|
+
continue
|
|
294
304
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
305
|
+
tp_cum = preds.cumsum()
|
|
306
|
+
precision = tp_cum / (np.arange(len(preds)) + 1)
|
|
307
|
+
recall = tp_cum / tp_cum.iloc[-1]
|
|
308
|
+
if len(recall) >= 2 and recall.iloc[-1] != 0:
|
|
309
|
+
# Compute regular AUC
|
|
310
|
+
local_auc_scores[idx] = metrics.auc(recall, precision)
|
|
311
|
+
# Compute corrected AUC using the same logic as _corrected_auc function
|
|
312
|
+
local_corrected_auc_scores[idx] = np.trapz(precision, recall) - precision.iloc[-1]
|
|
300
313
|
|
|
301
|
-
|
|
314
|
+
return {'auc': local_auc_scores, 'corrected_auc': local_corrected_auc_scores}
|
|
315
|
+
|
|
316
|
+
except Exception as e:
|
|
317
|
+
# Return error info for debugging
|
|
318
|
+
return {'error': str(e), 'chunk_size': len(chunk_terms)}
|
|
302
319
|
|
|
303
320
|
|
|
304
321
|
|
|
@@ -345,26 +362,23 @@ def pra_percomplex(dataset_name, matrix, is_corr=False, chunk_size=200):
|
|
|
345
362
|
results = None
|
|
346
363
|
|
|
347
364
|
try:
|
|
348
|
-
#
|
|
365
|
+
# Compatible parallel execution for older joblib versions
|
|
349
366
|
log.started("Processing chunks in parallel")
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
)(delayed(_process_chunk)(chunk, min_genes) for chunk in chunks)
|
|
360
|
-
|
|
361
|
-
# Update progress bar once all tasks are complete
|
|
362
|
-
pbar.update(len(chunks))
|
|
367
|
+
|
|
368
|
+
# Use a more conservative approach with older joblib
|
|
369
|
+
results = Parallel(
|
|
370
|
+
n_jobs=min(4, len(chunks)), # Limit to 4 workers or number of chunks
|
|
371
|
+
temp_folder=os.path.dirname(memmap_path),
|
|
372
|
+
max_nbytes='100M', # Set memory limit
|
|
373
|
+
verbose=1 # Show progress
|
|
374
|
+
)(delayed(_process_chunk)(chunk, min_genes, memmap_path, gene_to_pair_indices)
|
|
375
|
+
for chunk in tqdm(chunks, desc="Per-complex PRA"))
|
|
363
376
|
|
|
364
377
|
log.done("Processing chunks in parallel")
|
|
365
378
|
|
|
366
379
|
except Exception as e:
|
|
367
380
|
log.error(f"Error during parallel processing: {e}")
|
|
381
|
+
log.error(f"Error type: {type(e).__name__}")
|
|
368
382
|
# Still try to clean up the memmap file
|
|
369
383
|
try:
|
|
370
384
|
if os.path.exists(memmap_path):
|
|
@@ -383,19 +397,29 @@ def pra_percomplex(dataset_name, matrix, is_corr=False, chunk_size=200):
|
|
|
383
397
|
except OSError as e:
|
|
384
398
|
log.warning(f"Failed to remove memmap file {memmap_path}: {e}")
|
|
385
399
|
|
|
386
|
-
# Merge results with error handling
|
|
400
|
+
# Merge results with enhanced error handling
|
|
387
401
|
auc_scores = {}
|
|
402
|
+
corrected_auc_scores = {}
|
|
388
403
|
if results:
|
|
389
|
-
for res in results:
|
|
404
|
+
for i, res in enumerate(results):
|
|
390
405
|
if isinstance(res, dict):
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
406
|
+
if 'error' in res:
|
|
407
|
+
log.error(f"Error in chunk {i}: {res['error']}")
|
|
408
|
+
elif 'auc' in res and 'corrected_auc' in res:
|
|
409
|
+
# New format with both AUC types
|
|
410
|
+
auc_scores.update(res['auc'])
|
|
411
|
+
corrected_auc_scores.update(res['corrected_auc'])
|
|
412
|
+
else:
|
|
413
|
+
# Fallback for old format (backward compatibility)
|
|
414
|
+
auc_scores.update(res)
|
|
415
|
+
elif isinstance(res, tuple) and len(res) >= 2 and res[0] is None:
|
|
416
|
+
log.error(f"Chunk {i} error: {res[1]}")
|
|
394
417
|
else:
|
|
395
|
-
log.
|
|
418
|
+
log.warning(f"Unexpected result type from chunk {i}: {type(res)} - {res}")
|
|
396
419
|
|
|
397
420
|
# Add the computed AUC scores to the terms DataFrame.
|
|
398
421
|
terms["auc_score"] = pd.Series(auc_scores)
|
|
422
|
+
terms["corrected_auc_score"] = pd.Series(corrected_auc_scores)
|
|
399
423
|
terms.drop(columns=["hash"], inplace=True)
|
|
400
424
|
dsave(terms, "pra_percomplex", dataset_name)
|
|
401
425
|
log.done(f"Per-complex PRA completed.")
|
|
@@ -1296,4 +1320,3 @@ def save_results_to_csv(categories = ["complex_contributions", "pr_auc", "pra_pe
|
|
|
1296
1320
|
# dsave(pr_auc, "pr_auc", dataset_name)
|
|
1297
1321
|
# log.done(f"Global PRA completed for {dataset_name}")
|
|
1298
1322
|
# return df, pr_auc
|
|
1299
|
-
|
|
@@ -6,16 +6,21 @@ Demonstrates initialization, data loading, analysis, and plotting.
|
|
|
6
6
|
import pythonflex as flex
|
|
7
7
|
|
|
8
8
|
inputs = {
|
|
9
|
-
"
|
|
10
|
-
"path":
|
|
9
|
+
"Melanoma (63 Screens)": {
|
|
10
|
+
"path": flex.get_example_data_path("melanoma_cell_lines_500_genes.csv"),
|
|
11
11
|
"sort": "high"
|
|
12
12
|
},
|
|
13
|
-
"
|
|
14
|
-
"path":
|
|
13
|
+
"Liver (24 Screens)": {
|
|
14
|
+
"path": flex.get_example_data_path("liver_cell_lines_500_genes.csv"),
|
|
15
15
|
"sort": "high"
|
|
16
|
-
}
|
|
16
|
+
},
|
|
17
|
+
"Neuroblastoma (37 Screens)": {
|
|
18
|
+
"path": flex.get_example_data_path("neuroblastoma_cell_lines_500_genes.csv"),
|
|
19
|
+
"sort": "high"
|
|
20
|
+
},
|
|
17
21
|
}
|
|
18
22
|
|
|
23
|
+
|
|
19
24
|
#%%
|
|
20
25
|
|
|
21
26
|
default_config = {
|
|
@@ -51,8 +56,8 @@ terms, genes_in_terms = flex.load_gold_standard()
|
|
|
51
56
|
#%%
|
|
52
57
|
# Run analysis
|
|
53
58
|
for name, dataset in data.items():
|
|
54
|
-
|
|
55
|
-
fpc = flex.pra_percomplex(name, dataset, is_corr=
|
|
59
|
+
pra = flex.pra(name, dataset, is_corr=False)
|
|
60
|
+
fpc = flex.pra_percomplex(name, dataset, is_corr=False)
|
|
56
61
|
cc = flex.complex_contributions(name)
|
|
57
62
|
|
|
58
63
|
|
|
@@ -60,7 +65,7 @@ for name, dataset in data.items():
|
|
|
60
65
|
# Generate plots
|
|
61
66
|
flex.plot_auc_scores()
|
|
62
67
|
flex.plot_precision_recall_curve()
|
|
63
|
-
flex.plot_percomplex_scatter()
|
|
68
|
+
flex.plot_percomplex_scatter(n_top=20)
|
|
64
69
|
flex.plot_percomplex_scatter_bysize()
|
|
65
70
|
flex.plot_significant_complexes()
|
|
66
71
|
flex.plot_complex_contributions()
|
|
@@ -82,27 +87,3 @@ flex.save_results_to_csv()
|
|
|
82
87
|
|
|
83
88
|
|
|
84
89
|
|
|
85
|
-
# %%
|
|
86
|
-
import os
|
|
87
|
-
import glob
|
|
88
|
-
|
|
89
|
-
inputs = {
|
|
90
|
-
"depmap all": {
|
|
91
|
-
"path": "../../../../datasets/depmap/24Q4/depmap_geneeffect_all_cellines.csv",
|
|
92
|
-
"sort": "high"
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
# Now auto-discover the rest of the CSVs in the folder
|
|
97
|
-
DATA_DIR = "../../../../datasets/depmap/24Q4/subset/"
|
|
98
|
-
for path in glob.glob(os.path.join(DATA_DIR, "*.csv")):
|
|
99
|
-
|
|
100
|
-
# Derive the key name from filename (without extension)
|
|
101
|
-
key = os.path.splitext(os.path.basename(path))[0]
|
|
102
|
-
inputs[key] = {
|
|
103
|
-
"path": path,
|
|
104
|
-
"sort": "high"
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
# inputs now has "depmap all" first, then one entry per CSV in DATA_DIR
|
|
108
|
-
print(inputs)
|
|
@@ -8,6 +8,8 @@ model = pd.read_csv("../../../../datasets/depmap/24Q4/Model.csv",index_col=0)
|
|
|
8
8
|
df.columns = df.columns.str.split(" \\(").str[0]
|
|
9
9
|
df = df.T
|
|
10
10
|
|
|
11
|
+
#%%
|
|
12
|
+
|
|
11
13
|
# %%
|
|
12
14
|
# get ModelID of selected disease for example OncotreePrimaryDisease==Melanoma
|
|
13
15
|
melanoma = model[model.OncotreePrimaryDisease=="Melanoma"].index.unique().values
|
|
@@ -470,9 +470,10 @@ def plot_auc_scores():
|
|
|
470
470
|
plot_config = config["plotting"]
|
|
471
471
|
pra_dict = dload("pr_auc")
|
|
472
472
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
473
|
+
|
|
474
|
+
sorted_items = sorted(pra_dict.items(), key=lambda x: x[1], reverse=True)
|
|
475
|
+
datasets = [k for k, _ in sorted_items]
|
|
476
|
+
auc_scores = [v for _, v in sorted_items]
|
|
476
477
|
|
|
477
478
|
# Create figure and axis
|
|
478
479
|
fig, ax = plt.subplots()
|
|
@@ -483,7 +484,7 @@ def plot_auc_scores():
|
|
|
483
484
|
colors = [cmap(i / (num_datasets + 1)) for i in range(1, num_datasets + 1)]
|
|
484
485
|
|
|
485
486
|
# Plot bars
|
|
486
|
-
|
|
487
|
+
ax.bar(datasets, auc_scores, color=colors, edgecolor="black")
|
|
487
488
|
|
|
488
489
|
# Set y-axis limits dynamically
|
|
489
490
|
ax.set_ylim(0, max(auc_scores) + 0.01)
|
|
@@ -491,6 +492,7 @@ def plot_auc_scores():
|
|
|
491
492
|
# Set title and labels
|
|
492
493
|
ax.set_title("AUC scores for the datasets")
|
|
493
494
|
ax.set_ylabel("AUC score")
|
|
495
|
+
plt.xticks(rotation=45, ha="right")
|
|
494
496
|
|
|
495
497
|
# Add grid (already handled by rcParams)
|
|
496
498
|
ax.grid(axis='y')
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Simple test to verify the corrected AUC implementation in pra_percomplex function.
|
|
3
|
+
"""
|
|
4
|
+
import pandas as pd
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
# Create a simple test DataFrame to simulate the corrected_auc calculation
|
|
8
|
+
def test_corrected_auc():
|
|
9
|
+
# Create test data with precision and recall values
|
|
10
|
+
precision = np.array([1.0, 0.67, 0.75, 0.8, 0.6])
|
|
11
|
+
recall = np.array([0.2, 0.4, 0.6, 0.8, 1.0])
|
|
12
|
+
|
|
13
|
+
# Expected corrected AUC calculation: trapz(precision, recall) - precision[-1]
|
|
14
|
+
expected_corrected_auc = np.trapz(precision, recall) - precision[-1]
|
|
15
|
+
print(f"Expected corrected AUC: {expected_corrected_auc:.6f}")
|
|
16
|
+
|
|
17
|
+
# Components of the calculation
|
|
18
|
+
regular_auc = np.trapz(precision, recall) # This is the area under the curve
|
|
19
|
+
last_precision = precision[-1]
|
|
20
|
+
corrected_auc = regular_auc - last_precision
|
|
21
|
+
|
|
22
|
+
print(f"Regular AUC (trapz): {regular_auc:.6f}")
|
|
23
|
+
print(f"Last precision: {last_precision:.6f}")
|
|
24
|
+
print(f"Corrected AUC: {corrected_auc:.6f}")
|
|
25
|
+
|
|
26
|
+
# Verify they match
|
|
27
|
+
assert np.isclose(expected_corrected_auc, corrected_auc), "Corrected AUC calculation mismatch!"
|
|
28
|
+
print("✓ Corrected AUC calculation is correct!")
|
|
29
|
+
|
|
30
|
+
if __name__ == "__main__":
|
|
31
|
+
test_corrected_auc()
|
|
32
|
+
print("\nThe corrected AUC implementation in pra_percomplex function should work correctly.")
|
|
33
|
+
print("Both regular AUC and corrected AUC will be computed for each complex term.")
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
#%%
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
# # Define specific cell line types you're interested in
|
|
9
|
+
DATA_DIR = "C:/Users/yd/Desktop/projects/_datasets/depmap/25Q2/subset/"
|
|
10
|
+
|
|
11
|
+
# Specific cell lines of interest with "_cell_lines" suffix removed
|
|
12
|
+
cell_line_files = [
|
|
13
|
+
"soft_tissue_cell_lines.csv",
|
|
14
|
+
"skin_cell_lines.csv",
|
|
15
|
+
"lung_cell_lines.csv",
|
|
16
|
+
"head_and_neck_cell_lines.csv",
|
|
17
|
+
"esophagus_stomach_cell_lines.csv",
|
|
18
|
+
"pleura_cell_lines.csv"
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
inputs = {}
|
|
22
|
+
|
|
23
|
+
# Create inputs dict with shortened names (removing "_cell_lines" suffix)
|
|
24
|
+
for filename in cell_line_files:
|
|
25
|
+
# Remove .csv extension and _cell_lines suffix
|
|
26
|
+
key = filename.replace("_cell_lines.csv", "")
|
|
27
|
+
full_path = os.path.join(DATA_DIR, filename)
|
|
28
|
+
|
|
29
|
+
inputs[key] = {
|
|
30
|
+
"path": full_path,
|
|
31
|
+
"sort": "high"
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
inputs = {}
|
|
35
|
+
inputs['depmap'] = {
|
|
36
|
+
"path": "C:/Users/yd/Desktop/projects/_datasets/depmap/25Q2/gene_effect.csv",
|
|
37
|
+
"sort": "high"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# Print the resulting inputs dictionary
|
|
41
|
+
print("Configured inputs:")
|
|
42
|
+
for key, value in inputs.items():
|
|
43
|
+
print(f" {key}: {value['path']}")
|
|
44
|
+
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/dataset/liver_cell_lines_500_genes.csv
RENAMED
|
File without changes
|
{pythonflex-0.1.5 → pythonflex-0.1.6}/src/pythonflex/data/dataset/melanoma_cell_lines_500_genes.csv
RENAMED
|
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
|