gismap 0.3.0__py3-none-any.whl → 0.4.1__py3-none-any.whl

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/sources/models.py CHANGED
@@ -6,11 +6,43 @@ from gismap.utils.common import LazyRepr
6
6
 
7
7
  @dataclass(repr=False)
8
8
  class Author(LazyRepr):
9
+ """
10
+ Base class for authors in the database system.
11
+
12
+ Authors are identified primarily by their name and may have
13
+ database-specific subclasses with additional attributes like keys and aliases.
14
+
15
+ Parameters
16
+ ----------
17
+ name : :class:`str`
18
+ The author's name.
19
+ """
20
+
9
21
  name: str
10
22
 
11
23
 
12
24
  @dataclass(repr=False)
13
25
  class Publication(LazyRepr):
26
+ """
27
+ Base class for publications in the database system.
28
+
29
+ Publications contain metadata about academic papers including title,
30
+ authors, venue, type, and publication year.
31
+
32
+ Parameters
33
+ ----------
34
+ title : :class:`str`
35
+ The publication title.
36
+ authors : :class:`list`
37
+ List of :class:`Author` objects.
38
+ venue : :class:`str`
39
+ Publication venue (journal, conference, etc.).
40
+ type : :class:`str`
41
+ Publication type (e.g., 'journal', 'conference', 'book').
42
+ year : :class:`int`
43
+ Year of publication.
44
+ """
45
+
14
46
  title: str
15
47
  authors: list
16
48
  venue: str
@@ -20,18 +52,69 @@ class Publication(LazyRepr):
20
52
 
21
53
  @dataclass(repr=False)
22
54
  class DB(LazyRepr):
55
+ """
56
+ Abstract base class for database backends.
57
+
58
+ Provides the interface for searching authors and retrieving publications.
59
+ Subclasses must implement :meth:`search_author` and :meth:`from_author`.
60
+
61
+ Attributes
62
+ ----------
63
+ db_name : :class:`str`
64
+ Identifier for the database backend (e.g., 'hal', 'dblp', 'ldb').
65
+ """
66
+
23
67
  db_name: ClassVar[str] = None
24
68
 
25
69
  @classmethod
26
70
  def search_author(cls, name):
71
+ """
72
+ Search for authors matching the given name.
73
+
74
+ Parameters
75
+ ----------
76
+ name : :class:`str`
77
+ Name to search for.
78
+
79
+ Returns
80
+ -------
81
+ :class:`list`
82
+ List of matching :class:`Author` objects.
83
+ """
27
84
  raise NotImplementedError
28
85
 
29
86
  @classmethod
30
87
  def from_author(cls, a):
88
+ """
89
+ Retrieve publications for a given author.
90
+
91
+ Parameters
92
+ ----------
93
+ a : :class:`Author`
94
+ The author whose publications to retrieve.
95
+
96
+ Returns
97
+ -------
98
+ :class:`list`
99
+ List of :class:`Publication` objects.
100
+ """
31
101
  raise NotImplementedError
32
102
 
33
103
 
34
104
  def db_class_to_auth_class(db_class):
105
+ """
106
+ Find the Author subclass associated with a given DB class.
107
+
108
+ Parameters
109
+ ----------
110
+ db_class : :class:`type`
111
+ A DB subclass (e.g., HAL, DBLP, LDB).
112
+
113
+ Returns
114
+ -------
115
+ :class:`type` or None
116
+ The corresponding Author subclass, or None if not found.
117
+ """
35
118
  for subclass in Author.__subclasses__():
36
119
  if db_class in subclass.__mro__:
37
120
  return subclass
gismap/sources/multi.py CHANGED
@@ -8,6 +8,22 @@ from gismap.utils.text import clean_aliases
8
8
 
9
9
 
10
10
  def score_author_source(dbauthor):
11
+ """
12
+ Compute a quality score for an author source.
13
+
14
+ Higher scores indicate more reliable author identification.
15
+ HAL idHal keys are preferred, followed by HAL pid, then DBLP/LDB.
16
+
17
+ Parameters
18
+ ----------
19
+ dbauthor: :class:`~gismap.sources.models.Author`
20
+ A database-specific author object.
21
+
22
+ Returns
23
+ -------
24
+ :class:`int`
25
+ Score value (higher is better).
26
+ """
11
27
  if dbauthor.db_name == "hal":
