graph and subgraph generation

This commit is contained in:
Florian Förster 2024-07-17 18:30:26 +02:00
parent 1b2d5597b0
commit d2165afbfd
21 changed files with 2974 additions and 319 deletions

276
pdm.lock generated
View File

@ -5,59 +5,7 @@
groups = ["default", "notebooks", "trials", "trails", "dev"] groups = ["default", "notebooks", "trials", "trails", "dev"]
strategy = ["cross_platform", "inherit_metadata"] strategy = ["cross_platform", "inherit_metadata"]
lock_version = "4.4.2" lock_version = "4.4.2"
content_hash = "sha256:5c4c7b58272b6a8845865dde1fc6c953611f3e9424823eea35682da5cb6e112c" content_hash = "sha256:a9f1cc71f6ee89d2f0572ef7254c9f0be702dbd1a4957b2f0d00d3b83ccc20d4"
[[package]]
name = "alph"
version = "0.4.10"
requires_python = "<4.0,>=3.9"
summary = "alph"
groups = ["trials"]
dependencies = [
"altair>=5.0.1",
"networkx>=2.6.3",
"pandas>=1.3.5",
"scikit-network>=0.27.1",
]
files = [
{file = "alph-0.4.10-py3-none-any.whl", hash = "sha256:47649ef9d12ac7bddaa9cfc7510ab333e7fe1c76d4da4d1b09629bbd174fbe63"},
{file = "alph-0.4.10.tar.gz", hash = "sha256:a2cfe932c7a6a973c718f8c5bc1b1dbc7a1d18a122cb5e438db5ea3a61d6b5c3"},
]
[[package]]
name = "alph"
version = "0.4.10"
extras = ["graphviz"]
requires_python = "<4.0,>=3.9"
summary = "alph"
groups = ["trials"]
dependencies = [
"alph==0.4.10",
"pygraphviz>=1.10",
]
files = [
{file = "alph-0.4.10-py3-none-any.whl", hash = "sha256:47649ef9d12ac7bddaa9cfc7510ab333e7fe1c76d4da4d1b09629bbd174fbe63"},
{file = "alph-0.4.10.tar.gz", hash = "sha256:a2cfe932c7a6a973c718f8c5bc1b1dbc7a1d18a122cb5e438db5ea3a61d6b5c3"},
]
[[package]]
name = "altair"
version = "5.3.0"
requires_python = ">=3.8"
summary = "Vega-Altair: A declarative statistical visualization library for Python."
groups = ["trials"]
dependencies = [
"jinja2",
"jsonschema>=3.0",
"numpy",
"packaging",
"pandas>=0.25",
"toolz",
]
files = [
{file = "altair-5.3.0-py3-none-any.whl", hash = "sha256:7084a1dab4d83c5e7e5246b92dc1b4451a6c68fd057f3716ee9d315c8980e59a"},
{file = "altair-5.3.0.tar.gz", hash = "sha256:5a268b1a0983b23d8f9129f819f956174aa7aea2719ed55a52eba9979b9f6675"},
]
[[package]] [[package]]
name = "annotated-types" name = "annotated-types"
@ -188,7 +136,7 @@ name = "attrs"
version = "23.2.0" version = "23.2.0"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Classes Without Boilerplate" summary = "Classes Without Boilerplate"
groups = ["notebooks", "trials"] groups = ["notebooks"]
files = [ files = [
{file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
{file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
@ -210,7 +158,7 @@ name = "backoff"
version = "2.2.1" version = "2.2.1"
requires_python = ">=3.7,<4.0" requires_python = ">=3.7,<4.0"
summary = "Function decoration for backoff and retry" summary = "Function decoration for backoff and retry"
groups = ["trials"] groups = ["default"]
files = [ files = [
{file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"},
{file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"},
@ -294,7 +242,7 @@ name = "certifi"
version = "2024.2.2" version = "2024.2.2"
requires_python = ">=3.6" requires_python = ">=3.6"
summary = "Python package for providing Mozilla's CA Bundle." summary = "Python package for providing Mozilla's CA Bundle."
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
{file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
@ -339,7 +287,7 @@ name = "chardet"
version = "5.2.0" version = "5.2.0"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Universal encoding detector for Python 3" summary = "Universal encoding detector for Python 3"
groups = ["trials"] groups = ["default"]
files = [ files = [
{file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"},
{file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"},
@ -350,7 +298,7 @@ name = "charset-normalizer"
version = "3.3.2" version = "3.3.2"
requires_python = ">=3.7.0" requires_python = ">=3.7.0"
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
@ -427,7 +375,7 @@ files = [
name = "colorbrewer" name = "colorbrewer"
version = "0.2.0" version = "0.2.0"
summary = "constants from Cynthia Brewer's ColorBrewer" summary = "constants from Cynthia Brewer's ColorBrewer"
groups = ["trials"] groups = ["default"]
dependencies = [ dependencies = [
"six", "six",
] ]
@ -440,7 +388,7 @@ files = [
name = "colour" name = "colour"
version = "0.1.5" version = "0.1.5"
summary = "converts and manipulates various color representation (HSL, RVB, web, X11, ...)" summary = "converts and manipulates various color representation (HSL, RVB, web, X11, ...)"
groups = ["trials"] groups = ["default"]
files = [ files = [
{file = "colour-0.1.5-py2.py3-none-any.whl", hash = "sha256:33f6db9d564fadc16e59921a56999b79571160ce09916303d35346dddc17978c"}, {file = "colour-0.1.5-py2.py3-none-any.whl", hash = "sha256:33f6db9d564fadc16e59921a56999b79571160ce09916303d35346dddc17978c"},
{file = "colour-0.1.5.tar.gz", hash = "sha256:af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee"}, {file = "colour-0.1.5.tar.gz", hash = "sha256:af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee"},
@ -523,7 +471,7 @@ files = [
[[package]] [[package]]
name = "dash" name = "dash"
version = "2.17.0" version = "2.17.1"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "A Python framework for building reactive web-apps. Developed by Plotly." summary = "A Python framework for building reactive web-apps. Developed by Plotly."
groups = ["default"] groups = ["default"]
@ -542,8 +490,8 @@ dependencies = [
"typing-extensions>=4.1.1", "typing-extensions>=4.1.1",
] ]
files = [ files = [
{file = "dash-2.17.0-py3-none-any.whl", hash = "sha256:2421569023b2cd46ea2d4b2c14fe72c71b7436527a3102219b2265fa361e7c67"}, {file = "dash-2.17.1-py3-none-any.whl", hash = "sha256:3eefc9ac67003f93a06bc3e500cae0a6787c48e6c81f6f61514239ae2da414e4"},
{file = "dash-2.17.0.tar.gz", hash = "sha256:d065cd88771e45d0485993be0d27565e08918cb7edd18e31ee1c5b41252fc2fa"}, {file = "dash-2.17.1.tar.gz", hash = "sha256:ee2d9c319de5dcc1314085710b72cd5fa63ff994d913bf72979b7130daeea28e"},
] ]
[[package]] [[package]]
@ -558,7 +506,7 @@ files = [
[[package]] [[package]]
name = "dash-cytoscape" name = "dash-cytoscape"
version = "1.0.1" version = "1.0.2"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "A Component Library for Dash aimed at facilitating network visualization in Python, wrapped around Cytoscape.js" summary = "A Component Library for Dash aimed at facilitating network visualization in Python, wrapped around Cytoscape.js"
groups = ["default"] groups = ["default"]
@ -566,7 +514,7 @@ dependencies = [
"dash", "dash",
] ]
files = [ files = [
{file = "dash_cytoscape-1.0.1.tar.gz", hash = "sha256:1bcd1587b2d8b432945585e2295e76393d3eb829f606c198693cd2b45bea6adc"}, {file = "dash_cytoscape-1.0.2.tar.gz", hash = "sha256:a61019d2184d63a2b3b5c06d056d3b867a04223a674cc3c7cf900a561a9a59aa"},
] ]
[[package]] [[package]]
@ -613,7 +561,7 @@ name = "decorator"
version = "5.1.1" version = "5.1.1"
requires_python = ">=3.5" requires_python = ">=3.5"
summary = "Decorators for Humans" summary = "Decorators for Humans"
groups = ["notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
@ -771,7 +719,7 @@ name = "idna"
version = "3.7" version = "3.7"
requires_python = ">=3.5" requires_python = ">=3.5"
summary = "Internationalized Domain Names in Applications (IDNA)" summary = "Internationalized Domain Names in Applications (IDNA)"
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
{file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
@ -782,7 +730,7 @@ name = "igraph"
version = "0.11.5" version = "0.11.5"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "High performance graph data structures and algorithms" summary = "High performance graph data structures and algorithms"
groups = ["trials"] groups = ["default"]
dependencies = [ dependencies = [
"texttable>=1.6.2", "texttable>=1.6.2",
] ]
@ -848,7 +796,7 @@ files = [
[[package]] [[package]]
name = "ipykernel" name = "ipykernel"
version = "6.29.4" version = "6.29.5"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "IPython Kernel for Jupyter" summary = "IPython Kernel for Jupyter"
groups = ["notebooks"] groups = ["notebooks"]
@ -868,13 +816,13 @@ dependencies = [
"traitlets>=5.4.0", "traitlets>=5.4.0",
] ]
files = [ files = [
{file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"},
{file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"},
] ]
[[package]] [[package]]
name = "ipython" name = "ipython"
version = "8.24.0" version = "8.26.0"
requires_python = ">=3.10" requires_python = ">=3.10"
summary = "IPython: Productive Interactive Computing" summary = "IPython: Productive Interactive Computing"
groups = ["notebooks"] groups = ["notebooks"]
@ -891,26 +839,26 @@ dependencies = [
"typing-extensions>=4.6; python_version < \"3.12\"", "typing-extensions>=4.6; python_version < \"3.12\"",
] ]
files = [ files = [
{file = "ipython-8.24.0-py3-none-any.whl", hash = "sha256:d7bf2f6c4314984e3e02393213bab8703cf163ede39672ce5918c51fe253a2a3"}, {file = "ipython-8.26.0-py3-none-any.whl", hash = "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff"},
{file = "ipython-8.24.0.tar.gz", hash = "sha256:010db3f8a728a578bb641fdd06c063b9fb8e96a9464c63aec6310fbcb5e80501"}, {file = "ipython-8.26.0.tar.gz", hash = "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c"},
] ]
[[package]] [[package]]
name = "ipywidgets" name = "ipywidgets"
version = "8.1.2" version = "8.1.3"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Jupyter interactive widgets" summary = "Jupyter interactive widgets"
groups = ["notebooks"] groups = ["notebooks"]
dependencies = [ dependencies = [
"comm>=0.1.3", "comm>=0.1.3",
"ipython>=6.1.0", "ipython>=6.1.0",
"jupyterlab-widgets~=3.0.10", "jupyterlab-widgets~=3.0.11",
"traitlets>=4.3.1", "traitlets>=4.3.1",
"widgetsnbextension~=4.0.10", "widgetsnbextension~=4.0.11",
] ]
files = [ files = [
{file = "ipywidgets-8.1.2-py3-none-any.whl", hash = "sha256:bbe43850d79fb5e906b14801d6c01402857996864d1e5b6fa62dd2ee35559f60"}, {file = "ipywidgets-8.1.3-py3-none-any.whl", hash = "sha256:efafd18f7a142248f7cb0ba890a68b96abd4d6e88ddbda483c9130d12667eaf2"},
{file = "ipywidgets-8.1.2.tar.gz", hash = "sha256:d0b9b41e49bae926a866e613a39b0f0097745d2b9f1f3dd406641b4a57ec42c9"}, {file = "ipywidgets-8.1.3.tar.gz", hash = "sha256:f5f9eeaae082b1823ce9eac2575272952f40d748893972956dc09700a6392d9c"},
] ]
[[package]] [[package]]
@ -957,7 +905,7 @@ name = "jinja2"
version = "3.1.4" version = "3.1.4"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "A very fast and expressive template engine." summary = "A very fast and expressive template engine."
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
dependencies = [ dependencies = [
"MarkupSafe>=2.0", "MarkupSafe>=2.0",
] ]
@ -1004,7 +952,7 @@ name = "jsonschema"
version = "4.22.0" version = "4.22.0"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "An implementation of JSON Schema validation for Python" summary = "An implementation of JSON Schema validation for Python"
groups = ["notebooks", "trials"] groups = ["notebooks"]
dependencies = [ dependencies = [
"attrs>=22.2.0", "attrs>=22.2.0",
"jsonschema-specifications>=2023.03.6", "jsonschema-specifications>=2023.03.6",
@ -1021,7 +969,7 @@ name = "jsonschema-specifications"
version = "2023.12.1" version = "2023.12.1"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" summary = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
groups = ["notebooks", "trials"] groups = ["notebooks"]
dependencies = [ dependencies = [
"referencing>=0.31.0", "referencing>=0.31.0",
] ]
@ -1055,7 +1003,7 @@ files = [
[[package]] [[package]]
name = "jupyter-client" name = "jupyter-client"
version = "8.6.1" version = "8.6.2"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "Jupyter protocol implementation and client libraries" summary = "Jupyter protocol implementation and client libraries"
groups = ["notebooks"] groups = ["notebooks"]
@ -1067,8 +1015,8 @@ dependencies = [
"traitlets>=5.3", "traitlets>=5.3",
] ]
files = [ files = [
{file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"},
{file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"},
] ]
[[package]] [[package]]
@ -1123,7 +1071,7 @@ files = [
[[package]] [[package]]
name = "jupyter-server" name = "jupyter-server"
version = "2.14.0" version = "2.14.2"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." summary = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
groups = ["notebooks"] groups = ["notebooks"]
@ -1149,8 +1097,8 @@ dependencies = [
"websocket-client>=1.7", "websocket-client>=1.7",
] ]
files = [ files = [
{file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"}, {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"},
{file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"}, {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"},
] ]
[[package]] [[package]]
@ -1170,7 +1118,7 @@ files = [
[[package]] [[package]]
name = "jupyterlab" name = "jupyterlab"
version = "4.2.0" version = "4.2.3"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "JupyterLab computational environment" summary = "JupyterLab computational environment"
groups = ["notebooks"] groups = ["notebooks"]
@ -1185,12 +1133,13 @@ dependencies = [
"jupyterlab-server<3,>=2.27.1", "jupyterlab-server<3,>=2.27.1",
"notebook-shim>=0.2", "notebook-shim>=0.2",
"packaging", "packaging",
"setuptools>=40.1.0",
"tornado>=6.2.0", "tornado>=6.2.0",
"traitlets", "traitlets",
] ]
files = [ files = [
{file = "jupyterlab-4.2.0-py3-none-any.whl", hash = "sha256:0dfe9278e25a145362289c555d9beb505697d269c10e99909766af7c440ad3cc"}, {file = "jupyterlab-4.2.3-py3-none-any.whl", hash = "sha256:0b59d11808e84bb84105c73364edfa867dd475492429ab34ea388a52f2e2e596"},
{file = "jupyterlab-4.2.0.tar.gz", hash = "sha256:356e9205a6a2ab689c47c8fe4919dba6c076e376d03f26baadc05748c2435dd5"}, {file = "jupyterlab-4.2.3.tar.gz", hash = "sha256:df6e46969ea51d66815167f23d92f105423b7f1f06fa604d4f44aeb018c82c7b"},
] ]
[[package]] [[package]]
@ -1206,7 +1155,7 @@ files = [
[[package]] [[package]]
name = "jupyterlab-server" name = "jupyterlab-server"
version = "2.27.1" version = "2.27.3"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "A set of server components for JupyterLab and JupyterLab like applications." summary = "A set of server components for JupyterLab and JupyterLab like applications."
groups = ["notebooks"] groups = ["notebooks"]
@ -1220,19 +1169,19 @@ dependencies = [
"requests>=2.31", "requests>=2.31",
] ]
files = [ files = [
{file = "jupyterlab_server-2.27.1-py3-none-any.whl", hash = "sha256:f5e26156e5258b24d532c84e7c74cc212e203bff93eb856f81c24c16daeecc75"}, {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"},
{file = "jupyterlab_server-2.27.1.tar.gz", hash = "sha256:097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d"}, {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"},
] ]
[[package]] [[package]]
name = "jupyterlab-widgets" name = "jupyterlab-widgets"
version = "3.0.10" version = "3.0.11"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Jupyter interactive widgets for JupyterLab" summary = "Jupyter interactive widgets for JupyterLab"
groups = ["notebooks"] groups = ["notebooks"]
files = [ files = [
{file = "jupyterlab_widgets-3.0.10-py3-none-any.whl", hash = "sha256:dd61f3ae7a5a7f80299e14585ce6cf3d6925a96c9103c978eda293197730cb64"}, {file = "jupyterlab_widgets-3.0.11-py3-none-any.whl", hash = "sha256:78287fd86d20744ace330a61625024cf5521e1c012a352ddc0a3cdc2348becd0"},
{file = "jupyterlab_widgets-3.0.10.tar.gz", hash = "sha256:04f2ac04976727e4f9d0fa91cdc2f1ab860f965e504c29dbd6a65c882c9d04c0"}, {file = "jupyterlab_widgets-3.0.11.tar.gz", hash = "sha256:dd5ac679593c969af29c9bed054c24f26842baa51352114736756bc035deee27"},
] ]
[[package]] [[package]]
@ -1325,7 +1274,7 @@ name = "markupsafe"
version = "2.1.5" version = "2.1.5"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Safely add untrusted strings to HTML/XML markup." summary = "Safely add untrusted strings to HTML/XML markup."
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
{file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
@ -1501,7 +1450,7 @@ name = "networkx"
version = "3.3" version = "3.3"
requires_python = ">=3.10" requires_python = ">=3.10"
summary = "Python package for creating and manipulating graphs and networks" summary = "Python package for creating and manipulating graphs and networks"
groups = ["default", "trials"] groups = ["default"]
files = [ files = [
{file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"},
{file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"},
@ -1526,7 +1475,7 @@ name = "numpy"
version = "1.26.4" version = "1.26.4"
requires_python = ">=3.9" requires_python = ">=3.9"
summary = "Fundamental package for array computing in Python" summary = "Fundamental package for array computing in Python"
groups = ["default", "trials"] groups = ["default"]
files = [ files = [
{file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"},
{file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"},
@ -1720,7 +1669,7 @@ name = "packaging"
version = "24.0" version = "24.0"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Core utilities for Python packages" summary = "Core utilities for Python packages"
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"},
{file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"},
@ -1731,7 +1680,7 @@ name = "pandas"
version = "2.2.2" version = "2.2.2"
requires_python = ">=3.9" requires_python = ">=3.9"
summary = "Powerful data structures for data analysis, time series, and statistics" summary = "Powerful data structures for data analysis, time series, and statistics"
groups = ["default", "trials"] groups = ["default"]
dependencies = [ dependencies = [
"numpy>=1.23.2; python_version == \"3.11\"", "numpy>=1.23.2; python_version == \"3.11\"",
"numpy>=1.26.0; python_version >= \"3.12\"", "numpy>=1.26.0; python_version >= \"3.12\"",
@ -1967,7 +1916,7 @@ name = "py4cytoscape"
version = "1.9.0" version = "1.9.0"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "Cytoscape Automation API" summary = "Cytoscape Automation API"
groups = ["trials"] groups = ["default"]
dependencies = [ dependencies = [
"backoff", "backoff",
"chardet", "chardet",
@ -2077,22 +2026,12 @@ files = [
{file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
] ]
[[package]]
name = "pygraphviz"
version = "1.13"
requires_python = ">=3.10"
summary = "Python interface to Graphviz"
groups = ["trials"]
files = [
{file = "pygraphviz-1.13.tar.gz", hash = "sha256:6ad8aa2f26768830a5a1cfc8a14f022d13df170a8f6fdfd68fd1aa1267000964"},
]
[[package]] [[package]]
name = "python-dateutil" name = "python-dateutil"
version = "2.9.0.post0" version = "2.9.0.post0"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
summary = "Extensions to the standard Python datetime module" summary = "Extensions to the standard Python datetime module"
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
dependencies = [ dependencies = [
"six>=1.5", "six>=1.5",
] ]
@ -2116,7 +2055,7 @@ files = [
name = "pytz" name = "pytz"
version = "2024.1" version = "2024.1"
summary = "World timezone definitions, modern and historical" summary = "World timezone definitions, modern and historical"
groups = ["default", "trials"] groups = ["default"]
files = [ files = [
{file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"},
{file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"},
@ -2238,7 +2177,7 @@ name = "referencing"
version = "0.35.1" version = "0.35.1"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "JSON Referencing + Python" summary = "JSON Referencing + Python"
groups = ["notebooks", "trials"] groups = ["notebooks"]
dependencies = [ dependencies = [
"attrs>=22.2.0", "attrs>=22.2.0",
"rpds-py>=0.7.0", "rpds-py>=0.7.0",
@ -2293,7 +2232,7 @@ name = "requests"
version = "2.31.0" version = "2.31.0"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Python HTTP for Humans." summary = "Python HTTP for Humans."
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
dependencies = [ dependencies = [
"certifi>=2017.4.17", "certifi>=2017.4.17",
"charset-normalizer<4,>=2", "charset-normalizer<4,>=2",
@ -2348,7 +2287,7 @@ name = "rpds-py"
version = "0.18.1" version = "0.18.1"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "Python bindings to Rust's persistent data structures (rpds)" summary = "Python bindings to Rust's persistent data structures (rpds)"
groups = ["notebooks", "trials"] groups = ["notebooks"]
files = [ files = [
{file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"},
{file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"},
@ -2499,29 +2438,12 @@ files = [
{file = "scikit_learn-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:d762070980c17ba3e9a4a1e043ba0518ce4c55152032f1af0ca6f39b376b5928"}, {file = "scikit_learn-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:d762070980c17ba3e9a4a1e043ba0518ce4c55152032f1af0ca6f39b376b5928"},
] ]
[[package]]
name = "scikit-network"
version = "0.32.1"
requires_python = ">=3.8"
summary = "Graph algorithms"
groups = ["trials"]
dependencies = [
"numpy>=1.22.4",
"scipy>=1.7.3",
]
files = [
{file = "scikit_network-0.32.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6228326cc5a813f4a7c031b64f1276d9cc1d5ccff082e62fb176f1e53ae2cc46"},
{file = "scikit_network-0.32.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d634aab1e379702134c877c8c4a6803b7d7ba4efc103198474b7e896ec37e242"},
{file = "scikit_network-0.32.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e32e247728815750b12b950279cae6b12041a0c4bf95d1accdd273b0c1a6ea1"},
{file = "scikit_network-0.32.1-cp311-cp311-win_amd64.whl", hash = "sha256:c7016dce37120aa527fcff4254985360f164306ed060c496a6cf296a6d0fd2c3"},
]
[[package]] [[package]]
name = "scipy" name = "scipy"
version = "1.13.0" version = "1.13.0"
requires_python = ">=3.9" requires_python = ">=3.9"
summary = "Fundamental algorithms for scientific computing in Python" summary = "Fundamental algorithms for scientific computing in Python"
groups = ["default", "trials"] groups = ["default"]
dependencies = [ dependencies = [
"numpy<2.3,>=1.22.4", "numpy<2.3,>=1.22.4",
] ]
@ -2578,7 +2500,7 @@ name = "setuptools"
version = "69.5.1" version = "69.5.1"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "Easily download, build, install, upgrade, and uninstall Python packages" summary = "Easily download, build, install, upgrade, and uninstall Python packages"
groups = ["default"] groups = ["default", "notebooks"]
files = [ files = [
{file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"},
{file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"},
@ -2589,7 +2511,7 @@ name = "six"
version = "1.16.0" version = "1.16.0"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
summary = "Python 2 and 3 compatibility utilities" summary = "Python 2 and 3 compatibility utilities"
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
@ -2630,7 +2552,7 @@ files = [
[[package]] [[package]]
name = "spacy" name = "spacy"
version = "3.7.4" version = "3.7.5"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Industrial-strength Natural Language Processing (NLP) in Python" summary = "Industrial-strength Natural Language Processing (NLP) in Python"
groups = ["default"] groups = ["default"]
@ -2646,28 +2568,27 @@ dependencies = [
"pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4", "pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4",
"requests<3.0.0,>=2.13.0", "requests<3.0.0,>=2.13.0",
"setuptools", "setuptools",
"smart-open<7.0.0,>=5.2.1",
"spacy-legacy<3.1.0,>=3.0.11", "spacy-legacy<3.1.0,>=3.0.11",
"spacy-loggers<2.0.0,>=1.0.0", "spacy-loggers<2.0.0,>=1.0.0",
"srsly<3.0.0,>=2.4.3", "srsly<3.0.0,>=2.4.3",
"thinc<8.3.0,>=8.2.2", "thinc<8.3.0,>=8.2.2",
"tqdm<5.0.0,>=4.38.0", "tqdm<5.0.0,>=4.38.0",
"typer<0.10.0,>=0.3.0", "typer<1.0.0,>=0.3.0",
"wasabi<1.2.0,>=0.9.1", "wasabi<1.2.0,>=0.9.1",
"weasel<0.4.0,>=0.1.0", "weasel<0.5.0,>=0.1.0",
] ]
files = [ files = [
{file = "spacy-3.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e82b9da21853d4aee46811804dc7e136895f087fda25c7585172d95eb9b70833"}, {file = "spacy-3.7.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd93c34bf2a02bbed7df73d42aed8df5e3eb9688c4ea84ec576f740ba939cce5"},
{file = "spacy-3.7.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07ffedf51899441070fb70432f8f873696f39e0e31c9ce7403101c459f8a1281"}, {file = "spacy-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:190ba0032a5efdb138487c587c0ebb7a98f86adb917f464b252ee8766b8eec4a"},
{file = "spacy-3.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba57bcc111eca7b086ee33a9636df775cfd4b14302f7d0ffbc11e95ac0fb3f0e"}, {file = "spacy-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38de1c9bbb73b8cdfea2dd6e57450f093c1a1af47515870c1c8640b85b35ab16"},
{file = "spacy-3.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7580d1565f4d1ccbee9a18531f993a5b9b37ced96f145153dd4e98ceec607a55"}, {file = "spacy-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dad4853950a2fe6c7a0bdfd791a762d1f8cedd2915c4ae41b2e0ca3a850eefc"},
{file = "spacy-3.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:df99c6f0085b1ec8e88beb5fd96d4371cef6fc19c202c41fc4fadc2afd55a157"}, {file = "spacy-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:4e00d076871af784c2e43185a71ee676b58893853a05c5b81717b8af2b666c07"},
{file = "spacy-3.7.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b982ebab417189346acb4722637c573830d62e157ba336c3eb6c417249344be1"}, {file = "spacy-3.7.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bf54c3c2425428b328b53a65913d47eb4cb27a1429aa4e8ed979ffc97d4663e0"},
{file = "spacy-3.7.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e7c29e152d8ea060af60da9410fa8ef038f3c9068a206905ee5c704de78f6e87"}, {file = "spacy-3.7.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4145cea7f9814fa7d86b2028c2dd83e02f13f80d5ac604a400b2f7d7b26a0e8c"},
{file = "spacy-3.7.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:023c9a008328f55c4717c56c4f8a28073b9961547f7d38a9405c967a52e66d59"}, {file = "spacy-3.7.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:262f8ebb71f7ed5ffe8e4f384b2594b7a296be50241ce9fbd9277b5da2f46f38"},
{file = "spacy-3.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1969d3d0fd0c811b7485438460f0ae8cfe16d46b54bcb8d1c26e70914e67e3d"}, {file = "spacy-3.7.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:faa1e2b6234ae33c0b1f8dfa5a8dcb66fb891f19231725dfcff4b2666125c250"},
{file = "spacy-3.7.4-cp312-cp312-win_amd64.whl", hash = "sha256:040f7df5096c817450820eaaa426d54ed266254d16974e9a707a32f5b0f139ae"}, {file = "spacy-3.7.5-cp312-cp312-win_amd64.whl", hash = "sha256:07677e270a6d729453cc04b5e2247a96a86320b8845e6428d9f90f217eff0f56"},
{file = "spacy-3.7.4.tar.gz", hash = "sha256:525f2ced2e40761562c8cace93ef6a1e6e8c483f27bd564bc1b15f608efbe85b"}, {file = "spacy-3.7.5.tar.gz", hash = "sha256:a648c6cbf2acc7a55a69ee9e7fa4f22bdf69aa828a587a1bc5cfff08cf3c2dd3"},
] ]
[[package]] [[package]]
@ -2755,7 +2676,7 @@ files = [
[[package]] [[package]]
name = "spacy" name = "spacy"
version = "3.7.4" version = "3.7.5"
extras = ["lookups", "transformers"] extras = ["lookups", "transformers"]
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Industrial-strength Natural Language Processing (NLP) in Python" summary = "Industrial-strength Natural Language Processing (NLP) in Python"
@ -2763,20 +2684,20 @@ groups = ["default"]
dependencies = [ dependencies = [
"spacy-lookups-data<1.1.0,>=1.0.3", "spacy-lookups-data<1.1.0,>=1.0.3",
"spacy-transformers<1.4.0,>=1.1.2", "spacy-transformers<1.4.0,>=1.1.2",
"spacy==3.7.4", "spacy==3.7.5",
] ]
files = [ files = [
{file = "spacy-3.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e82b9da21853d4aee46811804dc7e136895f087fda25c7585172d95eb9b70833"}, {file = "spacy-3.7.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd93c34bf2a02bbed7df73d42aed8df5e3eb9688c4ea84ec576f740ba939cce5"},
{file = "spacy-3.7.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07ffedf51899441070fb70432f8f873696f39e0e31c9ce7403101c459f8a1281"}, {file = "spacy-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:190ba0032a5efdb138487c587c0ebb7a98f86adb917f464b252ee8766b8eec4a"},
{file = "spacy-3.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba57bcc111eca7b086ee33a9636df775cfd4b14302f7d0ffbc11e95ac0fb3f0e"}, {file = "spacy-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38de1c9bbb73b8cdfea2dd6e57450f093c1a1af47515870c1c8640b85b35ab16"},
{file = "spacy-3.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7580d1565f4d1ccbee9a18531f993a5b9b37ced96f145153dd4e98ceec607a55"}, {file = "spacy-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dad4853950a2fe6c7a0bdfd791a762d1f8cedd2915c4ae41b2e0ca3a850eefc"},
{file = "spacy-3.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:df99c6f0085b1ec8e88beb5fd96d4371cef6fc19c202c41fc4fadc2afd55a157"}, {file = "spacy-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:4e00d076871af784c2e43185a71ee676b58893853a05c5b81717b8af2b666c07"},
{file = "spacy-3.7.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b982ebab417189346acb4722637c573830d62e157ba336c3eb6c417249344be1"}, {file = "spacy-3.7.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bf54c3c2425428b328b53a65913d47eb4cb27a1429aa4e8ed979ffc97d4663e0"},
{file = "spacy-3.7.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e7c29e152d8ea060af60da9410fa8ef038f3c9068a206905ee5c704de78f6e87"}, {file = "spacy-3.7.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4145cea7f9814fa7d86b2028c2dd83e02f13f80d5ac604a400b2f7d7b26a0e8c"},
{file = "spacy-3.7.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:023c9a008328f55c4717c56c4f8a28073b9961547f7d38a9405c967a52e66d59"}, {file = "spacy-3.7.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:262f8ebb71f7ed5ffe8e4f384b2594b7a296be50241ce9fbd9277b5da2f46f38"},
{file = "spacy-3.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1969d3d0fd0c811b7485438460f0ae8cfe16d46b54bcb8d1c26e70914e67e3d"}, {file = "spacy-3.7.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:faa1e2b6234ae33c0b1f8dfa5a8dcb66fb891f19231725dfcff4b2666125c250"},
{file = "spacy-3.7.4-cp312-cp312-win_amd64.whl", hash = "sha256:040f7df5096c817450820eaaa426d54ed266254d16974e9a707a32f5b0f139ae"}, {file = "spacy-3.7.5-cp312-cp312-win_amd64.whl", hash = "sha256:07677e270a6d729453cc04b5e2247a96a86320b8845e6428d9f90f217eff0f56"},
{file = "spacy-3.7.4.tar.gz", hash = "sha256:525f2ced2e40761562c8cace93ef6a1e6e8c483f27bd564bc1b15f608efbe85b"}, {file = "spacy-3.7.5.tar.gz", hash = "sha256:a648c6cbf2acc7a55a69ee9e7fa4f22bdf69aa828a587a1bc5cfff08cf3c2dd3"},
] ]
[[package]] [[package]]
@ -2875,7 +2796,7 @@ files = [
name = "texttable" name = "texttable"
version = "1.7.0" version = "1.7.0"
summary = "module to create simple ASCII tables" summary = "module to create simple ASCII tables"
groups = ["trials"] groups = ["default"]
files = [ files = [
{file = "texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917"}, {file = "texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917"},
{file = "texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638"}, {file = "texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638"},
@ -3014,17 +2935,6 @@ files = [
{file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"},
] ]
[[package]]
name = "toolz"
version = "0.12.1"
requires_python = ">=3.7"
summary = "List processing tools and functional utilities"
groups = ["trials"]
files = [
{file = "toolz-0.12.1-py3-none-any.whl", hash = "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85"},
{file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"},
]
[[package]] [[package]]
name = "torch" name = "torch"
version = "2.3.0" version = "2.3.0"
@ -3187,7 +3097,7 @@ name = "tzdata"
version = "2024.1" version = "2024.1"
requires_python = ">=2" requires_python = ">=2"
summary = "Provider of IANA time zone data" summary = "Provider of IANA time zone data"
groups = ["default", "trials"] groups = ["default"]
files = [ files = [
{file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"},
{file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"},
@ -3209,7 +3119,7 @@ name = "urllib3"
version = "2.2.1" version = "2.2.1"
requires_python = ">=3.8" requires_python = ">=3.8"
summary = "HTTP library with thread-safe connection pooling, file post, and more." summary = "HTTP library with thread-safe connection pooling, file post, and more."
groups = ["default", "notebooks", "trials"] groups = ["default", "notebooks"]
files = [ files = [
{file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
{file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
@ -3309,13 +3219,13 @@ files = [
[[package]] [[package]]
name = "widgetsnbextension" name = "widgetsnbextension"
version = "4.0.10" version = "4.0.11"
requires_python = ">=3.7" requires_python = ">=3.7"
summary = "Jupyter interactive widgets for Jupyter Notebook" summary = "Jupyter interactive widgets for Jupyter Notebook"
groups = ["notebooks"] groups = ["notebooks"]
files = [ files = [
{file = "widgetsnbextension-4.0.10-py3-none-any.whl", hash = "sha256:d37c3724ec32d8c48400a435ecfa7d3e259995201fbefa37163124a9fcb393cc"}, {file = "widgetsnbextension-4.0.11-py3-none-any.whl", hash = "sha256:55d4d6949d100e0d08b94948a42efc3ed6dfdc0e9468b2c4b128c9a2ce3a7a36"},
{file = "widgetsnbextension-4.0.10.tar.gz", hash = "sha256:64196c5ff3b9a9183a8e699a4227fb0b7002f252c814098e66c4d1cd0644688f"}, {file = "widgetsnbextension-4.0.11.tar.gz", hash = "sha256:8b22a8f1910bfd188e596fe7fc05dcbd87e810c8a4ba010bdb3da86637398474"},
] ]
[[package]] [[package]]

View File

@ -10,12 +10,13 @@ dependencies = [
"networkx>=3.3", "networkx>=3.3",
"spacy[lookups,transformers]>=3.7.4", "spacy[lookups,transformers]>=3.7.4",
"sentence-transformers>=2.7.0", "sentence-transformers>=2.7.0",
"numpy>=1.26.4", "numpy<=1.26.4",
"pip>=24.0", "pip>=24.0",
"typing-extensions>=4.12.2", "typing-extensions>=4.12.2",
"plotly>=5.22.0", "plotly>=5.22.0",
"dash>=2.17.0", "dash>=2.17.0",
"dash-cytoscape>=1.0.1", "dash-cytoscape>=1.0.1",
"py4cytoscape>=1.9.0",
] ]
requires-python = ">=3.11" requires-python = ">=3.11"
readme = "README.md" readme = "README.md"
@ -40,8 +41,6 @@ notebooks = [
# files. This information is provided by extra options. # files. This information is provided by extra options.
# --config-setting="--global-option=build_ext" --config-setting="--global-option=-IC:\Program Files\Graphviz\include" --config-setting="--global-option=-LC:\Program Files\Graphviz\lib" # --config-setting="--global-option=build_ext" --config-setting="--global-option=-IC:\Program Files\Graphviz\include" --config-setting="--global-option=-LC:\Program Files\Graphviz\lib"
trials = [ trials = [
"alph[graphviz]>=0.4.10",
"py4cytoscape>=1.9.0",
] ]
dev = [ dev = [
"cython>=3.0.10", "cython>=3.0.10",

View File

@ -3,12 +3,17 @@ from typing import cast
from pandas import DataFrame from pandas import DataFrame
from lang_main.analysis.graphs import Graph, TokenGraph, save_to_GraphML from lang_main.analysis.graphs import (
Graph,
TokenGraph,
save_to_GraphML,
)
from lang_main.constants import ( from lang_main.constants import (
PATH_TO_DATASET, PATH_TO_DATASET,
SAVE_PATH_FOLDER, SAVE_PATH_FOLDER,
SKIP_GRAPH_POSTPROCESSING, SKIP_GRAPH_POSTPROCESSING,
SKIP_GRAPH_RESCALING, SKIP_GRAPH_RESCALING,
SKIP_GRAPH_STATIC_RENDERING,
SKIP_PREPROCESSING, SKIP_PREPROCESSING,
SKIP_TIME_ANALYSIS, SKIP_TIME_ANALYSIS,
SKIP_TOKEN_ANALYSIS, SKIP_TOKEN_ANALYSIS,
@ -21,7 +26,8 @@ from lang_main.pipelines.predefined import (
build_timeline_pipe, build_timeline_pipe,
build_tk_graph_pipe, build_tk_graph_pipe,
build_tk_graph_post_pipe, build_tk_graph_post_pipe,
build_tk_graph_rescaling, build_tk_graph_rendering_pipe,
build_tk_graph_rescaling_pipe,
) )
from lang_main.types import ( from lang_main.types import (
EntryPoints, EntryPoints,
@ -36,7 +42,8 @@ pipe_target_feat = build_base_target_feature_pipe()
pipe_merge = build_merge_duplicates_pipe() pipe_merge = build_merge_duplicates_pipe()
pipe_token_analysis = build_tk_graph_pipe() pipe_token_analysis = build_tk_graph_pipe()
pipe_graph_postprocessing = build_tk_graph_post_pipe() pipe_graph_postprocessing = build_tk_graph_post_pipe()
pipe_graph_rescaling = build_tk_graph_rescaling() pipe_graph_rescaling = build_tk_graph_rescaling_pipe()
pipe_static_graph_rendering = build_tk_graph_rendering_pipe()
pipe_timeline = build_timeline_pipe() pipe_timeline = build_timeline_pipe()
@ -61,7 +68,7 @@ def run_token_analysis() -> None:
loaded_results = cast(tuple[DataFrame], load_pickle(entry_point_path)) loaded_results = cast(tuple[DataFrame], load_pickle(entry_point_path))
preprocessed_data = loaded_results[0] preprocessed_data = loaded_results[0]
# build token graph # build token graph
(tk_graph, docs_mapping) = typing.cast( (tk_graph, _) = typing.cast(
tuple[TokenGraph, dict[PandasIndex, SpacyDoc] | None], tuple[TokenGraph, dict[PandasIndex, SpacyDoc] | None],
pipe_token_analysis.run(starting_values=(preprocessed_data,)), pipe_token_analysis.run(starting_values=(preprocessed_data,)),
) )
@ -94,14 +101,33 @@ def run_graph_edge_rescaling() -> None:
ret = cast( ret = cast(
tuple[TokenGraph, Graph], pipe_graph_rescaling.run(starting_values=(tk_graph,)) tuple[TokenGraph, Graph], pipe_graph_rescaling.run(starting_values=(tk_graph,))
) )
undirected_rescaled_graph = ret[1] tk_graph_rescaled = ret[0]
tk_graph_rescaled_undirected = ret[1]
tk_graph_rescaled.to_GraphML(
SAVE_PATH_FOLDER, filename='TokenGraph-directed-rescaled', directed=False
)
save_to_GraphML( save_to_GraphML(
undirected_rescaled_graph, tk_graph_rescaled_undirected,
saving_path=SAVE_PATH_FOLDER, saving_path=SAVE_PATH_FOLDER,
filename='TokenGraph-undirected-rescaled', filename='TokenGraph-undirected-rescaled',
) )
def run_static_graph_rendering() -> None:
entry_point_path = get_entry_point(
SAVE_PATH_FOLDER,
EntryPoints.TK_GRAPH_ANALYSIS_RESCALED,
)
loaded_results = cast(
tuple[TokenGraph, Graph],
load_pickle(entry_point_path),
)
tk_graph_rescaled = loaded_results[0]
tk_graph_rescaled_undirected = loaded_results[1]
_ = pipe_static_graph_rendering.run(starting_values=(tk_graph_rescaled_undirected,))
# ** time analysis # ** time analysis
def run_time_analysis() -> None: def run_time_analysis() -> None:
# load entry point # load entry point
@ -123,6 +149,7 @@ def build_pipeline_container() -> PipelineContainer:
container.add(run_token_analysis, skip=SKIP_TOKEN_ANALYSIS) container.add(run_token_analysis, skip=SKIP_TOKEN_ANALYSIS)
container.add(run_graph_postprocessing, skip=SKIP_GRAPH_POSTPROCESSING) container.add(run_graph_postprocessing, skip=SKIP_GRAPH_POSTPROCESSING)
container.add(run_graph_edge_rescaling, skip=SKIP_GRAPH_RESCALING) container.add(run_graph_edge_rescaling, skip=SKIP_GRAPH_RESCALING)
container.add(run_static_graph_rendering, skip=SKIP_GRAPH_STATIC_RENDERING)
container.add(run_time_analysis, skip=SKIP_TIME_ANALYSIS) container.add(run_time_analysis, skip=SKIP_TIME_ANALYSIS)
return container return container

View File

@ -13,9 +13,10 @@ dataset = '../data/02_202307/Export4.csv'
# be fully executed # be fully executed
[control] [control]
preprocessing_skip = true preprocessing_skip = true
token_analysis_skip = false token_analysis_skip = true
graph_postprocessing_skip = false graph_postprocessing_skip = true
graph_rescaling_skip = false graph_rescaling_skip = true
graph_static_rendering_skip = false
time_analysis_skip = true time_analysis_skip = true
#[export_filenames] #[export_filenames]

View File

@ -6,8 +6,17 @@ from pathlib import Path
from time import gmtime from time import gmtime
from typing import Any, Final from typing import Any, Final
import py4cytoscape as p4c
from lang_main.io import load_toml_config from lang_main.io import load_toml_config
# ** py4cytoscape config
p4c.set_summary_logger(False)
p4c.py4cytoscape_logger.detail_logger.setLevel('ERROR')
p4c.py4cytoscape_logger.detail_logger.removeHandler(p4c.py4cytoscape_logger.detail_handler)
p4c.py4cytoscape_logger.detail_logger.addHandler(logging.NullHandler())
# ** lang-main config
logging.Formatter.converter = gmtime logging.Formatter.converter = gmtime
LOG_FMT: Final[str] = '%(asctime)s | %(module)s:%(levelname)s | %(message)s' LOG_FMT: Final[str] = '%(asctime)s | %(module)s:%(levelname)s | %(message)s'
LOG_DATE_FMT: Final[str] = '%Y-%m-%d %H:%M:%S +0000' LOG_DATE_FMT: Final[str] = '%Y-%m-%d %H:%M:%S +0000'
@ -18,13 +27,13 @@ logging.basicConfig(
) )
CONFIG_FILENAME: Final[str] = 'lang_main_config.toml' CONFIG_FILENAME: Final[str] = 'lang_main_config.toml'
CYTO_STYLESHEET_FILENAME: Final[str] = r'cytoscape_config/lang_main.xml'
USE_INTERNAL_CONFIG: Final[bool] = False USE_INTERNAL_CONFIG: Final[bool] = False
pkg_dir = Path(__file__).parent pkg_dir = Path(__file__).parent
cfg_path_internal = (pkg_dir / CONFIG_FILENAME).resolve() cfg_path_internal = (pkg_dir / CONFIG_FILENAME).resolve()
# caller_file = Path(inspect.stack()[-1].filename) cyto_stylesheet_path = (pkg_dir / CYTO_STYLESHEET_FILENAME).resolve()
# CALLER_PATH: Final[Path] = caller_file.parent.resolve()
# load config data: internal/external # ** load config data: internal/external
if USE_INTERNAL_CONFIG: if USE_INTERNAL_CONFIG:
loaded_cfg = load_toml_config(path_to_toml=cfg_path_internal) loaded_cfg = load_toml_config(path_to_toml=cfg_path_internal)
else: else:
@ -43,6 +52,17 @@ else:
CONFIG: Final[dict[str, Any]] = loaded_cfg.copy() CONFIG: Final[dict[str, Any]] = loaded_cfg.copy()
# ** Cytoscape configuration
# stylesheet
if not cyto_stylesheet_path.exists():
raise FileNotFoundError(
f'Visual stylesheet for Cytoscape not found under: >>{cyto_stylesheet_path}<<'
)
CYTO_PATH_STYLESHEET: Final[Path] = cyto_stylesheet_path
# TODO check removal
# append Graphviz binary folder to system path if not already contained # append Graphviz binary folder to system path if not already contained
if sys.platform == 'win32': if sys.platform == 'win32':
path = Path(r'C:\Program Files\Graphviz\bin') path = Path(r'C:\Program Files\Graphviz\bin')

View File

@ -13,7 +13,10 @@ import numpy.typing as npt
from networkx import DiGraph, Graph from networkx import DiGraph, Graph
from pandas import DataFrame from pandas import DataFrame
from lang_main.constants import EDGE_WEIGHT_DECIMALS from lang_main.constants import (
EDGE_WEIGHT_DECIMALS,
PROPERTY_NAME_DEGREE_WEIGHTED,
)
from lang_main.errors import EdgePropertyNotContainedError from lang_main.errors import EdgePropertyNotContainedError
from lang_main.io import load_pickle, save_pickle from lang_main.io import load_pickle, save_pickle
from lang_main.loggers import logger_graphs as logger from lang_main.loggers import logger_graphs as logger
@ -233,9 +236,7 @@ def filter_graph_by_edge_weight(
if bound_upper is not None and weight > bound_upper: if bound_upper is not None and weight > bound_upper:
filtered_graph.remove_edge(edge[0], edge[1]) filtered_graph.remove_edge(edge[0], edge[1])
if filtered_graph._undirected is not None: filtered_graph.to_undirected(inplace=True, logging=False)
filtered_graph.to_undirected(inplace=True, logging=False)
filtered_graph.update_metadata(logging=False) filtered_graph.update_metadata(logging=False)
return filtered_graph return filtered_graph
@ -275,15 +276,77 @@ def filter_graph_by_node_degree(
if bound_upper is not None and degree > bound_upper: if bound_upper is not None and degree > bound_upper:
filtered_graph.remove_node(node) filtered_graph.remove_node(node)
if filtered_graph._undirected is not None: filtered_graph.to_undirected(inplace=True, logging=False)
filtered_graph.to_undirected(inplace=True, logging=False)
filtered_graph.update_metadata(logging=False) filtered_graph.update_metadata(logging=False)
return filtered_graph return filtered_graph
def apply_rescaling_to_graph( def add_weighted_degree(
graph: DiGraph | Graph,
edge_weight_property: str = 'weight',
property_name: str = PROPERTY_NAME_DEGREE_WEIGHTED,
) -> None:
"""adds the weighted degree as property to each node of the given graph
Operation is performed inplace.
Parameters
----------
graph : DiGraph | Graph
Graph with weighted degree as node property added inplace
edge_weight_property : str, optional
property of the edges which contains the weight information, by default 'weight'
property_name : str, optional
target name for the property containing the weighted degree in nodes,
by default 'degree_weighted'
"""
node_degree_mapping = cast(
dict[str, float],
dict(graph.degree(weight=edge_weight_property)), # type: ignore
)
nx.set_node_attributes(
graph,
node_degree_mapping,
name=property_name,
)
def static_graph_analysis(
graph: TokenGraph,
) -> tuple[TokenGraph]:
"""helper function to allow the calculation of static metrics in pipelines
Parameters
----------
tk_graph_directed : TokenGraph
token graph (directed) and with rescaled edge weights
tk_graph_undirected : Graph
token graph (undirected) and with rescaled edge weights
Returns
-------
tuple[TokenGraph, Graph]
token graph (directed) and undirected version with added weighted degree
"""
graph = graph.copy()
graph.perform_static_analysis()
return (graph,)
def pipe_add_graph_metrics(
*graphs: DiGraph | Graph,
) -> tuple[DiGraph | Graph, ...]:
collection: list[DiGraph | Graph] = []
for graph in graphs:
graph_copy = copy.deepcopy(graph)
add_weighted_degree(graph_copy)
collection.append(graph_copy)
return tuple(collection)
def pipe_rescale_graph_edge_weights(
graph: TokenGraph, graph: TokenGraph,
) -> tuple[TokenGraph, Graph]: ) -> tuple[TokenGraph, Graph]:
"""helper function to allow calls in pipelines """helper function to allow calls in pipelines
@ -298,6 +361,8 @@ def apply_rescaling_to_graph(
tuple[TokenGraph, Graph] tuple[TokenGraph, Graph]
token graph (directed) and undirected version with rescaled edge weights token graph (directed) and undirected version with rescaled edge weights
""" """
graph = graph.copy()
return graph.rescale_edge_weights() return graph.rescale_edge_weights()
@ -542,7 +607,7 @@ class TokenGraph(DiGraph):
the underlying `to_undirected` method of the directed and rescaled the underlying `to_undirected` method of the directed and rescaled
TokenGraph instance is called the weights are not rescaled again. Thus, TokenGraph instance is called the weights are not rescaled again. Thus,
the maximum edge weight can exceed the theoretical maximum value of 1. To the maximum edge weight can exceed the theoretical maximum value of 1. To
ensure consistent behaviour across different application of the conversion to ensure consistent behaviour across different applications of the conversion to
undirected graphs new instances are returned, especially for the undirected undirected graphs new instances are returned, especially for the undirected
graph. graph.
In contrast, the new directed TokenGraph contains an undirected version without In contrast, the new directed TokenGraph contains an undirected version without
@ -554,14 +619,24 @@ class TokenGraph(DiGraph):
tuple[TokenGraph, Graph] tuple[TokenGraph, Graph]
directed and undirected instances directed and undirected instances
""" """
self.to_undirected(inplace=True, logging=False)
token_graph = rescale_edge_weights(self.directed) token_graph = rescale_edge_weights(self.directed)
token_graph.rescaled_weights = True token_graph.rescaled_weights = True
token_graph.to_undirected(inplace=True, logging=False)
token_graph.update_metadata(logging=False) token_graph.update_metadata(logging=False)
undirected = rescale_edge_weights(self.undirected) undirected = rescale_edge_weights(self.undirected)
return token_graph, undirected return token_graph, undirected
def perform_static_analysis(self):
"""calculate different metrics directly on the data of the underlying graphs
(directed and undirected)
Current operations:
- adding weighted degree
"""
add_weighted_degree(self)
add_weighted_degree(self.undirected)
def _save_prepare( def _save_prepare(
self, self,
path: Path, path: Path,

View File

@ -226,6 +226,7 @@ def build_token_graph(
graph.update_metadata() graph.update_metadata()
# convert to undirected # convert to undirected
graph.to_undirected(logging=False) graph.to_undirected(logging=False)
graph.perform_static_analysis()
return graph, docs_mapping return graph, docs_mapping

View File

@ -5,8 +5,13 @@ import spacy
from sentence_transformers import SentenceTransformer from sentence_transformers import SentenceTransformer
from spacy.language import Language as GermanSpacyModel from spacy.language import Language as GermanSpacyModel
from lang_main import CONFIG from lang_main import CONFIG, CYTO_PATH_STYLESHEET
from lang_main.types import STFRDeviceTypes from lang_main.types import CytoLayoutProperties, CytoLayouts, STFRDeviceTypes
__all__ = [
'CONFIG',
'CYTO_PATH_STYLESHEET',
]
# ** paths # ** paths
input_path_conf = Path.cwd() / Path(CONFIG['paths']['inputs']) input_path_conf = Path.cwd() / Path(CONFIG['paths']['inputs'])
@ -28,8 +33,10 @@ SKIP_PREPROCESSING: Final[bool] = CONFIG['control']['preprocessing_skip']
SKIP_TOKEN_ANALYSIS: Final[bool] = CONFIG['control']['token_analysis_skip'] SKIP_TOKEN_ANALYSIS: Final[bool] = CONFIG['control']['token_analysis_skip']
SKIP_GRAPH_POSTPROCESSING: Final[bool] = CONFIG['control']['graph_postprocessing_skip'] SKIP_GRAPH_POSTPROCESSING: Final[bool] = CONFIG['control']['graph_postprocessing_skip']
SKIP_GRAPH_RESCALING: Final[bool] = CONFIG['control']['graph_rescaling_skip'] SKIP_GRAPH_RESCALING: Final[bool] = CONFIG['control']['graph_rescaling_skip']
SKIP_GRAPH_STATIC_RENDERING: Final[bool] = CONFIG['control']['graph_static_rendering_skip']
SKIP_TIME_ANALYSIS: Final[bool] = CONFIG['control']['time_analysis_skip'] SKIP_TIME_ANALYSIS: Final[bool] = CONFIG['control']['time_analysis_skip']
# ** models # ** models
# ** sentence_transformers # ** sentence_transformers
STFR_DEVICE: Final[STFRDeviceTypes] = STFRDeviceTypes.CPU STFR_DEVICE: Final[STFRDeviceTypes] = STFRDeviceTypes.CPU
@ -55,6 +62,26 @@ THRESHOLD_SIMILARITY: Final[float] = CONFIG['preprocess']['threshold_similarity'
# ** graph postprocessing # ** graph postprocessing
EDGE_WEIGHT_DECIMALS: Final[int] = 4 EDGE_WEIGHT_DECIMALS: Final[int] = 4
THRESHOLD_EDGE_WEIGHT: Final[int] = CONFIG['graph_postprocessing']['threshold_edge_weight'] THRESHOLD_EDGE_WEIGHT: Final[int] = CONFIG['graph_postprocessing']['threshold_edge_weight']
PROPERTY_NAME_DEGREE_WEIGHTED: Final[str] = 'degree_weighted'
# ** graph exports (Cytoscape)
CYTO_COLLECTION_NAME: Final[str] = 'lang_main'
CYTO_BASE_NETWORK_NAME: Final[str] = 'token_graph'
CYTO_LAYOUT_NAME: Final[CytoLayouts] = 'force-directed'
CYTO_LAYOUT_PROPERTIES: Final[CytoLayoutProperties] = {
'numIterations': 1000,
'defaultSpringCoefficient': 1e-4,
'defaultSpringLength': 45,
'defaultNodeMass': 11,
'isDeterministic': True,
'singlePartition': False,
}
CYTO_STYLESHEET_NAME: Final[str] = 'lang_main'
# name for property, on which selection is done
CYTO_SELECTION_PROPERTY: Final[str] = 'node_selection'
CYTO_NUMBER_SUBGRAPHS: Final[int] = 5
CYTO_ITER_NEIGHBOUR_DEPTH: Final[int] = 2
# ** time analysis.uniqueness # ** time analysis.uniqueness
THRESHOLD_UNIQUE_TEXTS: Final[int] = CONFIG['time_analysis']['uniqueness'][ THRESHOLD_UNIQUE_TEXTS: Final[int] = CONFIG['time_analysis']['uniqueness'][
'threshold_unique_texts' 'threshold_unique_texts'

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<vizmap id="VizMap-2024_07_12-08_08" documentVersion="3.1">
<visualStyle name="lang_main">
<network>
<visualProperty default="0.0" name="NETWORK_CENTER_X_LOCATION"/>
<visualProperty default="0.0" name="NETWORK_CENTER_Y_LOCATION"/>
<visualProperty default="0.0" name="NETWORK_CENTER_Z_LOCATION"/>
<visualProperty default="false" name="NETWORK_ANNOTATION_SELECTION"/>
<visualProperty default="1.0" name="NETWORK_SCALE_FACTOR"/>
<visualProperty default="false" name="NETWORK_NODE_LABEL_SELECTION"/>
<visualProperty default="400.0" name="NETWORK_HEIGHT"/>
<visualProperty default="true" name="NETWORK_NODE_SELECTION"/>
<visualProperty default="550.0" name="NETWORK_WIDTH"/>
<visualProperty default="0.0" name="NETWORK_DEPTH"/>
<visualProperty default="false" name="NETWORK_FORCE_HIGH_DETAIL"/>
<visualProperty default="" name="NETWORK_TITLE"/>
<visualProperty default="true" name="NETWORK_EDGE_SELECTION"/>
<visualProperty default="#F7FFFF" name="NETWORK_BACKGROUND_PAINT"/>
</network>
<node>
<dependency value="true" name="nodeCustomGraphicsSizeSync"/>
<dependency value="true" name="nodeSizeLocked"/>
<visualProperty default="ROUND_RECTANGLE" name="NODE_LABEL_BACKGROUND_SHAPE"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_9"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_7"/>
<visualProperty default="true" name="NODE_NESTED_NETWORK_IMAGE_VISIBLE"/>
<visualProperty default="0.0" name="NODE_LABEL_ROTATION"/>
<visualProperty default="175" name="NODE_LABEL_BACKGROUND_TRANSPARENCY"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_8"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_2"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_6"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_7"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_1"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_4"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_9"/>
<visualProperty default="ROUND_RECTANGLE" name="COMPOUND_NODE_SHAPE"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_5"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_9"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_5"/>
<visualProperty default="10.0" name="COMPOUND_NODE_PADDING"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_3"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_6"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_8"/>
<visualProperty default="SE,NW,c,-2.00,3.00" name="NODE_LABEL_POSITION"/>
<visualProperty default="ELLIPSE" name="NODE_SHAPE"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_3"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_4"/>
<visualProperty default="SansSerif.plain,plain,12" name="NODE_LABEL_FONT_FACE"/>
<visualProperty default="#D1F5BE" name="NODE_BORDER_PAINT"/>
<visualProperty default="40.0" name="NODE_HEIGHT"/>
<visualProperty default="255" name="NODE_LABEL_TRANSPARENCY"/>
<visualProperty default="#E1E1E1" name="NODE_LABEL_BACKGROUND_COLOR"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_6"/>
<visualProperty default="false" name="NODE_SELECTED"/>
<visualProperty default="0.0" name="NODE_DEPTH"/>
<visualProperty default="SOLID" name="NODE_BORDER_STROKE"/>
<visualProperty default="" name="NODE_TOOLTIP"/>
<visualProperty default="7.0" name="NODE_BORDER_WIDTH"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_2"/>
<visualProperty default="#A63C06" name="NODE_LABEL_COLOR"/>
<visualProperty default="0.0" name="NODE_X_LOCATION"/>
<visualProperty default="18.0" name="NODE_SIZE"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_8"/>
<visualProperty default="0.0" name="NODE_Z_LOCATION"/>
<visualProperty default="#FE9929" name="NODE_FILL_COLOR"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_1"/>
<visualProperty default="255" name="NODE_BORDER_TRANSPARENCY"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_1"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_2"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_3"/>
<visualProperty default="60.0" name="NODE_WIDTH"/>
<visualProperty default="" name="NODE_LABEL">
<passthroughMapping attributeName="name" attributeType="string"/>
</visualProperty>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_5"/>
<visualProperty default="500.0" name="NODE_LABEL_WIDTH"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_4"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_7"/>
<visualProperty default="#FFFF00" name="NODE_SELECTED_PAINT"/>
<visualProperty default="0.0" name="NODE_Y_LOCATION"/>
<visualProperty default="true" name="NODE_VISIBLE"/>
<visualProperty default="255" name="NODE_TRANSPARENCY"/>
<visualProperty default="14" name="NODE_LABEL_FONT_SIZE"/>
</node>
<edge>
<dependency value="true" name="arrowColorMatchesEdge"/>
<visualProperty default="false" name="EDGE_SELECTED"/>
<visualProperty default="255" name="EDGE_TRANSPARENCY"/>
<visualProperty default="10" name="EDGE_LABEL_FONT_SIZE"/>
<visualProperty default="#577399" name="EDGE_UNSELECTED_PAINT"/>
<visualProperty default="" name="EDGE_LABEL"/>
<visualProperty default="#FFFFFF" name="EDGE_STROKE_UNSELECTED_PAINT"/>
<visualProperty default="200.0" name="EDGE_LABEL_WIDTH"/>
<visualProperty default="#000000" name="EDGE_LABEL_COLOR"/>
<visualProperty default="SansSerif.plain,plain,10" name="EDGE_LABEL_FONT_FACE"/>
<visualProperty default="0.728545744495502,-0.684997151948455,0.6456513365424503" name="EDGE_BEND"/>
<visualProperty default="#B6B6B6" name="EDGE_LABEL_BACKGROUND_COLOR"/>
<visualProperty default="AUTO_BEND" name="EDGE_STACKING"/>
<visualProperty default="#000000" name="EDGE_TARGET_ARROW_UNSELECTED_PAINT"/>
<visualProperty default="0.5" name="EDGE_STACKING_DENSITY"/>
<visualProperty default="NONE" name="EDGE_TARGET_ARROW_SHAPE"/>
<visualProperty default="true" name="EDGE_VISIBLE"/>
<visualProperty default="C,C,c,0.00,0.00" name="EDGE_LABEL_POSITION"/>
<visualProperty default="0.0" name="EDGE_LABEL_ROTATION"/>
<visualProperty default="" name="EDGE_TOOLTIP"/>
<visualProperty default="0.0" name="EDGE_Z_ORDER"/>
<visualProperty default="#FFFF00" name="EDGE_TARGET_ARROW_SELECTED_PAINT"/>
<visualProperty default="#FF0000" name="EDGE_STROKE_SELECTED_PAINT"/>
<visualProperty default="NONE" name="EDGE_SOURCE_ARROW_SHAPE"/>
<visualProperty default="#FFFF00" name="EDGE_SOURCE_ARROW_SELECTED_PAINT"/>
<visualProperty default="false" name="EDGE_LABEL_AUTOROTATE"/>
<visualProperty default="true" name="EDGE_CURVED"/>
<visualProperty default="#000000" name="EDGE_SOURCE_ARROW_UNSELECTED_PAINT"/>
<visualProperty default="255" name="EDGE_LABEL_TRANSPARENCY"/>
<visualProperty default="6.0" name="EDGE_TARGET_ARROW_SIZE"/>
<visualProperty default="NONE" name="EDGE_LABEL_BACKGROUND_SHAPE"/>
<visualProperty default="255" name="EDGE_LABEL_BACKGROUND_TRANSPARENCY"/>
<visualProperty default="SOLID" name="EDGE_LINE_TYPE"/>
<visualProperty default="6.0" name="EDGE_SOURCE_ARROW_SIZE"/>
<visualProperty default="3.0" name="EDGE_WIDTH">
<continuousMapping attributeName="weight" attributeType="float">
<continuousMappingPoint attrValue="0.09520000219345093" equalValue="2.0" greaterValue="2.0" lesserValue="1.0"/>
<continuousMappingPoint attrValue="1.0" equalValue="10.0" greaterValue="1.0" lesserValue="10.0"/>
</continuousMapping>
</visualProperty>
</edge>
</visualStyle>
</vizmap>

View File

@ -16,6 +16,7 @@ preprocessing_skip = true
token_analysis_skip = false token_analysis_skip = false
graph_postprocessing_skip = false graph_postprocessing_skip = false
graph_rescaling_skip = false graph_rescaling_skip = false
graph_static_rendering_skip = false
time_analysis_skip = true time_analysis_skip = true
#[export_filenames] #[export_filenames]

View File

@ -185,13 +185,16 @@ class Pipeline(BasePipeline):
def add( def add(
self, self,
action: Callable, action: Callable,
action_kwargs: dict[str, Any] = {}, action_kwargs: dict[str, Any] | None = None,
save_result: bool = False, save_result: bool = False,
load_result: bool = False, load_result: bool = False,
filename: str | None = None, filename: str | None = None,
) -> None: ) -> None:
# check explicitly for function type # check explicitly for function type
# if isinstance(action, FunctionType): # if isinstance(action, FunctionType):
if action_kwargs is None:
action_kwargs = {}
if isinstance(action, Callable): if isinstance(action, Callable):
self.actions.append(action) self.actions.append(action)
self.action_names.append(action.__name__) self.action_names.append(action.__name__)
@ -272,7 +275,7 @@ class Pipeline(BasePipeline):
@override @override
def logic( def logic(
self, self,
starting_values: tuple[Any, ...], starting_values: tuple[Any, ...] | None = None,
) -> tuple[Any, ...]: ) -> tuple[Any, ...]:
for idx, (action, action_kwargs) in enumerate(zip(self.actions, self.actions_kwargs)): for idx, (action, action_kwargs) in enumerate(zip(self.actions, self.actions_kwargs)):
# loading # loading
@ -287,11 +290,21 @@ class Pipeline(BasePipeline):
continue continue
# calculation # calculation
if idx == 0: if idx == 0:
ret = action(*starting_values, **action_kwargs) args = starting_values
# ret = action(*starting_values, **action_kwargs)
else: else:
ret = action(*ret, **action_kwargs) args = ret
if not isinstance(ret, tuple): if args is not None and action_kwargs:
ret = action(*args, **action_kwargs)
elif args is not None:
ret = action(*args)
elif args is None and action_kwargs:
ret = action(**action_kwargs)
else:
ret = action()
if ret is not None and not isinstance(ret, tuple):
ret = (ret,) ret = (ret,)
ret = cast(tuple[Any, ...], ret) ret = cast(tuple[Any, ...], ret)
# save intermediate result # save intermediate result

View File

@ -19,6 +19,7 @@ from lang_main.analysis.tokens import build_token_graph
from lang_main.constants import ( from lang_main.constants import (
ACTIVITY_FEATURE, ACTIVITY_FEATURE,
ACTIVITY_TYPES, ACTIVITY_TYPES,
CYTO_BASE_NETWORK_NAME,
DATE_COLS, DATE_COLS,
FEATURE_NAME_OBJ_ID, FEATURE_NAME_OBJ_ID,
MODEL_INPUT_FEATURES, MODEL_INPUT_FEATURES,
@ -34,6 +35,7 @@ from lang_main.constants import (
UNIQUE_CRITERION_FEATURE, UNIQUE_CRITERION_FEATURE,
) )
from lang_main.pipelines.base import Pipeline from lang_main.pipelines.base import Pipeline
from lang_main.render import cytoscape as cyto
from lang_main.types import EntryPoints from lang_main.types import EntryPoints
@ -156,6 +158,9 @@ def build_tk_graph_post_pipe() -> Pipeline:
'bound_lower': 1, 'bound_lower': 1,
'bound_upper': None, 'bound_upper': None,
}, },
)
pipe_graph_postprocessing.add(
graphs.static_graph_analysis,
save_result=True, save_result=True,
filename=EntryPoints.TK_GRAPH_ANALYSIS, filename=EntryPoints.TK_GRAPH_ANALYSIS,
) )
@ -163,10 +168,13 @@ def build_tk_graph_post_pipe() -> Pipeline:
return pipe_graph_postprocessing return pipe_graph_postprocessing
def build_tk_graph_rescaling() -> Pipeline: def build_tk_graph_rescaling_pipe() -> Pipeline:
pipe_graph_rescaling = Pipeline(name='Graph_Rescaling', working_dir=SAVE_PATH_FOLDER) pipe_graph_rescaling = Pipeline(name='Graph_Rescaling', working_dir=SAVE_PATH_FOLDER)
pipe_graph_rescaling.add( pipe_graph_rescaling.add(
graphs.apply_rescaling_to_graph, graphs.pipe_rescale_graph_edge_weights,
)
pipe_graph_rescaling.add(
graphs.pipe_add_graph_metrics,
save_result=True, save_result=True,
filename=EntryPoints.TK_GRAPH_ANALYSIS_RESCALED, filename=EntryPoints.TK_GRAPH_ANALYSIS_RESCALED,
) )
@ -174,6 +182,27 @@ def build_tk_graph_rescaling() -> Pipeline:
return pipe_graph_rescaling return pipe_graph_rescaling
def build_tk_graph_rendering_pipe() -> Pipeline:
pipe_graph_rendering = Pipeline(
name='Graph_Static-Rendering',
working_dir=SAVE_PATH_FOLDER,
)
pipe_graph_rendering.add(cyto.import_to_cytoscape)
pipe_graph_rendering.add(cyto.layout_network)
pipe_graph_rendering.add(cyto.apply_style_to_network)
pipe_graph_rendering.add(
cyto.export_network_to_image,
{'filename': CYTO_BASE_NETWORK_NAME},
)
pipe_graph_rendering.add(cyto.get_subgraph_node_selection)
pipe_graph_rendering.add(
cyto.build_subnetworks,
{'export_image': True},
)
return pipe_graph_rendering
# ** timeline analysis # ** timeline analysis
def build_timeline_pipe() -> Pipeline: def build_timeline_pipe() -> Pipeline:
pipe_timeline = Pipeline(name='Timeline_Analysis', working_dir=SAVE_PATH_FOLDER) pipe_timeline = Pipeline(name='Timeline_Analysis', working_dir=SAVE_PATH_FOLDER)

View File

View File

@ -0,0 +1,159 @@
import time
from collections.abc import Iterable
from pathlib import Path
from typing import cast
import py4cytoscape as p4c
from networkx import DiGraph, Graph
from lang_main.constants import (
CYTO_BASE_NETWORK_NAME,
CYTO_COLLECTION_NAME,
CYTO_ITER_NEIGHBOUR_DEPTH,
CYTO_LAYOUT_NAME,
CYTO_LAYOUT_PROPERTIES,
CYTO_NUMBER_SUBGRAPHS,
CYTO_PATH_STYLESHEET,
CYTO_SELECTION_PROPERTY,
CYTO_STYLESHEET_NAME,
PROPERTY_NAME_DEGREE_WEIGHTED,
SAVE_PATH_FOLDER,
)
from lang_main.types import (
CytoExportFileTypes,
CytoExportPageSizes,
CytoLayoutProperties,
CytoLayouts,
CytoNodeID,
)
# ** Cytoscape API related, using py4cytoscape
def import_to_cytoscape(
graph: DiGraph | Graph,
) -> None:
p4c.delete_all_networks()
p4c.create_network_from_networkx(
graph,
title=CYTO_BASE_NETWORK_NAME,
collection=CYTO_COLLECTION_NAME,
)
p4c.analyze_network(directed=False)
def reset_current_network_to_base() -> None:
p4c.set_current_network(CYTO_BASE_NETWORK_NAME)
def export_network_to_image(
filename: str,
filetype: CytoExportFileTypes = 'SVG',
network_name: str = CYTO_BASE_NETWORK_NAME,
pdf_export_page_size: CytoExportPageSizes = 'A4',
) -> None:
# target_folder = Path.cwd() / 'results'
target_folder = SAVE_PATH_FOLDER
if not target_folder.exists():
target_folder.mkdir(parents=True)
file_pth = target_folder / filename
text_as_font = True
if filetype == 'SVG':
text_as_font = False
p4c.export_image(
filename=str(file_pth),
type=filetype,
network=network_name,
overwrite_file=True,
all_graphics_details=True,
export_text_as_font=text_as_font,
page_size=pdf_export_page_size,
)
def layout_network(
layout_name: CytoLayouts = CYTO_LAYOUT_NAME,
layout_properties: CytoLayoutProperties = CYTO_LAYOUT_PROPERTIES,
network_name: str = CYTO_BASE_NETWORK_NAME,
) -> None:
p4c.set_layout_properties(layout_name, layout_properties)
p4c.layout_network(layout_name=layout_name, network=network_name)
p4c.fit_content(selected_only=False, network=network_name)
def apply_style_to_network(
pth_to_stylesheet: Path = CYTO_PATH_STYLESHEET,
network_name: str = CYTO_BASE_NETWORK_NAME,
) -> None:
styles_avail = cast(list[str], p4c.get_visual_style_names())
if CYTO_STYLESHEET_NAME not in styles_avail:
if not pth_to_stylesheet.exists():
# existence for standard path verified at import, but not for other
# provided paths
raise FileNotFoundError(
f'Visual stylesheet for Cytoscape not found under: >>{pth_to_stylesheet}<<'
)
p4c.import_visual_styles(str(pth_to_stylesheet))
p4c.set_visual_style(CYTO_STYLESHEET_NAME, network=network_name)
time.sleep(1) # if not waited image export could be without applied style
p4c.fit_content(selected_only=False, network=network_name)
def get_subgraph_node_selection(
network_name: str = CYTO_BASE_NETWORK_NAME,
property_degree_weighted: str = PROPERTY_NAME_DEGREE_WEIGHTED,
) -> list[CytoNodeID]:
node_table = p4c.get_table_columns(network=network_name)
node_table['stress_norm'] = node_table['Stress'] / node_table['Stress'].max()
node_table[CYTO_SELECTION_PROPERTY] = (
node_table[property_degree_weighted]
* node_table['BetweennessCentrality']
* node_table['stress_norm']
)
node_table = node_table.sort_values(by=CYTO_SELECTION_PROPERTY, ascending=False)
node_table_choice = node_table.iloc[:CYTO_NUMBER_SUBGRAPHS, :]
return node_table_choice['SUID'].to_list()
def select_neighbours_of_node(
node: CytoNodeID,
network_name: str = CYTO_BASE_NETWORK_NAME,
) -> None:
p4c.clear_selection(network=network_name)
p4c.select_nodes(node, network=network_name)
for _ in range(CYTO_ITER_NEIGHBOUR_DEPTH):
_ = p4c.select_first_neighbors(network=network_name)
_ = p4c.select_edges_connecting_selected_nodes()
def make_subnetwork(
index: int,
network_name: str = CYTO_BASE_NETWORK_NAME,
export_image: bool = True,
) -> None:
subnetwork_name = network_name + f'_sub_{index+1}'
p4c.create_subnetwork(
nodes='selected',
edges='selected',
subnetwork_name=subnetwork_name,
network=network_name,
)
p4c.set_current_network(subnetwork_name)
p4c.fit_content(selected_only=False, network=subnetwork_name)
if export_image:
export_network_to_image(filename=subnetwork_name, network_name=subnetwork_name)
def build_subnetworks(
nodes_to_analyse: Iterable[CytoNodeID],
network_name: str = CYTO_BASE_NETWORK_NAME,
export_image: bool = True,
) -> None:
for idx, node in enumerate(nodes_to_analyse):
select_neighbours_of_node(node=node, network_name=network_name)
make_subnetwork(index=idx, network_name=network_name, export_image=export_image)

View File

@ -1,5 +1,10 @@
import enum import enum
from typing import Required, TypeAlias, TypedDict from typing import (
Literal,
Required,
TypeAlias,
TypedDict,
)
import numpy as np import numpy as np
from spacy.tokens.doc import Doc as SpacyDoc from spacy.tokens.doc import Doc as SpacyDoc
@ -42,6 +47,43 @@ Embedding: TypeAlias = SpacyDoc | Tensor
# ** graphs # ** graphs
NodeTitle: TypeAlias = str NodeTitle: TypeAlias = str
EdgeWeight: TypeAlias = int EdgeWeight: TypeAlias = int
CytoExportFileTypes: TypeAlias = Literal[
'JPEG',
'PDF',
'PNG',
'PS',
'SVG',
]
CytoExportPageSizes: TypeAlias = Literal[
'A0',
'A1',
'A2',
'A3',
'A4',
'A5',
'Auto',
'Legal',
'Letter',
'Tabloid',
]
CytoLayouts: TypeAlias = Literal[
'attribute-circle',
'attribute-grid',
'attributes-layout',
'circular',
'cose',
'degree-circle',
'force-directed',
'force-directed-cl',
'fruchterman-rheingold',
'grid',
'hierarchical',
'isom',
'kamada-kawai',
'stacked-node-layout',
]
CytoLayoutProperties: TypeAlias = dict[str, float | bool]
CytoNodeID: TypeAlias = int
class NodeData(TypedDict): class NodeData(TypedDict):

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<vizmap id="VizMap-2024_07_12-08_08" documentVersion="3.1">
<visualStyle name="lang_main">
<network>
<visualProperty default="0.0" name="NETWORK_CENTER_X_LOCATION"/>
<visualProperty default="0.0" name="NETWORK_CENTER_Y_LOCATION"/>
<visualProperty default="0.0" name="NETWORK_CENTER_Z_LOCATION"/>
<visualProperty default="false" name="NETWORK_ANNOTATION_SELECTION"/>
<visualProperty default="1.0" name="NETWORK_SCALE_FACTOR"/>
<visualProperty default="false" name="NETWORK_NODE_LABEL_SELECTION"/>
<visualProperty default="400.0" name="NETWORK_HEIGHT"/>
<visualProperty default="true" name="NETWORK_NODE_SELECTION"/>
<visualProperty default="550.0" name="NETWORK_WIDTH"/>
<visualProperty default="0.0" name="NETWORK_DEPTH"/>
<visualProperty default="false" name="NETWORK_FORCE_HIGH_DETAIL"/>
<visualProperty default="" name="NETWORK_TITLE"/>
<visualProperty default="true" name="NETWORK_EDGE_SELECTION"/>
<visualProperty default="#F7FFFF" name="NETWORK_BACKGROUND_PAINT"/>
</network>
<node>
<dependency value="true" name="nodeCustomGraphicsSizeSync"/>
<dependency value="true" name="nodeSizeLocked"/>
<visualProperty default="ROUND_RECTANGLE" name="NODE_LABEL_BACKGROUND_SHAPE"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_9"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_7"/>
<visualProperty default="true" name="NODE_NESTED_NETWORK_IMAGE_VISIBLE"/>
<visualProperty default="0.0" name="NODE_LABEL_ROTATION"/>
<visualProperty default="175" name="NODE_LABEL_BACKGROUND_TRANSPARENCY"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_8"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_2"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_6"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_7"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_1"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_4"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_9"/>
<visualProperty default="ROUND_RECTANGLE" name="COMPOUND_NODE_SHAPE"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_5"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_9"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_5"/>
<visualProperty default="10.0" name="COMPOUND_NODE_PADDING"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_3"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_6"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_8"/>
<visualProperty default="SE,NW,c,-2.00,3.00" name="NODE_LABEL_POSITION"/>
<visualProperty default="ELLIPSE" name="NODE_SHAPE"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_3"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_4"/>
<visualProperty default="SansSerif.plain,plain,12" name="NODE_LABEL_FONT_FACE"/>
<visualProperty default="#D1F5BE" name="NODE_BORDER_PAINT"/>
<visualProperty default="40.0" name="NODE_HEIGHT"/>
<visualProperty default="255" name="NODE_LABEL_TRANSPARENCY"/>
<visualProperty default="#E1E1E1" name="NODE_LABEL_BACKGROUND_COLOR"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_6"/>
<visualProperty default="false" name="NODE_SELECTED"/>
<visualProperty default="0.0" name="NODE_DEPTH"/>
<visualProperty default="SOLID" name="NODE_BORDER_STROKE"/>
<visualProperty default="" name="NODE_TOOLTIP"/>
<visualProperty default="7.0" name="NODE_BORDER_WIDTH"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_2"/>
<visualProperty default="#A63C06" name="NODE_LABEL_COLOR"/>
<visualProperty default="0.0" name="NODE_X_LOCATION"/>
<visualProperty default="18.0" name="NODE_SIZE"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_8"/>
<visualProperty default="0.0" name="NODE_Z_LOCATION"/>
<visualProperty default="#FE9929" name="NODE_FILL_COLOR"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_1"/>
<visualProperty default="255" name="NODE_BORDER_TRANSPARENCY"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_1"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_2"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_3"/>
<visualProperty default="60.0" name="NODE_WIDTH"/>
<visualProperty default="" name="NODE_LABEL">
<passthroughMapping attributeName="name" attributeType="string"/>
</visualProperty>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_5"/>
<visualProperty default="500.0" name="NODE_LABEL_WIDTH"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_4"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_7"/>
<visualProperty default="#FFFF00" name="NODE_SELECTED_PAINT"/>
<visualProperty default="0.0" name="NODE_Y_LOCATION"/>
<visualProperty default="true" name="NODE_VISIBLE"/>
<visualProperty default="255" name="NODE_TRANSPARENCY"/>
<visualProperty default="14" name="NODE_LABEL_FONT_SIZE"/>
</node>
<edge>
<dependency value="true" name="arrowColorMatchesEdge"/>
<visualProperty default="false" name="EDGE_SELECTED"/>
<visualProperty default="255" name="EDGE_TRANSPARENCY"/>
<visualProperty default="10" name="EDGE_LABEL_FONT_SIZE"/>
<visualProperty default="#577399" name="EDGE_UNSELECTED_PAINT"/>
<visualProperty default="" name="EDGE_LABEL"/>
<visualProperty default="#FFFFFF" name="EDGE_STROKE_UNSELECTED_PAINT"/>
<visualProperty default="200.0" name="EDGE_LABEL_WIDTH"/>
<visualProperty default="#000000" name="EDGE_LABEL_COLOR"/>
<visualProperty default="SansSerif.plain,plain,10" name="EDGE_LABEL_FONT_FACE"/>
<visualProperty default="0.728545744495502,-0.684997151948455,0.6456513365424503" name="EDGE_BEND"/>
<visualProperty default="#B6B6B6" name="EDGE_LABEL_BACKGROUND_COLOR"/>
<visualProperty default="AUTO_BEND" name="EDGE_STACKING"/>
<visualProperty default="#000000" name="EDGE_TARGET_ARROW_UNSELECTED_PAINT"/>
<visualProperty default="0.5" name="EDGE_STACKING_DENSITY"/>
<visualProperty default="NONE" name="EDGE_TARGET_ARROW_SHAPE"/>
<visualProperty default="true" name="EDGE_VISIBLE"/>
<visualProperty default="C,C,c,0.00,0.00" name="EDGE_LABEL_POSITION"/>
<visualProperty default="0.0" name="EDGE_LABEL_ROTATION"/>
<visualProperty default="" name="EDGE_TOOLTIP"/>
<visualProperty default="0.0" name="EDGE_Z_ORDER"/>
<visualProperty default="#FFFF00" name="EDGE_TARGET_ARROW_SELECTED_PAINT"/>
<visualProperty default="#FF0000" name="EDGE_STROKE_SELECTED_PAINT"/>
<visualProperty default="NONE" name="EDGE_SOURCE_ARROW_SHAPE"/>
<visualProperty default="#FFFF00" name="EDGE_SOURCE_ARROW_SELECTED_PAINT"/>
<visualProperty default="false" name="EDGE_LABEL_AUTOROTATE"/>
<visualProperty default="true" name="EDGE_CURVED"/>
<visualProperty default="#000000" name="EDGE_SOURCE_ARROW_UNSELECTED_PAINT"/>
<visualProperty default="255" name="EDGE_LABEL_TRANSPARENCY"/>
<visualProperty default="6.0" name="EDGE_TARGET_ARROW_SIZE"/>
<visualProperty default="NONE" name="EDGE_LABEL_BACKGROUND_SHAPE"/>
<visualProperty default="255" name="EDGE_LABEL_BACKGROUND_TRANSPARENCY"/>
<visualProperty default="SOLID" name="EDGE_LINE_TYPE"/>
<visualProperty default="6.0" name="EDGE_SOURCE_ARROW_SIZE"/>
<visualProperty default="3.0" name="EDGE_WIDTH">
<continuousMapping attributeName="weight" attributeType="float">
<continuousMappingPoint attrValue="0.09520000219345093" equalValue="2.0" greaterValue="2.0" lesserValue="1.0"/>
<continuousMappingPoint attrValue="1.0" equalValue="10.0" greaterValue="1.0" lesserValue="10.0"/>
</continuousMapping>
</visualProperty>
</edge>
</visualStyle>
</vizmap>

View File

@ -16,6 +16,7 @@ preprocessing_skip = true
token_analysis_skip = false token_analysis_skip = false
graph_postprocessing_skip = false graph_postprocessing_skip = false
graph_rescaling_skip = false graph_rescaling_skip = false
graph_static_rendering_skip = false
time_analysis_skip = true time_analysis_skip = true
#[export_filenames] #[export_filenames]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<vizmap id="VizMap-2024_07_10-16_50" documentVersion="3.1">
<visualStyle name="template">
<network>
<visualProperty default="1.0" name="NETWORK_SCALE_FACTOR"/>
<visualProperty default="true" name="NETWORK_NODE_SELECTION"/>
<visualProperty default="#F7FFFF" name="NETWORK_BACKGROUND_PAINT"/>
<visualProperty default="false" name="NETWORK_ANNOTATION_SELECTION"/>
<visualProperty default="false" name="NETWORK_NODE_LABEL_SELECTION"/>
<visualProperty default="" name="NETWORK_TITLE"/>
<visualProperty default="0.0" name="NETWORK_CENTER_X_LOCATION"/>
<visualProperty default="true" name="NETWORK_EDGE_SELECTION"/>
<visualProperty default="550.0" name="NETWORK_WIDTH"/>
<visualProperty default="0.0" name="NETWORK_DEPTH"/>
<visualProperty default="400.0" name="NETWORK_HEIGHT"/>
<visualProperty default="0.0" name="NETWORK_CENTER_Z_LOCATION"/>
<visualProperty default="0.0" name="NETWORK_CENTER_Y_LOCATION"/>
<visualProperty default="false" name="NETWORK_FORCE_HIGH_DETAIL"/>
</network>
<node>
<dependency value="true" name="nodeCustomGraphicsSizeSync"/>
<dependency value="true" name="nodeSizeLocked"/>
<visualProperty default="0.0" name="NODE_LABEL_ROTATION"/>
<visualProperty default="14" name="NODE_LABEL_FONT_SIZE"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_3"/>
<visualProperty default="10.0" name="COMPOUND_NODE_PADDING"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_6"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_1"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_9"/>
<visualProperty default="0.0" name="NODE_Z_LOCATION"/>
<visualProperty default="true" name="NODE_VISIBLE"/>
<visualProperty default="" name="NODE_TOOLTIP"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_1"/>
<visualProperty default="500.0" name="NODE_LABEL_WIDTH"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_5"/>
<visualProperty default="#FE9929" name="NODE_FILL_COLOR"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_2"/>
<visualProperty default="#A63C06" name="NODE_LABEL_COLOR"/>
<visualProperty default="0.0" name="NODE_DEPTH"/>
<visualProperty default="7.0" name="NODE_BORDER_WIDTH"/>
<visualProperty default="#FFFF00" name="NODE_SELECTED_PAINT"/>
<visualProperty default="60.0" name="NODE_WIDTH"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_3"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_7"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_4"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_1"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_8"/>
<visualProperty default="SE,NW,c,-2.00,3.00" name="NODE_LABEL_POSITION"/>
<visualProperty default="SOLID" name="NODE_BORDER_STROKE"/>
<visualProperty default="255" name="NODE_BORDER_TRANSPARENCY"/>
<visualProperty default="ROUND_RECTANGLE" name="NODE_LABEL_BACKGROUND_SHAPE"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_8"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_7"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_8"/>
<visualProperty default="18.0" name="NODE_SIZE"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_5"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_4"/>
<visualProperty default="" name="NODE_LABEL">
<passthroughMapping attributeName="name" attributeType="string"/>
</visualProperty>
<visualProperty default="255" name="NODE_LABEL_TRANSPARENCY"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_6"/>
<visualProperty default="ELLIPSE" name="NODE_SHAPE"/>
<visualProperty default="#D1F5BE" name="NODE_BORDER_PAINT"/>
<visualProperty default="true" name="NODE_NESTED_NETWORK_IMAGE_VISIBLE"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_7"/>
<visualProperty default="false" name="NODE_SELECTED"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_9"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_3"/>
<visualProperty default="SansSerif.plain,plain,12" name="NODE_LABEL_FONT_FACE"/>
<visualProperty default="C,C,c,0.00,0.00" name="NODE_CUSTOMGRAPHICS_POSITION_2"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_4"/>
<visualProperty default="#E1E1E1" name="NODE_LABEL_BACKGROUND_COLOR"/>
<visualProperty default="0.0" name="NODE_X_LOCATION"/>
<visualProperty default="org.cytoscape.cg.model.NullCustomGraphics,0,[ Remove Graphics ]," name="NODE_CUSTOMGRAPHICS_2"/>
<visualProperty default="ROUND_RECTANGLE" name="COMPOUND_NODE_SHAPE"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_6"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_5"/>
<visualProperty default="0.0" name="NODE_CUSTOMGRAPHICS_SIZE_9"/>
<visualProperty default="175" name="NODE_LABEL_BACKGROUND_TRANSPARENCY"/>
<visualProperty default="255" name="NODE_TRANSPARENCY"/>
<visualProperty default="40.0" name="NODE_HEIGHT"/>
<visualProperty default="0.0" name="NODE_Y_LOCATION"/>
</node>
<edge>
<dependency value="true" name="arrowColorMatchesEdge"/>
<visualProperty default="NONE" name="EDGE_LABEL_BACKGROUND_SHAPE"/>
<visualProperty default="" name="EDGE_TOOLTIP"/>
<visualProperty default="AUTO_BEND" name="EDGE_STACKING"/>
<visualProperty default="#B6B6B6" name="EDGE_LABEL_BACKGROUND_COLOR"/>
<visualProperty default="C,C,c,0.00,0.00" name="EDGE_LABEL_POSITION"/>
<visualProperty default="0.728545744495502,-0.684997151948455,0.6456513365424503" name="EDGE_BEND"/>
<visualProperty default="10" name="EDGE_LABEL_FONT_SIZE"/>
<visualProperty default="NONE" name="EDGE_TARGET_ARROW_SHAPE"/>
<visualProperty default="false" name="EDGE_SELECTED"/>
<visualProperty default="#000000" name="EDGE_LABEL_COLOR"/>
<visualProperty default="#FFFFFF" name="EDGE_STROKE_UNSELECTED_PAINT"/>
<visualProperty default="#000000" name="EDGE_TARGET_ARROW_UNSELECTED_PAINT"/>
<visualProperty default="255" name="EDGE_LABEL_TRANSPARENCY"/>
<visualProperty default="255" name="EDGE_LABEL_BACKGROUND_TRANSPARENCY"/>
<visualProperty default="true" name="EDGE_CURVED"/>
<visualProperty default="NONE" name="EDGE_SOURCE_ARROW_SHAPE"/>
<visualProperty default="0.0" name="EDGE_LABEL_ROTATION"/>
<visualProperty default="SansSerif.plain,plain,10" name="EDGE_LABEL_FONT_FACE"/>
<visualProperty default="0.5" name="EDGE_STACKING_DENSITY"/>
<visualProperty default="#FFFF00" name="EDGE_SOURCE_ARROW_SELECTED_PAINT"/>
<visualProperty default="false" name="EDGE_LABEL_AUTOROTATE"/>
<visualProperty default="3.0" name="EDGE_WIDTH"/>
<visualProperty default="#FF0000" name="EDGE_STROKE_SELECTED_PAINT"/>
<visualProperty default="true" name="EDGE_VISIBLE"/>
<visualProperty default="#577399" name="EDGE_UNSELECTED_PAINT"/>
<visualProperty default="#000000" name="EDGE_SOURCE_ARROW_UNSELECTED_PAINT"/>
<visualProperty default="" name="EDGE_LABEL"/>
<visualProperty default="255" name="EDGE_TRANSPARENCY"/>
<visualProperty default="SOLID" name="EDGE_LINE_TYPE"/>
<visualProperty default="6.0" name="EDGE_TARGET_ARROW_SIZE"/>
<visualProperty default="200.0" name="EDGE_LABEL_WIDTH"/>
<visualProperty default="0.0" name="EDGE_Z_ORDER"/>
<visualProperty default="6.0" name="EDGE_SOURCE_ARROW_SIZE"/>
<visualProperty default="#FFFF00" name="EDGE_TARGET_ARROW_SELECTED_PAINT"/>
</edge>
</visualStyle>
</vizmap>