History#
Pipeline#
anHALyze: tools to spot HAL issues (bad author metadata, DBLP comparison, widget)
EgoConf: find your conferences/journals
Gismo integration: team/researcher clustering and keyword maps (word clouds shipped in 0.6.0)
OpenAlex source
Conf2Lab: build a lab from a set of publications (e.g. a conference)
0.6.3 (2026-09-07): LDB source moved to DROPS#
Bug fixes#
LDB could no longer be built: dblp.org now sits behind an anti-bot challenge (Anubis) that answers with an HTML page in place of
dblp.ttl.gz, so the release workflow died onzlib.error: incorrect header checkand thev0.6.2release shipped no LDB asset. The build now reads the monthly N-Triples snapshots that dblp publishes on DROPS (https://doi.org/10.4230/dblp.rdf.ntriples, CC0):LDB_PARAMETERS.io.sourcedefaults to that DOI, resolved to the latest dated release at build time, and the newgismap.sources.dblp_dumpmodule (which replacesdblp_ttl) resolves the DOI, streams the dump and parses the N-Triples records (blank-line separated, like the Turtle blocks). Same data, same LDB format; the Turtle parser and its regexes are gone. Parsing runs at about 12 MB/s of compressed input, i.e. a few minutes for the whole dump. Checked against the Turtle-built LDB on 75,000 publications: identical output, except where the Turtle regexes were wrong (titles and names truncated at an inner quote). Conference papers keep the year of the event rather than the year of the proceedings, as before.LDB.retrieve()(hence the automatic download on first use) now picks the latest compatible release that ships the LDB asset rather than the latest release. The asset is uploaded by a workflow after a release is published, and that lag (or a failed build, as for 0.6.2) left new installs withAsset 'ldb.pkl.zst' not found.
Improvements#
The dump streamer refuses HTML answers with a clear message pointing to the DROPS snapshots, instead of a decompression error deep in the parser.
gismap.utils.requests.getwarns once per host when a site answers with an anti-bot challenge page. This is the case of the online DBLP source (dbs="dblp": author search and publication APIs) since September 2026, which currently returns nothing; use LDB.
CI / build#
The LDB build jobs get a 6-hour timeout and the scheduled rebuild becomes monthly (the 5th; dblp publishes a snapshot around the 1st). The parser is not the bottleneck (about 12 MB/s of compressed input, i.e. 7 minutes for the 5.2 GB dump, versus 4.3 MB/s for the Turtle regexes on the 2.15 GB dump), but DROPS throttles downloads (0.6 to 1.7 MB/s observed from a home connection), so a build may take one to two hours. Memory footprint of the streaming parser: a few MB.
Build LDB Databaseaccepts atarget_taginput to attach the asset to another release of the same major.minor (same LDB format), e.g. to repairv0.6.2, whose own asset build failed, with the 0.6.3 code.Observed on the first build: the DROPS throughput fluctuates a lot within minutes (77 kB/s to 5 MB/s from a GitHub runner, 2 to 10 MB/s from a home connection), hence the 6-hour timeout. The job log shows the current rate every 30 seconds. Two fallbacks in case a build has to happen outside CI:
python -m gismap.build --source <file or URL>reads a dump downloaded beforehand, and the release workflow skips its own build when the asset was attached to the release by hand.
0.6.2 (2026-09-07): SAGT 2026 patches#
Highlights#
The collaboration graph can now be exported as SVG (menu → Download SVG): a vector rendering of the current state, suitable for posters and editable in Inkscape.
Semi-automatic disambiguation of homonyms:
LabMap.propose_overrides()proposes which DBLP/LDB entry to pin for members whose name matches several of them, based on the co-authors they share with the rest of the lab.New conference map: SAGT 2026 (programme committee, accepted papers, invited speakers), another step toward the Conf2Lab item of the pipeline.
New features#
SVG export. Unlike the PNG export, which copies the on-screen pixels (resolution bounded by the window, cropped to the view, transparent background), the SVG export redraws the graph from its current state: positions after physics and drags, group visibility, time filter, comets, theme background, and the legend with its current wording. Nodes are circles with their initials or clipped portraits, edges keep their widths and the cross-group gradients, and the view box fits the whole graph so nothing is cropped. Only the public vis-network API is used. Not reproduced: hover/selection highlights, label fading at low zoom,
smoothedges (straight lines are drawn), shapes other than circle/circularImage. The JavaScript carries a header listing the style knobs it mirrors, since it is a second renderer of what vis paints.LabMap.propose_overrides()(modulegismap.lab.disambiguation). For each member with several LDB entries, candidates are scored by the number of co-authors shared with the rest of the lab; the set of best-scoring entries is proposed as an override spec ("ldb:key, no_auto"), ties are kept (DBLP sometimes splits one person in two), and entries with more thanmax_co_authorsco-authors (DBLP’s catch-all bins for very common names) are set aside. When no candidate stands out, nothing is proposed, which leaves the default multi-source behavior untouched. Proposals are printed for review and copied by hand intoLabMap.overrides, in the spirit of HALTools: surface entries to check, not entries to change. On the 25 ambiguous names of SAGT 2026, 19 proposals were identical to the hand-checked overrides, 1 tie included the right entry, 5 abstained, none was wrong. LDB only: DBLP online is rate-limited, HAL keys designate one person by construction.update_authors()now logs one warning listing the members whose name matched several entries of the same DBLP/LDB database, pointing topropose_overrides().LabMap.regroup()rebuilds the publication clusters from their raw sources. Manual entries added withadd_publication()are stored as clusters of their own, so they only merge with their database counterparts (e.g. the preprint of an accepted paper) on a regroup; this used to happen only as a side effect ofexpand(). Call it once after a batch of additions.gismap.lab_examples.sagt_2026.SAGT: aLabMapbuilt from the SAGT 2026 webpage (programme committee, accepted papers, invited speakers and workshop lecturers, with agroupper role), the 25 accepted papers injected as manual publications, and a hand-checkedoverridesdictionary for the homonyms. The page is read from a dated archive.org snapshot (identity mode), as the live page will not survive the conference, with the live page as a fallback while it lasts (archive.org occasionally serves an older capture; the content is checked before use).
Improvements#
LDB_PARAMETERS.search.limitdefaults to 200 instead of 3. The query cost does not depend on it (about 190 ms per name either way); 3 silently dropped the right entry for very common names (the correct Bo Li was the 37th of 186 homonyms). A warning is logged when a candidate list is truncated, andupdate_authors()warns about the resulting ambiguities.Manual publications win the election of the primary source of a merged publication (
publication_score_rosetta["db_name"]["manual"] = 3): an accepted paper typed by hand now displays its venue instead of the CoRR of its preprint. The dictionary is documented as an extension point.update_publis()raises aRuntimeErrorwith a clear message when no author was found, instead of silently producing an empty lab.
Bug fixes#
LDB titles and venues were truncated at the first escaped quote of the DBLP dump (e.g. Secure Signatures from the “Strong RSA” Assumption. stopped at the). The stream decoder turns
\"into"before the regex runs; literals are now matched up to a quote followed by a Turtle separator. The fix requires a rebuilt LDB: the 0.6.2 asset is built by the release workflow; runLDB.retrieve()after upgrading.
Documentation#
New gallery notebook: SAGT 2026 (conference map, homonyms and
propose_overrides()at work, keywords of the PC vs the authors). FAQ pointer added to the How to enter a researcher entry.
CI / build#
GitHub Actions moved to Node 24 majors before the removal of Node 20 from the runners (
checkout@v5,cache@v5,setup-python@v6,setup-uv@v7,upload-artifact@v5,download-artifact@v6,upload-pages-artifact@v4,deploy-pages@v5); uv pinned to 0.12.10 everywhere; dependency lock refreshed; pre-commit uses theruff-checkhook id.LICENSEfile added at the root.pyproject.tomlonly carried the SPDX labelMIT; the license text itself now ships in the sdist and the wheel (License-File), and GitHub picks it up for the repository.Opt-in browser test of the SVG export (
tests/test_svg_export_browser.py): drives the installed Edge/Chrome through Playwright and validates the generated SVG; skipped when Playwright is absent (uv run --with playwright pytest tests/test_svg_export_browser.py).
0.6.1 (2026-06-29): Bug fixes#
Bug fixes#
BibTeX export from the graph modal — the per-node / per-edge Download .bib button and the per-entry copy button — no longer appends a stray
Copyafter each entry, which made the downloaded/copied BibTeX unparsable. The copy button lives inside the<pre>, so the readers now keep only its text nodes (not the button). The whole-lab export (LabMap.to_bib/ menu) was already clean. No LDB format change.
Improvements#
make_vis()(henceLabMap.html()/show_html()) now accepts the documentedinteraction_optionskeyword. The code only readinteraction_option, so passing the documented plural name raisedTypeError: unexpected keyword arguments. Both names work.
0.6.0 (2026-06-29): User requests, vol. 2#
Highlights#
Acted on a round of real user feedback on the collaboration graphs: smarter node initials (composite first names like Jean-François Laslier →
JFL, and automatic disambiguation of same-initials neighbours →JLa/JLe), uniform node sizes, a legend that now defines itself on hover, a coloured square for comets, and a one-click toggle between the astronomy vocabulary and plain-language labels.New time filter: a year range-slider (from the menu) filters collaborations to a period live, recomputing nodes, edges and comets.
New theme menu entry to force light / dark / auto (with a
theme=build option).Comets are now gently pulled toward their own group’s cluster instead of scattering on the rim, while staying draggable.
Visualization#
initials()rewritten: keeps every initial of a composite first name (hyphen- or space-separated), skips lowercase particles (Élie de Panafieu→ÉP), and the commonFirst Lastcase stays two letters. New graph-levelnode_labels()disambiguates authors that share initials by extending with surname letters (JLa/JLe).Minimum node size (
widthConstraint) so short-label nodes no longer render smaller than others. Tunable vianodes_options=.Legend overhaul: every entry exposes a definition on hover; a menu entry (“Use alternative labels”) swaps the visible wording with the hover one. Each group ships a primary label (
display) and an alternative (display_alt), both overridable per group. EgoMaps use people-centric wording, other labs membership-centric wording.Comets get a coloured legend square (a lightened member colour) and lose the “(Singletons)” parenthesis.
Node-label disambiguation is length-capped (
node_labels(max_len=5)) so names that cannot be told apart (e.g. a source yielding “Surname Firstname”) produce bounded labels instead of long garbage.Lip6Mapreorders the LIP6 directory’s “Surname Given” labels to “Given Surname”, so initials and display follow the usual convention.Time-window slider (dual-handle, dependency-free) with a graceful empty state when a filter leaves nothing to show.
Comet gravity: invisible attractor springs added only to the rendered graph (never to the data model, so comet detection is unchanged) pull each comet toward its group.
Forced light/dark theme via CSS-variable overrides on the box and modal.
New features#
LabMap.html()/make_vis()gains atheme=argument ("auto","light","dark").make_vis()option dicts (nodes_options,edges_options,physics,interaction_option) now merge with the defaults, so a single field can be tweaked without restating the whole dict.EgoMap.build(target=None)builds an exhaustive ego map: every planet, then moons capped atmoon_ratio× the number of planets (default 0.5) to avoid the thousands of authors a full moon expansion would pull in.Exhaustiveness-aware wording: moons read “Most frequent collaborators” when capped and “Collaborators” when the set is complete.
LabMap.overrides: per-author escape hatch for scraped labs. Map an author name to"drop"(skip) or to a parenthetical source spec ("hal: key, ldb: key","no_auto") to stop a near-homonym or a DB-sparse newcomer from grabbing someone else’s identity via fuzzy source resolution.Keyword clouds:
LabMap.wordcloud(query=, group=)andLabMap.keywords(...)extract weighted keywords for a topic, an author, a group, or the whole lab, via a newGismoLab(authors ↔ words cross-embedding over titles + abstracts). Passgismo_lab=to reuse a prebuilt instance across many queries instead of rebuilding each call. A group’s keywords aggregate the text of all its publications (word-space), so the cloud reflects the group’s actual output instead of giving low-output authors disproportionate weight. A large curated English + French + scraping-noise stop-word list keeps the clouds clean.WordCloudrenders a self-contained HTML cloud (_repr_html_in notebooks,save_htmlto a file). Near-duplicate n-grams are merged (“p2p” absorbed by “p2p networks”). No new dependency (built on Gismo).
Documentation#
FAQ: fixed a typo (“a package base on” → “based on”); new entry explaining why a real collaborator can show up grey (a co-publication recorded under a different author identity) and how to fix it from the source side.
LDB / internals#
New
ZListstorage format: each frame stores individually-pickled items behind an offset index, so random access unpickles a single item instead of the whole frame, and an optional zstd dictionary can be trained for tighter compression.build_dbnow does a two-pass build — a fast dict-less streaming pass, thenZList.optimize()repacks into small dict-compressed frames (10 publications / 20 authors per frame) for much smaller dumps and cheaper access.optimize()/estimated_uncompressed_size()also return a plain list when the data is small enough that memory is not a concern.The LDB asset format changed: the
ldb.pkl.zstshipped with this release is rebuilt; older local caches are incompatible and are re-fetched automatically on first use (LDB.retrieve()to force it).build_dblogs each phase, including the two-passoptimize(dictionary training + level-19 recompression);python -m gismap.buildconfigures timestamped logging so build phases and their durations are visible in CI.
Robustness#
gismap.utils.requests.get()now passes a connect/readtimeout(and retries on timeout), so a slow or hung endpoint no longer blocks a scrape (or the test suite) indefinitely.AlgoRes2016reads through the archive.org mirror: the live LaBRI page has a ~20 s cold-cache penalty on first hit; the mirror serves byte-identical content in ~2 s and is more durable for a long-dead conference site.
CI / build#
The
ldb-buildworkflow uploads the rebuiltldb.pkl.zstto the release that matches the built version (derived fromgismap.__version__), aborting if that release does not exist, instead of always clobbering the latest release. Arefinput rebuilds a specific release’s asset (e.g.v0.5.4) with the current workflow logic.Author / publication counts in the verify step are read straight from the dump instead of via
load_db(), which used to rebuild the search engine and re-dump the asset — silently re-inflating a--no-searchasset.Progress bars are throttled in CI (
TQDM_MININTERVAL) so logs stay readable.
0.5.4 (2026-05-04): Some user requests#
Highlights#
BibTeX export everywhere: per-publication
[.bib]toggle in the modal, per-author / per-pair “Download .bib” buttons, and a whole-lab download via the new menu (or programmatically viaLabMap.to_bib()).Reorganized graph controls: a hamburger menu (top-left) groups Redraw, Full Screen, Show/Hide Legend, PNG export, and the lab-level
.bibexport. Full Screen becomes a YouTube-style icon at the bottom-right.Modal overlay is finally legible in Jupyter dark mode.
HTML produced by
lab.html()/save_html()is ~4× smaller for typical labs.New programmatic exports:
LabMap.to_bib(),LabMap.to_json(),LabMap.to_csv().New tutorial HALTools: walk-through of
diff_sources()andfind_duplicates()on four real-world researcher profiles, with an explicit “what to act on, what to ignore” wrap-up. Replaces and expands the former Analyzing sources section of the EgoMap tutorial.
Visualization#
New hamburger menu (top-left) replacing the standalone Redraw button. Single entry point for: Redraw, Full Screen, Show/Hide Legend, Download
<lab>.bib(whole-lab BibTeX), Download PNG, Copy PNG to clipboard. The<lab>label always matches the actual downloaded filename.PNG export of the collaboration graph (download or copy to clipboard). The legend is composited natively to canvas — no external dependency, no perceptible delay.
Full Screen icon (bottom-right, expand/compress glyph in YouTube style) replaces the text button. Tooltip and the matching menu entry switch between “Full Screen” and “Exit Full Screen” automatically.
Per-publication
[.bib]toggle in the modal overlay reveals an inline<pre>with the BibTeX entry. A sphinx_copybutton-style copy button (revealed on hover) sits in the top-right of each<pre>.Per-publication
[abstract]toggle for publications that carry an abstract (HAL).Per-list “Download .bib” button (author or author-pair) now sits right-aligned on the same line as the “Publications of …” / “Joint publications from …” header (used to wrap to a new line below).
All overlay button handling uses event delegation on the modal body — no per-click listener attachment.
New features#
Add
LabMap.to_bib(name=None, query=None)to export a lab’s publications as a BibTeX file. Optionalqueryargument reusesselect_publicationsto filter (string match, fuzzy title, or callable).Add
LabMap.to_json(name=None)andLabMap.to_csv(name=None). CSV produces two files (<name>_authors.csv,<name>_publications.csv).Add
pub_to_bibtex(pub)ingismap.sources.bibtexfor per-publication BibTeX rendering (handles allPublicationsubclasses includingSourcedPublicationwithnote = {Also at: …}for non-primary source URLs).Add
to_dict()onAuthor,Publication,SourcedAuthor,SourcedPublication, andLabAuthorfor JSON-friendly serialization.Tuning kwargs on
LabMap.__init__:max_co_authors,min_title_words,taboo_words,taboo_authors. Subclasses can adjust default filters without mutatingpublication_selectorsby index.LaasMap/LaasFull(gismap.lab_examples.toulouse) gaindepartment_levelto label authors by parent department;LaasFullgainswith_supportto include LAAS support services and deduplicates authors appearing in multiple teams.
Documentation#
New tutorial
docs/tutorials/haltools.ipynbcoveringdiff_sources()andfind_duplicates()end-to-end (clean profile, messy profile, duplicate-heavy profile, andpid-vs-fullname diagnosis). Wired intodocs/tutorials/index.mdand the FAQ Binder list.The haltools notebook is shipped with stored outputs on purpose: the analysis text references specific HAL/LDB items, so a stale narrative would be worse than a slightly stale snapshot. Re-execute locally before each release.
Removed the Analyzing sources section from
docs/tutorials/egomap.ipynb(now superseded by the dedicated tutorial).New
## Exporting a labsection indocs/tutorials/lab_tutorial.ipynbshowingto_bib()(whole-lab andquery=-filtered),to_json(), andto_csv().Updated lab_tutorial’s “Few things about the generated graph” enumeration to describe the hamburger menu, the bottom-right Full Screen icon, and the in-modal
[.bib]/[abstract]/ “Download .bib” affordances.Refreshed the FAQ: the graph is spinning and it’s too small recipes now refer to the new menu and icon (
Redrawis now a menu entry, not a standalone button); the publication should be there in my LabMap section leads with the new constructor kwargs (max_co_authors,min_title_words,taboo_words,taboo_authors) and keepspublication_selectorsas the advanced escape hatch.
Improvements#
HTML output is ~4× smaller for typical labs. Each publication is now shipped once in a shared JS dict and referenced by key from nodes and edges; the modal is rendered on click from that dict, instead of inlining the full publication HTML once per author and once per author-pair. Internal refactor of
gismap.gisgraphs.graphandgismap.gisgraphs.js.LAAS_TABOOnow extendseditorialsinstead of duplicating it.Docstrings completed on
LaasMap,LaasFull, andLabMap(full Parameters sections).LabMap.save_html()and the new export methods raiseValueErrorif neithername=norself.nameis set, instead of crashing onPath(None).LDB cache is now stored under a Python-version-specific subdirectory (
<user_data_dir>/gismap/py{X.Y}/ldb.pkl.zst) so that running gismap from multiple Python interpreters on the same machine no longer leads to mutually corrupted dumps. Users with several Python versions will pay one (re-)retrieveper interpreter; mono-Python users see no change other than the new path.
CI#
Network-heavy tests now run only on the 3.12 matrix runner (the one that feeds Codecov). The 3.11 / 3.13 / 3.14 runners skip them via
--ignore. Two test paths are concerned:gismap/sources/dblp.py(live DBLP doctests) andtests/test_lab_examples.py(live scraping of irif.fr / lamsade / lincs / laas). With four runners hitting the same endpoints in parallel, the remote side would issue temporary bans, and the suite would stall for ~20 min on exponential backoff before+FLAKYdowngraded DBLP failures to skips, ortest_lab_examplesfailed outright on aConnectionError. Live-network coverage is preserved on 3.12.
Bug fixes#
Modal overlay was unreadable in Jupyter dark mode (fixed-light card on dark canvas). Modal colors now resolve through
var(--pst-color-…, var(--jp-…, fallback))chains so the modal follows the host theme.Harden JSON embedded inside
<script>: any</(e.g.</script>inside a publication title) is rewritten to<\/, neutralizing a tag-breakout vector.Fix
LaasMap._author_iteratordepartment-level scraping:find("p", {"class", "font11"})(a set) was silently wrong; replaced by{"class": "font11"}(a dict).Fix
LDB._initialized = Truebeing set even whensearch_enginewasNone(e.g. interrupted download leaving the GitHub release pickle as-is, or pre-existing dump from a previous build). Subsequentsearch_author()calls then crashed withAttributeError: 'NoneType' object has no attribute 'extract'.LDB.load()now rebuilds and re-dumps the search engine whenever the loaded state has none.LDB._download_filenow writes throughsafe_write(temp file + atomic rename) so an interrupted download no longer leaves a partialldb.pkl.zstthat the next run would try to load.
0.5.3 (2026-04-09): HALTools v1#
New features#
Add
diff_sources()to compare publications between two databases or search strategiesAdd
find_duplicates()to find duplicate publications within a single databaseAdd
select_publications()method for querying publications of a lab by fuzzy title match, key, or callable filterAdd
del_publication()method for removing publications from a lab with optional confirmation
Improvements#
Add
__str__and__repr__toLabMap,EgoMap,Author, andPublicationfor human-readable displayEgoMapautomatically uses the star’s name when no name is providedFix
Publication.__str__to avoid double period when title ends with “.”Fix misleading tqdm progress in
expand(): progress bar now reflects actual work (network calls) instead of completing instantlyAdd
format_authors()utility with Oxford comma formatting (sources/models.py)Use
format_authors()in publication overlays (gisgraphs/graph.py)auto_sourcesnow completes missing DBs instead of being all-or-nothing: specifying a HAL key no longer prevents automatic LDB discoveryAdd
hal:fullnameshorthand to force HAL name-based search (useful when pid is too restrictive)Add
no_autoflag in parentheses notation to disable automatic source completionAdd
Publication.short_str()for compact one-line display with URLAdd
SourcedPublication.urlproperty (delegates to first source with a URL)
Bug fixes#
Fix comets (singletons) legend: checkbox visibility is now fully dynamic, appearing only when singletons exist for the current group selection
Fix
HALAuthor.check_cv(): adapt CV page detection to current HAL markup (soup.main.sectioninstead ofsoup.form), and catchAttributeErrorin image extractionFix
LDB.search_author()returning duplicate entries when aliases normalize to the same name; deduplicate at index build time and at query timeFix
regroup_publications()partition bug: a publication matching two groups could appear in both instead of just the first
0.5.2 (2026-04-06)#
New features#
Add
add_publication()method to manually add publications to a lab with fuzzy author matchingNew
Manualdatabase backend withOutsiderandInformalclasses (sources/manual.py)New
similarity_matrix()utility for unified fuzzy matching (utils/fuzzy.py)
Improvements#
Replace domonic with f-strings in
gisgraphs/, removing domonic + 4 transitive dependenciesFix slow import (~4.1s → ~0.2s): lazy imports for
bof.fuzz,GismapWidget,LDB,gismoRefactor expansion:
proper_prospects()returns a simple list,labify_publicationsreplaced byregroup_authorsAdd version compatibility warning when loading an LDB built for a different gismap version
CI/CD#
Parallelize notebook execution in docs CI (matrix strategy, per-notebook cache, shared LDB cache)
Add LDB cache to build CI (per Python version), simplify workflows (remove setup-python, enable uv cache)
Tests#
Add parametrized tests for lab_examples
_author_iterator()(6 labs)Improve test coverage (81% → 83% lines, 61% → 64% branches)
Fix lazy import regression:
db_dict()forces backend imports before discovery
Documentation#
Document LDB management workflow in FAQ
Simplify “Adding publications” tutorial with
add_publication()
0.5.1 (2026-03-30)#
Fix publication deduplication: fingerprint now combines title and authors (normalized) instead of title only, preventing incorrect merges of different papers with similar titles
Switch vis-network CDN from unpkg to jsDelivr (CORS fix for JupyterLab)
Enable Light-themed full screen (previously, full screen was always dark)
Slight adjustment in legend alignment
IRIF added to the gallery
Adapt Lamsade authors retrieval to new webpage format
Add ruff linter configuration and pre-commit hooks
Fix all existing ruff findings (import sorting, pyupgrade, line length)
Consolidate coverage configuration into
pyproject.tomlBump ipykernel minimum to 7.x
Upgrade CI tooling: uv 0.11.0, Codecov v5, Pandoc 3.9
Fix potential circular import in
lab_author.py(lazydb_dictlookup)GH actions: cached gallery (tricky)
0.5.0 (2026-02-14)#
BREAKING CHANGE LDB now supports aliases (old assets not compatible)
Algotel/Cores added to the gallery
Add throttling to HAL requests, as they apparently started to limit the traffic
0.4.1 (2026-02-02): Python 3.14 support#
Add Python 3.14 compatibility (requires gismo>=0.5.4).
Drop Python 3.10 support (now requires 3.11+).
LDB search engine fine-tuned.
Various typo fixes.
0.4.0 (2026-01-27): Local DB#
New DB: LDB (Local DB). All the strengths of DBLP, None of its weaknesses.
Convert the whole DBLP relational DB into a Gismap compatible local object.
Introduces new compressed list format (Zlist) to keep the DB in memory.
Use Bag-of-Factors to enable approximate search.
You can build your own dataset or just rely on the one we provide and update.
Also, Lamsade added to the gallery.
0.3.1 (2025-11-27): Bug fixes#
Fix BS4 dependency issue.
Errors in readme
0.3.0 (2025-11-25): Bigger, faster, prettier#
VisJS integration has been fully revamped to reduce JS errors and resource consumption.
A gallery is now available in the documentation to showcase the possibilities:
Lip6 (Sorbonne university CS lab, single team / whole lab);
Laas (Toulouse university CS lab, single team / whole lab) + Solace (collab team);
Cédric (CNAM, whole CS Lab);
LINCS (legacy Paris-based collaboration project).
Binder integration: you can now play with GisMap directly in your browser, no local Python required!
A FAQ, because when the developer (me) starts to forget some how-tos, you know it’s time for a FAQ.
GisGraphs can now have groups with automatic color selection and a selectable legend.
Gradient-based coloring for inter-group edges (that one was no picnic).
Lots of minor improvements here and there.
0.2.2 (2025-09-08): Various upgrades#
Breaking change: renaming some methods/attributes (e.g. sun is now star in EgoMap)
Graphs now include unconnected non-empty nodes (their display will be an option in the next version)
Typos here and there
New Lab class: LINCS
0.2.1 (2025-09-01): Minor VisJS enhancements#
Better handling of dark/light mode (should be compatible with Pydata, Jupyter, and System).
Responsive size
0.2.0 (2025-08-31): EgoMaps!#
New lab structure: EgoMap shows the people that revolve around you!
New lab method: expansion, which adds moons (neighbor researchers).
Add filters when building authors and publications.
Physics engine changed for better visualization.
Multi-source handling fine-tuned.
Better display (size and theme).
0.1.0 (2025-07-24): First release#
First release on PyPI.
Online DBLP and HAL DB implemented.
Lab structures implemented.
Early version of collaboration graph available.