12
28
  if dbauthor.key_type == "fullname":
13
29
  return -1
@@ -15,18 +31,45 @@ def score_author_source(dbauthor):
15
31
  return 2
16
32
  else:
17
33
  return 3
18
- elif dbauthor.db_name == "dblp":
34
+ elif dbauthor.db_name in ["dblp", "ldb"]:
19
35
  return 1
20
36
  else:
21
37
  return 0
22
38
 
23
39
 
24
40
  def sort_author_sources(sources):
41
+ """
42
+ Sort author sources by quality score in descending order.
43
+
44
+ Parameters
45
+ ----------
46
+ sources: :class:`list`
47
+ List of database-specific author objects.
48
+
49
+ Returns
50
+ -------
51
+ :class:`list`
52
+ Sorted list with highest-quality sources first.
53
+ """
25
54
  return sorted(sources, key=score_author_source, reverse=True)
26
55
 
27
56
 
28
57
  @dataclass(repr=False)
29
58
  class SourcedAuthor(Author):
59
+ """
60
+ An author aggregated from multiple database sources.
61
+
62
+ Combines author information from HAL, DBLP, and/or LDB into a single entity.
63
+ The primary source (first in the sorted list) determines the author's key.
64
+
65
+ Parameters
66
+ ----------
67
+ name: :class:`str`
68
+ The author's name.
69
+ sources: :class:`list`
70
+ List of database-specific author objects (HALAuthor, DBLPAuthor, LDBAuthor).
71
+ """
72
+
30
73
  sources: list = field(default_factory=list)
31
74
 
32
75
  @property
@@ -69,7 +112,7 @@ class SourcedAuthor(Author):
69
112
 
70
113
 
71
114
  publication_score_rosetta = {
72
- "db_name": {"dblp": 1, "hal": 2},
115
+ "db_name": {"dblp": 1, "ldb": 1, "hal": 2},
73
116
  "venue": {"CoRR": -1, "unpublished": -2},
74
117
  "type": {"conference": 1, "journal": 2},
75
118
  }
@@ -89,6 +132,28 @@ def sort_publication_sources(sources):
89
132
 
90
133
  @dataclass(repr=False)
91
134
  class SourcedPublication(Publication):
135
+ """
136
+ A publication aggregated from multiple database sources.
137
+
138
+ Combines publication entries from HAL, DBLP, and/or LDB that refer
139
+ to the same paper. The primary source determines the publication's metadata.
140
+
141
+ Parameters
142
+ ----------
143
+ title: :class:`str`
144
+ Publication title.
145
+ authors: :class:`list`
146
+ List of author objects.
147
+ venue: :class:`str`
148
+ Publication venue.
149
+ type: :class:`str`
150
+ Publication type.
151
+ year: :class:`int`
152
+ Publication year.
153
+ sources: :class:`list`
154
+ List of database-specific publication objects.
155
+ """
156
+
92
157
  sources: list = field(default_factory=list)
93
158
 
94
159
  @property
gismap/utils/common.py CHANGED
@@ -1,9 +1,14 @@
1
+ from dataclasses import dataclass
2
+
1
3
  HIDDEN_KEYS = {"sources", "aliases", "abstract", "metadata"}
2
4
 
3
5
 
4
6
  class LazyRepr:
5
7
  """
6
- MixIn that hides empty fields in dataclasses repr's.
8
+ MixIn that provides a clean repr for dataclasses.
9
+
10
+ Hides empty fields and fields in HIDDEN_KEYS from the repr string.
11
+ Private attributes (starting with '_') are also hidden.
7
12
  """
8
13
 
9
14
  def __repr__(self):
@@ -30,7 +35,7 @@ def unlist(x):
30
35
  return x[0] if (isinstance(x, list) and x) else x
31
36
 
32
37
 
