Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ gprofiler-official
sankeyflow
nbformat
anndata
scanpy
8 changes: 4 additions & 4 deletions docs/source/notebooks/Human_Myelofibrosis.ipynb

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions docs/source/notebooks/Human_Myocardial_Infarction.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -4204,7 +4204,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": null,
"id": "0b02bd3f",
"metadata": {},
"outputs": [
Expand All @@ -4220,12 +4220,12 @@
}
],
"source": [
"ctpl.plot_volcane(adata.uns['pycrosstalker']['results']['stats']['ischemic_x_myogenic'], \"fisher\", 0.05, 2, annot=False, title=\"Volcano Plot for Ischemic vs Myogenic on Fisher Filtered Data\")"
"ctpl.plot_volcane(adata.uns['pycrosstalker']['results']['stats']['ischemic_x_myogenic'], \"fisher\", p_threshold=0.05, fc_threshold=2, annot=False, title=\"Volcano Plot for Ischemic vs Myogenic on Fisher Filtered Data\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": null,
"id": "040329fe",
"metadata": {},
"outputs": [
Expand All @@ -4241,7 +4241,7 @@
}
],
"source": [
"ctpl.plot_volcane(adata.uns['pycrosstalker']['results']['stats']['ischemic_x_myogenic:MannU'], \"mannwhitneyu\", 0.05, 2, annot = False, title=\"Volcano Plot for Ischemic vs Myogenic on Mann-Whitney U Filtered Data\")"
"ctpl.plot_volcane(adata.uns['pycrosstalker']['results']['stats']['ischemic_x_myogenic:MannU'], \"mannwhitneyu\", p_threshold=0.05, fc_threshold=2, annot = False, title=\"Volcano Plot for Ischemic vs Myogenic on Mann-Whitney U Filtered Data\")"
]
},
{
Expand Down
247 changes: 217 additions & 30 deletions poetry.lock

Large diffs are not rendered by default.

25 changes: 13 additions & 12 deletions pycrosstalker/tools/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,18 +628,19 @@ def mannwhitneyu_test_cci(annData, measure, out_path, comparison=None):
c = data['tables'][ctr_name].loc[data['tables'][ctr_name]['cellpair'] == cellpair, ['allpair', measure]]
e = data['tables'][exp_name].loc[data['tables'][exp_name]['cellpair'] == cellpair, ['allpair', measure]]

merged = pd.merge(c, e, on='allpair', how='outer').fillna(0)

stat, p_value = mannwhitneyu(merged[measure + '_x'], merged[measure + '_y'], alternative='two-sided')
eps = 1e-6
lfc = np.log2((merged[measure + '_y'].mean() + eps) / (merged[measure + '_x'].mean() + eps)) if merged[measure + '_x'].mean() > 0 else np.nan

results.append({
'cellpair': cellpair,
'statistic': stat,
'p_value': p_value,
'lfc': lfc
})
#merged = pd.merge(c, e, on='allpair', how='outer').fillna(0)
merged = pd.merge(c, e, on='allpair', how='inner')
if len(merged) > 0:
stat, p_value = mannwhitneyu(merged[measure + '_x'], merged[measure + '_y'], alternative='two-sided')
eps = 1e-6
lfc = np.log2((merged[measure + '_y'].mean() + eps) / (merged[measure + '_x'].mean() + eps)) if merged[measure + '_x'].mean() > 0 else np.nan

results.append({
'cellpair': cellpair,
'statistic': stat,
'p_value': p_value,
'lfc': lfc
})

data['stats'][f'{exp_name}_x_{ctr_name}:MannU'] = pd.DataFrame(results)

Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ dependencies = [
"plotly>=6.0.1",
"sankeyflow>=0.4.1",
"gprofiler-official==1.0.0",
"anndata (>=0.12.2,<0.13.0)"
"anndata (>=0.12.2,<0.13.0)",
"scanpy (>=1.11.4,<2.0.0)"
]

[build-system]
Expand Down
112 changes: 87 additions & 25 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,28 @@ kiwisolver==1.4.5 ; python_version >= "3.11" \
legacy-api-wrap==1.4.1 ; python_version >= "3.11" \
--hash=sha256:8ba214242e836cebfd3b64c1a1653fce955abb0f9e4c7dffb51f2ad014def0eb \
--hash=sha256:9c40d67aa8312fec8763e87cbf28fea4b67710c79ca7a18137b573d150f3b2b4
llvmlite==0.45.1 ; python_version >= "3.11" \
--hash=sha256:02a164db2d79088bbd6e0d9633b4fe4021d6379d7e4ac7cc85ed5f44b06a30c5 \
--hash=sha256:080e6f8d0778a8239cd47686d402cb66eb165e421efa9391366a9b7e5810a38b \
--hash=sha256:09430bb9d0bb58fc45a45a57c7eae912850bedc095cd0810a57de109c69e1c32 \
--hash=sha256:1a53f4b74ee9fd30cb3d27d904dadece67a7575198bd80e687ee76474620735f \
--hash=sha256:1b1af0c910af0978aa55fa4f60bbb3e9f39b41e97c2a6d94d199897be62ba07a \
--hash=sha256:28e763aba92fe9c72296911e040231d486447c01d4f90027c8e893d89d49b20e \
--hash=sha256:2f3377a6db40f563058c9515dedcc8a3e562d8693a106a28f2ddccf2c8fcf6ca \
--hash=sha256:3aa3dfceda4219ae39cf18806c60eeb518c1680ff834b8b311bd784160b9ce40 \
--hash=sha256:3adc2355694d6a6fbcc024d59bb756677e7de506037c878022d7b877e7613a36 \
--hash=sha256:4edb62e685867799e336723cb9787ec6598d51d0b1ed9af0f38e692aa757e898 \
--hash=sha256:57c48bf2e1083eedbc9406fb83c4e6483017879714916fe8be8a72a9672c995a \
--hash=sha256:5b3796b1b1e1c14dcae34285d2f4ea488402fbd2c400ccf7137603ca3800864f \
--hash=sha256:60f92868d5d3af30b4239b50e1717cb4e4e54f6ac1c361a27903b318d0f07f42 \
--hash=sha256:779e2f2ceefef0f4368548685f0b4adde34e5f4b457e90391f570a10b348d433 \
--hash=sha256:98baab513e19beb210f1ef39066288784839a44cd504e24fff5d17f1b3cf0860 \
--hash=sha256:9e6c9949baf25d9aa9cd7cf0f6d011b9ca660dd17f5ba2b23bdbdb77cc86b116 \
--hash=sha256:c9f3cadee1630ce4ac18ea38adebf2a4f57a89bd2740ce83746876797f6e0bfb \
--hash=sha256:d9ea9e6f17569a4253515cc01dade70aba536476e3d750b2e18d81d7e670eb15 \
--hash=sha256:f2d47f34e4029e6df3395de34cc1c66440a8d72712993a6e6168db228686711b \
--hash=sha256:f7319e5f9f90720578a7f56fbc805bdfb4bc071b507c7611f170d631c3c0f1e0 \
--hash=sha256:f9c272682d91e0d57f2a76c6d9ebdfccc603a01828cdbe3d15273bdca0c3363a
matplotlib==3.9.2 ; python_version >= "3.11" \
--hash=sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21 \
--hash=sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5 \
Expand Down Expand Up @@ -548,6 +570,28 @@ natsort==8.4.0 ; python_version >= "3.11" \
networkx==3.3 ; python_version >= "3.11" \
--hash=sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9 \
--hash=sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2
numba==0.62.1 ; python_version >= "3.11" \
--hash=sha256:03de6d691d6b6e2b76660ba0f38f37b81ece8b2cc524a62f2a0cfae2bfb6f9da \
--hash=sha256:14432af305ea68627a084cd702124fd5d0c1f5b8a413b05f4e14757202d1cf6c \
--hash=sha256:1b743b32f8fa5fff22e19c2e906db2f0a340782caf024477b97801b918cf0494 \
--hash=sha256:44a1412095534a26fb5da2717bc755b57da5f3053965128fe3dc286652cc6a92 \
--hash=sha256:44e3aa6228039992f058f5ebfcfd372c83798e9464297bdad8cc79febcf7891e \
--hash=sha256:57cbddc53b9ee02830b828a8428757f5c218831ccc96490a314ef569d8342b7b \
--hash=sha256:604059730c637c7885386521bb1b0ddcbc91fd56131a6dcc54163d6f1804c872 \
--hash=sha256:6ef84d0ac19f1bf80431347b6f4ce3c39b7ec13f48f233a48c01e2ec06ecbc59 \
--hash=sha256:728f91a874192df22d74e3fd42c12900b7ce7190b1aad3574c6c61b08313e4c5 \
--hash=sha256:7b774242aa890e34c21200a1fc62e5b5757d5286267e71103257f4e2af0d5161 \
--hash=sha256:8c9460b9e936c5bd2f0570e20a0a5909ee6e8b694fd958b210e3bde3a6dba2d7 \
--hash=sha256:90fa21b0142bcf08ad8e32a97d25d0b84b1e921bc9423f8dda07d3652860eef6 \
--hash=sha256:9315cc5e441300e0ca07c828a627d92a6802bcbf27c5487f31ae73783c58da53 \
--hash=sha256:a323df9d36a0da1ca9c592a6baaddd0176d9f417ef49a65bb81951dce69d941a \
--hash=sha256:b72489ba8411cc9fdcaa2458d8f7677751e94f0109eeb53e5becfdc818c64afb \
--hash=sha256:bbf3f88b461514287df66bc8d0307e949b09f2b6f67da92265094e8fa1282dd8 \
--hash=sha256:d6c540880170bee817011757dc9049dba5a29db0c09b4d2349295991fe3ee55f \
--hash=sha256:e1e1f4781d3f9f7c23f16eb04e76ca10b5a3516e959634bd226fc48d5d8e7a0a \
--hash=sha256:f180922adf159ae36c2fe79fb94ffaa74cf5cb3688cb72dba0a904b91e978507 \
--hash=sha256:f41834909d411b4b8d1c68f745144136f21416547009c1e860cc2098754b4ca7 \
--hash=sha256:f43e24b057714e480fe44bc6031de499e7cf8150c63eb461192caa6cc8530bc8
numcodecs==0.16.3 ; python_version >= "3.11" \
--hash=sha256:010d628c95be1214536fb22c0df4ced58da954b404b1fcb25ddebf64e4a3f7f3 \
--hash=sha256:12f43fa4a347d1dba775c4506a1c9b15b90144c258433b81f79f1c1b1a990db5 \
Expand Down Expand Up @@ -725,6 +769,9 @@ plotly==6.0.1 ; python_version >= "3.11" \
plotnine==0.13.6 ; python_version >= "3.11" \
--hash=sha256:3c8c8f958c295345140230ea29803488f83aba9b5a8d0b1b2eb3eaefbf0a06b8 \
--hash=sha256:4acc1af29fa4e91e726b67d49277e8368f62e1c817f01bf14ecd8ca5e83bfaea
pynndescent==0.5.13 ; python_version >= "3.11" \
--hash=sha256:69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949 \
--hash=sha256:d74254c0ee0a1eeec84597d5fe89fedcf778593eeabe32c2f97412934a9800fb
pyparsing==3.1.2 ; python_version >= "3.11" \
--hash=sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad \
--hash=sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742
Expand Down Expand Up @@ -814,6 +861,9 @@ requests==2.32.3 ; python_version >= "3.11" \
sankeyflow==0.4.1 ; python_version >= "3.11" \
--hash=sha256:268dae6e1fea3207034eda628d7927c8225f72879ad968d03afde132e600e918 \
--hash=sha256:f9fea7720300b4d73cbb18b9e6b507a4d69f25ea5bf8b2fb7b7d47ee222a58c0
scanpy==1.11.4 ; python_version >= "3.11" \
--hash=sha256:333189ecac9c7009bf55d416ee2e272e1c490d54c719478f7b4dd1fc294d2f95 \
--hash=sha256:f4ab68ab89e97e88a4faed07b1bc51533fb2e67f797a65a4683591910abfab95
scikit-learn==1.5.1 ; python_version >= "3.11" \
--hash=sha256:0828673c5b520e879f2af6a9e99eee0eefea69a2188be1ca68a6121b809055c1 \
--hash=sha256:0ea5d40c0e3951df445721927448755d3fe1d80833b0b7308ebff5d2a45e6414 \
Expand Down Expand Up @@ -865,34 +915,43 @@ scipy==1.14.0 ; python_version >= "3.11" \
seaborn==0.13.2 ; python_version >= "3.11" \
--hash=sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987 \
--hash=sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7
session-info2==0.2.3 ; python_version >= "3.11" \
--hash=sha256:6d16e3c6bb72ea52e589da4d722d24798aa3511c34ab8446a131d655cba2e2c9 \
--hash=sha256:f211d9930f73b485b727b6c4d8b964fa1b634351b3079393738f42be9b4c7f5e
six==1.16.0 ; python_version >= "3.11" \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
statsmodels==0.14.2 ; python_version >= "3.11" \
--hash=sha256:0e46e9d59293c1af4cc1f4e5248f17e7e7bc596bfce44d327c789ac27f09111b \
--hash=sha256:10f2b7611a61adb7d596a6d239abdf1a4d5492b931b00d5ed23d32844d40e48e \
--hash=sha256:201c3d00929c4a67cda1fe05b098c8dcf1b1eeefa88e80a8f963a844801ed59f \
--hash=sha256:29c78a7601fdae1aa32104c5ebff2e0b72c26f33e870e2f94ab1bcfd927ece9b \
--hash=sha256:4864a1c4615c5ea5f2e3b078a75bdedc90dd9da210a37e0738e064b419eccee2 \
--hash=sha256:50fcb633987779e795142f51ba49fb27648d46e8a1382b32ebe8e503aaabaa9e \
--hash=sha256:55d1742778400ae67acb04b50a2c7f5804182f8a874bd09ca397d69ed159a751 \
--hash=sha256:5827a12e3ede2b98a784476d61d6bec43011fedb64aa815f2098e0573bece257 \
--hash=sha256:7a91f6c4943de13e3ce2e20ee3b5d26d02bd42300616a421becd53756f5deb37 \
--hash=sha256:876794068abfaeed41df71b7887000031ecf44fbfa6b50d53ccb12ebb4ab747a \
--hash=sha256:8875823bdd41806dc853333cc4e1b7ef9481bad2380a999e66ea42382cf2178d \
--hash=sha256:890550147ad3a81cda24f0ba1a5c4021adc1601080bd00e191ae7cd6feecd6ad \
--hash=sha256:8e004cfad0e46ce73fe3f3812010c746f0d4cfd48e307b45c14e9e360f3d2510 \
--hash=sha256:90fd2f0110b73fc3fa5a2f21c3ca99b0e22285cccf38e56b5b8fd8ce28791b0f \
--hash=sha256:9edefa4ce08e40bc1d67d2f79bc686ee5e238e801312b5a029ee7786448c389a \
--hash=sha256:a87ef21fadb445b650f327340dde703f13aec1540f3d497afb66324499dea97a \
--hash=sha256:ac780ad9ff552773798829a0b9c46820b0faa10e6454891f5e49a845123758ab \
--hash=sha256:afbd92410e0df06f3d8c4e7c0e2e71f63f4969531f280fb66059e2ecdb6e0415 \
--hash=sha256:c254c66142f1167b4c7d031cf8db55294cc62ff3280e090fc45bd10a7f5fd029 \
--hash=sha256:df5d6f95c46f0341da6c79ee7617e025bf2b371e190a8e60af1ae9cabbdb7a97 \
--hash=sha256:eb0ba1ad3627705f5ae20af6b2982f500546d43892543b36c7bca3e2f87105e7 \
--hash=sha256:f36494df7c03d63168fccee5038a62f469469ed6a4dd6eaeb9338abedcd0d5f5 \
--hash=sha256:f450fcbae214aae66bd9d2b9af48e0f8ba1cb0e8596c6ebb34e6e3f0fec6542c \
--hash=sha256:f870d14a587ea58a3b596aa994c2ed889cc051f9e450e887d2c83656fc6a64bf
statsmodels==0.14.5 ; python_version >= "3.11" \
--hash=sha256:128872be8f3208f4446d91ea9e4261823902fc7997fee7e1a983eb62fd3b7c6e \
--hash=sha256:145bc39b2cb201efb6c83cc3f2163c269e63b0d4809801853dec6f440bd3bc37 \
--hash=sha256:1cab9e6fce97caf4239cdb2df375806937da5d0b7ba2699b13af33a07f438464 \
--hash=sha256:1e9742d8a5ac38a3bfc4b7f4b0681903920f20cbbf466d72b1fd642033846108 \
--hash=sha256:26c028832730aebfbfd4e7501694e1f9ad31ec8536e776716673f4e7afd4059a \
--hash=sha256:2a06bca03b7a492f88c8106103ab75f1a5ced25de90103a89f3a287518017939 \
--hash=sha256:37e7364a39f9aa3b51d15a208c2868b90aadb8412f868530f5cba9197cb00eaa \
--hash=sha256:4263d7f4d0f1d5ac6eb4db22e1ee34264a14d634b9332c975c9d9109b6b46e12 \
--hash=sha256:4a060c7e0841c549c8ce2825fd6687e6757e305d9c11c9a73f6c5a0ce849bb69 \
--hash=sha256:4b7091a8442076c708c926de3603653a160955e80a2b6d931475b7bb8ddc02e5 \
--hash=sha256:4e5e26b21d2920905764fb0860957d08b5ba2fae4466ef41b1f7c53ecf9fc7fa \
--hash=sha256:56da20def5350d676388213a330fd40ed15d0e8dd0bb1b92c0e4b0f2a65d3ad2 \
--hash=sha256:5a085d47c8ef5387279a991633883d0e700de2b0acc812d7032d165888627bef \
--hash=sha256:6264fb00e02f858b86bd01ef2dc05055a71d4a0cc7551b9976b07b0f0e6cf24f \
--hash=sha256:86224f6e36f38486e471e75759d241fe2912d8bc25ab157d54ee074c6aedbf45 \
--hash=sha256:906263134dd1a640e55ecb01fda4a9be7b9e08558dba9e4c4943a486fdb0c9c8 \
--hash=sha256:9118f76344f77cffbb3a9cbcff8682b325be5eed54a4b3253e09da77a74263d3 \
--hash=sha256:9dc4ee159070557c9a6c000625d85f653de437772fe7086857cff68f501afe45 \
--hash=sha256:9f866b2ebb2904b47c342d00def83c526ef2eb1df6a9a3c94ba5fe63d0005aec \
--hash=sha256:9fc2b5cdc0c95cba894849651fec1fa1511d365e3eb72b0cc75caac44077cd48 \
--hash=sha256:afb37ca1d70d99b5fd876e8574ea46372298ae0f0a8b17e4cf0a9afd2373ae62 \
--hash=sha256:b23b8f646dd78ef5e8d775d879208f8dc0a73418b41c16acac37361ff9ab7738 \
--hash=sha256:b2ed065bfbaf8bb214c7201656df840457c2c8c65e1689e3eb09dc7440f9c61c \
--hash=sha256:b8d96b0bbaeabd3a557c35cc7249baa9cfbc6dd305c32a9f2cbdd7f46c037e7f \
--hash=sha256:c3dd760a6fa80cd5e0371685c697bb9c2c0e6e1f394d975e596a1e6d0bbb9372 \
--hash=sha256:d7c14fb2617bb819fb2532e1424e1da2b98a3419a80e95f33365a72d437d474e \
--hash=sha256:de260e58cccfd2ceddf835b55a357233d6ca853a1aa4f90f7553a52cc71c6ddf \
--hash=sha256:ec56f771d9529cdc17ed2fb2a950d100b6e83a7c5372aae8ac5bb065c474b856 \
--hash=sha256:f2ad5aee04ae7196c429df2174df232c057e478c5fa63193d01c8ec9aae04d31 \
--hash=sha256:f402fc793458dd6d96e099acb44cd1de1428565bf7ef3030878a8daff091f08a
texttable==1.7.0 ; python_version >= "3.11" \
--hash=sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638 \
--hash=sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917
Expand All @@ -908,6 +967,9 @@ typing-extensions==4.15.0 ; python_version >= "3.11" \
tzdata==2024.1 ; python_version >= "3.11" \
--hash=sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd \
--hash=sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252
umap-learn==0.5.7 ; python_version >= "3.11" \
--hash=sha256:6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c \
--hash=sha256:b2a97973e4c6ffcebf241100a8de589a4c84126a832ab40f296c6d9fcc5eb19e
urllib3==2.4.0 ; python_version >= "3.11" \
--hash=sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466 \
--hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
19 changes: 9 additions & 10 deletions test/test_basic.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
from pycrosstalker import tools as cttl
from pycrosstalker import plots as ctpl
import pickle
import scanpy as sc
from anndata import AnnData

# Load data from pickle file
with open("tutorials/output/Myelofibrosis_example/LR_data.pkl", "rb") as f:
data = pickle.load(f)
# Load data from AnnData file
with open("tutorials/output/Myelofibrosis_example/Myelofibrosis_example_analysed.h5ad", "rb") as f:
adata = sc.read_h5ad(f)

def test_data_type():
print("\nTesting data type is dict")
assert isinstance(data, dict)
print("\nTesting data type is AnnData")
assert isinstance(adata, AnnData)

def test_data_keys():
print("Testing data keys")
print("Testing AnnData attributes exit")
keys = {'graphs', 'graphs_ggi', 'tables', 'colors', 'coords', 'rankings', 'pca', 'stats'}
assert keys.issubset(data.keys())
assert keys.issubset(adata.uns['pycrosstalker']['results'].keys())
44 changes: 25 additions & 19 deletions test/test_check_with_R_data.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from pycrosstalker import tools as cttl
from pycrosstalker import plots as ctpl
import pickle
import pandas as pd
import scanpy as sc
from anndata import AnnData
import networkx as nx

# Load data from pickle file
with open("tutorials/output/Myelofibrosis_example/LR_data.pkl", "rb") as f:
data = pickle.load(f)
# Load data from AnnData file
with open("tutorials/output/Myelofibrosis_example/Myelofibrosis_example_analysed.h5ad", "rb") as f:
adata = sc.read_h5ad(f)
data = adata.uns['pycrosstalker']['results']

print(f"\nTesting if data from pyCrossTalkeR is similar to data from CrossTalkeR")

Expand Down Expand Up @@ -61,7 +62,11 @@ def test_check_graphs_data():
"LRScore": graph_R['LRScore'],
})

