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.
Files changed (70) hide show
  1. gismap-0.2.1/.gitattributes +1 -0
  2. {gismap-0.1.0 → gismap-0.2.1}/.github/workflows/build.yml +2 -1
  3. {gismap-0.1.0 → gismap-0.2.1}/.github/workflows/docs.yml +3 -1
  4. {gismap-0.1.0 → gismap-0.2.1}/.github/workflows/release.yml +2 -1
  5. gismap-0.2.1/HISTORY.md +31 -0
  6. {gismap-0.1.0 → gismap-0.2.1}/PKG-INFO +6 -4
  7. {gismap-0.1.0 → gismap-0.2.1}/README.md +3 -3
  8. {gismap-0.1.0 → gismap-0.2.1}/docs/conf.py +11 -0
  9. {gismap-0.1.0 → gismap-0.2.1}/docs/reference/lab.md +7 -0
  10. gismap-0.2.1/docs/tutorials/egomap.ipynb +218 -0
  11. {gismap-0.1.0 → gismap-0.2.1}/docs/tutorials/index.md +1 -0
  12. gismap-0.2.1/docs/tutorials/lab_tutorial.ipynb +327 -0
  13. {gismap-0.1.0 → gismap-0.2.1}/gismap/__init__.py +2 -0
  14. {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/__init__.py +2 -2
  15. gismap-0.2.1/gismap/lab/egomap.py +42 -0
  16. gismap-0.2.1/gismap/lab/expansion.py +240 -0
  17. gismap-0.2.1/gismap/lab/filters.py +18 -0
  18. {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/graph.py +11 -8
  19. gismap-0.2.1/gismap/lab/lab.py +168 -0
  20. gismap-0.2.1/gismap/lab/lab_author.py +84 -0
  21. {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/lip6.py +2 -1
  22. {gismap-0.1.0 → gismap-0.2.1}/gismap/lab/toulouse.py +2 -1
  23. gismap-0.2.1/gismap/lab/vis.py +329 -0
  24. {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/dblp.py +26 -22
  25. {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/hal.py +47 -11
  26. {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/multi.py +68 -31
  27. gismap-0.2.1/gismap/utils/common.py +105 -0
  28. gismap-0.2.1/gismap/utils/requests.py +46 -0
  29. {gismap-0.1.0 → gismap-0.2.1}/gismap/utils/text.py +66 -1
  30. {gismap-0.1.0 → gismap-0.2.1}/pyproject.toml +3 -1
  31. gismap-0.2.1/uv.lock +2215 -0
  32. gismap-0.1.0/HISTORY.md +0 -15
  33. gismap-0.1.0/docs/tutorials/lab_tutorial.ipynb +0 -800
  34. gismap-0.1.0/gismap/lab/lab.py +0 -152
  35. gismap-0.1.0/gismap/lab/vis.py +0 -171
  36. gismap-0.1.0/gismap/utils/common.py +0 -60
  37. gismap-0.1.0/gismap/utils/requests.py +0 -33
  38. gismap-0.1.0/uv.lock +0 -1954
  39. {gismap-0.1.0 → gismap-0.2.1}/.coveragerc +0 -0
  40. {gismap-0.1.0 → gismap-0.2.1}/.editorconfig +0 -0
  41. {gismap-0.1.0 → gismap-0.2.1}/.github/ISSUE_TEMPLATE.md +0 -0
  42. {gismap-0.1.0 → gismap-0.2.1}/.gitignore +0 -0
  43. {gismap-0.1.0 → gismap-0.2.1}/.run/All tests.run.xml +0 -0
  44. {gismap-0.1.0 → gismap-0.2.1}/.run/Generate docs.run.xml +0 -0
  45. {gismap-0.1.0 → gismap-0.2.1}/AUTHORS.md +0 -0
  46. {gismap-0.1.0 → gismap-0.2.1}/CONTRIBUTING.md +0 -0
  47. {gismap-0.1.0 → gismap-0.2.1}/citation.cff +0 -0
  48. {gismap-0.1.0 → gismap-0.2.1}/docs/favicon.ico +0 -0
  49. {gismap-0.1.0 → gismap-0.2.1}/docs/index.md +0 -0
  50. {gismap-0.1.0 → gismap-0.2.1}/docs/logo.png +0 -0
  51. {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/authors.md +0 -0
  52. {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/contributing.md +0 -0
  53. {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/history.md +0 -0
  54. {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/index.md +0 -0
  55. {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/installation.md +0 -0
  56. {gismap-0.1.0 → gismap-0.2.1}/docs/presentation/readme.md +0 -0
  57. {gismap-0.1.0 → gismap-0.2.1}/docs/reference/database.md +0 -0
  58. {gismap-0.1.0 → gismap-0.2.1}/docs/reference/gismo.md +0 -0
  59. {gismap-0.1.0 → gismap-0.2.1}/docs/reference/index.md +0 -0
  60. {gismap-0.1.0 → gismap-0.2.1}/docs/reference/utils.md +0 -0
  61. {gismap-0.1.0 → gismap-0.2.1}/gismap/author.py +0 -0
  62. {gismap-0.1.0 → gismap-0.2.1}/gismap/gismap.py +0 -0
  63. {gismap-0.1.0 → gismap-0.2.1}/gismap/gismo.py +0 -0
  64. {gismap-0.1.0 → gismap-0.2.1}/gismap/search.py +0 -0
  65. {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/__init__.py +0 -0
  66. {gismap-0.1.0 → gismap-0.2.1}/gismap/sources/models.py +0 -0
  67. {gismap-0.1.0 → gismap-0.2.1}/gismap/utils/__init__.py +0 -0
  68. {gismap-0.1.0 → gismap-0.2.1}/gismap/utils/logger.py +0 -0
  69. {gismap-0.1.0 → gismap-0.2.1}/tests/__init__.py +0 -0
  70. {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.7.2"
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.7.13"
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.7.2" # Pin to specific uv version
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
@@ -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.0
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, lab2graph
51
- >>> lab = ListLab(["Mathilde Labbé", "Anne Reverseau", "David Martens", "Marcela Scibiorska", "Nathalie Grande"], dbs=[HAL])
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
- >>> collabs = lab2graph(lab)
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, lab2graph
36
- >>> lab = ListLab(["Mathilde Labbé", "Anne Reverseau", "David Martens", "Marcela Scibiorska", "Nathalie Grande"], dbs=[HAL])
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
- >>> collabs = lab2graph(lab)
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
 
@@ -36,3 +36,10 @@ Management of a group of people and their publications is made with the {class}`
36
36
  .. automodule:: gismap.lab.vis
37
37
  :members:
38
38
  ```
39
+
40
+ ## Expansion
41
+
42
+ ```{eval-rst}
43
+ .. automodule:: gismap.lab.expansion
44
+ :members:
45
+ ```
@@ -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
+ }
@@ -2,4 +2,5 @@
2
2
 
3
3
  :::{toctree}
4
4
  lab_tutorial
5
+ egomap
5
6
  :::