33
- def get_classes(root, key="name"):
38
+ def get_classes(root, key="name", recurse=False):
34
39
  """
35
40
  Parameters
36
41
  ----------
@@ -38,6 +43,8 @@ def get_classes(root, key="name"):
38
43
  Starting class (can be abstract).
39
44
  key: :class:`str`, default='name'
40
45
  Attribute to look-up
46
+ recurse: bool, default=False
47
+ Recursively traverse subclasses.
41
48
 
42
49
  Returns
43
50
  -------
@@ -50,13 +57,16 @@ def get_classes(root, key="name"):
50
57
  >>> from gismap.sources.models import DB
51
58
  >>> subclasses = get_classes(DB, key='db_name')
52
59
  >>> dict(sorted(subclasses.items())) # doctest: +NORMALIZE_WHITESPACE
53
- {'dblp': <class 'gismap.sources.dblp.DBLP'>, 'hal': <class 'gismap.sources.hal.HAL'>}
60
+ {'dblp': <class 'gismap.sources.dblp.DBLP'>,
61
+ 'hal': <class 'gismap.sources.hal.HAL'>,
62
+ 'ldb': <class 'gismap.sources.ldb.LDB'>}
54
63
  """
55
64
  result = {
56
65
  getattr(c, key): c for c in root.__subclasses__() if getattr(c, key, None)
57
66
  }
58
- for c in root.__subclasses__():
59
- result.update(get_classes(c))
67
+ if recurse:
68
+ for c in root.__subclasses__():
69
+ result.update(get_classes(c, key=key, recurse=True))
60
70
  return result
61
71
 
62
72
 
@@ -83,23 +93,75 @@ def list_of_objects(clss, dico, default=None):
83
93
 
84
94
  >>> from gismap.sources.models import DB
85
95
  >>> subclasses = get_classes(DB, key='db_name')
86
- >>> from gismap import HAL, DBLP
87
- >>> list_of_objects([HAL, 'dblp'], subclasses)
88
- [<class 'gismap.sources.hal.HAL'>, <class 'gismap.sources.dblp.DBLP'>]
96
+ >>> from gismap import HAL, DBLP, LDB
97
+ >>> list_of_objects([HAL, 'ldb'], subclasses)
98
+ [<class 'gismap.sources.hal.HAL'>, <class 'gismap.sources.ldb.LDB'>]
89
99
  >>> list_of_objects(None, subclasses, [DBLP])
90
100
  [<class 'gismap.sources.dblp.DBLP'>]
91
- >>> list_of_objects(DBLP, subclasses)
92
- [<class 'gismap.sources.dblp.DBLP'>]
101
+ >>> list_of_objects(LDB, subclasses)
102
+ [<class 'gismap.sources.ldb.LDB'>]
93
103
  >>> list_of_objects('hal', subclasses)
94
104
  [<class 'gismap.sources.hal.HAL'>]
95
105
  """
96
106
  if default is None:
97
107
  default = []
98
108
  if clss is None:
99
- return default
109
+ return list_of_objects(clss=default, dico=dico)
100
110
  elif isinstance(clss, str):
101
111
  return [dico[clss]]
102
112
  elif isinstance(clss, list):
103
113
  return [cls for lcls in clss for cls in list_of_objects(lcls, dico, default)]
104
114
  else:
105
115
  return [clss]
116
+
117
+
118
+ @dataclass(repr=False)
119
+ class Data(LazyRepr):
120
+ """
121
+ Easy-going converter of dict to dataclass. Useful when you want to use attribute access
122
+ and do not care about giving a full description.
123
+
124
+ Examples
125
+ --------
126
+
127
+ >>> data = Data({
128
+ ... 'name': 'Alice',
129
+ ... 'age': 30,
130
+ ... 'address': {'street': '123 Main', 'city': 'Paris'},
131
+ ... 'hobbies': [{'name': 'jazz', 'level': 5}, {'name': 'code'}]})
132
+ >>> data # doctest: +NORMALIZE_WHITESPACE
133
+ Data(name='Alice', age=30, address=Data(street='123 Main', city='Paris'),
134
+ hobbies=[Data(name='jazz', level=5), Data(name='code')])
135
+ >>> data.hobbies[0].name
136
+ 'jazz'
137
+ >>> data.todict() # doctest: +NORMALIZE_WHITESPACE
138
+ {'name': 'Alice', 'age': 30, 'address': {'street': '123 Main', 'city': 'Paris'},
139
+ 'hobbies': [{'name': 'jazz', 'level': 5}, {'name': 'code'}]}
140
+ """
141
+
142
+ def __init__(self, data):
143
+ self._wrap(data)
144
+
145
+ def _wrap(self, d):
146
+ for key, value in d.items():
147
+ wrapped = self._wrap_item(value)
148
+ setattr(self, key, wrapped)
149
+
150
+ def _wrap_item(self, item):
151
+ if isinstance(item, dict):
152
+ return Data(item)
153
+ elif isinstance(item, list):
154
+ return [self._wrap_item(subitem) for subitem in item]
155
+ return item
156
+
157
+ def todict(self):
158
+ res = {}
159
+ for key in self.__dict__:
160
+ value = getattr(self, key)
161
+ if hasattr(value, "todict"):
162
+ res[key] = value.todict()
163
+ elif isinstance(value, list):
164
+ res[key] = [v.todict() if hasattr(v, "todict") else v for v in value]
165
+ else:
166
+ res[key] = value
167
+ return res
gismap/utils/logger.py CHANGED
@@ -2,3 +2,5 @@ import logging
2
2
 
3
3
  logger = logging.getLogger("GisMap")
4
4
  """Default logging interface."""
5
+
6
+ logger.setLevel(logging.INFO)
gismap/utils/requests.py CHANGED
@@ -21,7 +21,9 @@ def get(url, params=None, n_trials=10, verify=True):
21
21
  Entry point to fetch.
22
22
  params: :class:`dict`, optional
23
23
  Get arguments (appended to URL).
24
- verify: :class:`bool`, optional
24
+ n_trials: :class:`int`, default=10
25
+ Number of attempts to fetch URL.
26
+ verify: :class:`bool`, default=True
25
27
  Verify certificates.
26
28
 
27
29
  Returns
gismap/utils/text.py CHANGED
@@ -98,7 +98,7 @@ def asciify(text):
98
98
  """