graph_py = data['graphs'][graph] if i < 4 else data['graphs_ggi'][str(graph)[:-4]]
graph_py = nx.from_pandas_edgelist(data['graphs'][graph] if i<4 else data['graphs_ggi'][str(graph)[:-4]],
source='source',
target='target',
edge_attr=True,
create_using=nx.DiGraph())
edges = [edge[0] + '-' + edge[1] for edge in graph_py.edges()]
lrscores = [edge[2]['LRScore'] for edge in graph_py.edges(data=True)]
graph_py_df = pd.DataFrame({
Expand Down Expand Up @@ -95,18 +100,19 @@ def test_check_stats_data():

print("\nEXP_x_CTR stats data is similar")

for key in ['EXP']:
stats_mannu_R = pd.read_csv(f'test/R_data/stat_{key}_x_CTR:MannU.csv')
stats_mannu_R_df = pd.DataFrame({
"cellpair": stats_mannu_R['cellpair'],
"p_value": stats_mannu_R['p'],
})
stats_mannu_R_df = stats_mannu_R_df.sort_values(by='cellpair').reset_index(drop=True)
# TO DO: Fix mannwhitneyu test comparison, R version still user outjoin
# for key in ['EXP']:
# stats_mannu_R = pd.read_csv(f'test/R_data/stat_{key}_x_CTR:MannU.csv')
# stats_mannu_R_df = pd.DataFrame({
# "cellpair": stats_mannu_R['cellpair'],
# "p_value": stats_mannu_R['p'],
# })
# stats_mannu_R_df = stats_mannu_R_df.sort_values(by='cellpair').reset_index(drop=True)

stats_mannu_py = data['stats'][f'{key}_x_CTR:MannU']
stats_mannu_py_df = stats_mannu_py.sort_values(by='cellpair').reset_index(drop=True)
# stats_mannu_py = data['stats'][f'{key}_x_CTR:MannU']
# stats_mannu_py_df = stats_mannu_py.sort_values(by='cellpair').reset_index(drop=True)

assert stats_mannu_py_df['cellpair'].equals(stats_mannu_R_df['cellpair'])
assert (abs(stats_mannu_py_df['p_value'] - stats_mannu_R_df['p_value']) < 0.01).all()
# assert stats_mannu_py_df['cellpair'].equals(stats_mannu_R_df['cellpair'])
# assert (abs(stats_mannu_py_df['p_value'] - stats_mannu_R_df['p_value']) < 0.01).all()

print(f"{key}_x_CTR:MannU stats data is similar")
# print(f"{key}_x_CTR:MannU stats data is similar")
8 changes: 4 additions & 4 deletions tutorials/Human_Myelofibrosis.ipynb

Large diffs are not rendered by default.

Loading