gismap 0.1.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gismap-0.2.1/.gitattributes +1 -0
- {gismap-0.1.0 → gismap-0.2.1}/.github/workflows/build.yml +2 -1
- {gismap-0.1.0 → gismap-0.2.1}/.github/workflows/docs.yml +3 -1
- {gismap-0.1.0 → gismap-0.2.1}/.github/workflows/release.yml +2 -1
- gismap-0.2.1/HISTORY.md +31 -0
- {gismap-0.1.0 → gismap-0.2.1}/PKG-INFO +6 -4
- {gismap-0.1.0 → gismap-0.2.1}/README.md +3 -3
- {gismap-0.1.0 → gismap-0.2.1}/docs/conf.py +11 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/reference/lab.md +7 -0
- gismap-0.2.1/docs/tutorials/egomap.ipynb +218 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/tutorials/index.md +1 -0
- gismap-0.2.1/docs/tutorials/lab_tutorial.ipynb +327 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/__init__.py +2 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/__init__.py +2 -2
- gismap-0.2.1/gismap/lab/egomap.py +42 -0
- gismap-0.2.1/gismap/lab/expansion.py +240 -0
- gismap-0.2.1/gismap/lab/filters.py +18 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/graph.py +11 -8
- gismap-0.2.1/gismap/lab/lab.py +168 -0
- gismap-0.2.1/gismap/lab/lab_author.py +84 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/lip6.py +2 -1
- {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/toulouse.py +2 -1
- gismap-0.2.1/gismap/lab/vis.py +329 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/dblp.py +26 -22
- {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/hal.py +47 -11
- {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/multi.py +68 -31
- gismap-0.2.1/gismap/utils/common.py +105 -0
- gismap-0.2.1/gismap/utils/requests.py +46 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/utils/text.py +66 -1
- {gismap-0.1.0 → gismap-0.2.1}/pyproject.toml +3 -1
- gismap-0.2.1/uv.lock +2215 -0
- gismap-0.1.0/HISTORY.md +0 -15
- gismap-0.1.0/docs/tutorials/lab_tutorial.ipynb +0 -800
- gismap-0.1.0/gismap/lab/lab.py +0 -152
- gismap-0.1.0/gismap/lab/vis.py +0 -171
- gismap-0.1.0/gismap/utils/common.py +0 -60
- gismap-0.1.0/gismap/utils/requests.py +0 -33
- gismap-0.1.0/uv.lock +0 -1954
- {gismap-0.1.0 → gismap-0.2.1}/.coveragerc +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/.editorconfig +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/.github/ISSUE_TEMPLATE.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/.gitignore +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/.run/All tests.run.xml +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/.run/Generate docs.run.xml +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/AUTHORS.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/CONTRIBUTING.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/citation.cff +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/favicon.ico +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/index.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/logo.png +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/authors.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/contributing.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/history.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/index.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/installation.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/readme.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/reference/database.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/reference/gismo.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/reference/index.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/docs/reference/utils.md +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/author.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/gismap.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/gismo.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/search.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/__init__.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/models.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/utils/__init__.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/gismap/utils/logger.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/tests/__init__.py +0 -0
- {gismap-0.1.0 → gismap-0.2.1}/tests/test_gismap.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.ipynb filter=nbstripout
|
|
@@ -17,6 +17,7 @@ env:
|
|
|
17
17
|
jobs:
|
|
18
18
|
build:
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 30
|
|
20
21
|
strategy:
|
|
21
22
|
matrix:
|
|
22
23
|
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
@@ -33,7 +34,7 @@ jobs:
|
|
|
33
34
|
- name: Set up uv
|
|
34
35
|
uses: astral-sh/setup-uv@v5
|
|
35
36
|
with:
|
|
36
|
-
version: "0.
|
|
37
|
+
version: "0.8.12"
|
|
37
38
|
|
|
38
39
|
- name: Run tests
|
|
39
40
|
run: |
|
|
@@ -12,12 +12,14 @@ on:
|
|
|
12
12
|
jobs:
|
|
13
13
|
build-and-deploy:
|
|
14
14
|
runs-on: ubuntu-latest
|
|
15
|
+
timeout-minutes: 30
|
|
15
16
|
steps:
|
|
16
17
|
|
|
17
18
|
- name: Checkout
|
|
18
19
|
uses: actions/checkout@v4
|
|
19
20
|
with:
|
|
20
21
|
persist-credentials: false
|
|
22
|
+
lfs: true
|
|
21
23
|
|
|
22
24
|
- name: Set up Python
|
|
23
25
|
uses: actions/setup-python@v5
|
|
@@ -27,7 +29,7 @@ jobs:
|
|
|
27
29
|
- name: Set up uv
|
|
28
30
|
uses: astral-sh/setup-uv@v5
|
|
29
31
|
with:
|
|
30
|
-
version: "0.
|
|
32
|
+
version: "0.8.12"
|
|
31
33
|
|
|
32
34
|
- name: Setup Pandoc
|
|
33
35
|
uses: pandoc/actions/setup@v1
|
|
@@ -8,6 +8,7 @@ jobs:
|
|
|
8
8
|
publish:
|
|
9
9
|
name: Publish Python Package
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
|
+
timeout-minutes: 30
|
|
11
12
|
environment:
|
|
12
13
|
name: pypi
|
|
13
14
|
permissions:
|
|
@@ -20,7 +21,7 @@ jobs:
|
|
|
20
21
|
- name: Install uv
|
|
21
22
|
uses: astral-sh/setup-uv@v5
|
|
22
23
|
with:
|
|
23
|
-
version: "0.
|
|
24
|
+
version: "0.8.12" # Pin to specific uv version
|
|
24
25
|
|
|
25
26
|
- name: Build package
|
|
26
27
|
run: uv build --no-sources # Recommended for production builds
|
gismap-0.2.1/HISTORY.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# History
|
|
2
|
+
|
|
3
|
+
## Roadmap
|
|
4
|
+
|
|
5
|
+
- Offline DBLP
|
|
6
|
+
- Customized collaboration graphs
|
|
7
|
+
- Colors and size
|
|
8
|
+
- Groups
|
|
9
|
+
|
|
10
|
+
## 0.2.1 (2025-09-01): Minor VisJS enhancements
|
|
11
|
+
|
|
12
|
+
- Better handling of dark/light mode (should be compatible with Pydata, Jupyter, and System).
|
|
13
|
+
- Responsive size
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## 0.2.0 (2025-08-31): EgoMaps!
|
|
17
|
+
|
|
18
|
+
- New lab structure: EgoMap shows the people that revolves around you!
|
|
19
|
+
- New lab method: expansion, which adds *moons* (neighbor reasearchers).
|
|
20
|
+
- Add filters when building authors and publications.
|
|
21
|
+
- Physic engine changed fo better visualization.
|
|
22
|
+
- Multi-source handling fine-tuned.
|
|
23
|
+
- Better display (size and theme).
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## 0.1.0 (2025-07-24): First release
|
|
27
|
+
|
|
28
|
+
- First release on PyPI.
|
|
29
|
+
- Online DBLP and HAL DB implemented.
|
|
30
|
+
- Lab stuctures implemented.
|
|
31
|
+
- Early version of collaboration graph available.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gismap
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: GISMAP leverages DBLP and HAL databases to provide cartography tools for you and your lab.
|
|
5
5
|
Project-URL: Repository, https://github.com/balouf/gismap
|
|
6
6
|
Project-URL: Documentation, https://balouf.github.io/gismap
|
|
@@ -11,6 +11,8 @@ License-File: AUTHORS.md
|
|
|
11
11
|
Requires-Python: >=3.10
|
|
12
12
|
Requires-Dist: bof>=0.3.5
|
|
13
13
|
Requires-Dist: gismo>=0.5.2
|
|
14
|
+
Requires-Dist: ipykernel>=6.30.1
|
|
15
|
+
Requires-Dist: tqdm>=4.67.1
|
|
14
16
|
Description-Content-Type: text/markdown
|
|
15
17
|
|
|
16
18
|
# Generic Information Search: Mapping and Analysis of Publications
|
|
@@ -47,11 +49,11 @@ Use GISMAP to produce a collaboration graph (HTML):
|
|
|
47
49
|
|
|
48
50
|
```pycon
|
|
49
51
|
>>> from gismap.sources.hal import HAL
|
|
50
|
-
>>> from gismap.lab import ListLab
|
|
51
|
-
>>> lab = ListLab(["
|
|
52
|
+
>>> from gismap.lab import ListLab
|
|
53
|
+
>>> lab = ListLab(["Fabien Mathieu", "François Baccelli", "Ludovic Noirie", "Céline Comte", "Sébastien Tixeuil"], dbs="hal")
|
|
52
54
|
>>> lab.update_authors()
|
|
53
55
|
>>> lab.update_publis()
|
|
54
|
-
>>>
|
|
56
|
+
>>> lab.show_html()
|
|
55
57
|
```
|
|
56
58
|
|
|
57
59
|
## Credits
|
|
@@ -32,11 +32,11 @@ Use GISMAP to produce a collaboration graph (HTML):
|
|
|
32
32
|
|
|
33
33
|
```pycon
|
|
34
34
|
>>> from gismap.sources.hal import HAL
|
|
35
|
-
>>> from gismap.lab import ListLab
|
|
36
|
-
>>> lab = ListLab(["
|
|
35
|
+
>>> from gismap.lab import ListLab
|
|
36
|
+
>>> lab = ListLab(["Fabien Mathieu", "François Baccelli", "Ludovic Noirie", "Céline Comte", "Sébastien Tixeuil"], dbs="hal")
|
|
37
37
|
>>> lab.update_authors()
|
|
38
38
|
>>> lab.update_publis()
|
|
39
|
-
>>>
|
|
39
|
+
>>> lab.show_html()
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Credits
|
|
@@ -45,6 +45,17 @@ extensions = [
|
|
|
45
45
|
"sphinx.ext.githubpages",
|
|
46
46
|
]
|
|
47
47
|
|
|
48
|
+
# Remote NB execution
|
|
49
|
+
nbsphinx_execute = 'always'
|
|
50
|
+
nbsphinx_execute_arguments = [
|
|
51
|
+
"--InlineBackend.figure_formats={'svg', 'pdf'}"
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
def setup(app):
|
|
55
|
+
app.add_css_file("https://unpkg.com/vis-network/styles/vis-network.min.css")
|
|
56
|
+
app.add_js_file("https://unpkg.com/vis-network/standalone/umd/vis-network.min.js")
|
|
57
|
+
|
|
58
|
+
|
|
48
59
|
# Smart code copy
|
|
49
60
|
copybutton_exclude = ".linenos, .gp, .go"
|
|
50
61
|
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"id": "0",
|
|
6
|
+
"metadata": {},
|
|
7
|
+
"source": [
|
|
8
|
+
"# EgoMap"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"cell_type": "markdown",
|
|
13
|
+
"id": "1",
|
|
14
|
+
"metadata": {},
|
|
15
|
+
"source": [
|
|
16
|
+
"Every researcher is the center of her own universe. With EgoMaps, everyone can visualize that universe!\n",
|
|
17
|
+
"\n",
|
|
18
|
+
"Concretely, your EgoMap is a co-publication graph containing:\n",
|
|
19
|
+
"\n",
|
|
20
|
+
"- The *sun*, i.e. you, the center of the universe\n",
|
|
21
|
+
"- The *planets*, i.e. your co-authors\n",
|
|
22
|
+
"- The *moons*, e.g. the co-authors of your co-authors\n",
|
|
23
|
+
"\n",
|
|
24
|
+
"By default, EgoMaps comprise up to 50 researchers, selecting first planets, then moons."
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"cell_type": "markdown",
|
|
29
|
+
"id": "2",
|
|
30
|
+
"metadata": {},
|
|
31
|
+
"source": [
|
|
32
|
+
"## Simple case"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"cell_type": "markdown",
|
|
37
|
+
"id": "3",
|
|
38
|
+
"metadata": {},
|
|
39
|
+
"source": [
|
|
40
|
+
"For basic scenarios, you just need to enter the name of the researcher. For example:"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"cell_type": "code",
|
|
45
|
+
"execution_count": null,
|
|
46
|
+
"id": "4",
|
|
47
|
+
"metadata": {},
|
|
48
|
+
"outputs": [],
|
|
49
|
+
"source": [
|
|
50
|
+
"from gismap.lab import EgoMap as Map\n",
|
|
51
|
+
"celine = Map(\"Céline Comte\")\n",
|
|
52
|
+
"celine.build()"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"cell_type": "markdown",
|
|
57
|
+
"id": "5",
|
|
58
|
+
"metadata": {},
|
|
59
|
+
"source": [
|
|
60
|
+
"You can display your EgoMap with `show_html` and save it with `save_html`"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"cell_type": "code",
|
|
65
|
+
"execution_count": null,
|
|
66
|
+
"id": "6",
|
|
67
|
+
"metadata": {},
|
|
68
|
+
"outputs": [],
|
|
69
|
+
"source": [
|
|
70
|
+
"celine.show_html()"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"cell_type": "markdown",
|
|
75
|
+
"id": "7",
|
|
76
|
+
"metadata": {},
|
|
77
|
+
"source": [
|
|
78
|
+
"## Adjusting the size"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"cell_type": "markdown",
|
|
83
|
+
"id": "8",
|
|
84
|
+
"metadata": {},
|
|
85
|
+
"source": [
|
|
86
|
+
"Depending on your degree, you may want to adjust the size of your universe with `target`."
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"cell_type": "code",
|
|
91
|
+
"execution_count": null,
|
|
92
|
+
"id": "9",
|
|
93
|
+
"metadata": {},
|
|
94
|
+
"outputs": [],
|
|
95
|
+
"source": [
|
|
96
|
+
"fabien = Map(\"Fabien Mathieu\")\n",
|
|
97
|
+
"fabien.build(target=70)"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"cell_type": "code",
|
|
102
|
+
"execution_count": null,
|
|
103
|
+
"id": "10",
|
|
104
|
+
"metadata": {},
|
|
105
|
+
"outputs": [],
|
|
106
|
+
"source": [
|
|
107
|
+
"fabien.show_html()"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"cell_type": "markdown",
|
|
112
|
+
"id": "11",
|
|
113
|
+
"metadata": {},
|
|
114
|
+
"source": [
|
|
115
|
+
"## Using specific DBs"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"cell_type": "markdown",
|
|
120
|
+
"id": "12",
|
|
121
|
+
"metadata": {},
|
|
122
|
+
"source": [
|
|
123
|
+
"You can specify the DB(s) you want to use. For example, if you are a French researcher not working in computer science, HAL is enough."
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"cell_type": "code",
|
|
128
|
+
"execution_count": null,
|
|
129
|
+
"id": "13",
|
|
130
|
+
"metadata": {},
|
|
131
|
+
"outputs": [],
|
|
132
|
+
"source": [
|
|
133
|
+
"mathilde = Map(\"Mathilde Labbé\", dbs=\"hal\")\n",
|
|
134
|
+
"mathilde.sun.metadata.img = \"https://0.academia-photos.com/282997/7894577/15068468/s200_mathilde.labbe.jpg\"\n",
|
|
135
|
+
"mathilde.build(target=25)"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"cell_type": "code",
|
|
140
|
+
"execution_count": null,
|
|
141
|
+
"id": "14",
|
|
142
|
+
"metadata": {},
|
|
143
|
+
"outputs": [],
|
|
144
|
+
"source": [
|
|
145
|
+
"mathilde.show_html()"
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"cell_type": "markdown",
|
|
150
|
+
"id": "15",
|
|
151
|
+
"metadata": {},
|
|
152
|
+
"source": [
|
|
153
|
+
"## Filtering"
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"cell_type": "markdown",
|
|
158
|
+
"id": "16",
|
|
159
|
+
"metadata": {},
|
|
160
|
+
"source": [
|
|
161
|
+
"EgoMaps have default filters that try to prevent data pollution. For example, it filters out:\n",
|
|
162
|
+
"\n",
|
|
163
|
+
"- Publications with too many authors. They are usually not relevant in fields like computer science.\n",
|
|
164
|
+
"- Publications that look like editorials.\n",
|
|
165
|
+
"\n",
|
|
166
|
+
"Filters can customized. \n",
|
|
167
|
+
"For example, this publication about horse locomotion is wrongly referenced in DBLP:\n",
|
|
168
|
+
"https://dblp.org/rec/journals/sensors/PasquietBTDDF22.html\n",
|
|
169
|
+
"\n",
|
|
170
|
+
"It can be discarded by ignoring all publications about horses."
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"cell_type": "code",
|
|
175
|
+
"execution_count": null,
|
|
176
|
+
"id": "17",
|
|
177
|
+
"metadata": {},
|
|
178
|
+
"outputs": [],
|
|
179
|
+
"source": [
|
|
180
|
+
"from gismap.lab.filters import publication_taboo_filter\n",
|
|
181
|
+
"fanfan = Map(fabien.authors['fradurand'])\n",
|
|
182
|
+
"fanfan.publication_selectors.append(publication_taboo_filter(\"Horse\"))\n",
|
|
183
|
+
"fanfan.build(target=25)"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"cell_type": "code",
|
|
188
|
+
"execution_count": null,
|
|
189
|
+
"id": "18",
|
|
190
|
+
"metadata": {},
|
|
191
|
+
"outputs": [],
|
|
192
|
+
"source": [
|
|
193
|
+
"fanfan.show_html()"
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"metadata": {
|
|
198
|
+
"kernelspec": {
|
|
199
|
+
"display_name": "Python 3 (ipykernel)",
|
|
200
|
+
"language": "python",
|
|
201
|
+
"name": "python3"
|
|
202
|
+
},
|
|
203
|
+
"language_info": {
|
|
204
|
+
"codemirror_mode": {
|
|
205
|
+
"name": "ipython",
|
|
206
|
+
"version": 3
|
|
207
|
+
},
|
|
208
|
+
"file_extension": ".py",
|
|
209
|
+
"mimetype": "text/x-python",
|
|
210
|
+
"name": "python",
|
|
211
|
+
"nbconvert_exporter": "python",
|
|
212
|
+
"pygments_lexer": "ipython3",
|
|
213
|
+
"version": "3.12.8"
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"nbformat": 4,
|
|
217
|
+
"nbformat_minor": 5
|
|
218
|
+
}
|