99
99
  Parameters
100
100
  ----------
101
- text::class:`str`
101
+ text: :class:`str`
102
102
  Some text (typically names) with annoying accents.
103
103
 
104
104
  Returns
gismap/utils/zlist.py ADDED
@@ -0,0 +1,88 @@
1
+ from gismo.common import MixInIO
2
+ import zstandard as zstd
3
+ import numpy as np
4
+ import pickle
5
+
6
+ dctx = zstd.ZstdDecompressor()
7
+ cctx = zstd.ZstdCompressor()
8
+
9
+
10
+ class ZList(MixInIO):
11
+ """
12
+ Compressed list with frame-based storage.
13
+
14
+ Stores elements in compressed frames, allowing efficient memory usage
15
+ while maintaining random access. Uses zstandard compression.
16
+
17
+ Use as a context manager for building:
18
+
19
+ with ZList(frame_size=1000) as z:
20
+ for item in data:
21
+ z.append(item)
22
+
23
+ Parameters
24
+ ----------
25
+ frame_size : :class:`int`, default=1000
26
+ Number of elements per compressed frame.
27
+ """
28
+
29
+ def __init__(self, frame_size=1000):
30
+ self.frame_size = frame_size
31
+ self.frame = None
32
+ self._frame_index = None
33
+ self._blob = None
34
+ self._off = None
35
+ self._n = None
36
+ self._batch = None
37
+
38
+ def _merge_batch(self):
39
+ if self._batch:
40
+ frame = cctx.compress(pickle.dumps(self._batch))
41
+ self._blob += frame
42
+ self._off.append(len(self._blob))
43
+ self._batch = []
44
+
45
+ def append(self, entry):
46
+ """
47
+ Add an element to the list.
48
+
49
+ Parameters
50
+ ----------
51
+ entry
52
+ Element to add.
53
+ """
54
+ self._batch.append(entry)
55
+ self._n += 1
56
+ if len(self._batch) == self.frame_size:
57
+ self._merge_batch()
58
+
59
+ @property
60
+ def size(self):
61
+ return len(self._blob)
62
+
63
+ def __enter__(self):
64
+ self._blob = bytearray()
65
+ self._off = [0]
66
+ self._n = 0
67
+ self._batch = []
68
+ return self
69
+
70
+ def __exit__(self, exc_type, exc_val, exc_tb):
71
+ self._merge_batch()
72
+ self._blob = bytes(self._blob)
73
+ self._off = np.array(self._off, dtype=int)
74
+
75
+ def load_frame(self, f):
76
+ self.frame = pickle.loads(
77
+ dctx.decompress(self._blob[self._off[f] : self._off[f + 1]])
78
+ )
79
+
80
+ def __getitem__(self, i):
81
+ g, f = i // self.frame_size, i % self.frame_size
82
+ if g != self._frame_index:
83
+ self.load_frame(g)
84
+ self._frame_index = g
85
+ return self.frame[f]
86
+
87
+ def __len__(self):
88
+ return self._n
@@ -1,24 +1,26 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gismap
3
- Version: 0.3.0
4
- Summary: GisMap leverages DBLP and HAL databases to provide cartography tools for you and your lab.
3
+ Version: 0.4.1
4
+ Summary: GisMap: for researchers, by researchers. Research cartography tools leveraging DBLP and HAL.
5
5
  Project-URL: Repository, https://github.com/balouf/gismap
6
6
  Project-URL: Documentation, https://balouf.github.io/gismap
7
7
  Author-email: Fabien Mathieu <fabien.mathieu@normalesup.org>
8
8
  Maintainer-email: Fabien Mathieu <fabien.mathieu@normalesup.org>
9
9
  License-Expression: MIT
10
10
  License-File: AUTHORS.md
11
- Requires-Python: >=3.10
12
- Requires-Dist: bof>=0.3.5
11
+ Requires-Python: <3.15,>=3.11
12
+ Requires-Dist: beautifulsoup4>=4.14.3
13
+ Requires-Dist: bof>=0.4.2
13
14
  Requires-Dist: distinctipy>=1.3.4
14
15
  Requires-Dist: domonic>=0.9.13
15
- Requires-Dist: gismo>=0.5.2
16
+ Requires-Dist: gismo>=0.5.4
16
17
  Requires-Dist: ipykernel>=6.30.1
17
18
  Requires-Dist: ipywidgets>=8.1.8
19
+ Requires-Dist: platformdirs>=4.5.1
18
20
  Requires-Dist: tqdm>=4.67.1
19
21
  Description-Content-Type: text/markdown
20
22
 
21
- # Generic Information Search: Mapping and Analysis of Publications
23
+ # GisMap: for researchers, by researchers
22
24
 
23
25
 
24
26
  [![PyPI Status](https://img.shields.io/pypi/v/gismap.svg)](https://pypi.python.org/pypi/gismap)
@@ -28,7 +30,7 @@ Description-Content-Type: text/markdown
28
30
  [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
29
31
  [![Code Coverage](https://codecov.io/gh/balouf/gismap/branch/main/graphs/badge.svg)](https://codecov.io/gh/balouf/gismap/tree/main)
30
32
 
31
- GisMap leverages DBLP and HAL databases to provide cartography tools for you and your lab.
33
+ GisMap (Generic Information Search: Mapping and Analysis of Publications) leverages DBLP and HAL databases to provide cartography tools for you and your lab.
32
34
 
33
35
  - Free software: MIT
34
36
  - Documentation: <https://balouf.github.io/gismap/>.
@@ -39,6 +41,7 @@ GisMap leverages DBLP and HAL databases to provide cartography tools for you and
39
41
  - Can be used by all researchers in Computer Science (DBLP endpoint) or based in France (HAL endpoint).
40
42
  - Aggregate publications from multiple databases, including multiple author keys inside the same database.
41
43
  - Automatically keeps track of a Lab/Department members and publications.
44
+ - DBLP database can be used locally (LDB endpoint) to improve speed and reliability.
42
45
  - Builds interactive collaboration graphs.
43
46
 
44
47
  ## Test GisMap online!
@@ -52,6 +55,7 @@ For example:
52
55
  - [Tutorial: Making EgoMaps](https://mybinder.org/v2/gh/balouf/gismap/HEAD?urlpath=%2Fdoc%2Ftree%2Fdocs%2Ftutorials%2Fegomap.ipynb)
53
56
  - [Jupyter Lab instance with GisMap installed](https://mybinder.org/v2/gh/balouf/gismap/HEAD)
54
57
 
58
+ **WARNING**: don't use LDB on `binder`, which does not provide enough memory yet. Only HAL and legacy DBLP work on binder.
55
59
 
56
60
  ## Quickstart
57
61
 
@@ -61,17 +65,28 @@ Install GisMap:
61
65
  $ pip install gismap
62
66
  ```
63
67
 
64
- Use GisMap to produce a collaboration graph (HTML):
68
+ Use GisMap to display a collaboration graph (HTML) from a Notebook:
65
69
 
66
70
  ```pycon
67
- >>> from gismap.sources.hal import HAL
68
- >>> from gismap.lab import ListLab
69
- >>> lab = ListLab(["Fabien Mathieu", "François Baccelli", "Ludovic Noirie", "Céline Comte", "Sébastien Tixeuil"], dbs="hal")
71
+ >>> from gismap.lab import ListMap
72
+ >>> lab = ListMap(["Fabien Mathieu", "François Baccelli", "Ludovic Noirie", "Céline Comte", "Sébastien Tixeuil"], dbs="hal")
70
73
  >>> lab.update_authors()
71
74
  >>> lab.update_publis()
72
75
  >>> lab.show_html()
73
76
  ```
74
77
 
78
+ If you are not using Jupyter Lab/Notebook, rich display will not work.
79
+ Instead, save the HTML and display it on your browser:
80
+
81
+ ```pycon
82
+ >>> from gismap.lab import ListMap
83
+ >>> lab = ListMap(["Fabien Mathieu", "François Baccelli", "Ludovic Noirie", "Céline Comte", "Sébastien Tixeuil"], dbs="hal")
84
+ >>> lab.update_authors()
85
+ >>> lab.update_publis()
86
+ >>> lab.save_html("my_graph")
87
+ ```
88
+
89
+
75
90
  ## Credits
76
91
 
77
92
  This package was created with [Cookiecutter][CC] and the [Package Helper 3][PH3] project template.
@@ -0,0 +1,43 @@
1
+ gismap/__init__.py,sha256=FHZLy3T2zFVrFRe3sqSRTuXkZ6DYise9HtXCWWfXrys,866
2
+ gismap/author.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ gismap/build.py,sha256=lyJgrlvf2xXD4vfYn8VjwKloPBL4DKnplWQuwo2Sh8w,693
4
+ gismap/gismap.py,sha256=h0hwdogXGFqerm-5ZPeT-irPn91pCcQRjiHThXsRzEk,19
5
+ gismap/gismo.py,sha256=oDAryl4XQzHE0tUmOWC-3G1n_zUgTeykPL-JWSDYwe0,6307
6
+ gismap/search.py,sha256=EQTts33P47WqbTBFNC0RwXXUJ0Teb6rJMru2gKRJP5k,6289
7
+ gismap/gisgraphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ gismap/gisgraphs/builder.py,sha256=GlyvKIfeUlkCD1Oap5qtY5dYBHTEQYT_YXnedt7IK44,3971
9
+ gismap/gisgraphs/graph.py,sha256=hipfxQ_l5lfIyOkrQAb8oVMERIbe8fcFiz2gASbcNsQ,7320
10
+ gismap/gisgraphs/groups.py,sha256=1E-7Xrv0uDw2SgqwtdjgeRLVBLaC7agUrrVics4jVLs,2405
11
+ gismap/gisgraphs/js.py,sha256=Gbz5nMWORabZkgIdyZAe1sMlnwJZ9jy7sLrx0vYStzI,6283
12
+ gismap/gisgraphs/options.py,sha256=lmUSnfSwrZQyJpGGs16JUGDIQNcJeX4Y0tA8cyC0nuM,817
13
+ gismap/gisgraphs/style.py,sha256=sXNUnv690kxiJiRQZ7lv4iKKrsxMqAfblheJbqesd48,4653
14
+ gismap/gisgraphs/widget.py,sha256=-wS98lHjewMYH6hEndAnb7MOe-mDOa9FVHeVUY0QRqY,5086
15
+ gismap/lab/__init__.py,sha256=ifyZqI9BpC5NRlMfSmJ671tnKWJDoXbo18iDoE-VR1s,181
16
+ gismap/lab/egomap.py,sha256=MFtuqvCHJCF6IG94uwHTdED1jwK6-BtQTLPfxk88GOQ,2071
17
+ gismap/lab/expansion.py,sha256=dmOHbbd69EGPaQ0gpH1bRW5q59fbG5T_K0tl8E6QmDg,7393
18
+ gismap/lab/filters.py,sha256=pG_g2POQXMbyUUw0aXOaeyiGBbiSc7M2NzxLCTQrALk,1875
19
+ gismap/lab/lab_author.py,sha256=RQWeAmprs_h1_RS7slR0ApWXkuh8iekV5dHQgPSj-rY,5123
20
+ gismap/lab/labmap.py,sha256=owvvDfOBNmyyp4K7lgmZAnF6gWl3SJTto1Qpr96Qu_c,6620
21
+ gismap/lab_examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ gismap/lab_examples/cedric.py,sha256=nsRR_dcnTp9PIXKe3A0Is5beG4IIDPtspNP79BlkYNc,1906
23
+ gismap/lab_examples/lamsade.py,sha256=SRv_kWN0WPKp0KEFwP7SmWRvKPCRMLG3ya_w9VIrjCM,1330
24
+ gismap/lab_examples/lincs.py,sha256=-mIVMGQMrtCtJ3N-oCU8j4Ko9mDuhEPB_pA0gaIw4QA,1126
25
+ gismap/lab_examples/lip6.py,sha256=K32Jqe3-o99QYI--akmwBDFAWKgq0HFEk_psC4akR60,1740
26
+ gismap/lab_examples/toulouse.py,sha256=Zg6xZFxGfl3FvBh9R5hJSMRyC16DL7aJwLU9H_9mkSA,2139
27
+ gismap/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ gismap/sources/dblp.py,sha256=T6vLo4T7mB5IqHIl_Q7QTU2whkhzfR30H9ULjnLaNFw,5321
29
+ gismap/sources/dblp_ttl.py,sha256=B-gHxBfP0zIWIYNMqLbKrOnbu9ybqByU8G4FNj0NChg,5597
30
+ gismap/sources/hal.py,sha256=aHeX3C2al75NCMNKksTP2-4Jj6sAaI9iyKuL7F-V7UA,11278
31
+ gismap/sources/ldb.py,sha256=ub7ctY82YahvkOvn8XYTG643cyi4gXfTpMspGMhT5dE,23570
32
+ gismap/sources/models.py,sha256=xWQi4eOpiaVDsj6MvnLpu4auYUFNsJpw6OrF1LWTb3s,2823
33
+ gismap/sources/multi.py,sha256=G6HL0lep-b3_EdOo6aVUGUWCJV5bSUkWbSkwJobSqWA,6435
34
+ gismap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ gismap/utils/common.py,sha256=tG1QHYj8F-HsgGTpUb3-R0gSki8CPgM0_L2vq2VvOz8,4960
36
+ gismap/utils/logger.py,sha256=zvOPJqC7V6GV4Ov8M9-tnK63c2poDAEcWq_UarOLcpg,117
37
+ gismap/utils/requests.py,sha256=ZSKYJ08MlEtJTHdKYi61KxK6RjYxTBNxWjEUH-EtbbI,1468
38
+ gismap/utils/text.py,sha256=l1PCmOH6q6zg9gJZfnCXQ4ZXcyRY5nazrNb4WGTZPBA,3811
39
+ gismap/utils/zlist.py,sha256=nliEOohgwTjEE4vrjxqXiM5vERE35s7ENM24o6t7I9A,2212
40
+ gismap-0.4.1.dist-info/METADATA,sha256=nsDZRC5rJp4ZesZsJi5dyDxA0QcGzj4CaRd2wbOZtPQ,4161
41
+ gismap-0.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
42
+ gismap-0.4.1.dist-info/licenses/AUTHORS.md,sha256=oDR4mptVUBMq0WKIpt19Km1Bdfz3cO2NAOVgwVfTO8g,131
43
+ gismap-0.4.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,38 +0,0 @@
1
- gismap/__init__.py,sha256=Zk5ZXwC-MBREnngJh3V9WUtxLSAUKhkyJhV6kUjtxLE,800
2
- gismap/author.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- gismap/gismap.py,sha256=h0hwdogXGFqerm-5ZPeT-irPn91pCcQRjiHThXsRzEk,19
4
- gismap/gismo.py,sha256=oDAryl4XQzHE0tUmOWC-3G1n_zUgTeykPL-JWSDYwe0,6307
5
- gismap/search.py,sha256=nsUoDsFGeEtvCZ0dB7ooRPC_6qsazkiWx_oM7dHdNV4,4932
6
- gismap/gisgraphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- gismap/gisgraphs/builder.py,sha256=La01_OczsSfZ1hu8sq6rdQN_TelBatN8wP3xLF7TwIg,3234
8
- gismap/gisgraphs/graph.py,sha256=RuUuWdPudrbrDyoGMj2V9SuJGkrsClL_4_4tUMptsjk,7028
9
- gismap/gisgraphs/groups.py,sha256=1E-7Xrv0uDw2SgqwtdjgeRLVBLaC7agUrrVics4jVLs,2405
10
- gismap/gisgraphs/js.py,sha256=Gbz5nMWORabZkgIdyZAe1sMlnwJZ9jy7sLrx0vYStzI,6283
11
- gismap/gisgraphs/options.py,sha256=lmUSnfSwrZQyJpGGs16JUGDIQNcJeX4Y0tA8cyC0nuM,817
12
- gismap/gisgraphs/style.py,sha256=sXNUnv690kxiJiRQZ7lv4iKKrsxMqAfblheJbqesd48,4653
13
- gismap/gisgraphs/widget.py,sha256=s7W_8N4f2palM0ChVFYyr9ImcQoMBiEw83MIO4HSm6c,4542
14
- gismap/lab/__init__.py,sha256=ifyZqI9BpC5NRlMfSmJ671tnKWJDoXbo18iDoE-VR1s,181
15
- gismap/lab/egomap.py,sha256=RabRJSWJ0xrG67l012En0rbi7ukr4R2lR0hc_K7Xp0o,1211
16
- gismap/lab/expansion.py,sha256=CMUsXqo-shRyb_MiuPRL5-ZgaitxAxjfbSY_fvzi_1E,6236
17
- gismap/lab/filters.py,sha256=pG_g2POQXMbyUUw0aXOaeyiGBbiSc7M2NzxLCTQrALk,1875
18
- gismap/lab/lab_author.py,sha256=XwSXvioHDreZWcaWioGW4rjU2zZN10o89ilyfOsWV90,4497
19
- gismap/lab/labmap.py,sha256=w3dFCyDHM-hEwHEQzrQA8GEOs8juu8F-f18gbufiOe8,5782
20
- gismap/lab_examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- gismap/lab_examples/cedric.py,sha256=AjgYy5dhzqh3vDsr9ia_hbtSc9_2Ic238rmJO198FMM,1764
22
- gismap/lab_examples/lincs.py,sha256=-mIVMGQMrtCtJ3N-oCU8j4Ko9mDuhEPB_pA0gaIw4QA,1126
23
- gismap/lab_examples/lip6.py,sha256=K32Jqe3-o99QYI--akmwBDFAWKgq0HFEk_psC4akR60,1740
24
- gismap/lab_examples/toulouse.py,sha256=OUKrK0uefn4uvW74qMsF792un203z3OUfKTquLPGBH4,2091
25
- gismap/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- gismap/sources/dblp.py,sha256=eVd1u09BH-0TgAD3dXn78zsW5Er69mE_vKxPeGDaBw0,4834
27
- gismap/sources/hal.py,sha256=tZkeDWob4p5fccBRXC10G3kf2rnVAVzwdkf3swjvl0c,10306
28
- gismap/sources/models.py,sha256=XlNrQWTF-DQbfIFaSLPsgWPN-c79_0rfr_2jDasgukM,713
29
- gismap/sources/multi.py,sha256=7aiYuExiCoU_5GCwi_ufhesy44HsAh9lNFx_J444YJs,4690
30
- gismap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- gismap/utils/common.py,sha256=nx1f60yNwFpl1oz08h-R5o0xK9CbJv9tmYLDk61dwYA,2898
32
- gismap/utils/logger.py,sha256=1YALIaNYKTqeIyyCnYxzvZTK7x4FTSfYYl5CP9IMw8E,86
33
- gismap/utils/requests.py,sha256=nPnTh-lfo8cXiCeEhzZJ2AMo0odDtx4slPN1rTE4H_E,1384
34
- gismap/utils/text.py,sha256=1_9DlduAYh7Nz-yAg-MaCTmdKbPPmuIY20bb87t7JAQ,3810
35
- gismap-0.3.0.dist-info/METADATA,sha256=BWpxgm1dncPB8ISiMH95WY_Dyn_AyerfVrHIR6X1VYA,3469
36
- gismap-0.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
37
- gismap-0.3.0.dist-info/licenses/AUTHORS.md,sha256=oDR4mptVUBMq0WKIpt19Km1Bdfz3cO2NAOVgwVfTO8g,131
38
- gismap-0.3.0.dist-info/RECORD,,