From f9a718c80c8c871259ab78d026a47112027e3c54 Mon Sep 17 00:00:00 2001 From: flange-ipb <34936695+flange-ipb@users.noreply.github.com> Date: Wed, 17 Aug 2022 15:49:03 +0200 Subject: [PATCH 001/681] invoke Emscripten's emcmake when cross-compiling to wasm --- setup.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/setup.py b/setup.py index 7cfe397c0..e34bfa72b 100644 --- a/setup.py +++ b/setup.py @@ -51,6 +51,11 @@ def building_on_windows_msvc() -> bool: return platform.system() == "Windows" and sysconfig.get_platform() != "mingw" +def building_to_wasm() -> bool: + """Returns True when building to WebAssembly""" + return "PYODIDE" in os.environ + + def exclude_from_list(items: Iterable[T], items_to_exclude: Iterable[T]) -> List[T]: """Excludes certain items from a list, keeping the original order of the remaining items.""" @@ -229,6 +234,18 @@ def _compile_in( print("Configuring build...") args = [cmake] + # Build to wasm requires invocation of the Emscripten SDK + if building_to_wasm(): + emcmake = which("emcmake") + if not emcmake: + print( + "You need to install emcmake from the Emscripten SDK before " + "compiling igraph." + ) + return False + args.insert(0, emcmake) + args.append("-DIGRAPH_WARNINGS_AS_ERRORS:BOOL=OFF") + # Build the Python interface with vendored libraries for deps in "ARPACK BLAS GLPK GMP LAPACK".split(): args.append("-DIGRAPH_USE_INTERNAL_" + deps + "=ON") From e3275c4f9ce78bab08bc66b7614e47318ce56a2a Mon Sep 17 00:00:00 2001 From: flange-ipb <34936695+flange-ipb@users.noreply.github.com> Date: Mon, 29 Aug 2022 13:02:37 +0200 Subject: [PATCH 002/681] add workflow to build a WASM wheel --- .github/workflows/build.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c56fa0085..48aa932fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -150,6 +150,34 @@ jobs: with: path: ./wheelhouse/*.whl + build_wheel_wasm: + name: Build wheels for WebAssembly + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + with: + submodules: true + fetch-depth: 0 + + - uses: actions/setup-python@v2 + name: Install Python + with: + python-version: '3.10.2' + + - uses: mymindstorm/setup-emsdk@v11 + with: + version: '3.1.14' + + - name: Build wheel + run: | + pip install pyodide-build==0.21.0 + pyodide build + + - uses: actions/upload-artifact@v2 + with: + path: ./dist/*.whl + build_wheel_win: name: Build wheels on Windows (${{ matrix.cmake_arch }}) runs-on: windows-2019 From ddecc7c57b823d94538cfc860c19a03d02b36e04 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 31 Jan 2023 14:16:06 +0100 Subject: [PATCH 003/681] make things more generic by detecting Emscripten and not only pyodide --- setup.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index dd7721f49..6be61230b 100644 --- a/setup.py +++ b/setup.py @@ -59,9 +59,9 @@ def building_on_windows_msvc() -> bool: return platform.system() == "Windows" and sysconfig.get_platform() != "mingw" -def building_to_wasm() -> bool: - """Returns True when building to WebAssembly""" - return "PYODIDE" in os.environ +def building_with_emscripten() -> bool: + """Returns True when building with Emscripten to WebAssembly""" + return (sysconfig.get_config_var("HOST_GNU_TYPE") or "").endswith("emscripten") def exclude_from_list(items: Iterable[T], items_to_exclude: Iterable[T]) -> List[T]: @@ -249,7 +249,7 @@ def _compile_in( args = [cmake] # Build to wasm requires invocation of the Emscripten SDK - if building_to_wasm(): + if building_with_emscripten(): emcmake = which("emcmake") if not emcmake: print( From 0b17fa405ff51b1e6b73168a316066109ba3305d Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 3 Mar 2023 10:19:02 +0100 Subject: [PATCH 004/681] fix: removed unused 'params' parameter from VertexDendrogram --- src/igraph/clustering.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/igraph/clustering.py b/src/igraph/clustering.py index 47cb58f7d..c7270a52b 100644 --- a/src/igraph/clustering.py +++ b/src/igraph/clustering.py @@ -62,7 +62,8 @@ def __init__(self, membership, params=None): @param membership: the membership list -- that is, the cluster index in which each element of the set belongs to. @param params: additional parameters to be stored in this - object's dictionary.""" + object's dictionary. + """ self._membership = list(membership) if len(self._membership) > 0: self._len = max(m for m in self._membership if m is not None) + 1 @@ -788,7 +789,7 @@ class VertexDendrogram(Dendrogram): vertex set of a graph.""" def __init__( - self, graph, merges, optimal_count=None, params=None, modularity_params=None + self, graph, merges, optimal_count=None, modularity_params=None ): """Creates a dendrogram object for a given graph. @@ -799,7 +800,6 @@ def __init__( clustering algorithm that produces the dendrogram. C{None} means that such a hint is not available; the optimal count will then be selected based on the modularity in such a case. - @param params: additional parameters to be stored in this object. @param modularity_params: arguments that should be passed to L{Graph.modularity} when the modularity is (re)calculated. If the original graph was weighted, you should pass a dictionary From 423b3217d3dac5d37260debd309a42ff3c2009fc Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 3 Mar 2023 10:35:27 +0100 Subject: [PATCH 005/681] fix: fix forwarding of resolution parameter to the low-level modularity() method from the Graph class, closes #640 --- src/igraph/community.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/igraph/community.py b/src/igraph/community.py index 74a290a7a..834744707 100644 --- a/src/igraph/community.py +++ b/src/igraph/community.py @@ -403,7 +403,7 @@ def _community_leiden( Model (CPM) or modularity. Must be either C{"CPM"} or C{"modularity"}. @param weights: edge weights to be used. Can be a sequence or iterable or even an edge attribute name. - @param resolution: the resolution parameter to use. Higher resolutions + @param resolution: the resolution parameter to use. Higher resolutions lead to more smaller communities, while lower resolutions lead to fewer larger communities. @param beta: parameter affecting the randomness in the Leiden @@ -431,7 +431,10 @@ def _community_leiden( raise ValueError('objective_function must be "CPM" or "modularity".') if "resolution_parameter" in kwds: - deprecated("resolution_parameter keyword argument is deprecated, use resolution=... instead") + deprecated( + "resolution_parameter keyword argument is deprecated, use " + "resolution=... instead" + ) resolution = kwds.pop("resolution_parameter") if kwds: @@ -448,10 +451,10 @@ def _community_leiden( n_iterations=n_iterations, ) + modularity_params = {"resolution": resolution} if weights is not None: - modularity_params = dict(weights=weights) - else: - modularity_params = {} + modularity_params["weights"] = weights + return VertexClustering(graph, membership, modularity_params=modularity_params) @@ -494,9 +497,11 @@ def _modularity(self, membership, weights=None, resolution=1, directed=True): if isinstance(membership, VertexClustering): if membership.graph != self: raise ValueError("clustering object belongs to another graph") - return GraphBase.modularity(self, membership.membership, weights) + return GraphBase.modularity( + self, membership.membership, weights, resolution, directed + ) else: - return GraphBase.modularity(self, membership, weights) + return GraphBase.modularity(self, membership, weights, resolution, directed) def _optimal_cluster_count_from_merges_and_modularity( From 18a903e17cf47bdcb45bd003afccd677eba47e65 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 3 Mar 2023 14:25:22 +0100 Subject: [PATCH 006/681] feat: VertexClustering returned from Graph.community_leiden() now stores the value of the quality function --- src/_igraph/graphobject.c | 2 +- src/igraph/community.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 7ba3e693f..69f544187 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -12784,7 +12784,7 @@ PyObject *igraphmodule_Graph_community_leiden(igraphmodule_GraphObject *self, free(membership); } - return error ? NULL : res; + return error ? NULL : Py_BuildValue("Nd", res, (double) quality); } /********************************************************************** diff --git a/src/igraph/community.py b/src/igraph/community.py index 834744707..61af2a3b1 100644 --- a/src/igraph/community.py +++ b/src/igraph/community.py @@ -420,7 +420,9 @@ def _community_leiden( If this is not provided, it will be automatically determined on the basis of whether you want to use CPM or modularity. If you do provide this, please make sure that you understand what you are doing. - @return: an appropriate L{VertexClustering} object. + @return: an appropriate L{VertexClustering} object with an extra attribute + called C{quality} that stores the value of the internal quality function + optimized by the algorithm. @newfield ref: Reference @ref: Traag, V. A., Waltman, L., & van Eck, N. J. (2019). From Louvain @@ -440,7 +442,7 @@ def _community_leiden( if kwds: raise TypeError('unexpected keyword argument') - membership = GraphBase.community_leiden( + membership, quality = GraphBase.community_leiden( graph, edge_weights=weights, node_weights=node_weights, @@ -451,11 +453,15 @@ def _community_leiden( n_iterations=n_iterations, ) + params = {"quality": quality} + modularity_params = {"resolution": resolution} if weights is not None: modularity_params["weights"] = weights - return VertexClustering(graph, membership, modularity_params=modularity_params) + return VertexClustering( + graph, membership, params=params, modularity_params=modularity_params + ) def _modularity(self, membership, weights=None, resolution=1, directed=True): From 02f37ab55310dff5826980d4726b0b535957644d Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 3 Mar 2023 14:27:01 +0100 Subject: [PATCH 007/681] chore: updated changelog --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae776db49..65fa445a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ ## [Unreleased] +### Added + +- The `VertexClustering` object returned from `Graph.community_leiden()` now + contains an extra property named `quality` that stores the value of the + internal quality function optimized by the algorithm. + +### Fixed + +- `resolution` parameter is now correctly taken into account when calling + `Graph.modularity()` + ### Removed - Removed defunct `Graph.community_leading_eigenvector_naive()` method. Not a From 61111f229dedc131b9a1b5f014b4bbcb884b20fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szabolcs=20Horva=CC=81t?= Date: Sun, 5 Mar 2023 14:05:28 +0100 Subject: [PATCH 008/681] chore: update vendored igraph --- vendor/source/igraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/source/igraph b/vendor/source/igraph index c9426b5d9..df540582b 160000 --- a/vendor/source/igraph +++ b/vendor/source/igraph @@ -1 +1 @@ -Subproject commit c9426b5d9fa841d93a311f46ddef9ed1d97576ac +Subproject commit df540582b4c2b267e573fc42d7ca654573960072 From bdada6f6c3bbeb170cd56b4ed8c23332433710f4 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 10 Mar 2023 18:03:18 +0100 Subject: [PATCH 009/681] chore: updated C core --- vendor/source/igraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/source/igraph b/vendor/source/igraph index df540582b..47c76b691 160000 --- a/vendor/source/igraph +++ b/vendor/source/igraph @@ -1 +1 @@ -Subproject commit df540582b4c2b267e573fc42d7ca654573960072 +Subproject commit 47c76b691c8158daea48648f3d47129e682d4651 From be0d890307c5e52d971a094e895d599716dca2e9 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 13 Mar 2023 19:40:15 +1100 Subject: [PATCH 010/681] Add Spanish tutorial by @adriandiazlab (#642) * Add Spanish tutorial by @adriandiazlab * fix: let's try with all-lowercase filenames * A few corrections in style and language --------- Co-authored-by: Tamas Nepusz --- doc/source/index.rst | 3 +- doc/source/tutorial.es.rst | 815 +++++++++++++++++++++++++++++++++++++ 2 files changed, 817 insertions(+), 1 deletion(-) create mode 100644 doc/source/tutorial.es.rst diff --git a/doc/source/index.rst b/doc/source/index.rst index 040b4c5c5..aca648dfb 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -67,7 +67,7 @@ Documentation - :doc:`Quick start ` - :doc:`Gallery of examples ` - - :doc:`Extended tutorial ` + - :doc:`Extended tutorial ` (:doc:`Español `) .. container:: @@ -103,6 +103,7 @@ Documentation for `python-igraph <= 0.10.1` is available on our `old website `_, o un `IDE `_):: + + $ python + Python 3.9.6 (default, Jun 29 2021, 05:25:02) + [Clang 12.0.5 (clang-1205.0.22.9)] on darwin + Type "help", "copyright", "credits" or "license" for more information. + >>> import igraph as ig + +Para llamar a funciones, es necesario anteponerles el prefijo ``ig`` (o el nombre que hayas elegido):: + + >>> import igraph as ig + >>> print(ig.__version__) + 0.9.8 + +.. note:: + Es posible utilizar *importación con asterisco* para |igraph|:: + + >>> from igraph import * + + pero en general se desaconseja `_. + +Hay una segunda forma de iniciar |igraph|, que consiste en llamar al script :command:`igraph` desde tu terminal:: + + $ igraph + No configuration file, using defaults + igraph 0.9.6 running inside Python 3.9.6 (default, Jun 29 2021, 05:25:02) + Type "copyright", "credits" or "license" for more information. + >>> + +.. note:: + Para los usuarios de Windows encontrarán el script dentro del subdirectorio file:`scripts` + de Python y puede que tengan que añadirlo manualmente a su ruta. + +Este script inicia un intérprete de comandos apropiado (`IPython`_ o `IDLE `_ si se encuentra, de lo contrario un intérprete de comandos Python puro) y utiliza *importación con asterisco* (véase más arriba). Esto es a veces conveniente para usar las funciones de |igraph|. + +.. note:: + Puede especificar qué shell debe utilizar este script a través + :doc:`configuration` de |igraph|. + +Este tutorial asumirá que has importado igraph usando el de nombres ``ig``. + +Creando un grafo +================ + +La forma más sencilla de crear un grafo es con el constructor :class:`Graph`. Para hacer un grafo vacío: + + >>> g = ig.Graph() + +Para hacer un grafo con 10 nodos (numerados ``0`` to ``9``) y dos aristas que conecten los nodos ``0-1`` y ``0-5``:: + + >>> g = ig.Graph(n=10, edges=[[0, 1], [0, 5]]) + +Podemos imprimir el grafo para obtener un resumen de sus nodos y aristas:: + + >>> print(g) + IGRAPH U--- 10 2 -- + + edges: + 0--1 0--5 + +Tenemos entonces: grafo no dirigido (**U**ndirected) con **10** vértices y **2** aristas, que se enlistan en la última parte. Si el grafo tiene un atributo "nombre", también se imprime. + +.. note:: + ``summary`` es similar a ``print`` pero no enlista las aristas, lo cual + es conveniente para grafos grandes con millones de aristas:: + + >>> summary(g) + IGRAPH U--- 10 2 -- + +Añadir y borrar vértices y aristas +================================== + +Empecemos de nuevo con un grafo vacío. Para añadir vértices a un grafo existente, utiliza :meth:`Graph.add_vertices`:: + + >>> g = ig.Graph() + >>> g.add_vertices(3) + +En |igraph|, los vértices se numeran siempre a partir de cero El número de un vértice es el *ID del vértice*. Un vértice puede tener o no un nombre. + +Del mismo modo, para añadir aristas se utiliza :meth:`Graph.add_edges`:: + + >>> g.add_edges([(0, 1), (1, 2)]) + +Las aristas se añaden especificando el vértice origen y el vértice destino de cada arista. Esta llamada añade dos aristas, una que conecta los vértices ``0`` y ``1``, y otra que conecta los vértices ``1`` y ``2``. Las aristas también se numeran a partir de cero (el *ID del arista*) y tienen un nombre opcional. + +.. warning:: + + Crear un grafo vacío y añadir vértices y aristas como se muestra aquí puede ser mucho más lento que crear un grafo con sus vértices y aristas como se ha demostrado anteriormente. Si la velocidad es una preocupación, deberías evitar especialmente añadir vértices y aristas *de uno en uno*. Si necesitas hacerlo de todos modos, puedes usar :meth:`Graph.add_vertex` y :meth:`Graph.add_edge`. + +Si intentas añadir aristas a vértices con IDs no válidos (por ejemplo, intentas añadir una arista al vértice ``5`` cuando el grafo sólo tiene tres vértices), obtienes un error :exc:`igraph.InternalError`:: + + >>> g.add_edges([(5, 4)]) + Traceback (most recent call last): + File "", line 1, in + File "/usr/lib/python3.10/site-packages/igraph/__init__.py", line 376, in add_edges + res = GraphBase.add_edges(self, es) + igraph._igraph.InternalError: Error at src/graph/type_indexededgelist.c:270: cannot add edges. -- Invalid vertex id + +El mensaje intenta explicar qué ha fallado (``cannot add edges. -- Invalid +vertex id``) junto con la línea correspondiente del código fuente en la que se ha producido el error. + +.. note:: + El rastreo completo, incluida la información sobre el código fuente, es útil cuando + se informa de errores en nuestro + `Página de problemas de GitHub `_. Por favor, inclúyalo + completo si crea un nuevo asunto. + +Añadamos más vértices y aristas a nuestro grafo:: + + >>> g.add_edges([(2, 0)]) + >>> g.add_vertices(3) + >>> g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)]) + >>> print(g) + IGRAPH U---- 6 7 -- + + edges: + 0--1 1--2 0--2 2--3 3--4 4--5 3--5 + +Ahora tenemos un grafo no dirigido con 6 vértices y 7 aristas. Los IDs de los vértices y aristas son siempre *continuos*, por lo que si eliminas un vértice todos los vértices subsiguientes serán renumerados. Cuando se renumera un vértice, las aristas **no** se renumeran, pero sí sus vértices de origen y destino. Utilice :meth:`Graph.delete_vertices` y :meth:`Graph.delete_edges` para realizar estas operaciones. Por ejemplo, para eliminar la arista que conecta los vértices ``2-3``, obten sus IDs y luego eliminalos:: + + >>> g.get_eid(2, 3) + 3 + >>> g.delete_edges(3) + +Generar grafos +============== + +|igraph| incluye generadores de grafos tanto deterministas como estocásticos. Los generadores *deterministas* producen el mismo grafo cada vez que se llama a la función, por ejemplo:: + + >>> g = ig.Graph.Tree(127, 2) + >>> summary(g) + IGRAPH U--- 127 126 -- + +Utiliza :meth:`Graph.Tree` para generar un grafo regular en forma de árbol con 127 vértices, cada vértice con dos hijos (y un padre, por supuesto). No importa cuántas veces llames a :meth:`Graph.Tree`, el grafo generado será siempre el mismo si utilizas los mismos parámetros:: + + >>> g2 = ig.Graph.Tree(127, 2) + >>> g2.get_edgelist() == g.get_edgelist() + True + +El fragmento de código anterior también muestra el método :meth:`~Graph.get_edgelist()`, que devuelve una lista de vértices de origen y destino para todas las aristas, ordenados por el ID de la arista. Si imprimes los 10 primeros elementos, obtienes:: + + >>> g2.get_edgelist()[:10] + [(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6), (3, 7), (3, 8), (4, 9), (4, 10)] + +Los generadores *estocásticos* producen un grafo diferente cada vez; por ejemplo, :meth:`Graph.GRG`:: + + >>> g = ig.Graph.GRG(100, 0.2) + >>> summary(g) + IGRAPH U---- 100 516 -- + + attr: x (v), y (v) + +.. note:: + `+ attr`` muestra atributos para vértices (v) y aristas (e), en este caso dos atributos de + vértice y ningún atributo de arista. + +Esto genera un grafo geométrico aleatorio: Se eligen *n* puntos de forma aleatoria y uniforme dentro del cuadrado unitario y los pares de puntos más cercanos entre sí respecto a una distancia predefinida *d* se conectan mediante una arista. Si se generan GRGs con los mismos parámetros, serán diferentes:: + + >>> g2 = ig.Graph.GRG(100, 0.2) + >>> g.get_edgelist() == g2.get_edgelist() + False + +Una forma un poco más relajada de comprobar si los grafos son equivalentes es mediante :meth:`~Graph.isomorphic()`:: + + >>> g.isomorphic(g2) + False + +Comprobar por el isomorfismo puede llevar un tiempo en el caso de grafos grandes (en este caso, la respuesta puede darse rápidamente comprobando las distribuciones de grados de los dos grafos). + +Establecer y recuperar atributos +================================ + +Como se ha mencionado anteriormente, en |igraph| cada vértice y cada arista tienen un ID numérico de ``0`` en adelante. Por lo tanto, la eliminación de vértices o aristas puede causar la reasignación de los ID de vértices y/o aristas. Además de los IDs, los vértices y aristas pueden tener *atributos* como un nombre, coordenadas para graficar, metadatos y pesos. El propio grafo puede tener estos atributos también (por ejemplo, un nombre, que se mostrará en ``print`` o :meth:`Graph.summary`). En cierto sentido, cada :class:`Graph`, vértice y arista pueden utilizarse como un diccionario de Python para almacenar y recuperar estos atributos. + +Para demostrar el uso de los atributos, creemos una red social sencilla:: + + >>> g = ig.Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)]) + +Cada vértice representa una persona, por lo que queremos almacenar nombres, edades y géneros:: + + >>> g.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"] + >>> g.vs["age"] = [25, 31, 18, 47, 22, 23, 50] + >>> g.vs["gender"] = ["f", "m", "f", "m", "f", "m", "m"] + >>> g.es["is_formal"] = [False, False, True, True, True, False, True, False, False] + +:attr:`Graph.vs` y :attr:`Graph.es` son la forma estándar de obtener una secuencia de todos los vértices y aristas respectivamente. El valor debe ser una lista con la misma longitud que los vértices (para :attr:`Graph.vs`) o aristas (para :attr:`Graph.es`). Esto asigna un atributo a *todos* los vértices/aristas a la vez. + +Para asignar o modificar un atributo para un solo vértice/borde, puedes hacer lo siguiente:: + + >>> g.es[0]["is_formal"] = True + +De hecho, un solo vértice se representa mediante la clase :class:`Vertex`, y una sola arista mediante :class:`Edge`. Ambos, junto con :class:`Graph`, pueden ser tecleados como un diccionario para establecer atributos, por ejemplo, para añadir una fecha al grafo:: + + >>> g["date"] = "2009-01-10" + >>> print(g["date"]) + 2009-01-10 + +Para recuperar un diccionario de atributos, puedes utilizar :meth:`Graph.attributes`, :meth:`Vertex.attributes` y :meth:`Edge.attributes`. + +Además, cada :class:`Vertex` tiene una propiedad especial, :attr:`Vertex.index`, que se utiliza para averiguar el ID de un vértice. Cada :class:`Edge` tiene :attr:`Edge.index` más dos propiedades adicionales, :attr:`Edge.source` y :attr:`Edge.target`, que se utilizan para encontrar los IDs de los vértices conectados por esta arista. Para obtener ambas propiedades a la vez, puedes utilizar :attr:`Edge.tuple`. + +Para asignar atributos a un subconjunto de vértices o aristas, puedes utilizar el corte:: + + >>> g.es[:1]["is_formal"] = True + +La salida de ``g.es[:1]`` es una instancia de :class:`~seq.EdgeSeq`, mientras que :class:`~seq.VertexSeq` es la clase equivalente que representa subconjuntos de vértices. + +Para eliminar atributos, puedes utilizar ``del``, por ejemplo:: + + >>> g.vs[3]["foo"] = "bar" + >>> g.vs["foo"] + [None, None, None, 'bar', None, None, None] + >>> del g.vs["foo"] + >>> g.vs["foo"] + Traceback (most recent call last): + File "", line 25, in + KeyError: 'Attribute does not exist' + +.. warning:: + Los atributos pueden ser objetos arbitrarios de Python, pero si está guardando grafos en un + archivo, sólo se conservarán los atributos de cadena ("string") y numéricos. Consulte el + módulo :mod:`pickle` de la biblioteca estándar de Python si busca una forma de guardar otros + tipos de atributos. Puede hacer un pickle de sus atributos individualmente, almacenarlos como + cadenas y guardarlos, o puedes hacer un pickle de todo el :class:`Graph` si sabes que quieres + cargar el grafo en Python. + + +Propiedades estructurales de los grafos +======================================= + +Además de las funciones simples de manipulación de grafos y atributos descritas anteriormente, |igraph| proporciona un amplio conjunto de métodos para calcular varias propiedades estructurales de los grafos. Está más allá del alcance de este tutorial documentar todos ellos, por lo que esta sección sólo presentará algunos de ellos con fines ilustrativos. Trabajaremos con la pequeña red social que construimos en la sección anterior. + +Probablemente, la propiedad más sencilla en la que se puede pensar es el "grado del vértice" (:dfn:`vertex degree`). El grado de un vértice es igual al número de aristas incidentes a él. En el caso de los grafos dirigidos, también podemos definir el ``grado de entrada`` (:dfn:`in-degree`, el número de aristas que apuntan hacia el vértice) y el ``grado de salida`` (:dfn:`out-degree`, el número de aristas que se originan en el vértice):: + + >>> g.degree() + [3, 1, 4, 3, 2, 3, 2] + +Si el grafo fuera dirigido, habríamos podido calcular los grados de entrada y salida por separado utilizando ``g.degree(mode="in")`` y ``g.degree(mode="out")``. También puedes usar un único ID de un vértice o una lista de ID de los vértices a :meth:`~Graph.degree` si quieres calcular los grados sólo para un subconjunto de vértices:: + + >>> g.degree(6) + 2 + >>> g.degree([2,3,4]) + [4, 3, 2] + +Este procedimiento se aplica a la mayoría de las propiedades estructurales que |igraph| puede calcular. Para las propiedades de los vértices, los métodos aceptan un ID o una lista de IDs de los vértices (y si se omiten, el valor predeterminado es el conjunto de todos los vértices). Para las propiedades de las aristas, los métodos también aceptan un único ID de o una lista de IDs de aristas. En lugar de una lista de IDs, también puedes proporcionar una instancia :class:`VertexSeq` o una instancia :class:`EdgeSeq` apropiadamente. Más adelante, en el próximo capítulo "consulta de vértices y aristas", aprenderás a restringirlos exactamente a los vértices o aristas que quieras. + +.. note:: + + Para algunos casos, no tiene sentido realizar el calculo sólo para unos pocos vértices o + aristas en lugar de todo el grafo, ya que de todas formas se tardaría el mismo tiempo. En + este caso, los métodos no aceptan IDs de vértices o aristas, pero se puede restringir la + lista resultante más tarde usando operadores estándar de indexación y de corte. Un ejemplo de + ello es la centralidad de los vectores propios (:meth:`Graph.evcent()`) + +Además de los grados, |igraph| incluye rutinas integradas para calcular muchas otras propiedades de centralidad, como la intermediación de vértices y aristas o el PageRank de Google (:meth:`Graph.pagerank`), por nombrar algunas. Aquí sólo ilustramos la interrelación de aristas:: + + >>> g.edge_betweenness() + [6.0, 6.0, 4.0, 2.0, 4.0, 3.0, 4.0, 3.0. 4.0] + +Ahora también podemos averiguar qué conexiones tienen la mayor centralidad de intermediación +con un poco de magia de Python:: + + >>> ebs = g.edge_betweenness() + >>> max_eb = max(ebs) + >>> [g.es[idx].tuple for idx, eb in enumerate(ebs) if eb == max_eb] + [(0, 1), (0, 2)] + +La mayoría de las propiedades estructurales también pueden ser obtenidas para un subconjunto de vértices o aristas o para un solo vértice o arista llamando al método apropiado de la clase :class:`VertexSeq` o :class:`EdgeSeq` de interés:: + + >>> g.vs.degree() + [3, 1, 4, 3, 2, 3, 2] + >>> g.es.edge_betweenness() + [6.0, 6.0, 4.0, 2.0, 4.0, 3.0, 4.0, 3.0. 4.0] + >>> g.vs[2].degree() + 4 + +Busqueda de vértices y aristas basada en atributos +================================================== + +Selección de vértices y aristas +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Tomando como ejemplo la red social anterirormente creada, te gustaría averiguar quién tiene el mayor grado o centralidad de intermediación. Puedes hacerlo con las herramientas presentadas hasta ahora y conocimientos básicos de Python, pero como es una tarea común seleccionar vértices y aristas basándose en atributos o propiedades estructurales, |igraph| te ofrece una forma más fácil de hacerlo:: + + >>> g.vs.select(_degree=g.maxdegree())["name"] + ['Claire'] + +La sintaxis puede parecer un poco rara a primera vista, así que vamos a tratar de interpretarla paso a paso. meth:`~VertexSeq.select` es un método de :class:`VertexSeq` y su único propósito es filtrar un :class:`VertexSeq` basándose en las propiedades de los vértices individuales. La forma en que filtra los vértices depende de sus argumentos posicionales y de palabras clave. Los argumentos posicionales (los que no tienen un nombre explícito como ``_degree`` siempre se procesan antes que los argumentos de palabra clave de la siguiente manera: + +- Si el primer argumento posicional es ``None``, se devuelve una secuencia vacía (que no contiene vértices):: + + >>> seq = g.vs.select(None) + >>> len(seq) + 0 + +- Si el primer argumento posicional es un objeto invocable (es decir, una función, un método vinculado o cualquier cosa que se comporte como una función), el objeto será llamado para cada vértice que esté actualmente en la secuencia. Si la función devuelve ``True``, el vértice será incluido, en caso contrario será excluido:: + + >>> graph = ig.Graph.Full(10) + >>> only_odd_vertices = graph.vs.select(lambda vertex: vertex.index % 2 == 1) + >>> len(only_odd_vertices) + 5 + +- Si el primer argumento posicional es un iterable (es decir, una lista, un generador o cualquier cosa sobre la que se pueda iterar), *debe* devolver enteros y estos enteros se considerarán como índices del conjunto de vértices actual (que *no* es necesariamente todo el grafo). Sólo se incluirán en el conjunto de vértices filtrados los vértices que coincidan con los índices dados. Los numero flotantes, las cadenas y los ID de vértices no válidos seran omitidos:: + + >>> seq = graph.vs.select([2, 3, 7]) + >>> len(seq) + 3 + >>> [v.index for v in seq] + [2, 3, 7] + >>> seq = seq.select([0, 2]) # filtering an existing vertex set + >>> [v.index for v in seq] + [2, 7] + >>> seq = graph.vs.select([2, 3, 7, "foo", 3.5]) + >>> len(seq) + 3 + +- Si el primer argumento posicional es un número entero, se espera que todos los demás argumentos sean también números enteros y se interpretan como índices del conjunto de vértices actual. Esto solo es "azucar sintáctica", se podría conseguir un efecto equivalente pasando una lista como primer argumento posicional, de esta forma se pueden omitir los corchetes:: + + >>> seq = graph.vs.select(2, 3, 7) + >>> len(seq) + 3 + +Los argumentos clave ("keyword argument") pueden utilizarse para filtrar los vértices en función de sus atributos o sus propiedades estructurales. El nombre de cada argumento clave consiste como máximo de dos partes: el nombre del atributo o propiedad estructural y el operador de filtrado. El operador puede omitirse; en ese caso, automáticamente se asume el operador de igualdad. Las posibilidades son las siguientes (donde *name* indica el nombre del atributo o propiedad): + +================ ================================================================ +Keyword argument Significado +================ ================================================================ +``name_eq`` El valor del atributo/propiedad debe ser *igual* a +---------------- ---------------------------------------------------------------- +``name_ne`` El valor del atributo/propiedad debe *no ser igual* a +---------------- ---------------------------------------------------------------- +``name_lt`` El valor del atributo/propiedad debe ser *menos* que +---------------- ---------------------------------------------------------------- +``name_le`` El valor del atributo/propiedad debe ser *inferior o igual a* +---------------- ---------------------------------------------------------------- +``name_gt`` El valor del atributo/propiedad debe ser *mayor que* +---------------- ---------------------------------------------------------------- +``name_ge`` El valor del atributo/propiedad debe ser *mayor o igual a* +---------------- ---------------------------------------------------------------- +``name_in`` El valor del atributo/propiedad debe estar *incluido en*, el cual tiene que ser + una secuencia en este caso +---------------- ---------------------------------------------------------------- +``name_notin`` El valor del atributo/propiedad debe *no estar incluido en* , + el cual tiene que ser una secuencia en este caso +================ ================================================================ + +Por ejemplo, el siguiente comando te da las personas menores de 30 años en nuestra red social imaginaria:: + + >>> g.vs.select(age_lt=30) + +.. note:: + Debido a las restricciones sintácticas de Python, no se puede utilizar la sintaxis más + sencilla de ``g.vs.select(edad < 30)``, ya que en Python sólo se permite que aparezca el + operador de igualdad en una lista de argumentos. + +Para ahorrarte algo de tecleo, puedes incluso omitir el método :meth:`~VertexSeq.select` si +desea:: + + >>> g.vs(age_lt=30) + +También hay algunas propiedades estructurales especiales para seleccionar los aristas: + +- Utilizando ``_source`` or ``_from`` en función de los vértices de donde se originan las aristas. Por ejemplo, para seleccionar todas las aristas procedentes de Claire (que tiene el índice de vértice 2):: + + >>> g.es.select(_source=2) + +- Usar los filtros ``_target`` o ``_to`` en base a los vértices de destino. Esto es diferente de ``_source`` and ``_from`` si el grafo es dirigido. + +- ``_within`` toma un objeto :class:`VertexSeq` o un set de vértices y selecciona todos los aristas que se originan y terminan en un determinado set de vértices. Por ejemplo, la siguiente expresión selecciona todos los aristas entre Claire (índice 2), Dennis (índice 3) y Esther (índice 4):: + + >>> g.es.select(_within=[2,3,4]) + +- ``_between`` toma una tupla que consiste en dos objetos :class:`VertexSeq` o una listas que contienen los indices de los vértices o un objeto :class:`Vertex` y selecciona todas las aristas que se originan en uno de los conjuntos y terminan en el otro. Por ejemplo, para seleccionar todas las aristas que conectan a los hombres con las mujeres:: + + >>> men = g.vs.select(gender="m") + >>> women = g.vs.select(gender="f") + >>> g.es.select(_between=(men, women)) + +Encontrar un solo vértice o arista con algunas propiedades +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +En muchos casos buscamos un solo vértice o arista de un grafo con algunas propiedades, sin importar cuál de las coincidencias se devuelve, ya sea si éxiste mútliples coincidencias, o bien sabemos de antemano que sólo habrá una coincidencia. Un ejemplo típico es buscar vértices por su nombre en la propiedad ``name``. Los objetos :class:`VertexSeq` y :class:`EdgeSeq` proveen el método :meth:`~VertexSeq.find` para esos casos. Esté método funciona de manera similar a :meth:`~VertexSeq.select`, pero devuelve solo la primer coincidencia si hay multiples resultados, y señala una excepción si no se encuentra ninguna coincidencia. Por ejemplo, para buscar el vértice correspondiente a Claire, se puede hacer lo siguiente:: + + >>> claire = g.vs.find(name="Claire") + >>> type(claire) + igraph.Vertex + >>> claire.index + 2 + +La búsqueda de un nombre desconocido dará lugar a una excepción:: + + >>> g.vs.find(name="Joe") + Traceback (most recent call last): + File "", line 1, in + ValueError: no such vertex + +Búsqueda de vértices por nombres +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Buscar vértices por su nombre es una operación muy común, y normalmente es mucho más fácil recordar los nombres de los vértices de un grafo que sus IDs. Para ello, |igraph| trata el atributo ``name`` de los vértices de forma especial; se indexan de forma que los vértices se pueden buscar por sus nombre. Para hacer las cosas incluso más fácil, |igraph| acepta nombres de vértices (casi) en cualquier lugar dónde se espere especificar un ID de un vérice, e incluso, acepta colecciones (tuplas,listas,etc.) de nombres de vértices dónde sea que se esperé una lista de IDs de vértices. Por ejemplo, puedes buscar el grado (número de conexiones) de Dennis de la siguiente manera:: + + >>> g.degree("Dennis") + 3 + +o alternativamente:: + + >>> g.vs.find("Dennis").degree() + 3 + +El mapeo entre los nombres de los vértices y los IDs es mantenido de forma transparente por |igraph| en segundo plano; cada vez que el grafo cambia, |igraph| también actualiza el mapeo interno. Sin embargo, la singularidad de los nombres de los vértices *no* se impone; puedes crear fácilmente un grafo en el que dos vértices tengan el mismo nombre, pero igraph sólo devolverá uno de ellos cuando los busques por nombres, el otro sólo estará disponible por su índice. + +Tratar un grafo como una matriz de adyacencia +============================================= + +La matriz de adyacencia es otra forma de formar un grafo. En la matriz de adyacencia, las filas y columnas están etiquetadas por los vértices del grafo: los elementos de la matriz indican si los vértices *i* y *j* tienen una arista común (*i, j*). La matriz de adyacencia del grafo de nuestra red social imaginaria es:: + + >>> g.get_adjacency() + Matrix([ + [0, 1, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 1, 1, 1, 0], + [0, 0, 1, 0, 1, 0, 1], + [0, 0, 1, 1, 0, 0, 0], + [1, 0, 1, 0, 0, 0, 1], + [0, 0, 0, 1, 0, 1, 0] + ]) + +Por ejemplo, Claire (``[1, 0, 0, 1, 1, 1, 0]``) está directamente conectada con Alice (que tiene el índice 0), Dennis (índice 3), Esther (índice 4) y Frank (índice 5), pero no con Bob (índice 1) ni con George (índice 6). + +Diseños ("layouts") y graficar +============================== + +Un grafo es un objeto matemático abstracto sin una representación específica en el espacio 2D o 3D. Esto significa que cuando queremos visualizar un grafo, tenemos que encontrar primero un trazado de los vértices a las coordenadas en el espacio bidimensional o tridimensional, preferiblemente de una manera que sea agradable a la vista. Una rama separada de la teoría de grafos, denominada dibujo de grafos, trata de resolver este problema mediante varios algoritmos de disposición de grafos. igraph implementa varios algoritmos de diseño y también es capaz de dibujarlos en la pantalla o en un archivo PDF, PNG o SVG utilizando la `libreria Cairo `_. + +.. important:: + + Para seguir los ejemplos de esta sección, se requieren de la librería Cairo en Python o + matplotlib. + +Algoritmos de diseños ("layouts") +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Los métodos de diseño en |igraph| se encuentran en el objeto :class:`Graph`, y siempre comienzan con ``layout_``. La siguiente tabla los resume: + +==================================== =============== ============================================= +Method name Short name Algorithm description +==================================== =============== ============================================= +``layout_circle`` ``circle``, Disposición determinista que coloca los + ``circular`` vértices en un círculo +------------------------------------ --------------- --------------------------------------------- +``layout_drl`` ``drl`` El algoritmo [Distributed Recursive Layout] + para grafos grandes +------------------------------------ --------------- --------------------------------------------- +``layout_fruchterman_reingold`` ``fr`` El algoritmo dirigido Fruchterman-Reingold +------------------------------------ --------------- --------------------------------------------- +``layout_fruchterman_reingold_3d`` ``fr3d``, El algoritmo dirigido Fruchterman-Reingold + ``fr_3d`` en tres dimensiones +------------------------------------ --------------- --------------------------------------------- +``layout_kamada_kawai`` ``kk`` El algoritmo dirigido Kamada-Kawai +------------------------------------ --------------- --------------------------------------------- +``layout_kamada_kawai_3d`` ``kk3d``, El algoritmo dirigido Kamada-Kawai + ``kk_3d`` en tres dimensiones +------------------------------------ --------------- --------------------------------------------- +``layout_lgl`` ``large``, El algoritmo [Large Graph Layout] para + ``lgl``, grafos grandes + ``large_graph`` +------------------------------------ --------------- --------------------------------------------- +``layout_random`` ``random`` Coloca los vértices de forma totalmente aleatoria +------------------------------------ --------------- --------------------------------------------- +``layout_random_3d`` ``random_3d`` Coloca los vértices de forma totalmente aleatoria en 3D +------------------------------------ --------------- --------------------------------------------- +``layout_reingold_tilford`` ``rt``, Diseño de árbol de Reingold-Tilford, útil + ``tree`` para grafos (casi) arbóreos +------------------------------------ --------------- --------------------------------------------- +``layout_reingold_tilford_circular`` ``rt_circular`` Diseño de árbol de Reingold-Tilford con una + post-transformación de coordenadas polares, + ``tree`` útil para grafos (casi) arbóreos +------------------------------------ --------------- --------------------------------------------- +``layout_sphere`` ``sphere``, Disposición determinista que coloca los vértices + ``spherical``, de manera uniforme en la superficie de una esfera + ``circular_3d`` +==================================== =============== ============================================= + +.. _Distributed Recursive Layout: https://www.osti.gov/doecode/biblio/54626 +.. _Large Graph Layout: https://sourceforge.net/projects/lgl/ + +Los algoritmos de diseño pueden ser llamados directamente o utilizando :meth:`~Graph.layout`:: + + >>> layout = g.layout_kamada_kawai() + >>> layout = g.layout("kamada_kawai") + +El primer argumento del método :meth:`~Graph.layout` debe ser el nombre corto del algoritmo de diseño (mirar la tabla anterior). Todos los demás argumentos posicionales y de palabra clave se pasan intactos al método de diseño elegido. Por ejemplo, las dos llamadas siguientes son completamente equivalentes:: + + >>> layout = g.layout_reingold_tilford(root=[2]) + >>> layout = g.layout("rt", [2]) + +Los métodos de diseño devuelven un objeto :class:`~layout.Layout` que se comporta principalmente como una lista de listas. Cada entrada de la lista en un objeto :class:`~layout.Layout` corresponde a un vértice en el grafo original y contiene las coordenadas del vértice en el espacio 2D o 3D. Los objetos :class:`~layout.Layout` también contienen algunos métodos útiles para traducir, escalar o rotar las coordenadas en un lote. Sin embargo, la principal utilidad de los objetos :class:`~layout.Layout` es que puedes pasarlos a la función :func:`~drawing.plot` junto con el grafo para obtener un dibujo en 2D. + +Dibujar un grafo utilizando un diseño ("layout") +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Por ejemplo, podemos trazar nuestra red social imaginaria con el algoritmo de distribución Kamada-Kawai de la siguiente manera:: + + >>> layout = g.layout("kk") + >>> ig.plot(g, layout=layout) + +Esto debería abrir un visor de imágenes externo que muestre una representación visual de la red, algo parecido a lo que aparece en la siguiente figura (aunque la colocación exacta de los nodos puede ser diferente en su máquina, ya que la disposición no es determinista): + +.. figure:: figures/tutorial_social_network_1.png + :alt: The visual representation of our social network (Cairo backend) + :align: center + +Nuestra red social con el algoritmo de distribución Kamada-Kawai + +Si prefiere utilizar `matplotlib`_ como motor de trazado, cree un eje y utilice el argumento ``target``:: + + >>> import matplotlib.pyplot as plt + >>> fig, ax = plt.subplots() + >>> ig.plot(g, layout=layout, target=ax) + +.. figure:: figures/tutorial_social_network_1_mpl.png + :alt: The visual representation of our social network (matplotlib backend) + :align: center + +Hmm, esto no es demasiado bonito hasta ahora. Una adición trivial sería usar los nombres como etiquetas de los vértices y colorear los vértices según el género. Las etiquetas de los vértices se toman del atributo ``label`` por defecto y los colores de los vértices se determinan por el atributo ``color``:: + + >>> g.vs["label"] = g.vs["name"] + >>> color_dict = {"m": "blue", "f": "pink"} + >>> g.vs["color"] = [color_dict[gender] for gender in g.vs["gender"]] + >>> ig.plot(g, layout=layout, bbox=(300, 300), margin=20) # Cairo backend + >>> ig.plot(g, layout=layout, bbox=(300, 300), margin=20, target=ax) # matplotlib backend + +Tenga en cuenta que aquí simplemente estamos reutilizando el objeto de diseño anterior, pero también hemos especificado que necesitamos un gráfico más pequeño (300 x 300 píxeles) y un margen mayor alrededor del grafo para que quepan las etiquetas (20 píxeles). El resultado es: + +.. figure:: figures/tutorial_social_network_2.png + :alt: The visual representation of our social network - with names and genders + :align: center + +Nuestra red social - con nombres como etiquetas y géneros como colores + +y para matplotlib: + +.. figure:: figures/tutorial_social_network_2_mpl.png + :alt: The visual representation of our social network - with names and genders + :align: center + +En lugar de especificar las propiedades visuales como atributos de vértices y aristas, también puedes darlas como argumentos a :func:`~drawing.plot`:: + + >>> color_dict = {"m": "blue", "f": "pink"} + >>> ig.plot(g, layout=layout, vertex_color=[color_dict[gender] for gender in g.vs["gender"]]) + +Este último enfoque es preferible si quiere mantener las propiedades de la representación visual de su gráfico separadas del propio gráfico. Puedes simplemente crear un diccionario de Python que contenga los argumentos que contenga las palabras clave que pasarias a la función :func:`~drawing.plot` y luego usar el doble asterisco (``**``) para pasar tus atributos de estilo específicos a :func:`~drawing.plot`:: + + >>> visual_style = {} + >>> visual_style["vertex_size"] = 20 + >>> visual_style["vertex_color"] = [color_dict[gender] for gender in g.vs["gender"]] + >>> visual_style["vertex_label"] = g.vs["name"] + >>> visual_style["edge_width"] = [1 + 2 * int(is_formal) for is_formal in g.es["is_formal"]] + >>> visual_style["layout"] = layout + >>> visual_style["bbox"] = (300, 300) + >>> visual_style["margin"] = 20 + >>> ig.plot(g, **visual_style) + +El gráfico final muestra los vínculos formales con líneas gruesas y los informales con líneas finas: + +.. figure:: figures/tutorial_social_network_3.png + :alt: The visual representation of our social network - with names, genders and formal ties + :align: center + + Nuestra red social - también muestra qué vínculos son formales + +Para resumirlo todo: hay propiedades especiales de vértices y aristas que corresponden a la representación visual del grafo. Estos atributos anulan la configuración por defecto de |igraph| (es decir, el color, el peso, el nombre, la forma, el diseño, etc.). Las dos tablas siguientes resumen los atributos visuales más utilizados para los vértices y las aristas, respectivamente: + +Atributos de los vértices que controlan los gráficos +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +=============== ====================== ========================================== +Attribute name Keyword argument Purpose +=============== ====================== ========================================== +``color`` ``vertex_color`` Color del vertice +--------------- ---------------------- ------------------------------------------ +``font`` ``vertex_font`` Familia tipográfica del vértice +--------------- ---------------------- ------------------------------------------ +``label`` ``vertex_label`` Etiqueta del vértice. +--------------- ---------------------- ------------------------------------------ +``label_angle`` ``vertex_label_angle`` Define la posición de las etiquetas de los + vértices, en relación con el centro de los + mismos. Se interpreta como un ángulo en + radianes, cero significa 'a la derecha'. +--------------- ---------------------- ------------------------------------------ +``label_color`` ``vertex_label_color`` Color de la etiqueta del vértice +--------------- ---------------------- ------------------------------------------ +``label_dist`` ``vertex_label_dist`` Distancia de la etiqueta del vértice, + en relación con el tamaño del vértice +--------------- ---------------------- ------------------------------------------ +``label_size`` ``vertex_label_size`` Tamaño de letra de la etiqueta de vértice +--------------- ---------------------- ------------------------------------------ +``order`` ``vertex_order`` Orden de dibujo de los vértices. Vértices + con un parámetro de orden menor se + dibujarán primero. +--------------- ---------------------- ------------------------------------------ +``shape`` ``vertex_shape`` La forma del vértice,. Algunas formas: + ``rectangle``, ``circle``, ``hidden``, + ``triangle-up``, ``triangle-down``. Ver + :data:`drawing.known_shapes`. +--------------- ---------------------- ------------------------------------------ +``size`` ``vertex_size`` El tamaño del vértice en pixels +=============== ====================== ========================================== + +Atributos de las aristas que controlan los gráficos +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +=============== ====================== ========================================== +Attribute name Keyword argument Purpose +=============== ====================== ========================================== +``color`` ``edge_color`` Color de la arista +--------------- ---------------------- ------------------------------------------ +``curved`` ``edge_curved`` la curvatura de la arista. Valores positivos + corresponden a aristas curvadas en sentido + contrario a las manecillas del reloj, valores + negativos lo contrario. Una curvatura cero + representa aristas rectas. ``True`` significa + una curvatura de 0.5, ``False`` es una + curvatura de cero. +--------------- ---------------------- ------------------------------------------ +``font`` ``edge_font`` Familia tipográfica del arista +--------------- ---------------------- ------------------------------------------ +``arrow_size`` ``edge_arrow_size`` Tamaño (longitud) de la punta de flecha del + arista si el grafo es dirigido, relativo a + 15 pixels. +--------------- ---------------------- ------------------------------------------ +``arrow_width`` ``edge_arrow_width`` El ancho de las flechas. Relativo a 10 + pixels. +--------------- ---------------------- ------------------------------------------ +``width`` ``edge_width`` Anchura del borde en píxeles +--------------- ---------------------- ------------------------------------------ +``label`` ``edge_label`` Si se especifica, añade una etiqueta al borde. +--------------- ---------------------- ------------------------------------------ +``background`` ``edge_background`` Si se especifica, añade una caja rectangular + alrededor de la etiqueta de borde (solo en ) + matplotlib) +--------------- ---------------------- ------------------------------------------ +``align_label`` ``edge_align_label`` Si es verdadero, gira la etiqueta de la + arista de forma que se alinee con la + dirección de la arista. Las etiquetas que + estarían al revés se voltean (sólo matplotlib). +=============== ====================== ========================================== + +Argumentos genéricos de ``plot()`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Estos ajustes se pueden especificar como argumentos de palabra clave a la función ``plot`` para controlar la apariencia general del gráfico. + +================ ================================================================ +Keyword argument Purpose +================ ================================================================ +``autocurve`` Determinación automática de la curvatura de las aristas en grafos + con múltiples aristas. El estandar es ``True`` para grafos + con menos de 10000 aristas y ``False`` para el caso contrario. +---------------- ---------------------------------------------------------------- +``bbox`` La caja delimitadora del gráfico. Debe ser una tupla que contenga + la anchura y la altura deseadas del gráfico. Por default el gráfico + tiene 600 pixels de ancho y 600 pixels de largo. +---------------- ---------------------------------------------------------------- +``layout`` El diseño que se va a utilizar. Puede ser una instancia de ``layout`` + una lista de tuplas que contengan coordenadas X-Y, o el nombre + un algoritmo de diseño. El valor por defecto es ``auto``, que + selecciona un algoritmo de diseño automáticamente basado en el tamaño + y la conectividad del grafo. +---------------- ---------------------------------------------------------------- +``margin`` La cantidad de espacio vacío debajo, encima, a la izquierda y + a la derecha del gráfico. +================ ================================================================ + +Especificación de colores en los gráficos +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +|igraph| entiende las siguientes especificaciones de color siempre que espera un color (por ejemplo, colores de aristas, vértices o etiquetas en los respectivos atributos): + +***Nombres de colores X11*** + +Consulta la `lista de nombres de colores X11 `_ en Wikipedia para ver la lista completa. Los nombres de los colores no distinguen entre mayúsculas y minúsculas en |igraph|, por lo que "DarkBLue" puede escribirse también como "darkblue". + +***Especificación del color en la sintaxis CSS*** + +Se trata de una cadena según uno de los siguientes formatos (donde *R*, *G* y *B* denotan los componentes rojo, verde y azul, respectivamente): + +- ``#RRGGBB``, los componentes van de 0 a 255 en formato hexadecimal. Ejemplo: ``"#0088ff"`` +- ``#RGB``, los componentes van de 0 a 15 en formato hexadecimal. Ejemplo: ``"#08f"`` +- ``rgb(R, G, B)``, los componentes van de 0 a 255 o de 0% a 100%. Ejemplo: ``"rgb(0, 127, 255)"`` o ``"rgb(0%, 50%, 100%)"``. + +Guardar gráficos +^^^^^^^^^^^^^^^^ + +|igraph| puede usarse para crear gráficos de calidad de publicación solicitando la función :func:`~drawing.plot` que guarde el gráfico en un archivo en lugar de mostrarlo en pantalla. Para ello, basta con pasar el nombre del archivo destino como argumento adicional después del grafo mismo. El formato preferido se deduce de la extensión. |igraph| puede guardar en cualquier cosa que soporte Cairo, incluyendo archivos SVG, PDF y PNG. Los archivos SVG o PDF pueden ser convertidos posteriormente al formato PostScript (``.ps``) o PostScript encapsulado (``.eps``) si lo prefieres, mientras que los archivos PNG pueden ser convertidos a TIF (``.tif``):: + + >>> ig.plot(g, "social_network.pdf", **visual_style) + +Si estas usando matplotlib, puedes guardar el gŕafico como de costumbre:: + + >>> fig, ax = plt.subplots() + >>> ig.plot(g, **visual_style) + >>> fig.savefig("social_network.pdf") + +Muchos formatos de archivos son admitidos por matplotlib. + +|igraph| y el mundo exterior +============================ + +Ningún módulo de grafos estaría completo sin algún tipo de funcionalidad de importación/exportación que permita al paquete comunicarse con programas y kits de herramientas externos. |igraph| no es una excepción: proporciona funciones para leer los formatos de grafos más comunes y para guardar objetos :class:`Graph` en archivos que obedezcan estas especificaciones de formato. La siguiente tabla resume los formatos que igraph puede leer o escribir: + +================ ============= ============================ ============================= +Format Short name Reader method Writer method +================ ============= ============================ ============================= +Adjacency list ``lgl`` :meth:`Graph.Read_Lgl` :meth:`Graph.write_lgl` +(a.k.a. `LGL`_) +---------------- ------------- ---------------------------- ----------------------------- +Adjacency matrix ``adjacency`` :meth:`Graph.Read_Adjacency` :meth:`Graph.write_adjacency` +---------------- ------------- ---------------------------- ----------------------------- +DIMACS ``dimacs`` :meth:`Graph.Read_DIMACS` :meth:`Graph.write_dimacs` +---------------- ------------- ---------------------------- ----------------------------- +DL ``dl`` :meth:`Graph.Read_DL` not supported yet +---------------- ------------- ---------------------------- ----------------------------- +Edge list ``edgelist``, :meth:`Graph.Read_Edgelist` :meth:`Graph.write_edgelist` + ``edges``, + ``edge`` +---------------- ------------- ---------------------------- ----------------------------- +`GraphViz`_ ``graphviz``, not supported yet :meth:`Graph.write_dot` + ``dot`` +---------------- ------------- ---------------------------- ----------------------------- +GML ``gml`` :meth:`Graph.Read_GML` :meth:`Graph.write_gml` +---------------- ------------- ---------------------------- ----------------------------- +GraphML ``graphml`` :meth:`Graph.Read_GraphML` :meth:`Graph.write_graphml` +---------------- ------------- ---------------------------- ----------------------------- +Gzipped GraphML ``graphmlz`` :meth:`Graph.Read_GraphMLz` :meth:`Graph.write_graphmlz` +---------------- ------------- ---------------------------- ----------------------------- +LEDA ``leda`` not supported yet :meth:`Graph.write_leda` +---------------- ------------- ---------------------------- ----------------------------- +Labeled edgelist ``ncol`` :meth:`Graph.Read_Ncol` :meth:`Graph.write_ncol` +(a.k.a. `NCOL`_) +---------------- ------------- ---------------------------- ----------------------------- +`Pajek`_ format ``pajek``, :meth:`Graph.Read_Pajek` :meth:`Graph.write_pajek` + ``net`` +---------------- ------------- ---------------------------- ----------------------------- +Pickled graph ``pickle`` :meth:`Graph.Read_Pickle` :meth:`Graph.write_pickle` +================ ============= ============================ ============================= + +.. _GraphViz: https://www.graphviz.org +.. _LGL: https://lgl.sourceforge.net/#FileFormat +.. _NCOL: https://lgl.sourceforge.net/#FileFormat +.. _Pajek: http://mrvar.fdv.uni-lj.si/pajek/ + +Como ejercicio, descarga la representación gráfica del conocido `Estudio del club de karate de Zacarías `_ en formato graphml. Dado que se trata de un archivo GraphML, debe utilizar el método de lectura GraphML de la tabla anterior (asegúrese de utilizar la ruta adecuada al archivo descargado):: + + >>> karate = ig.Graph.Read_GraphML("zachary.graphml") + >>> ig.summary(karate) + IGRAPH UNW- 34 78 -- Zachary's karate club network + +Si quieres convertir el mismo grafo a, digamos, el formato de Pajek, puedes hacerlo con el método de la tabla anterior:: + + >>> karate.write_pajek("zachary.net") + +.. note:: + La mayoría de los formatos tienen sus propias limitaciones; por ejemplo, no todos pueden + almacenar atributos. Tu mejor opción es probablemente GraphML o GML si quieres guardar los + grafos de |igraph| en un formato que pueda ser leído desde un paquete externo y quieres + preservar los atributos numéricos y de cadena. La lista de aristas y NCOL también están bien + si no tienes atributos (aunque NCOL soporta nombres de vértices y pesos de aristas). Si no + quieres utilizar grafos fuera de |igraph|, pero quieres almacenarlos para una sesión + posterior, el formato de grafos ``pickled`` te garantza que obtendras exactamente el mismo + grafo. El formato de grafos ``pickled`` usa el modulo ``pickle`` de Python para guardar y + leer grafos. + +También existen dos métodos de ayuda: :func:`read` es un punto de entrada genérico para los métodos de lectura que intenta deducir el formato adecuado a partir de la extensión del archivo. :meth:`Graph.write` es lo contrario de :func:`read`: permite guardar un grafo en el que el formato preferido se deduce de nuevo de la extensión. La detección del formato de :func:`read` y :meth:`Graph.write` se puede anular mediante el argumento ``format`` de la palabra clave ("keyword"), la cual acepta los nombres cortos de los otros formatos de la tabla anterior:: + + >>> karate = ig.load("zachary.graphml") + >>> karate.write("zachary.net") + >>> karate.write("zachary.my_extension", format="gml") + +Dónde ir a continuación +======================= + +Este tutorial sólo ha arañado la superficie de lo que |igraph| puede hacer. Los planes a largo plazo son ampliar este tutorial para convertirlo en una documentación adecuada de estilo manual para igraph en los próximos capítulos. Un buen punto de partida es la documentación de la clase `Graph`. Si te quedas atascado, intenta preguntar primero en nuestro `Discourse group`_ - quizás haya alguien que pueda ayudarte inmediatamente. + +.. _Discourse group: https://igraph.discourse.group +.. _matplotlib: https://matplotlib.org/ +.. _IPython: https://ipython.readthedocs.io/en/stable/ +.. _Jupyter: https://jupyter.org/ + + + + + + + + + + + + From 709c6b1c99f271e21717e9b5f9e5f918d1e69300 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 14:05:47 +0000 Subject: [PATCH 011/681] build(deps): bump pypa/cibuildwheel from 2.12.0 to 2.12.1 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.12.0 to 2.12.1. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.12.0...v2.12.1) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5d6a795d..cf9edebae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.12.1 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" @@ -38,7 +38,7 @@ jobs: CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.12.1 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -63,7 +63,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.12.1 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -88,7 +88,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.12.1 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -155,7 +155,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.12.1 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -214,7 +214,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.12.0 + uses: pypa/cibuildwheel@v2.12.1 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From 79a7829ffbec5f3ae542b904b2d88217188a2b6e Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 14 Mar 2023 23:14:17 +0100 Subject: [PATCH 012/681] fix: VertexClustering.giant() now works with null graphs, closes #649 --- src/igraph/clustering.py | 7 +++++-- tests/test_decomposition.py | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/igraph/clustering.py b/src/igraph/clustering.py index c7270a52b..c4b345a47 100644 --- a/src/igraph/clustering.py +++ b/src/igraph/clustering.py @@ -427,8 +427,11 @@ def giant(self): @return: a copy of the largest cluster. """ ss = self.sizes() - max_size = max(ss) - return self.subgraph(ss.index(max_size)) + if ss: + max_size = max(ss) + return self.subgraph(ss.index(max_size)) + else: + return self._graph.copy() def __plot__(self, backend, context, *args, **kwds): """Plots the clustering to the given Cairo context or matplotlib Axes. diff --git a/tests/test_decomposition.py b/tests/test_decomposition.py index 8fe223a7f..a7ad5bd49 100644 --- a/tests/test_decomposition.py +++ b/tests/test_decomposition.py @@ -167,6 +167,13 @@ def testSizesWithNone(self): cl = VertexClustering(self.graph, [0, 0, 0, None, 1, 1, 2, None, 2, None]) self.assertTrue(cl.sizes() == [3, 2, 2]) + def testClusteringOfNullGraph(self): + null_graph = Graph() + cl = VertexClustering(null_graph, []) + self.assertTrue(cl.sizes() == []) + self.assertTrue(cl.giant().vcount() == 0) + self.assertTrue(cl.giant().ecount() == 0) + class CoverTests(unittest.TestCase): def setUp(self): From abd21c71848c70cd5efb4f1913b1f8a892a2fe80 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 14 Mar 2023 23:15:56 +0100 Subject: [PATCH 013/681] chore: updated changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65fa445a7..7dbf0e0a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ - `resolution` parameter is now correctly taken into account when calling `Graph.modularity()` +- `VertexClustering.giant()` now accepts the null graph. The giant component of + a null graph is the null graph according to our conventions. + ### Removed - Removed defunct `Graph.community_leading_eigenvector_naive()` method. Not a From 3334f535918b2ebd74e93b678c1a140a820bf477 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 15 Mar 2023 14:22:09 +0100 Subject: [PATCH 014/681] doc: fix title of Spanish tutorial to make it distinguishable from the English one in the sidebar --- doc/source/tutorial.es.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/tutorial.es.rst b/doc/source/tutorial.es.rst index a94945b63..d6e89d39c 100644 --- a/doc/source/tutorial.es.rst +++ b/doc/source/tutorial.es.rst @@ -4,9 +4,9 @@ .. currentmodule:: igraph -======== -Tutorial -======== +================== +Tutorial (Español) +================== Esta página es un tutorial detallado de las capacidades de |igraph| para Python. Para obtener una impresión rápida de lo que |igraph| puede hacer, consulte el :doc:`tutorials/quickstart`. Si aún no ha instalado |igraph|, siga las instrucciones de :doc:`install`. From e4bf36ffa2c7452877afdfb241a15641c13e738f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szabolcs=20Horv=C3=A1t?= Date: Thu, 16 Mar 2023 15:20:38 +0100 Subject: [PATCH 015/681] docs: improve linegraph() docs --- src/_igraph/graphobject.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 69f544187..5f27d40e3 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -14676,7 +14676,8 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "The line graph of a directed graph is slightly different: two vertices\n" "are connected by a directed edge iff the target of the first vertex's\n" "corresponding edge is the same as the source of the second vertex's\n" - "corresponding edge.\n" + "corresponding edge.\n\n" + "Edge M{i} in the original graph will map to vertex M{i} of the line graph.\n" }, /* interface to igraph_maxdegree */ From 72e427480e58d7813065818bd908b0e08c10cc0f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Sat, 18 Mar 2023 22:33:03 +0100 Subject: [PATCH 016/681] doc: increase spacing between parameters in parameter lists of the API docs, closes #648 --- doc/source/_pydoctor_templates/extra.css | 7 +++++++ doc/source/conf.py | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 doc/source/_pydoctor_templates/extra.css diff --git a/doc/source/_pydoctor_templates/extra.css b/doc/source/_pydoctor_templates/extra.css new file mode 100644 index 000000000..f5a70f56a --- /dev/null +++ b/doc/source/_pydoctor_templates/extra.css @@ -0,0 +1,7 @@ +/* increase spacing between parameters in a parameter list, and make sure + * that parameter names are aligned to the top */ +.fieldTable tr td { + padding: 3px 4px 10px 10px !important; + vertical-align: top; +} + diff --git a/doc/source/conf.py b/doc/source/conf.py index a31dba8b7..212b0a831 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -262,18 +262,19 @@ def get_pydoctor_html_outputdir(pydoctor_url_path): '--html-output=' + get_pydoctor_html_outputdir(pydoctor_url_path), #'--html-viewsource-base=https://github.com/igraph/python-igraph/tree/default', '--project-base-dir=' + _igraph_dir, - ] + '--template-dir=' + get_root_dir() + '/doc/source/_pydoctor_templates' +] # Using --no-sidebar option to skip the sidebar because the pydoctor output is # integrated in a smaller div with a custom CSS. if not is_inside_rtd: pydoctor_args.extend([ '--no-sidebar', - ]) + ]) else: pydoctor_args.extend([ '--theme=readthedocs', - ]) + ]) pydoctor_args.append(_igraph_dir) # RTD needs no postprocessing for pydoctor, while Jekyll does From 3431498a4a80cecc0960da5c2cc0279fd412206e Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 23 Mar 2023 09:33:36 +0100 Subject: [PATCH 017/681] feat: allow the plotting backend to be defined explicitly in plot() --- CHANGELOG.md | 3 +++ src/igraph/drawing/__init__.py | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dbf0e0a3..4b00f57ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ ### Added +- The `plot()` function now takes a `backend` keyword argument that can be used + to specify the plotting backend explicitly. + - The `VertexClustering` object returned from `Graph.community_leiden()` now contains an extra property named `quality` that stores the value of the internal quality function optimized by the algorithm. diff --git a/src/igraph/drawing/__init__.py b/src/igraph/drawing/__init__.py index eab1907eb..5ae708ccc 100644 --- a/src/igraph/drawing/__init__.py +++ b/src/igraph/drawing/__init__.py @@ -192,6 +192,10 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): argument has an effect only if igraph is run inside IPython and C{target} is C{None}. + @keyword backend: the plotting backend to use; one of C{"cairo"}, + C{"matplotlib"} or C{"plotly"}. C{None} means to try to decide the backend + from the plotting target and the default igraph configuration object. + @return: an appropriate L{CairoPlot} object for the Cairo backend, the Matplotlib C{Axes} object for the Matplotlib backend, and the C{Figure} object for the plotly backend. @@ -205,8 +209,13 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): cairo = find_cairo() plotly = find_plotly() - # Switch backend based on target (first) and config (second) - if hasattr(plt, "Axes") and isinstance(target, plt.Axes): + backend = kwds.pop("backend", None) + + # Switch backend based on target (first) and config (second) if it was not + # selected explicitly + if backend is not None: + pass + elif hasattr(plt, "Axes") and isinstance(target, plt.Axes): backend = "matplotlib" elif hasattr(plotly, "graph_objects") and isinstance( target, plotly.graph_objects.Figure @@ -218,7 +227,7 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): backend = Configuration.instance()["plotting.backend"] if backend not in VALID_BACKENDS: - raise ValueError("unknown plotting backend: {0!r}".format(backend)) + raise ValueError(f"unknown plotting backend: {backend!r}") if backend in ("matplotlib", "plotly"): # Choose palette From 6aef873764548d2fd614a156e4e9e91368b908b7 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 23 Mar 2023 09:34:57 +0100 Subject: [PATCH 018/681] fix: specify Cairo backend explicitly in Cairo plotting tests in case the default backend is overridden on the user's machine --- tests/drawing/cairo/test_graph.py | 36 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/drawing/cairo/test_graph.py b/tests/drawing/cairo/test_graph.py index eacec226d..eccd60618 100644 --- a/tests/drawing/cairo/test_graph.py +++ b/tests/drawing/cairo/test_graph.py @@ -15,14 +15,14 @@ cairo = find_cairo() -has_cairo = hasattr(cairo, 'version') +has_cairo = hasattr(cairo, "version") image_comparison = find_image_comparison() class GraphTestRunner(unittest.TestCase): @classmethod - def setUpClass(self): + def setUpClass(cls): if not has_cairo: raise unittest.SkipTest("cairo not found, skipping tests") result_image_folder.mkdir(parents=True, exist_ok=True) @@ -30,29 +30,30 @@ def setUpClass(self): @image_comparison(baseline_images=["graph_basic"]) def test_basic(self): g = Graph.Ring(5) - plot(g, target=result_image_folder / 'graph_basic.png') + plot(g, target=result_image_folder / "graph_basic.png", backend="cairo") @image_comparison(baseline_images=["graph_directed"]) def test_directed(self): g = Graph.Ring(5, directed=True) - plot(g, target=result_image_folder / 'graph_directed.png') + plot(g, target=result_image_folder / "graph_directed.png", backend="cairo") @image_comparison(baseline_images=["graph_mark_groups_directed"]) def test_mark_groups(self): g = Graph.Ring(5, directed=True) plot( g, - target=result_image_folder / 'graph_mark_groups_directed.png', - mark_groups=True) + target=result_image_folder / "graph_mark_groups_directed.png", + backend="cairo", + mark_groups=True, + ) - @image_comparison( - baseline_images=["graph_mark_groups_squares_directed"] - ) + @image_comparison(baseline_images=["graph_mark_groups_squares_directed"]) def test_mark_groups_squares(self): g = Graph.Ring(5, directed=True) plot( g, - target=result_image_folder / 'graph_mark_groups_squares_directed.png', + target=result_image_folder / "graph_mark_groups_squares_directed.png", + backend="cairo", mark_groups=True, vertex_shape="square", ) @@ -60,7 +61,7 @@ def test_mark_groups_squares(self): class ClusteringTestRunner(unittest.TestCase): @classmethod - def setUpClass(self): + def setUpClass(cls): if not has_cairo: raise unittest.SkipTest("cairo not found, skipping tests") result_image_folder.mkdir(parents=True, exist_ok=True) @@ -71,7 +72,8 @@ def test_clustering_directed_small(self): clu = VertexClustering(g, [0] * 5) plot( clu, - target=result_image_folder / 'clustering_directed.png', + backend="cairo", + target=result_image_folder / "clustering_directed.png", mark_groups=True, ) @@ -79,11 +81,12 @@ def test_clustering_directed_small(self): def test_clustering_directed_large(self): g = Graph.Ring(50, directed=True) clu = VertexClustering(g, [0] * 3 + [1] * 17 + [2] * 30) - layout = [(x*2.5, y*2.5) for x, y in g.layout("circle")] + layout = [(x * 2.5, y * 2.5) for x, y in g.layout("circle")] plot( clu, + backend="cairo", layout=layout, - target=result_image_folder / 'clustering_directed_large.png', + target=result_image_folder / "clustering_directed_large.png", mark_groups=True, ) @@ -91,10 +94,7 @@ def test_clustering_directed_large(self): def suite(): graph = unittest.defaultTestLoader.loadTestsFromTestCase(GraphTestRunner) clustering = unittest.defaultTestLoader.loadTestsFromTestCase(ClusteringTestRunner) - return unittest.TestSuite([ - graph, - clustering, - ]) + return unittest.TestSuite([graph, clustering]) def test(): From f01cb4202420111a145e9cf97e12263839804344 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 23 Mar 2023 10:44:51 +0100 Subject: [PATCH 019/681] test: make Cairo drawing tests deterministic --- .../baseline_images/clustering_directed.png | Bin 31493 -> 33794 bytes .../cairo/baseline_images/graph_basic.png | Bin 16701 -> 18287 bytes .../cairo/baseline_images/graph_directed.png | Bin 17353 -> 19005 bytes .../graph_mark_groups_directed.png | Bin 17353 -> 19005 bytes .../graph_mark_groups_squares_directed.png | Bin 14924 -> 16548 bytes tests/drawing/cairo/test_graph.py | 10 +++++++--- 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/drawing/cairo/baseline_images/clustering_directed.png b/tests/drawing/cairo/baseline_images/clustering_directed.png index 712f1b95f8fdc22b4eb1b2683143634a81146a14..3971f801c44b9b241ad55579c2d37825480b32bf 100644 GIT binary patch literal 33794 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

OH9Qh)~+=xe9%^+}N1@mpJtyPbtu)y+r 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 G=l=)LhSQS( literal 31493 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

3&d%}xZZW+`g_A~m_IP753kl3u7nInA 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 diff --git a/tests/drawing/cairo/baseline_images/graph_directed.png b/tests/drawing/cairo/baseline_images/graph_directed.png index 83d6e37647f1b6fe90f88f080974afea8573013d..77106eb56d46320be55f68af9f3cc345a7d8513a 100644 GIT binary patch literal 19005 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 Ogs#>>&Bq$HSN=bKBxy4M literal 17353 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 z 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 mMB}CUMZX3{Qm%)pbLxu diff --git a/tests/drawing/cairo/baseline_images/graph_mark_groups_directed.png b/tests/drawing/cairo/baseline_images/graph_mark_groups_directed.png index 83d6e37647f1b6fe90f88f080974afea8573013d..77106eb56d46320be55f68af9f3cc345a7d8513a 100644 GIT binary patch literal 19005 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 Ogs#>>&Bq$HSN=bKBxy4M literal 17353 zcmZX+2|QNayFR`t5(=3WN~WTSLS)Dr5*bRSgcJ%PL?jd?Bqc*cL`8;(gv?4RMP$mX z%ww5n|7&~C_x#TP9Pj7-RL`^b+H0?M57&L&*Ak$krM8KdiZJ>!BE;?C9h z?Z!h(LN7fb;n%|uMN=tT{l;*SvwQdMId;rsYQc^nWd8<#yAA$Lou1BhQ-hnh_A_!b zi!-Uv#P3#Infu+PxcXC4#8&_C;pQ_XFP8Y#gWB8O^77K=|GYmeR=8b|Pe+brhtFc& zpi7P7e9u&Q`2&yZtYR7upY_Yj?-bI0!oq6#+Ro<$USQUBexg^&tdqgXIqucRpbYgB znMwU=)5EI^L#bBU)WU&$>m41gzjO2M`w-xkVnWw3n8rUnGo@MJ_|&p0!fF$>aL{Ej zVm8yd=E?BttoQHK_M4&nS0bKu_x6r!$6P4Z^EsG_AsE(q%z7PESjjlxY4D0)eq?M# zL+f5{Zmy99g;i-FqmpH=L#NhJtyk6BzTx$e&$b&hU0tiuzg8%Z?X1-lm6MBqXtOdX2@`7w?9K9(vgESTE_GL#{pT2FkAi zqs%@f{fPjGf{QOfTX~!Q+>FVm1m6b7@c?|a6q)dwTtWY*+V&AYSf$Hp;tNUr2>4b!m z?%%(kV#dtG^x9*3$e-71uEu-C`Jq;9#KESnxbT{zb*k)y}fCV@uR{?N=9G4^&=|! z`i=9G{p0SwWB)M7voJINz&gvVW@3VJCCjdc?e9`!dH#6rR|$Q0P>vy1=5McosjkF6 zb0$3ScUE?G$=t6XSg`gZ@$TGCui=iOYtPv^c>Oz;JD$j2<5AaGOuoKo?l3;iKRCvm zCw8okh9M+rxPEZ*SCH1~nPZfVw_fU&O7-^kaw~YsNJ-7~$9a!oI736j*|GN6n3(FA zgOX><*Uuk#^5n_tT%}_9`}e6U$$^1^H44ivgI}W*S0^-*Q*En4w-^+yMEh56+~B|U z-aYSY!|Cd}x?^Kwzdr^qR++6#M3yX7EUoqt0=j-a$MdfYM`$H!96c)Iz2b@Iye}`O zq@;`)f8@T8gFd5p!N%2f28*%(Qp=lbd)JTmPxMw*-s4`JZZgx*(0D9$spaKKA#ZQ* z-v=d{UY*%0ZQrK2I$!hZOu_C&2U>BFK*mfe{HUv|Z``;sNh@}!B_~xsbrUVEQ*q7L z{&!b~CnhF7hVYK}^}VpW8x|I(62z8nlAm??_s1_@66Ok6*9uxXx{z%LEk;VdfB$Y; zD%@{Sot_bn55=s3jA9vNVAib3Qs6QzFQn>YIp95|q$ps;J#%YXbgGchp@ z4VK7-hlOcA5`XHwxcwEJ^wjTvW?M6F+4Af6@8SBF%v@Y44K|OZ z9rnr^q<`|2tgfzpD0qBJELEOZAS0uwyu7@Wl+=zLWv#7p`}e9t{G!m<-aDCy8eY>%XaJIQ4^=>sLN;ZMn&Kv7C ze5tBhw{BgI@ukI?Q5Am)Icn>8#0K+?k$cYshJ+|y{bPRd;zb=DoeLKReupUTl?_w5 z)c$U|tIW45Qq0 zlNnWL>h-<6yzrfgiHV1YN6i!Y@nT9wH`&X-KHQ|D!@VBZy@0z0T~FlPv`klPy&K+K zYJIzI!)9@rb>ZOPviJs31zNK2aewk(;MF<9-Lx#EbXVUezGBI`k{=HK+vi-pZ>xJpz z**52zfNIKXN0`dT+OAXCA31U)h;7f2{w!N8?e;)M*CWN0yQHKVzkS;Se}LJZO4U#J zr`t_PE9TCGCKMN1 zF&#@Czf4LuQwk17#`p%CLB(s^8LBVjv>-;By0A4%1Tqd?nPtr@@|bpVb7POCi`dCf ztr;cJ8zA(AF_uayh|h26lL7JZ<3}DvuNV=>2N4lchy<7nVod$7Y7s)tWq^^1sf;!6 z{yv#?*$Ff|n%fPC+y4GdsRr6Edz0yWCB=CI87;^`@Ya=;Rm)8UZsXLOxb9R_h40?8 zCszEd@{uF!eI<3asn7)dqBVIWDkpbsr1>?r;4;e&(WiB+c~74{#g?C&p*T>{MgR2% zpP&2lq@>D^ADyW7hGm_ryw}`p2n)f6S?w^p!NShoKQ#1()kmlCS4B`&RTXE<4L}fK z^|6xil2y};CjVQvu!tE*P6_{%H6kJa18~bY#$zL?Saz_KvgT!qyF2z3&34ey&|net zL-_m#dqjwH=gv7hJLgj}vPEDO5F{TxderyraZokouqso+N8~YPX6E0&e`lO2XiPN_ zTVP1QTb#pg@7uSJzB*n?SXs~DxrieMu*tmo_g7X{)~=H;?rf$MQDyo?fp|_jDV(N| zGE(GzJP+=e5ms(%O+TIMBFk;irM%1$b9j%g-yCoFE27>e=f;g2d-v{5aHcqQ(7EsH z$j|IZF|+C}dQBxJ!W?+#f$bx$|}}3 zQgrTpR~BAgheFEx7_tSvdMcjg6u+XP;=zLlv4!&TML@OK2;rkVF-C9g zjK~mVedC>u-!IOLQu!-GdP+(@`l-)X3Fqb<+a`b`&X~gjEKkM5UzKiJ`{_L*T$&cK z_lyVf;NXv>$!-FkwJp?fC(^K*!!nTRt_(Le*yI2-z(kWx zE?yjz8!tqn{?c_fHj(DI8zK_ETk0VU9{?KN<&?Z##wn-96s?SSymxPPL&Jgp5sxXv zsf4P1_|k41Gw7NbYcE)HY>MP`5`-bG(N{O`3H(#mvm*DO#LH+vP`>pqF0M5KBtC12DK-mHTaU1*%oV^#MmvfM^ixM0)3+{f zXlB)ld96KT>gVq6?$5w`FF3fD)`SSwE0L5%XHa)!1)>H4iYZza|cjC1=n@ zDQ@BTv7_05N&g+CPHF=+6;-V_F{Y=lKZ9*Rt}mRb(?F8kGLk?;w+7;z`qv`#ulx-@ zi)S4_zG`-2a-!N!JlrR9PSGxtCfI-w6cD&F@O=j#-_4bE<~LWD`W4N*m#=7Q(lgw* zdpyc=*2u`{*fCl>TIYM+bB)Q#$xiRp>(thEj~dvYdQzDK19*BCwt2&|?7zp~7%(C1 zD10SnN{xeHvlNEZzLHWkUjqM(i4cemNcAfHl;%}HY|`gG(qokH29~qH5O#KU%E~u$ zbEWZ|%*?e(T%T_E5-t)|m@RK3R({NYn1Ov_@8QUqYS@_F;cQRayfK#|(+mbWx*s+< z4DwU=2Xu%LV|VxYYvV;t+153P8AdK_!Y@CnT9~dKUtNdU*%3_;-D7Usk+#FGOKw z?q);kI!a1SnjK~o99y?Oe*CzK)rY9RTgKUXGM#Tf2fefPSHs+^f4?RqNYmdg7#FV7 zs8id#dHkBky(co4o%Hk$$RSV3?c1kYOexOK&%d_v@m@%69XYn_Sg%B56^{9jTZM8R zR4i1$6yyvrL(sl{c^N%H9UJ;*2-o1E`=*3ht> zdV132Oa_Xut|qgRN!rry-*u#=b6cKM5v;H_DZNvEmX?;^w(gfXV`%t;`D+&cpsrAo zw`O!b-gXV(g&4nBPh4487|uXe%(rRSO>LbPd5+avY}c+qCTnZv>c4h7)ME<^7iPyZ z8f-2eCZtB9te*_lJ+CUiMc3divoR$xg|G1HUyJ?;rymNle**)9*u|n}Oo>cBM5S*v zHLFXLH7Xl!1f=XP9~l`Dtf+W#-9G!*uT+DKf3E_j|MB8@Ytc0~C#S3dQE`=1Dg&dV zXS#k_wDk8C2u{`b7uFOi$5YnjY7l21!U=L(o*>BerEO7yr_0x85wHH zvefv|K}YEKzpmt2Z0%e@nf9hN*CD9-X7o!NoBeWf1?L`18E70cv7LJ=5L(~XzU*HW zi3nv<j&sgHLdnE%RP^8>c^<_;h4a=!1n+wd}l zMnFA!zuTCeSO(YedqV;j-{sDR4Ggq=pd@TRblpARp~R#x`BgIA^SX6jV^{Zpi$Rl= zmzTEuwBG1V3ZGLp&6#KQ^y(8-g7%sfi^|fa^p^SCo0WJKRsIgq{`xr}E%|C!W%?Bt zle%Z>6H$^#zqA7DiQ#P2Wi^VcG0fI!rWA;g|Sov$N?^8~hjW%E2 zDVFiPpnzY!gpGZ%K2_TMd;HmRA6-!B*d3%OUHD{h01!eevGz{&&BYWWCa&K8ezRgv zcSLp6MrkLL?)`dAlu7~cD(v2E1AD@DF~w5N>ZhwEx}}0pL0CR^EHE-MGV2CW8sRcj ze{t?lx1`nAt`D3I60flb$F#JHFaK6GHjch|ktm%Jmq~QW*{!S|N)~y&<%G{A3rE#& znxf?*2CtT2gQ5JO81kMyJ5qa;Ft_btwk}>-u#MFclBL@%`I;tp^-M?c^~bBG6kRv) z9h;cx*8oYIa~4b;?ss{#)hOa+@A^vKx^*idyNlrk%h}79|Gqq#bl2M*FmY*VcXbQ} zvGfX?SX^98$G-QxqpG~-u5v((tSpJ&W)YE*Lj3%~>>CNYp98gt4k#E0li~t5-|UP! z;pb*1HnBY0DZ)fe*u`aMJHs>(A~-U20=U?pmYK`Aju<{yJOr2s{J;{po{)NV*q0g( za~eMPTqE*`_2F+pe*l)7GR!ij{HcArf!%0TD2di4Ops}(>erZq56d{aZA|=T3tWL& zUNxR2O7C6BF{ZYzkJncj=;`ShC4buCTR;YBX`(9G6h6Voq;Kth^2y#gllpg*8Q3e7 zKfj;=Q8R>Np9L%v_2dC>5@j2uPs@P|-_0A- zj8G>;MMWiKH*ddZxQ-C{^J!-Yg0*0b=sKbislB|W#$jb?p1xW*NG*{tKY&@dqXZ05 zTrqTEd|dun0-yDiMFH#!@bllPwvZ!V=D-8(7^8eA0bj{uPiZJhzi@1@rlqAlV*MJW z4q+H~=MIgx_bQTuzMdX#nFdvxc?`ZKDk5^u@dXMH{1Z$A8C*-e6@4XhKHT;oGWCIK zt?_lU4g;Y-@<5Fz;O^b?jxVG@ITDTOpin3%DCnyn-Q6@zm{0TV+{qcU&nP|cJ4)W# zTHTB$k#K6loD$R|z<~E`JAmUOSds8w7Z#%aDb^Wfnu4#SAhxhn^^I-Qy)sUeE`+%p zUJkX6xXj7xn0s^Br%#_ICY-3PQ!=oXUBW~%t*_*P3Q*>DoA8%%@-K|Ok`0yQUru%w zUq`m8?)th8reL0}dY9vA)9~u@xOdRz1RHWVQOqYfIT_D>QWgdHOPE)2#JHoTBz$a{#(IBVO*5kvtBYP*g?BNxVov#>!DVIOqtQUabD5FJWTV#>lj zskkQ1I47_yN^aMm3t=!1LppayK>%q*MKc$+oUU47qB#;IF|Z&gjF2);PI4&g4|kY0 zZ{Ey%ed@u$_7u`~+Aq7f#K>M5D)ZgI8S{YL9_=eb^-=rI0itaoZ%KtyVgJrM-o|4W zS%LbuZL{n5l_ZVG^%A0=tAfmXywnJckNj+=x_W~(422l+aJ;>R)m z;)P^87*79h8+_88%zp!u?@{w4A&RYHF1zfq|a39lEOH!Zw+5 ziAi?tXK30(rH&x#|3O7mlj)4~wv~!D{t7E@@ zSp*AJJAU9Ilqg^&CtqkD^qk9V*t9l;@cY)*R;~@!G8UVNcn;fbYrCLx0_-4akn{^{ zD<^C>@ck(&P_WTkxStuz7*P}PU_J!*?Yj)tA|d+_2VT`@qOgc8P>asKr=Di0#yb+( z7k<15K1ILwcjt|pH|wu<(Qh51AguV|32k}0F83ELFlq6fU{SzAr2ISSzULEVoLUhS z#G}~ge@#wwhm1@fHV=tOxAos4*d`iJJLJE6mvYJRHoT-%x&ELGf+!(cDI??DT~1YN z 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 mMB}CUMZX3{Qm%)pbLxu diff --git a/tests/drawing/cairo/baseline_images/graph_mark_groups_squares_directed.png b/tests/drawing/cairo/baseline_images/graph_mark_groups_squares_directed.png index c5372745cb597e2bbd728fcaa117abd639f956cb..d3168068ef58d289d1fff76b692d9bf2b22ae6fb 100644 GIT binary patch literal 16548 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 diff --git a/tests/drawing/cairo/test_graph.py b/tests/drawing/cairo/test_graph.py index eccd60618..31d4fdc11 100644 --- a/tests/drawing/cairo/test_graph.py +++ b/tests/drawing/cairo/test_graph.py @@ -1,9 +1,7 @@ -import os import random import unittest - -from igraph import Graph, InternalError, plot, VertexClustering +from igraph import Graph, plot, VertexClustering from igraph.drawing import find_cairo # FIXME: find a better way to do this that works for both direct call and module @@ -27,6 +25,9 @@ def setUpClass(cls): raise unittest.SkipTest("cairo not found, skipping tests") result_image_folder.mkdir(parents=True, exist_ok=True) + def setUp(self) -> None: + random.seed(42) + @image_comparison(baseline_images=["graph_basic"]) def test_basic(self): g = Graph.Ring(5) @@ -66,6 +67,9 @@ def setUpClass(cls): raise unittest.SkipTest("cairo not found, skipping tests") result_image_folder.mkdir(parents=True, exist_ok=True) + def setUp(self) -> None: + random.seed(42) + @image_comparison(baseline_images=["clustering_directed"]) def test_clustering_directed_small(self): g = Graph.Ring(5, directed=True) From ddeb521fab808a2b0a8cc5521e34405db849eea8 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 23 Mar 2023 15:26:50 +0100 Subject: [PATCH 020/681] feat: added granular loop edge handling for Graph.Adjacency() and Graph.Weighted_Adjacency(), fixes #647 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b00f57ef..a791d6de1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ contains an extra property named `quality` that stores the value of the internal quality function optimized by the algorithm. +- `Graph.Adjacency()` and `Graph.Weighted_Adjacency()` now supports + `loops="once"`, `loops="twice"` and `loops="ignore"` to control how loop + edges are handled in a more granular way. `loops=True` and `loops=False` + keep on working as in earlier versions. + ### Fixed - `resolution` parameter is now correctly taken into account when calling From 79f87354450e7b95b55905ce69e0f7f8c26617f6 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 24 Mar 2023 17:57:47 +0100 Subject: [PATCH 021/681] feat: added granular loop edge handling for Graph.Adjacency() and Graph.Weighted_Adjacency(), fixes #647 --- src/igraph/io/adjacency.py | 21 +++-- src/igraph/sparse_matrix.py | 108 ++++++++++++++------- tests/test_generators.py | 181 +++++++++++++++++++++++++++++++++++- 3 files changed, 269 insertions(+), 41 deletions(-) diff --git a/src/igraph/io/adjacency.py b/src/igraph/io/adjacency.py index 940402869..5f4c3a5c4 100644 --- a/src/igraph/io/adjacency.py +++ b/src/igraph/io/adjacency.py @@ -4,7 +4,7 @@ ) -def _construct_graph_from_adjacency(cls, matrix, mode="directed", *args, **kwargs): +def _construct_graph_from_adjacency(cls, matrix, mode="directed", loops="once"): """Generates a graph from its adjacency matrix. @param matrix: the adjacency matrix. Possible types are: @@ -26,6 +26,11 @@ def _construct_graph_from_adjacency(cls, matrix, mode="directed", *args, **kwarg the matrix (including the diagonal) - C{"lower"} - undirected graph with the lower left triangle of the matrix (including the diagonal) + @param loops: specifies how to handle loop edges. When C{False} or + C{"ignore"}, the diagonal of the adjacency matrix will be ignored. When + C{True} or C{"once"}, the diagonal is assumed to contain the multiplicity + of the corresponding loop edge. When C{"twice"}, the diagonal is assumed + to contain I{twice} the multiplicity of the corresponding loop edge. """ # Deferred import to avoid cycles from igraph import Graph @@ -46,7 +51,7 @@ def _construct_graph_from_adjacency(cls, matrix, mode="directed", *args, **kwarg pd = None if (sparse is not None) and isinstance(matrix, sparse.spmatrix): - return _graph_from_sparse_matrix(cls, matrix, mode=mode) + return _graph_from_sparse_matrix(cls, matrix, mode=mode, loops=loops) if (pd is not None) and isinstance(matrix, pd.DataFrame): vertex_names = matrix.index.tolist() @@ -57,7 +62,7 @@ def _construct_graph_from_adjacency(cls, matrix, mode="directed", *args, **kwarg if (np is not None) and isinstance(matrix, np.ndarray): matrix = matrix.tolist() - graph = super(Graph, cls).Adjacency(matrix, mode=mode) + graph = super(Graph, cls).Adjacency(matrix, mode=mode, loops=loops) # Add vertex names if present if vertex_names is not None: @@ -67,7 +72,7 @@ def _construct_graph_from_adjacency(cls, matrix, mode="directed", *args, **kwarg def _construct_graph_from_weighted_adjacency( - cls, matrix, mode="directed", attr="weight", loops=True + cls, matrix, mode="directed", attr="weight", loops="once" ): """Generates a graph from its weighted adjacency matrix. @@ -92,9 +97,11 @@ def _construct_graph_from_weighted_adjacency( These values can also be given as strings without the C{ADJ} prefix. @param attr: the name of the edge attribute that stores the edge weights. - @param loops: whether to include loop edges. When C{False}, the diagonal - of the adjacency matrix will be ignored. - + @param loops: specifies how to handle loop edges. When C{False} or + C{"ignore"}, the diagonal of the adjacency matrix will be ignored. When + C{True} or C{"once"}, the diagonal is assumed to contain the weight of the + corresponding loop edge. When C{"twice"}, the diagonal is assumed to + contain I{twice} the weight of the corresponding loop edge. """ # Deferred import to avoid cycles from igraph import Graph diff --git a/src/igraph/sparse_matrix.py b/src/igraph/sparse_matrix.py index bcf5436fe..82a7b7120 100644 --- a/src/igraph/sparse_matrix.py +++ b/src/igraph/sparse_matrix.py @@ -47,10 +47,37 @@ def _convert_mode_argument(mode): return mode +def _maybe_halve_diagonal(m, condition): + """Halves all items in the diagonal of the given SciPy sparse matrix in + coo mode _if_ and _only if_ the given condition is True. + + Returns the row, column and data arrays. + """ + data_array = m.data + if condition: + # We can't do data_array[m.row == m.col] /= 2 here because we would be + # modifying the array in-place and the end user wouldn't like if we + # messed with their matrix. So we make a copy. + data_array = data_array.copy() + idxs, = (m.row == m.col).nonzero() + for i in idxs: + data_array[i] /= 2 + + return m.row, m.col, data_array + + # Logic to get graph from scipy sparse matrix. This would be simple if there # weren't so many modes. -def _graph_from_sparse_matrix(klass, matrix, mode="directed"): - """Construct graph from sparse matrix, unweighted""" +def _graph_from_sparse_matrix(klass, matrix, mode="directed", loops="once"): + """Construct graph from sparse matrix, unweighted. + + @param loops: specifies how the diagonal of the matrix should be handled: + + - C{"ignore"} - ignore loop edges in the diagonal + - C{"once"} - treat the diagonal entries as loop edge counts + - C{"twice"} - treat the diagonal entries as I{twice} the number + of loop edges + """ # This function assumes there is scipy and the matrix is a scipy sparse # matrix. The caller should make sure those conditions are met. from scipy import sparse @@ -67,16 +94,21 @@ def _graph_from_sparse_matrix(klass, matrix, mode="directed"): mode = _convert_mode_argument(mode) + keep_loops = (loops == "twice" or loops == "once" or loops is True) + m_row, m_col, m_data = _maybe_halve_diagonal(m, loops == "twice") + if mode == "directed": - edges = sum( - ([(i, j)] * n for i, j, n in zip(m.row, m.col, m.data)), - [], - ) + edges = [] + for i, j, n in zip(m_row, m_col, m_data): + if i != j or keep_loops: + edges.extend([(i, j)] * n) elif mode in ("max", "plus"): fun = max if mode == "max" else add nedges = {} - for i, j, n in zip(m.row, m.col, m.data): + for i, j, n in zip(m_row, m_col, m_data): + if i == j and not keep_loops: + continue pair = (i, j) if i < j else (j, i) nedges[pair] = fun(nedges.get(pair, 0), n) @@ -86,12 +118,12 @@ def _graph_from_sparse_matrix(klass, matrix, mode="directed"): ) elif mode == "min": - tmp = {(i, j): n for i, j, n in zip(m.row, m.col, m.data)} + tmp = {(i, j): n for i, j, n in zip(m_row, m_col, m_data)} nedges = {} for pair, weight in tmp.items(): i, j = pair - if i == j: + if i == j and keep_loops: nedges[pair] = weight elif i < j: nedges[pair] = min(weight, tmp.get((j, i), 0)) @@ -102,30 +134,36 @@ def _graph_from_sparse_matrix(klass, matrix, mode="directed"): ) elif mode == "upper": - edges = sum( - ([(i, j)] * n for i, j, n in zip(m.row, m.col, m.data) if j >= i), - [], - ) + edges = [] + for i, j, n in zip(m_row, m_col, m_data): + if j > i or (keep_loops and j == i): + edges.extend([(i, j)] * n) elif mode == "lower": - edges = sum( - ([(i, j)] * n for i, j, n in zip(m.row, m.col, m.data) if j <= i), - [], - ) + edges = [] + for i, j, n in zip(m_row, m_col, m_data): + if j < i or (keep_loops and j == i): + edges.extend([(i, j)] * n) else: - raise ValueError("invalid mode") + raise ValueError(f"invalid mode: {mode!r}") return klass(nvert, edges=edges, directed=(mode == "directed")) def _graph_from_weighted_sparse_matrix( - klass, matrix, mode=ADJ_DIRECTED, attr="weight", loops=True + klass, matrix, mode=ADJ_DIRECTED, attr="weight", loops="once" ): """Construct graph from sparse matrix, weighted NOTE: Of course, you cannot emcompass a fully general weighted multigraph with a single adjacency matrix, so we don't try to do it here either. + + @param loops: specifies how to handle loop edges. When C{False} or + C{"ignore"}, the diagonal of the adjacency matrix will be ignored. When + C{True} or C{"once"}, the diagonal is assumed to contain the weight of the + corresponding loop edge. When C{"twice"}, the diagonal is assumed to + contain I{twice} the weight of the corresponding loop edge. """ # This function assumes there is scipy and the matrix is a scipy sparse # matrix. The caller should make sure those conditions are met. @@ -143,35 +181,39 @@ def _graph_from_weighted_sparse_matrix( mode = _convert_mode_argument(mode) + keep_loops = (loops == "twice" or loops == "once" or loops is True) + m_row, m_col, m_data = _maybe_halve_diagonal(m, loops == "twice") + if mode == "directed": - if not loops: + if not keep_loops: edges, weights = [], [] - for i, j, n in zip(m.row, m.col, m.data): + for i, j, n in zip(m_row, m_col, m_data): if i != j: edges.append((i, j)) weights.append(n) - else: - edges = list(zip(m.row, m.col)) - weights = list(m.data) + else: # loops == "once" or True + edges = list(zip(m_row, m_col)) + weights = list(m_data) elif mode in ("max", "plus"): fun = max if mode == "max" else add nedges = {} - for i, j, n in zip(m.row, m.col, m.data): - if i == j and not loops: + for i, j, n in zip(m_row, m_col, m_data): + if i == j and not keep_loops: continue + pair = (i, j) if i < j else (j, i) nedges[pair] = fun(nedges.get(pair, 0), n) edges, weights = zip(*nedges.items()) elif mode == "min": - tmp = {(i, j): n for i, j, n in zip(m.row, m.col, m.data)} + tmp = {(i, j): n for i, j, n in zip(m_row, m_col, m_data)} nedges = {} for pair, weight in tmp.items(): i, j = pair - if i == j and loops: + if i == j and keep_loops: nedges[pair] = weight elif i < j: nedges[pair] = min(weight, tmp.get((j, i), 0)) @@ -185,20 +227,20 @@ def _graph_from_weighted_sparse_matrix( elif mode == "upper": edges, weights = [], [] - for i, j, n in zip(m.row, m.col, m.data): - if j > i or (loops and j == i): + for i, j, n in zip(m_row, m_col, m_data): + if j > i or (keep_loops and j == i): edges.append((i, j)) weights.append(n) elif mode == "lower": edges, weights = [], [] - for i, j, n in zip(m.row, m.col, m.data): - if j < i or (loops and j == i): + for i, j, n in zip(m_row, m_col, m_data): + if j < i or (keep_loops and j == i): edges.append((i, j)) weights.append(n) else: - raise ValueError("invalid mode") + raise ValueError(f"invalid mode: {mode!r}") return klass( nvert, edges=edges, directed=(mode == "directed"), edge_attrs={attr: weights} diff --git a/tests/test_generators.py b/tests/test_generators.py index 26c8cae61..25bfb56d9 100644 --- a/tests/test_generators.py +++ b/tests/test_generators.py @@ -362,11 +362,95 @@ def testAdjacencyNumPy(self): el = g.get_edgelist() self.assertTrue(el == [(0, 1), (2, 2), (2, 2)]) + # ADJ MAX + g = Graph.Adjacency(mat, mode="max") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (1, 3), (2, 2), (2, 2)]) + # ADJ LOWER g = Graph.Adjacency(mat, mode="lower") el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) self.assertTrue(el == [(0, 1), (2, 2), (2, 2), (1, 3)]) + # ADJ UPPER + g = Graph.Adjacency(mat, mode="upper") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (2, 2), (2, 2)]) + + @unittest.skipIf(np is None, "test case depends on NumPy") + def testAdjacencyNumPyLoopHandling(self): + mat = np.array( + [[0, 1, 1, 0], [1, 0, 0, 0], [0, 0, 2, 0], [0, 1, 0, 0]], + ) + + # ADJ_DIRECTED (default) + g = Graph.Adjacency(mat) + el = g.get_edgelist() + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (2, 2), (2, 2), (3, 1)]) + + # ADJ MIN + g = Graph.Adjacency(mat, mode="min", loops="twice") + el = g.get_edgelist() + self.assertTrue(el == [(0, 1), (2, 2)]) + + # ADJ MAX + g = Graph.Adjacency(mat, mode="max", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (1, 3), (2, 2)]) + + # ADJ LOWER + g = Graph.Adjacency(mat, mode="lower", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (2, 2), (1, 3)]) + + # ADJ UPPER + g = Graph.Adjacency(mat, mode="upper", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (2, 2)]) + + # ADJ_DIRECTED (default) + g = Graph.Adjacency(mat, loops=False) + el = g.get_edgelist() + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (3, 1)]) + + # ADJ MIN + g = Graph.Adjacency(mat, mode="min", loops=False) + el = g.get_edgelist() + self.assertTrue(el == [(0, 1)]) + + # ADJ MAX + g = Graph.Adjacency(mat, mode="max", loops=False) + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (1, 3)]) + + # ADJ LOWER + g = Graph.Adjacency(mat, mode="lower", loops=False) + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (1, 3)]) + + # ADJ UPPER + g = Graph.Adjacency(mat, mode="upper", loops=False) + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2)]) + @unittest.skipIf( (sparse is None) or (np is None), "test case depends on NumPy/SciPy" ) @@ -389,6 +473,13 @@ def testSparseAdjacency(self): self.assertEqual(4, g.vcount()) self.assertTrue(el == [(0, 1), (2, 2), (2, 2)]) + # ADJ MAX + g = Graph.Adjacency(mat, mode="max") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (2, 2), (2, 2), (1, 3)]) + # ADJ LOWER g = Graph.Adjacency(mat, mode="lower") el = g.get_edgelist() @@ -396,6 +487,77 @@ def testSparseAdjacency(self): self.assertEqual(4, g.vcount()) self.assertTrue(el == [(0, 1), (2, 2), (2, 2), (1, 3)]) + # ADJ UPPER + g = Graph.Adjacency(mat, mode="upper") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (2, 2), (2, 2)]) + + @unittest.skipIf( + (sparse is None) or (np is None), "test case depends on NumPy/SciPy" + ) + def testSparseAdjacencyLoopHandling(self): + mat = sparse.coo_matrix( + [[0, 1, 1, 0], [1, 0, 0, 0], [0, 0, 2, 0], [0, 1, 0, 0]], + ) + + # ADJ_DIRECTED (default) + g = Graph.Adjacency(mat, loops=False) + el = g.get_edgelist() + self.assertTrue(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (3, 1)]) + + # ADJ MIN + g = Graph.Adjacency(mat, mode="min", loops=False) + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1)]) + + # ADJ LOWER + g = Graph.Adjacency(mat, mode="lower", loops=False) + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (1, 3)]) + + # ADJ_DIRECTED (default) + g = Graph.Adjacency(mat, loops="twice") + el = g.get_edgelist() + self.assertTrue(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (2, 2), (3, 1)]) + + # ADJ MAX + g = Graph.Adjacency(mat, mode="max", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (2, 2), (1, 3)]) + + # ADJ MIN + g = Graph.Adjacency(mat, mode="min", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (2, 2)]) + + # ADJ LOWER + g = Graph.Adjacency(mat, mode="lower", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (2, 2), (1, 3)]) + + # ADJ UPPER + g = Graph.Adjacency(mat, mode="upper", loops="twice") + el = g.get_edgelist() + self.assertFalse(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (2, 2)]) + def testWeightedAdjacency(self): mat = [[0, 1, 2, 0], [2, 0, 0, 0], [0, 0, 2.5, 0], [0, 1, 0, 0]] @@ -414,6 +576,11 @@ def testWeightedAdjacency(self): self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (3, 1)]) self.assertTrue(g.es["w0"] == [1, 2, 2, 1]) + g = Graph.Weighted_Adjacency(mat, attr="w0", loops="twice") + el = g.get_edgelist() + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (2, 2), (3, 1)]) + self.assertTrue(g.es["w0"] == [1, 2, 2, 1.25, 1]) + @unittest.skipIf(np is None, "test case depends on NumPy") def testWeightedAdjacencyNumPy(self): mat = np.array( @@ -435,10 +602,15 @@ def testWeightedAdjacencyNumPy(self): self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (3, 1)]) self.assertTrue(g.es["w0"] == [1, 2, 2, 1]) + g = Graph.Weighted_Adjacency(mat, attr="w0", loops="twice") + el = g.get_edgelist() + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (2, 2), (3, 1)]) + self.assertTrue(g.es["w0"] == [1, 2, 2, 1.25, 1]) + @unittest.skipIf( (sparse is None) or (np is None), "test case depends on NumPy/SciPy" ) - def testSparseWeighedAdjacency(self): + def testSparseWeightedAdjacency(self): mat = sparse.coo_matrix( [[0, 1, 2, 0], [2, 0, 0, 0], [0, 0, 2.5, 0], [0, 1, 0, 0]] ) @@ -471,6 +643,13 @@ def testSparseWeighedAdjacency(self): self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (3, 1)]) self.assertTrue(g.es["w0"] == [1, 2, 2, 1]) + g = Graph.Weighted_Adjacency(mat, attr="w0", loops="twice") + el = g.get_edgelist() + self.assertTrue(g.is_directed()) + self.assertEqual(4, g.vcount()) + self.assertTrue(el == [(0, 1), (0, 2), (1, 0), (2, 2), (3, 1)]) + self.assertTrue(g.es["w0"] == [1, 2, 2, 1.25, 1]) + @unittest.skipIf((np is None) or (pd is None), "test case depends on NumPy/Pandas") def testDataFrame(self): edges = pd.DataFrame( From c8efd805c96dc3364fe8d38bc481765dc1eb687a Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 24 Mar 2023 18:12:15 +0100 Subject: [PATCH 022/681] feat: added Graph.get_shortest_path() convenience function --- CHANGELOG.md | 3 ++ src/_igraph/graphobject.c | 85 +++++++++++++++++++++++++++++++++++++-- tests/test_structural.py | 8 ++++ 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a791d6de1..06aa43232 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ edges are handled in a more granular way. `loops=True` and `loops=False` keep on working as in earlier versions. +- Added `Graph.get_shortest_path()` as a convenience function for cases when + only one shortest path is needed between a given source and target vertices. + ### Fixed - `resolution` parameter is now correctly taken into account when calling diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 5f27d40e3..477b0ae11 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -5118,6 +5118,67 @@ PyObject *igraphmodule_Graph_feedback_arc_set( } +/** \ingroup python_interface_graph + * \brief Calculates a single shortest path between a source and a target vertex + * \return a list containing a single shortest path from the source to the target + * \sa igraph_get_shortest_path + */ +PyObject *igraphmodule_Graph_get_shortest_path( + igraphmodule_GraphObject *self, PyObject *args, PyObject * kwds +) { + static char *kwlist[] = { "v", "to", "weights", "mode", "output", NULL }; + igraph_vector_t *weights=0; + igraph_neimode_t mode = IGRAPH_OUT; + igraph_integer_t from, to; + PyObject *list, *mode_o=Py_None, *weights_o=Py_None, + *output_o=Py_None, *from_o = Py_None, *to_o=Py_None; + igraph_vector_int_t vec; + igraph_bool_t use_edges = false; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|OOO!", kwlist, &from_o, + &to_o, &weights_o, &mode_o, &PyUnicode_Type, &output_o)) + return NULL; + + if (igraphmodule_PyObject_to_vpath_or_epath(output_o, &use_edges)) + return NULL; + + if (igraphmodule_PyObject_to_vid(from_o, &from, &self->g)) + return NULL; + + if (igraphmodule_PyObject_to_vid(to_o, &to, &self->g)) + return NULL; + + if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) + return NULL; + + if (igraphmodule_attrib_to_vector_t(weights_o, self, &weights, + ATTRIBUTE_TYPE_EDGE)) return NULL; + + if (igraph_vector_int_init(&vec, 0)) { + igraphmodule_handle_igraph_error(); + return NULL; + } + + /* Call the C function */ + if (igraph_get_shortest_path_dijkstra(&self->g, use_edges ? 0 : &vec, + use_edges ? &vec : 0, from, to, weights, mode)) { + igraph_vector_int_destroy(&vec); + if (weights) { igraph_vector_destroy(weights); free(weights); } + igraphmodule_handle_igraph_error(); + return NULL; + } + + /* We don't need these anymore, the result is in vec */ + if (weights) { igraph_vector_destroy(weights); free(weights); } + + /* Convert to Python list of paths */ + list = igraphmodule_vector_int_t_to_PyList(&vec); + igraph_vector_int_destroy(&vec); + + return list ? list : NULL; +} + + /** \ingroup python_interface_graph * \brief Calculates the shortest paths from/to a given node in the graph * \return a list containing shortest paths from/to the given node @@ -5194,8 +5255,6 @@ PyObject *igraphmodule_Graph_get_shortest_paths(igraphmodule_GraphObject * list = igraphmodule_vector_int_list_t_to_PyList(&veclist); igraph_vector_int_list_destroy(&veclist); return list ? list : NULL; - - return list; } /** \ingroup python_interface_graph @@ -14453,7 +14512,27 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " feedback arc set problem. In: Proc Inf Process Lett 319-323, 1993.\n" }, - // interface to igraph_get_shortest_paths + /* interface to igraph_get_shortest_path */ + {"get_shortest_path", (PyCFunction) igraphmodule_Graph_get_shortest_path, + METH_VARARGS | METH_KEYWORDS, + "get_shortest_path(v, to, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" + "Calculates the shortest path from a source vertex to a target vertex in a graph.\n\n" + "@param v: the source vertex of the path\n" + "@param to: the target vertex of the path\n" + "@param weights: edge weights in a list or the name of an edge attribute\n" + " holding edge weights. If C{None}, all edges are assumed to have\n" + " equal weight.\n" + "@param mode: the directionality of the paths. C{\"out\"} means to\n" + " calculate paths from source to target, following edges according to\n" + " their natural direction. C{\"in\"} means to calculate paths from target\n" + " to source, flipping the direction of each edge on-the-fly. C{\"all\"}\n" + " means to ignore edge directions.\n" + "@param output: determines what should be returned. If this is\n" + " C{\"vpath\"}, a list of vertex IDs will be returned. If this is\n" + " C{\"epath\"}, edge IDs are returned instead of vertex IDs.\n" + "@return: see the documentation of the C{output} parameter.\n"}, + + /* interface to igraph_get_shortest_paths */ {"get_shortest_paths", (PyCFunction) igraphmodule_Graph_get_shortest_paths, METH_VARARGS | METH_KEYWORDS, "get_shortest_paths(v, to=None, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" diff --git a/tests/test_structural.py b/tests/test_structural.py index 557398859..67b183398 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -787,6 +787,14 @@ def testDistances(self): == [row[2:4] for row in expected] ) + def testGetShortestPath(self): + g = Graph(4, [(0, 1), (0, 2), (1, 3), (3, 2), (2, 1)], directed=True) + self.assertEqual([0, 1, 3], g.get_shortest_path(0, 3)) + self.assertEqual([0, 1, 3], g.get_shortest_path(0, 3, output="vpath")) + self.assertEqual([0, 2], g.get_shortest_path(0, 3, output="epath")) + self.assertRaises(ValueError, g.get_shortest_path, 0, 3, output="x") + self.assertRaises(TypeError, g.get_shortest_path, 0) + def testGetShortestPaths(self): g = Graph(4, [(0, 1), (0, 2), (1, 3), (3, 2), (2, 1)], directed=True) sps = g.get_shortest_paths(0) From 22484a9fdfae4534745cdf7170499be32c4383db Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 24 Mar 2023 18:39:33 +0100 Subject: [PATCH 023/681] feat: added Graph.get_shortest_path_astar() --- src/_igraph/graphobject.c | 139 ++++++++++++++++++++++++++++++++++++++ tests/test_structural.py | 32 ++++++--- 2 files changed, 163 insertions(+), 8 deletions(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 477b0ae11..8986018e1 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -5178,6 +5178,118 @@ PyObject *igraphmodule_Graph_get_shortest_path( return list ? list : NULL; } +typedef struct { + PyObject* func; + PyObject* graph; +} igraphmodule_i_Graph_get_shortest_path_astar_callback_data_t; + +igraph_error_t igraphmodule_i_Graph_get_shortest_path_astar_callback( + igraph_real_t *result, igraph_integer_t from, igraph_integer_t to, + void *extra +) { + igraphmodule_i_Graph_get_shortest_path_astar_callback_data_t* data = + (igraphmodule_i_Graph_get_shortest_path_astar_callback_data_t*)extra; + PyObject* from_o; + PyObject* to_o; + PyObject* result_o; + + from_o = igraphmodule_integer_t_to_PyObject(from); + if (from_o == NULL) { + /* Error in conversion, return 1 */ + return IGRAPH_FAILURE; + } + + to_o = igraphmodule_integer_t_to_PyObject(to); + if (to_o == NULL) { + /* Error in conversion, return 1 */ + return IGRAPH_FAILURE; + } + + result_o = PyObject_CallFunction(data->func, "OOO", data->graph, from_o, to_o); + Py_DECREF(from_o); + Py_DECREF(to_o); + + if (result_o == NULL) { + /* Error in callback, return 1 */ + return IGRAPH_FAILURE; + } + + if (igraphmodule_PyObject_to_real_t(result_o, result)) { + /* Error in conversion, return 1 */ + return IGRAPH_FAILURE; + } + + return IGRAPH_SUCCESS; +} + +/** \ingroup python_interface_graph + * \brief Calculates a single shortest path between a source and a target vertex using the A-star algorithm + * \return a list containing a single shortest path from the source to the target + * \sa igraph_get_shortest_path_astar + */ +PyObject *igraphmodule_Graph_get_shortest_path_astar( + igraphmodule_GraphObject *self, PyObject *args, PyObject * kwds +) { + static char *kwlist[] = { "v", "to", "heuristics", "weights", "mode", "output", NULL }; + igraph_vector_t *weights=0; + igraph_neimode_t mode = IGRAPH_OUT; + igraph_integer_t from, to; + PyObject *list, *mode_o=Py_None, *weights_o=Py_None, + *output_o=Py_None, *from_o = Py_None, *to_o=Py_None, + *heuristics_o; + igraph_vector_int_t vec; + igraph_bool_t use_edges = false; + igraphmodule_i_Graph_get_shortest_path_astar_callback_data_t extra; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOO|OOO!", kwlist, &from_o, + &to_o, &heuristics_o, &weights_o, &mode_o, &PyUnicode_Type, &output_o)) + return NULL; + + if (igraphmodule_PyObject_to_vpath_or_epath(output_o, &use_edges)) + return NULL; + + if (igraphmodule_PyObject_to_vid(from_o, &from, &self->g)) + return NULL; + + if (igraphmodule_PyObject_to_vid(to_o, &to, &self->g)) + return NULL; + + if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) + return NULL; + + if (igraphmodule_attrib_to_vector_t(weights_o, self, &weights, + ATTRIBUTE_TYPE_EDGE)) return NULL; + + if (igraph_vector_int_init(&vec, 0)) { + igraphmodule_handle_igraph_error(); + return NULL; + } + + extra.func = heuristics_o; + extra.graph = (PyObject*) self; + + /* Call the C function */ + if (igraph_get_shortest_path_astar(&self->g, use_edges ? 0 : &vec, + use_edges ? &vec : 0, from, to, weights, mode, + igraphmodule_i_Graph_get_shortest_path_astar_callback, + &extra + )) { + igraph_vector_int_destroy(&vec); + if (weights) { igraph_vector_destroy(weights); free(weights); } + igraphmodule_handle_igraph_error(); + return NULL; + } + + /* We don't need these anymore, the result is in vec */ + if (weights) { igraph_vector_destroy(weights); free(weights); } + + /* Convert to Python list of paths */ + list = igraphmodule_vector_int_t_to_PyList(&vec); + igraph_vector_int_destroy(&vec); + + return list ? list : NULL; +} + /** \ingroup python_interface_graph * \brief Calculates the shortest paths from/to a given node in the graph @@ -14603,6 +14715,33 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " argument). Note that in case of mode=C{\"in\"},\n" " the vertices in a path are returned in reversed order!"}, + /* interface to igraph_get_shortest_path_astar */ + {"get_shortest_path_astar", (PyCFunction) igraphmodule_Graph_get_shortest_path_astar, + METH_VARARGS | METH_KEYWORDS, + "get_shortest_path(v, to, heuristics, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" + "Calculates the shortest path from a source vertex to a target vertex in a\n" + "graph using the A-Star algorithm and a heuristic function.\n\n" + "@param v: the source vertex of the path\n" + "@param to: the target vertex of the path\n" + "@param heuristics: a function that will be called with the graph and two\n" + " vertices, and must return an estimate of the cost of the path from the\n" + " first vertex to the second vertex. The A-Star algorithm is guaranteed to\n" + " return an optimal solution if the heuristic is I{admissible}, i.e. if it\n" + " does never overestimate the cost of the shortest path from the given\n" + " source vertex to the given target vertex.\n" + "@param weights: edge weights in a list or the name of an edge attribute\n" + " holding edge weights. If C{None}, all edges are assumed to have\n" + " equal weight.\n" + "@param mode: the directionality of the paths. C{\"out\"} means to\n" + " calculate paths from source to target, following edges according to\n" + " their natural direction. C{\"in\"} means to calculate paths from target\n" + " to source, flipping the direction of each edge on-the-fly. C{\"all\"}\n" + " means to ignore edge directions.\n" + "@param output: determines what should be returned. If this is\n" + " C{\"vpath\"}, a list of vertex IDs will be returned. If this is\n" + " C{\"epath\"}, edge IDs are returned instead of vertex IDs.\n" + "@return: see the documentation of the C{output} parameter.\n"}, + /* interface to igraph_get_all_simple_paths */ {"_get_all_simple_paths", (PyCFunction) igraphmodule_Graph_get_all_simple_paths, diff --git a/tests/test_structural.py b/tests/test_structural.py index 67b183398..afe6413da 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -868,21 +868,21 @@ def testGetAllShortestPaths(self): def testGetKShortestPaths(self): g = Graph(4, [(0, 1), (1, 2), (1, 3), (2, 4), (3, 4), (4, 5)], directed=True) - + sps = sorted(g.get_k_shortest_paths(0, 0)) expected = [[0]] self.assertEqual(expected, sps) - + sps = sorted(g.get_k_shortest_paths(0, 5, 2)) expected = [[0, 1, 2, 4, 5], [0, 1, 3, 4, 5]] self.assertEqual(expected, sps) - + sps = sorted(g.get_k_shortest_paths(1, 4, 2)) expected = [[1, 2, 4], [1, 3, 4]] self.assertEqual(expected, sps) - + g = Graph.Lattice([5, 5], circular=False) - + sps = sorted(g.get_k_shortest_paths(0, 12, 6)) expected = [ [0, 1, 2, 7, 12], @@ -893,7 +893,7 @@ def testGetKShortestPaths(self): [0, 5, 10, 11, 12], ] self.assertEqual(expected, sps) - + g = Graph.Lattice([100, 100], circular=False) sps = sorted(g.get_k_shortest_paths(0, 202, 6)) expected = [ @@ -905,12 +905,12 @@ def testGetKShortestPaths(self): [0, 100, 200, 201, 202], ] self.assertEqual(expected, sps) - + g = Graph([(0, 1), (1, 2), (0, 2)]) g.es["weight"] = [0.5, 0.5, 1] sps = sorted(g.get_k_shortest_paths(0, 2, 2, weights="weight")) self.assertEqual(sorted([[0, 2], [0, 1, 2]]), sorted(sps)) - + def testGetAllSimplePaths(self): g = Graph.Ring(20) sps = sorted(g.get_all_simple_paths(0, 10)) @@ -965,6 +965,22 @@ def testPathLengthHist(self): h = g.path_length_hist(False) self.assertTrue(h.unconnected == 20) + def testGetShortestPathsAStar(self): + n = 4 + g = Graph.Lattice((n, n), circular=False) + xs, ys = list(range(n)) * n, sum(([i] * n for i in range(n)), []) + g.vs["coord"] = list(zip(xs, ys)) + + def heuristics(graph, u, v): + ux, uy = graph.vs[u]["coord"] + vx, vy = graph.vs[v]["coord"] + return ((ux - vx) ** 2 + (uy - vy) ** 2) ** 0.5 + + self.assertEqual( + [0, 1, 5, 6, 10, 11], + g.get_shortest_path_astar(0, 11, heuristics) + ) + class DominatorTests(unittest.TestCase): def compareDomTrees(self, alist, blist): From fcde6bdd012701553516ae71ab52f4545b77843b Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 24 Mar 2023 18:41:02 +0100 Subject: [PATCH 024/681] chore: updated changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06aa43232..0d15855ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,10 @@ - Added `Graph.get_shortest_path()` as a convenience function for cases when only one shortest path is needed between a given source and target vertices. +- Added `Graph.get_shortest_path_astar()` to calculate the shortest path + between two vertices using the A-star algorithm and an appropriate + heuristic function. + ### Fixed - `resolution` parameter is now correctly taken into account when calling From f35a35e04ca186cb78191d7a540b4c50bc5f09c2 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Sat, 25 Mar 2023 10:38:07 +0100 Subject: [PATCH 025/681] feat: VertexCover constructor now accepts vertex names, closes #617 --- CHANGELOG.md | 3 +++ src/igraph/clustering.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d15855ec..a66ffaaef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ between two vertices using the A-star algorithm and an appropriate heuristic function. +- The `VertexCover` constructor now allows referring to vertices by names + instead of IDs. + ### Fixed - `resolution` parameter is now correctly taken into account when calling diff --git a/src/igraph/clustering.py b/src/igraph/clustering.py index c4b345a47..42e224a86 100644 --- a/src/igraph/clustering.py +++ b/src/igraph/clustering.py @@ -1089,6 +1089,8 @@ def __init__(self, graph, clusters=None): if clusters is None: clusters = [range(graph.vcount())] + self._resolve_names_in_clusters(graph, clusters) + super().__init__(clusters, n=graph.vcount()) if self._n > graph.vcount(): raise ValueError( @@ -1216,6 +1218,24 @@ def _formatted_cluster_iterator(self): for cluster in self: yield ", ".join(str(member) for member in cluster) + @staticmethod + def _resolve_names_in_clusters(graph, clusters): + if not graph.is_named(): + return + + names = graph.vs["name"] + name_to_index = dict((k, v) for v, k in enumerate(names)) + + for idx, cluster in enumerate(clusters): + if any(isinstance(item, str) for item in cluster): + new_cluster = [] + for item in cluster: + if isinstance(item, str): + new_cluster.append(name_to_index.get(item, item)) + else: + new_cluster.append(item) + clusters[idx] = new_cluster + class CohesiveBlocks(VertexCover): """The cohesive block structure of a graph. From bbe93df7f2b1c7b7406688e9f806881d18fccb2f Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Tue, 4 Apr 2023 14:41:29 +1000 Subject: [PATCH 026/681] First blobs of code --- src/igraph/drawing/__init__.py | 6 +- src/igraph/drawing/matplotlib/graph.py | 162 ++++++++++++++++++++++++- 2 files changed, 165 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/__init__.py b/src/igraph/drawing/__init__.py index 5ae708ccc..ec1a8168f 100644 --- a/src/igraph/drawing/__init__.py +++ b/src/igraph/drawing/__init__.py @@ -41,7 +41,10 @@ from igraph.drawing.cairo.matrix import CairoMatrixDrawer from igraph.drawing.cairo.histogram import CairoHistogramDrawer from igraph.drawing.cairo.palette import CairoPaletteDrawer -from igraph.drawing.matplotlib.graph import MatplotlibGraphDrawer +from igraph.drawing.matplotlib.graph import ( + MatplotlibGraphDrawer, + GraphArtist, +) from igraph.drawing.matplotlib.matrix import MatplotlibMatrixDrawer from igraph.drawing.matplotlib.histogram import MatplotlibHistogramDrawer from igraph.drawing.matplotlib.palette import MatplotlibPaletteDrawer @@ -54,6 +57,7 @@ "BoundingBox", "CairoGraphDrawer", "MatplotlibGraphDrawer", + "GraphArtist", "DefaultGraphDrawer", "Plot", "Point", diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 6673929ff..a3dd32de7 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -24,13 +24,171 @@ from .utils import find_matplotlib from .vertex import MatplotlibVertexDrawer -__all__ = ("MatplotlibGraphDrawer",) +__all__ = ( + "MatplotlibGraphDrawer", + "GraphArtist", + ) -_, plt = find_matplotlib() +mpl, plt = find_matplotlib() ##################################################################### +# NOTE: https://github.com/networkx/grave/blob/main/grave/grave.py +class GraphArtist(mpl.artist.Artist, AbstractGraphDrawer): + """Artist for an igraph.Graph object. + + Arguments: + graph: An igraph.Graph object to plot + layout: A layout object or matrix of coordinates to use for plotting. + Each element or row should describes the coordinates for a vertex. + vertex_style: A dictionary specifying style options for vertices. + edge_style: A dictionary specifying style options for edges. + """ + def __init__( + self, + graph, + layout=None, + vertex_style=None, + edge_style=None, + vertex_label_style=None, + edge_label_style=None, + **kwargs, + ): + + super().__init__() + self.graph = graph + self.layout = self.ensure_layout(layout) + self.vertex_style = vertex_style + self.edge_style = edge_style + self.vertex_label_style = vertex_label_style + self.edge_label_style = edge_label_style + + self._clear_state() + + def _clear_state(self): + self._vertex_artist = None + self._vertex_indx = None + self._edge_artist = None + self._edge_indx = None + self._vertex_labels = None + self._edge_labels = None + + def get_children(self): + artists = [self._vertex_artist, self._edge_artist] + if self._vertex_labels is not None: + artists.extend(self._vertex_labels) + if self._edge_labels is not None: + artists.extend(self._edge_labels) + return tuple(a for a in artists if a is not None) + + def get_datalim(self): + import numpy as np + + mins = np.min(self.layout, axis=0) + maxs = np.max(self.layout, axis=0) + + return (mins, maxs) + + def _reprocess(self, *): + """Process the actual drawing.""" + # nuke old state and mark as stale + self._clear_state() + self.stale = True + + # get local refs to everything (just for less typing) + graph = self.graph + edge_style = self.edge_style + vertex_style = self.vertex_style + edge_label_style = self.edge_label_style + vertex_label_style = self.vertex_label_style + + # get the layout + pos = self.layout.coords + + # handle the edges + edge_style_dict = generate_edge_styles(graph, edge_style) + self._edge_artist, self._edge_indx = ( + _generate_straight_edges(graph.edges(), pos, + edge_style_dict, ax=self.axes)) + + # handle the nodes + vertex_style_dict = generate_node_styles(graph, node_style) + self._vertex_artist, self._vertex_indx = ( + _generate_vertex_artist(pos, vertex_style_dict, ax=self.axes)) + + # TODO handle the text + + # handle the node labels + if vertex_label_style is not None: + vlabel_style_dict = generate_vertex_label_styles( + graph, + vertex_label_style) + self._vertex_label_dict = ( + _generate_vertex_labels(pos, vlabel_style_dict, ax=self.axes)) + + # handle the edge labels + if edge_label_style is not None: + elabel_style_dict = generate_edge_label_styles(graph, + edge_label_style) + self._edge_label_dict = ( + _generate_edge_labels(pos, elabel_style_dict, ax=self.axes)) + + # TODO sort out all of the things that need to be forwarded + for child in self.get_children(): + # set the figure / axes on child, this is needed + # by some internals + child.set_figure(self.figure) + child.axes = self.axes + # forward the clippath/box to the children need this logic + # because mpl exposes some fast-path logic + clip_path = self.get_clip_path() + if clip_path is None: + clip_box = self.get_clip_box() + child.set_clip_box(clip_box) + else: + child.set_clip_path(clip_path) + + @_stale_wrapper + def draw(self, renderer, *args, **kwargs): + """Draw each of the children, with some buffering mechanism.""" + if not self.get_visible(): + return + + if not self.get_children(): + self._reprocess() + + elif self.stale: + self._reprocess(reset_pos=False) + + for art in self.get_children(): + art.draw(renderer, *args, **kwargs) + + def contains(self, mouseevent): + """Track 'contains' event for mouse interactions.""" + props = {} + edge_hit, edge_props = self._edge_artist.contains(mouseevent) + vertex_hit, vertex_props = self._vertex_artist.contains(mouseevent) + props['vertices'] = [self._node_indx[j] + for j in vertex_props.get('ind', [])] + props['edges'] = [self._edge_indx[j] + for j in edge_props.get('ind', [])] + + return edge_hit | node_hit, props + + def pick(self, mouseevent): + """Track 'pick' event for mouse interactions.""" + # Pick self + if self.pickable(): + picker = self.get_picker() + if callable(picker): + inside, prop = picker(self, mouseevent) + else: + inside, prop = self.contains(mouseevent) + if inside: + self.figure.canvas.pick_event(mouseevent, self, **prop) + + class MatplotlibGraphDrawer(AbstractGraphDrawer): """Graph drawer that uses a pyplot.Axes as context""" From df01256a3553fcbf8b0677e02851f9eef1dec3f6 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Tue, 4 Apr 2023 14:57:47 +1000 Subject: [PATCH 027/681] A bit more logic --- src/igraph/drawing/matplotlib/graph.py | 28 +++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index a3dd32de7..86e0647b5 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -73,6 +73,7 @@ def _clear_state(self): self._edge_indx = None self._vertex_labels = None self._edge_labels = None + self._group_artist = None def get_children(self): artists = [self._vertex_artist, self._edge_artist] @@ -80,8 +81,25 @@ def get_children(self): artists.extend(self._vertex_labels) if self._edge_labels is not None: artists.extend(self._edge_labels) + if self._group_artist is not None: + artists.extend(self._group_artist) return tuple(a for a in artists if a is not None) + def get_vertices(self): + return self._vertex_artist + + def get_edges(seff): + return self._edge_artist + + def get_groups(self): + return self._group_artist + + def get_vertex_labels(self): + return self._vertex_labels + + def get_edge_labels(self): + return self._edge_labels + def get_datalim(self): import numpy as np @@ -91,7 +109,11 @@ def get_datalim(self): return (mins, maxs) def _reprocess(self, *): - """Process the actual drawing.""" + """Prepare artist and children for the actual drawing. + + Children are not drawn here, but the dictionaries of properties are + marshalled to their specific artists. + """ # nuke old state and mark as stale self._clear_state() self.stale = True @@ -106,13 +128,13 @@ def _reprocess(self, *): # get the layout pos = self.layout.coords - # handle the edges + # edges edge_style_dict = generate_edge_styles(graph, edge_style) self._edge_artist, self._edge_indx = ( _generate_straight_edges(graph.edges(), pos, edge_style_dict, ax=self.axes)) - # handle the nodes + # vertices vertex_style_dict = generate_node_styles(graph, node_style) self._vertex_artist, self._vertex_indx = ( _generate_vertex_artist(pos, vertex_style_dict, ax=self.axes)) From bf3a18393088c8b9e6ea3f160c2d57a024213934 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Tue, 4 Apr 2023 18:09:23 +1000 Subject: [PATCH 028/681] Move more logic to artist --- src/igraph/drawing/matplotlib/graph.py | 114 +++++++++++++++---------- 1 file changed, 68 insertions(+), 46 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 86e0647b5..562465422 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -53,7 +53,8 @@ def __init__( edge_style=None, vertex_label_style=None, edge_label_style=None, - **kwargs, + mark_groups=False, + **kwds, ): super().__init__() @@ -63,9 +64,36 @@ def __init__( self.edge_style = edge_style self.vertex_label_style = vertex_label_style self.edge_label_style = edge_label_style + self.mark_groups = mark_groups + self.edge_curved = self._set_edge_curve(**kwds) + self.palette = kwds.pop("palette", None) + self.kwds = kwds self._clear_state() + def _set_edge_curve(self, **kwds): + # Decide whether we need to calculate the curvature of edges + # automatically -- and calculate them if needed. + autocurve = kwds.get("autocurve", None) + if autocurve or ( + autocurve is None + and "edge_curved" not in kwds + and "curved" not in self.graph.edge_attributes() + and self.graph.ecount() < 10000 + ): + from igraph import autocurve + + default = kwds.get("edge_curved", 0) + if default is True: + default = 0.5 + default = float(default) + return autocurve( + graph, + attribute=None, + default=default, + ) + return None + def _clear_state(self): self._vertex_artist = None self._vertex_indx = None @@ -124,9 +152,19 @@ def _reprocess(self, *): vertex_style = self.vertex_style edge_label_style = self.edge_label_style vertex_label_style = self.vertex_label_style + layout = self.layout + kwds = self.kwds - # get the layout - pos = self.layout.coords + # Determine the order in which we will draw the vertices and edges + # These methods come from AbstractGraphDrawer + vertex_order = self._determine_vertex_order(graph, kwds) + edge_order = self._determine_edge_order(graph, kwds) + + # FIXME FIXME + # vertices + vertex_style_dict = generate_node_styles(graph, node_style) + self._vertex_artist, self._vertex_indx = ( + _generate_vertex_artist(pos, vertex_style_dict, ax=self.axes)) # edges edge_style_dict = generate_edge_styles(graph, edge_style) @@ -134,10 +172,6 @@ def _reprocess(self, *): _generate_straight_edges(graph.edges(), pos, edge_style_dict, ax=self.axes)) - # vertices - vertex_style_dict = generate_node_styles(graph, node_style) - self._vertex_artist, self._vertex_indx = ( - _generate_vertex_artist(pos, vertex_style_dict, ax=self.axes)) # TODO handle the text @@ -172,7 +206,7 @@ def _reprocess(self, *): child.set_clip_path(clip_path) @_stale_wrapper - def draw(self, renderer, *args, **kwargs): + def draw(self, renderer, *args, **kwds): """Draw each of the children, with some buffering mechanism.""" if not self.get_visible(): return @@ -184,7 +218,7 @@ def draw(self, renderer, *args, **kwargs): self._reprocess(reset_pos=False) for art in self.get_children(): - art.draw(renderer, *args, **kwargs) + art.draw(renderer, *args, **kwds) def contains(self, mouseevent): """Track 'contains' event for mouse interactions.""" @@ -262,32 +296,20 @@ def draw(self, graph, *args, **kwds): directed = graph.is_directed() ax = self.ax - # Palette - palette = kwds.pop("palette", None) - - # Calculate/get the layout of the graph - layout = self.ensure_layout(kwds.get("layout", None), graph) - - # Decide whether we need to calculate the curvature of edges - # automatically -- and calculate them if needed. - autocurve = kwds.get("autocurve", None) - if autocurve or ( - autocurve is None - and "edge_curved" not in kwds - and "curved" not in graph.edge_attributes() - and graph.ecount() < 10000 - ): - from igraph import autocurve - - default = kwds.get("edge_curved", 0) - if default is True: - default = 0.5 - default = float(default) - kwds["edge_curved"] = autocurve( - graph, - attribute=None, - default=default, - ) + # Create artist + art = GraphArtist( + graph, + layout=kwds.get("layout", None), + vertex_style=None, + edge_style=None, + vertex_label_style=None, + edge_label_style=None, + mark_groups=False, + **kwds, + ) + + ax.add_artist(art) + art._reprocess() # Construct the vertex, edge and label drawers vertex_drawer = self.vertex_drawer_factory(ax, palette, layout) @@ -392,9 +414,6 @@ def draw(self, graph, *args, **kwds): legend_info["labels"], ) - # Determine the order in which we will draw the vertices and edges - vertex_order = self._determine_vertex_order(graph, kwds) - edge_order = self._determine_edge_order(graph, kwds) # Construct the iterator that we will use to draw the vertices vs = graph.vs @@ -475,24 +494,24 @@ def draw(self, graph, *args, **kwds): dest_vertex, ) - text_kwargs = {} - text_kwargs['ha'] = halign.value - text_kwargs['va'] = valign.value + text_kwds = {} + text_kwds['ha'] = halign.value + text_kwds['va'] = valign.value if visual_edge.background is not None: - text_kwargs['bbox'] = dict( + text_kwds['bbox'] = dict( facecolor=visual_edge.background, edgecolor='none', ) - text_kwargs['ha'] = 'center' - text_kwargs['va'] = 'center' + text_kwds['ha'] = 'center' + text_kwds['va'] = 'center' if visual_edge.align_label: # Rotate the text to align with the edge rotation = edge_drawer.get_label_rotation( visual_edge, src_vertex, dest_vertex, ) - text_kwargs['rotation'] = rotation + text_kwds['rotation'] = rotation ax.text( x, @@ -500,10 +519,13 @@ def draw(self, graph, *args, **kwds): label, fontsize=visual_edge.label_size, color=visual_edge.label_color, - **text_kwargs, + **text_kwds, # TODO: offset, etc. ) + # Set new data limits + ax.update_datalim(art.get_datalim()) + # Despine ax.spines["right"].set_visible(False) ax.spines["top"].set_visible(False) From 7dc40b3552e8b215302422fc9ce1bb59d6075c53 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 11:50:52 +1000 Subject: [PATCH 029/681] Container artist with children creates, but fails to show --- src/igraph/drawing/matplotlib/edge.py | 13 +- src/igraph/drawing/matplotlib/graph.py | 626 +++++++++++++----------- src/igraph/drawing/matplotlib/vertex.py | 5 +- 3 files changed, 338 insertions(+), 306 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index adbdfab89..607f98de9 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -163,7 +163,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): path["codes"].append("LINETO") # Draw the edge - stroke = mpl.patches.PathPatch( + arrowshaft = mpl.patches.PathPatch( mpl.path.Path( path["vertices"], codes=[getattr(mpl.path.Path, x) for x in path["codes"]], @@ -172,7 +172,6 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): facecolor="none", linewidth=edge.width, ) - ax.add_patch(stroke) # Draw the arrow head arrowhead = mpl.patches.Polygon( @@ -185,7 +184,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): facecolor=edge.color, edgecolor="none", ) - ax.add_patch(arrowhead) + return [arrowshaft, arrowhead] def draw_loop_edge(self, edge, vertex): """Draws a loop edge. @@ -201,7 +200,7 @@ def draw_loop_edge(self, edge, vertex): radius = vertex.size * 1.5 center_x = vertex.position[0] + cos(pi / 4) * radius / 2.0 center_y = vertex.position[1] - sin(pi / 4) * radius / 2.0 - stroke = mpl.patches.Arc( + art = mpl.patches.Arc( (center_x, center_y), radius / 2.0, radius / 2.0, @@ -212,7 +211,7 @@ def draw_loop_edge(self, edge, vertex): edgecolor=edge.color, ) # FIXME: make a PathCollection?? - ax.add_patch(stroke) + return [art] def draw_undirected_edge(self, edge, src_vertex, dest_vertex): """Draws an undirected edge. @@ -247,7 +246,7 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): path["vertices"].append(dest_vertex.position) path["codes"].append("LINETO") - stroke = mpl.patches.PathPatch( + art = mpl.patches.PathPatch( mpl.path.Path( path["vertices"], codes=[getattr(mpl.path.Path, x) for x in path["codes"]], @@ -257,4 +256,4 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): linewidth=edge.width, ) # FIXME: make a PathCollection?? - ax.add_artist(stroke) + return [art] diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 562465422..576584b7b 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -14,6 +14,7 @@ """ from warnings import warn +from functools import wraps from igraph._igraph import convex_hull, VertexSeq from igraph.drawing.baseclasses import AbstractGraphDrawer @@ -27,7 +28,7 @@ __all__ = ( "MatplotlibGraphDrawer", "GraphArtist", - ) +) mpl, plt = find_matplotlib() @@ -35,6 +36,17 @@ # NOTE: https://github.com/networkx/grave/blob/main/grave/grave.py +def _stale_wrapper(func): + @wraps(func) + def inner(self, *args, **kwargs): + try: + func(self, *args, **kwargs) + finally: + self.stale = False + + return inner + + class GraphArtist(mpl.artist.Artist, AbstractGraphDrawer): """Artist for an igraph.Graph object. @@ -45,33 +57,53 @@ class GraphArtist(mpl.artist.Artist, AbstractGraphDrawer): vertex_style: A dictionary specifying style options for vertices. edge_style: A dictionary specifying style options for edges. """ + def __init__( self, graph, + vertex_drawer_factory=MatplotlibVertexDrawer, + edge_drawer_factory=MatplotlibEdgeDrawer, layout=None, - vertex_style=None, - edge_style=None, - vertex_label_style=None, - edge_label_style=None, mark_groups=False, + palette=None, **kwds, ): - super().__init__() self.graph = graph - self.layout = self.ensure_layout(layout) - self.vertex_style = vertex_style - self.edge_style = edge_style - self.vertex_label_style = vertex_label_style - self.edge_label_style = edge_label_style + self.layout = self.ensure_layout(layout, graph) + self.vertex_drawer_factory = vertex_drawer_factory + self.edge_drawer_factory = edge_drawer_factory self.mark_groups = mark_groups self.edge_curved = self._set_edge_curve(**kwds) - self.palette = kwds.pop("palette", None) + self.palette = palette self.kwds = kwds self._clear_state() + def _clear_state(self): + self._vertex_artists = [] + self._edge_artists = [] + self._vertex_labels = [] + self._edge_labels = [] + self._group_artists = [] + self._legend_info = {} + + def get_children(self): + artists = sum( + [ + self._vertex_artists, + self._edge_artists, + self._vertex_labels, + self._edge_labels, + self._group_artists, + ], + [], + ) + return tuple(artists) + def _set_edge_curve(self, **kwds): + graph = self.graph + # Decide whether we need to calculate the curvature of edges # automatically -- and calculate them if needed. autocurve = kwds.get("autocurve", None) @@ -94,33 +126,14 @@ def _set_edge_curve(self, **kwds): ) return None - def _clear_state(self): - self._vertex_artist = None - self._vertex_indx = None - self._edge_artist = None - self._edge_indx = None - self._vertex_labels = None - self._edge_labels = None - self._group_artist = None - - def get_children(self): - artists = [self._vertex_artist, self._edge_artist] - if self._vertex_labels is not None: - artists.extend(self._vertex_labels) - if self._edge_labels is not None: - artists.extend(self._edge_labels) - if self._group_artist is not None: - artists.extend(self._group_artist) - return tuple(a for a in artists if a is not None) - def get_vertices(self): - return self._vertex_artist + return self._vertex_artists - def get_edges(seff): - return self._edge_artist + def get_edges(self): + return self._edge_artists def get_groups(self): - return self._group_artist + return self._group_artists def get_vertex_labels(self): return self._vertex_labels @@ -136,7 +149,250 @@ def get_datalim(self): return (mins, maxs) - def _reprocess(self, *): + def _draw_vertex_labels(self): + kwds = self.kwds + layout = self.layout + vertex_builder = self.vertex_builder + vertex_order = self.vertex_order + + # Construct the iterator that we will use to draw the vertex labels + if vertex_order is None: + # Default vertex order + vertex_coord_iter = zip(vertex_builder, layout) + else: + # Specified vertex order + vertex_coord_iter = ((vertex_builder[i], layout[i]) for i in vertex_order) + + # Draw the vertex labels + for vertex, coords in vertex_coord_iter: + if vertex.label is None: + continue + + label_size = kwds.get( + "vertex_label_size", + vertex.label_size, + ) + + art = mpl.text.Text( + *coords, + vertex.label, + fontsize=label_size, + ha="center", + va="center", + transform=self.axes.transData, + clip_on=True, + # TODO: overlap, offset, etc. + ) + self._vertex_labels.append(art) + + def _draw_edge_labels(self): + graph = self.graph + kwds = self.kwds + vertex_builder = self.vertex_builder + edge_builder = self.edge_builder + edge_drawer = self.edge_drawer + edge_order = self.edge_order + + labels = kwds.get("edge_label", None) + if labels is None: + return + + edge_label_iter = ( + (labels[i], edge_builder[i], graph.es[i]) for i in range(edge_order) + ) + for label, visual_edge, edge in edge_label_iter: + # Ask the edge drawer to propose an anchor point for the label + src, dest = edge.tuple + src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] + (x, y), (halign, valign) = edge_drawer.get_label_position( + visual_edge, + src_vertex, + dest_vertex, + ) + + text_kwds = {} + text_kwds["ha"] = halign.value + text_kwds["va"] = valign.value + + if visual_edge.background is not None: + text_kwds["bbox"] = dict( + facecolor=visual_edge.background, + edgecolor="none", + ) + text_kwds["ha"] = "center" + text_kwds["va"] = "center" + + if visual_edge.align_label: + # Rotate the text to align with the edge + rotation = edge_drawer.get_label_rotation( + visual_edge, + src_vertex, + dest_vertex, + ) + text_kwds["rotation"] = rotation + + art = mpl.text.Text( + x, + y, + label, + fontsize=visual_edge.label_size, + color=visual_edge.label_color, + transform=self.axes.transData, + clip_on=True, + **text_kwds, + # TODO: offset, etc. + ) + self._vertex_labels.append(art) + + def _draw_groups(self): + """Draw the highlighted vertex groups, if requested""" + # Deferred import to avoid a cycle in the import graph + from igraph.clustering import VertexClustering, VertexCover + + kwds = self.kwds + palette = self.palette + layout = self.layout + vertex_builder = self.vertex_builder + + if not kwds.get("mark_groups", False): + return + + # Figure out what to do with mark_groups in order to be able to + # iterate over it and get memberlist-color pairs + mark_groups = kwds["mark_groups"] + if isinstance(mark_groups, dict): + # Dictionary mapping vertex indices or tuples of vertex + # indices to colors + group_iter = iter(mark_groups.items()) + elif isinstance(mark_groups, (VertexClustering, VertexCover)): + # Vertex clustering + group_iter = ((group, color) for color, group in enumerate(mark_groups)) + elif hasattr(mark_groups, "__iter__"): + # Lists, tuples, iterators etc + group_iter = iter(mark_groups) + else: + # False + group_iter = iter({}.items()) + + if kwds.get("legend", False): + legend_info = { + "handles": [], + "labels": [], + } + + # Iterate over color-memberlist pairs + for group, color_id in group_iter: + if not group or color_id is None: + continue + + color = palette.get(color_id) + + if isinstance(group, VertexSeq): + group = [vertex.index for vertex in group] + if not hasattr(group, "__iter__"): + raise TypeError("group membership list must be iterable") + + # Get the vertex indices that constitute the convex hull + hull = [group[i] for i in convex_hull([layout[idx] for idx in group])] + + # Calculate the preferred rounding radius for the corners + corner_radius = 1.25 * max(vertex_builder[idx].size for idx in hull) + + # Construct the polygon + polygon = [layout[idx] for idx in hull] + + if len(polygon) == 2: + # Expand the polygon (which is a flat line otherwise) + a, b = Point(*polygon[0]), Point(*polygon[1]) + c = corner_radius * (a - b).normalized() + n = Point(-c[1], c[0]) + polygon = [a + n, b + n, b - c, b - n, a - n, a + c] + else: + # Expand the polygon around its center of mass + center = Point( + *[sum(coords) / float(len(coords)) for coords in zip(*polygon)] + ) + polygon = [ + Point(*point).towards(center, -corner_radius) for point in polygon + ] + + # Draw the hull + # FIXME: defer this to the draw operation! + facecolor = (color[0], color[1], color[2], 0.25 * color[3]) + drawer = MatplotlibPolygonDrawer(self.axes) + drawer.draw( + polygon, + corner_radius=corner_radius, + facecolor=facecolor, + edgecolor=color, + ) + + if kwds.get("legend", False): + legend_info["handles"].append( + plt.Rectangle( + (0, 0), + 0, + 0, + facecolor=facecolor, + edgecolor=color, + ) + ) + legend_info["labels"].append(str(color_id)) + + if kwds.get("legend", False): + self.legend_info = legend_info + + def _draw_vertices(self): + """Draw the vertices""" + graph = self.graph + layout = self.layout + vertex_drawer = self.vertex_drawer + vertex_builder = self.vertex_builder + vertex_order = self.vertex_order + + vs = graph.vs + if vertex_order is None: + # Default vertex order + vertex_coord_iter = zip(vs, vertex_builder, layout) + else: + # Specified vertex order + vertex_coord_iter = ( + (vs[i], vertex_builder[i], layout[i]) for i in vertex_order + ) + for vertex, visual_vertex, coords in vertex_coord_iter: + art = vertex_drawer.draw(visual_vertex, vertex, coords) + self._vertex_artists.append(art) + + def _draw_edges(self): + """Draw the edges""" + graph = self.graph + vertex_builder = self.vertex_builder + edge_drawer = self.edge_drawer + edge_builder = self.edge_builder + edge_order = self.edge_order + + es = graph.es + if edge_order is None: + # Default edge order + edge_coord_iter = zip(es, edge_builder) + else: + # Specified edge order + edge_coord_iter = ((es[i], edge_builder[i]) for i in edge_order) + + directed = graph.is_directed() + if directed: + # Arrows and the likes + drawer_method = edge_drawer.draw_directed_edge + else: + # Lines + drawer_method = edge_drawer.draw_undirected_edge + for edge, visual_edge in edge_coord_iter: + src, dest = edge.tuple + src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] + arts = drawer_method(visual_edge, src_vertex, dest_vertex) + self._edge_artists.extend(arts) + + def _reprocess(self): """Prepare artist and children for the actual drawing. Children are not drawn here, but the dictionaries of properties are @@ -148,54 +404,38 @@ def _reprocess(self, *): # get local refs to everything (just for less typing) graph = self.graph - edge_style = self.edge_style - vertex_style = self.vertex_style - edge_label_style = self.edge_label_style - vertex_label_style = self.vertex_label_style + palette = self.palette layout = self.layout kwds = self.kwds + # Construct the vertex, edge and label drawers + self.vertex_drawer = self.vertex_drawer_factory(self.axes, palette, layout) + self.edge_drawer = self.edge_drawer_factory(self.axes, palette) + + # Construct the visual vertex/edge builders based on the specifications + # provided by the vertex_drawer and the edge_drawer + self.vertex_builder = self.vertex_drawer.VisualVertexBuilder(graph.vs, kwds) + self.edge_builder = self.edge_drawer.VisualEdgeBuilder(graph.es, kwds) + # Determine the order in which we will draw the vertices and edges # These methods come from AbstractGraphDrawer - vertex_order = self._determine_vertex_order(graph, kwds) - edge_order = self._determine_edge_order(graph, kwds) - - # FIXME FIXME - # vertices - vertex_style_dict = generate_node_styles(graph, node_style) - self._vertex_artist, self._vertex_indx = ( - _generate_vertex_artist(pos, vertex_style_dict, ax=self.axes)) - - # edges - edge_style_dict = generate_edge_styles(graph, edge_style) - self._edge_artist, self._edge_indx = ( - _generate_straight_edges(graph.edges(), pos, - edge_style_dict, ax=self.axes)) - - - # TODO handle the text - - # handle the node labels - if vertex_label_style is not None: - vlabel_style_dict = generate_vertex_label_styles( - graph, - vertex_label_style) - self._vertex_label_dict = ( - _generate_vertex_labels(pos, vlabel_style_dict, ax=self.axes)) - - # handle the edge labels - if edge_label_style is not None: - elabel_style_dict = generate_edge_label_styles(graph, - edge_label_style) - self._edge_label_dict = ( - _generate_edge_labels(pos, elabel_style_dict, ax=self.axes)) + self.vertex_order = self._determine_vertex_order(graph, kwds) + self.edge_order = self._determine_edge_order(graph, kwds) + + self._draw_groups() + self._draw_vertices() + self._draw_edges() + self._draw_vertex_labels() + self._draw_edge_labels() + # Forward mpl properties to children # TODO sort out all of the things that need to be forwarded for child in self.get_children(): - # set the figure / axes on child, this is needed - # by some internals + # set the figure / axes on child, this ensures each primitive + # knows where to draw child.set_figure(self.figure) child.axes = self.axes + # forward the clippath/box to the children need this logic # because mpl exposes some fast-path logic clip_path = self.get_clip_path() @@ -215,7 +455,7 @@ def draw(self, renderer, *args, **kwds): self._reprocess() elif self.stale: - self._reprocess(reset_pos=False) + self._reprocess() for art in self.get_children(): art.draw(renderer, *args, **kwds) @@ -225,12 +465,10 @@ def contains(self, mouseevent): props = {} edge_hit, edge_props = self._edge_artist.contains(mouseevent) vertex_hit, vertex_props = self._vertex_artist.contains(mouseevent) - props['vertices'] = [self._node_indx[j] - for j in vertex_props.get('ind', [])] - props['edges'] = [self._edge_indx[j] - for j in edge_props.get('ind', [])] + props["vertices"] = [self._node_indx[j] for j in vertex_props.get("ind", [])] + props["edges"] = [self._edge_indx[j] for j in edge_props.get("ind", [])] - return edge_hit | node_hit, props + return edge_hit | vertex_hit, props def pick(self, mouseevent): """Track 'pick' event for mouse interactions.""" @@ -293,235 +531,29 @@ def draw(self, graph, *args, **kwds): ) # Some abbreviations for sake of simplicity - directed = graph.is_directed() ax = self.ax # Create artist art = GraphArtist( graph, - layout=kwds.get("layout", None), - vertex_style=None, - edge_style=None, - vertex_label_style=None, - edge_label_style=None, - mark_groups=False, + vertex_drawer_factory=self.vertex_drawer_factory, + edge_drawer_factory=self.edge_drawer_factory, + *args, **kwds, ) + # Bind artist to axes ax.add_artist(art) - art._reprocess() - # Construct the vertex, edge and label drawers - vertex_drawer = self.vertex_drawer_factory(ax, palette, layout) - edge_drawer = self.edge_drawer_factory(ax, palette) - - # Construct the visual vertex/edge builders based on the specifications - # provided by the vertex_drawer and the edge_drawer - vertex_builder = vertex_drawer.VisualVertexBuilder(graph.vs, kwds) - edge_builder = edge_drawer.VisualEdgeBuilder(graph.es, kwds) - - # Draw the highlighted groups (if any) - if "mark_groups" in kwds: - mark_groups = kwds["mark_groups"] - - # Deferred import to avoid a cycle in the import graph - from igraph.clustering import VertexClustering, VertexCover - - # Figure out what to do with mark_groups in order to be able to - # iterate over it and get memberlist-color pairs - if isinstance(mark_groups, dict): - # Dictionary mapping vertex indices or tuples of vertex - # indices to colors - group_iter = iter(mark_groups.items()) - elif isinstance(mark_groups, (VertexClustering, VertexCover)): - # Vertex clustering - group_iter = ((group, color) for color, group in enumerate(mark_groups)) - elif hasattr(mark_groups, "__iter__"): - # Lists, tuples, iterators etc - group_iter = iter(mark_groups) - else: - # False - group_iter = iter({}.items()) - - if kwds.get("legend", False): - legend_info = { - "handles": [], - "labels": [], - } - - # Iterate over color-memberlist pairs - for group, color_id in group_iter: - if not group or color_id is None: - continue - - color = palette.get(color_id) - - if isinstance(group, VertexSeq): - group = [vertex.index for vertex in group] - if not hasattr(group, "__iter__"): - raise TypeError("group membership list must be iterable") - - # Get the vertex indices that constitute the convex hull - hull = [group[i] for i in convex_hull([layout[idx] for idx in group])] - - # Calculate the preferred rounding radius for the corners - corner_radius = 1.25 * max(vertex_builder[idx].size for idx in hull) - - # Construct the polygon - polygon = [layout[idx] for idx in hull] - - if len(polygon) == 2: - # Expand the polygon (which is a flat line otherwise) - a, b = Point(*polygon[0]), Point(*polygon[1]) - c = corner_radius * (a - b).normalized() - n = Point(-c[1], c[0]) - polygon = [a + n, b + n, b - c, b - n, a - n, a + c] - else: - # Expand the polygon around its center of mass - center = Point( - *[sum(coords) / float(len(coords)) for coords in zip(*polygon)] - ) - polygon = [ - Point(*point).towards(center, -corner_radius) - for point in polygon - ] - - # Draw the hull - facecolor = (color[0], color[1], color[2], 0.25 * color[3]) - drawer = MatplotlibPolygonDrawer(ax) - drawer.draw( - polygon, - corner_radius=corner_radius, - facecolor=facecolor, - edgecolor=color, - ) - - if kwds.get("legend", False): - legend_info["handles"].append( - plt.Rectangle( - (0, 0), - 0, - 0, - facecolor=facecolor, - edgecolor=color, - ) - ) - legend_info["labels"].append(str(color_id)) - - if kwds.get("legend", False): - ax.legend( - legend_info["handles"], - legend_info["labels"], - ) - - - # Construct the iterator that we will use to draw the vertices - vs = graph.vs - if vertex_order is None: - # Default vertex order - vertex_coord_iter = zip(vs, vertex_builder, layout) - else: - # Specified vertex order - vertex_coord_iter = ( - (vs[i], vertex_builder[i], layout[i]) for i in vertex_order - ) - - # Draw the vertices - drawer_method = vertex_drawer.draw - for vertex, visual_vertex, coords in vertex_coord_iter: - drawer_method(visual_vertex, vertex, coords) - - # Construct the iterator that we will use to draw the vertex labels - vs = graph.vs - if vertex_order is None: - # Default vertex order - vertex_coord_iter = zip(vertex_builder, layout) - else: - # Specified vertex order - vertex_coord_iter = ((vertex_builder[i], layout[i]) for i in vertex_order) - - # Draw the vertex labels - for vertex, coords in vertex_coord_iter: - if vertex.label is None: - continue - - label_size = kwds.get( - "vertex_label_size", - vertex.label_size, - ) - - ax.text( - *coords, - vertex.label, - fontsize=label_size, - ha='center', - va='center', - # TODO: overlap, offset, etc. - ) - - # Construct the iterator that we will use to draw the edges - es = graph.es - if edge_order is None: - # Default edge order - edge_coord_iter = zip(es, edge_builder) - else: - # Specified edge order - edge_coord_iter = ((es[i], edge_builder[i]) for i in edge_order) - - # Draw the edges - if directed: - drawer_method = edge_drawer.draw_directed_edge - else: - drawer_method = edge_drawer.draw_undirected_edge - for edge, visual_edge in edge_coord_iter: - src, dest = edge.tuple - src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] - drawer_method(visual_edge, src_vertex, dest_vertex) + # Create children artists (this also binds them to the axes) + art._reprocess() - # Draw the edge labels - labels = kwds.get("edge_label", None) - if labels is not None: - edge_label_iter = ( - (labels[i], edge_builder[i], graph.es[i]) for i in range(graph.ecount()) + # Legend for groups + if ("mark_groups" in kwds) and kwds.get("legend", False): + ax.legend( + art._legend_info["handles"], + art._legend_info["labels"], ) - for label, visual_edge, edge in edge_label_iter: - # Ask the edge drawer to propose an anchor point for the label - src, dest = edge.tuple - src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] - (x, y), (halign, valign) = edge_drawer.get_label_position( - visual_edge, - src_vertex, - dest_vertex, - ) - - text_kwds = {} - text_kwds['ha'] = halign.value - text_kwds['va'] = valign.value - - if visual_edge.background is not None: - text_kwds['bbox'] = dict( - facecolor=visual_edge.background, - edgecolor='none', - ) - text_kwds['ha'] = 'center' - text_kwds['va'] = 'center' - - if visual_edge.align_label: - # Rotate the text to align with the edge - rotation = edge_drawer.get_label_rotation( - visual_edge, src_vertex, dest_vertex, - ) - text_kwds['rotation'] = rotation - - ax.text( - x, - y, - label, - fontsize=visual_edge.label_size, - color=visual_edge.label_color, - **text_kwds, - # TODO: offset, etc. - ) # Set new data limits ax.update_datalim(art.get_datalim()) diff --git a/src/igraph/drawing/matplotlib/vertex.py b/src/igraph/drawing/matplotlib/vertex.py index 3a7db0d90..00270a010 100644 --- a/src/igraph/drawing/matplotlib/vertex.py +++ b/src/igraph/drawing/matplotlib/vertex.py @@ -44,6 +44,7 @@ class VisualVertexBuilder(AttributeCollectorBase): return VisualVertexBuilder def draw(self, visual_vertex, vertex, coords): + """Build the Artist for a vertex and return it.""" ax = self.context width = ( @@ -57,7 +58,7 @@ def draw(self, visual_vertex, vertex, coords): else visual_vertex.size ) - stroke = visual_vertex.shape.draw_path( + art = visual_vertex.shape.draw_path( ax, coords[0], coords[1], @@ -68,4 +69,4 @@ def draw(self, visual_vertex, vertex, coords): linewidth=visual_vertex.frame_width, zorder=visual_vertex.zorder, ) - ax.add_patch(stroke) + return art From e310f201dbb76dfaa761470fbe355efbdc2f2832 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 11:56:05 +1000 Subject: [PATCH 030/681] Forwarder as in grave --- src/igraph/drawing/matplotlib/graph.py | 29 +++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 576584b7b..6fdef7f03 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -14,7 +14,7 @@ """ from warnings import warn -from functools import wraps +from functools import wraps, partial from igraph._igraph import convex_hull, VertexSeq from igraph.drawing.baseclasses import AbstractGraphDrawer @@ -37,6 +37,7 @@ # NOTE: https://github.com/networkx/grave/blob/main/grave/grave.py def _stale_wrapper(func): + """Decorator to manage artist state.""" @wraps(func) def inner(self, *args, **kwargs): try: @@ -47,6 +48,32 @@ def inner(self, *args, **kwargs): return inner +def _forwarder(forwards, cls=None): + """Decorator to forward specific methods to Artist children.""" + if cls is None: + return partial(_forwarder, forwards) + + def make_forward(name): + def method(self, *args, **kwargs): + ret = getattr(cls.mro()[1], name)(self, *args, **kwargs) + for c in self.get_children(): + getattr(c, name)(*args, **kwargs) + return ret + + return method + + for f in forwards: + method = make_forward(f) + method.__name__ = f + method.__doc__ = 'broadcasts {} to children'.format(f) + setattr(cls, f, method) + + return cls + + +@_forwarder(('set_clip_path', 'set_clip_box', 'set_transform', + 'set_snap', 'set_sketch_params', 'set_figure', + 'set_animated', 'set_picker')) class GraphArtist(mpl.artist.Artist, AbstractGraphDrawer): """Artist for an igraph.Graph object. From 33e57b590ee109623baca52abaeb5195c6d5382f Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 11:58:01 +1000 Subject: [PATCH 031/681] Remove unused import --- src/igraph/drawing/__init__.py | 6 +----- src/igraph/drawing/matplotlib/graph.py | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/igraph/drawing/__init__.py b/src/igraph/drawing/__init__.py index ec1a8168f..5ae708ccc 100644 --- a/src/igraph/drawing/__init__.py +++ b/src/igraph/drawing/__init__.py @@ -41,10 +41,7 @@ from igraph.drawing.cairo.matrix import CairoMatrixDrawer from igraph.drawing.cairo.histogram import CairoHistogramDrawer from igraph.drawing.cairo.palette import CairoPaletteDrawer -from igraph.drawing.matplotlib.graph import ( - MatplotlibGraphDrawer, - GraphArtist, -) +from igraph.drawing.matplotlib.graph import MatplotlibGraphDrawer from igraph.drawing.matplotlib.matrix import MatplotlibMatrixDrawer from igraph.drawing.matplotlib.histogram import MatplotlibHistogramDrawer from igraph.drawing.matplotlib.palette import MatplotlibPaletteDrawer @@ -57,7 +54,6 @@ "BoundingBox", "CairoGraphDrawer", "MatplotlibGraphDrawer", - "GraphArtist", "DefaultGraphDrawer", "Plot", "Point", diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 6fdef7f03..113dac3b5 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -27,7 +27,6 @@ __all__ = ( "MatplotlibGraphDrawer", - "GraphArtist", ) mpl, plt = find_matplotlib() From 794410eb6f944d503dfb34a764c547cc355a5ef4 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 19:32:03 +1000 Subject: [PATCH 032/681] Injected axes into builders should be used for transData --- src/igraph/drawing/matplotlib/edge.py | 8 +++++ src/igraph/drawing/matplotlib/graph.py | 41 ++++++++++++++++++-------- src/igraph/drawing/shapes.py | 39 ++++++++++++++++++++---- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 607f98de9..3919f370d 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -171,6 +171,8 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): edgecolor=edge.color, facecolor="none", linewidth=edge.width, + transform=ax.transData, + clip_on=True, ) # Draw the arrow head @@ -183,6 +185,8 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): closed=True, facecolor=edge.color, edgecolor="none", + transform=ax.transData, + clip_on=True, ) return [arrowshaft, arrowhead] @@ -209,6 +213,8 @@ def draw_loop_edge(self, edge, vertex): linewidth=edge.width, facecolor="none", edgecolor=edge.color, + transform=ax.transData, + clip_on=True, ) # FIXME: make a PathCollection?? return [art] @@ -254,6 +260,8 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): edgecolor=edge.color, facecolor="none", linewidth=edge.width, + transform=ax.transData, + clip_on=True, ) # FIXME: make a PathCollection?? return [art] diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 113dac3b5..7146ba8a5 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -25,9 +25,7 @@ from .utils import find_matplotlib from .vertex import MatplotlibVertexDrawer -__all__ = ( - "MatplotlibGraphDrawer", -) +__all__ = ("MatplotlibGraphDrawer",) mpl, plt = find_matplotlib() @@ -37,6 +35,7 @@ # NOTE: https://github.com/networkx/grave/blob/main/grave/grave.py def _stale_wrapper(func): """Decorator to manage artist state.""" + @wraps(func) def inner(self, *args, **kwargs): try: @@ -64,15 +63,24 @@ def method(self, *args, **kwargs): for f in forwards: method = make_forward(f) method.__name__ = f - method.__doc__ = 'broadcasts {} to children'.format(f) + method.__doc__ = "broadcasts {} to children".format(f) setattr(cls, f, method) return cls -@_forwarder(('set_clip_path', 'set_clip_box', 'set_transform', - 'set_snap', 'set_sketch_params', 'set_figure', - 'set_animated', 'set_picker')) +@_forwarder( + ( + "set_clip_path", + "set_clip_box", + "set_transform", + "set_snap", + "set_sketch_params", + "set_figure", + "set_animated", + "set_picker", + ) +) class GraphArtist(mpl.artist.Artist, AbstractGraphDrawer): """Artist for an igraph.Graph object. @@ -170,9 +178,21 @@ def get_edge_labels(self): def get_datalim(self): import numpy as np + vertex_builder = self.vertex_builder + mins = np.min(self.layout, axis=0) maxs = np.max(self.layout, axis=0) + # Pad by vertex size, to ensure they fit + if vertex_builder.size is not None: + mins -= vertex_builder.size * 1.1 + maxs += vertex_builder.size * 1.1 + else: + mins[0] -= vertex_builder.width * 0.55 + mins[1] -= vertex_builder.height * 0.55 + maxs[0] += vertex_builder.width * 0.55 + maxs[1] += vertex_builder.height * 0.55 + return (mins, maxs) def _draw_vertex_labels(self): @@ -424,7 +444,7 @@ def _reprocess(self): Children are not drawn here, but the dictionaries of properties are marshalled to their specific artists. """ - # nuke old state and mark as stale + # clear state and mark as stale self._clear_state() self.stale = True @@ -477,10 +497,7 @@ def draw(self, renderer, *args, **kwds): if not self.get_visible(): return - if not self.get_children(): - self._reprocess() - - elif self.stale: + if (not self.get_children()) or self.stale: self._reprocess() for art in self.get_children(): diff --git a/src/igraph/drawing/shapes.py b/src/igraph/drawing/shapes.py index d4ca9fc49..69d39bb4d 100644 --- a/src/igraph/drawing/shapes.py +++ b/src/igraph/drawing/shapes.py @@ -96,7 +96,12 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): height = height or width if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): return mpl.patches.Rectangle( - (center_x - width / 2, center_y - height / 2), width, height, **kwargs + (center_x - width / 2, center_y - height / 2), + width, + height, + transform=ctx.transData, + clip_on=True, + **kwargs, ) else: ctx.rectangle(center_x - width / 2, center_y - height / 2, width, height) @@ -163,7 +168,13 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): @see: ShapeDrawer.draw_path""" if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): - return mpl.patches.Circle((center_x, center_y), width / 2, **kwargs) + return mpl.patches.Circle( + (center_x, center_y), + width / 2, + transform=ctx.transData, + clip_on=True, + **kwargs, + ) else: ctx.arc(center_x, center_y, width / 2, 0, 2 * pi) @@ -197,7 +208,13 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): [center_x + 0.5 * width, center_y - 0.333 * height], [center_x, center_x + 0.667 * height], ] - return mpl.patches.Polygon(vertices, closed=True, **kwargs) + return mpl.patches.Polygon( + vertices, + closed=True, + transform=ctx.transData, + clip_on=True, + **kwargs, + ) else: ctx.move_to(center_x - width / 2, center_y + height / 2) ctx.line_to(center_x, center_y - height / 2) @@ -234,7 +251,13 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): [center_x + 0.5 * width, center_y + 0.333 * height], [center_x, center_y - 0.667 * height], ] - return mpl.patches.Polygon(vertices, closed=True, **kwargs) + return mpl.patches.Polygon( + vertices, + closed=True, + transform=ctx.transData, + clip_on=True, + **kwargs, + ) else: ctx.move_to(center_x - width / 2, center_y - height / 2) @@ -273,7 +296,13 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): [center_x + 0.5 * width, center_y], [center_x, center_y + 0.5 * height], ] - return mpl.patches.Polygon(vertices, closed=True, **kwargs) + return mpl.patches.Polygon( + vertices, + closed=True, + transform=ctx.transData, + clip_on=True, + **kwargs, + ) else: ctx.move_to(center_x - width / 2, center_y) ctx.line_to(center_x, center_y + height / 2) From 6e24ea651a6c293ee42f5d0b16669a53574b9e7b Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 20:52:24 +1000 Subject: [PATCH 033/681] Working except for zorder --- src/igraph/drawing/matplotlib/edge.py | 5 +++++ src/igraph/drawing/matplotlib/graph.py | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 3919f370d..04dabf22e 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -51,6 +51,7 @@ class VisualEdgeBuilder(AttributeCollectorBase): width = 2.0 background = None align_label = False + zorder = 1 return VisualEdgeBuilder @@ -171,6 +172,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): edgecolor=edge.color, facecolor="none", linewidth=edge.width, + zorder=edge.zorder, transform=ax.transData, clip_on=True, ) @@ -185,6 +187,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): closed=True, facecolor=edge.color, edgecolor="none", + zorder=edge.zorder, transform=ax.transData, clip_on=True, ) @@ -213,6 +216,7 @@ def draw_loop_edge(self, edge, vertex): linewidth=edge.width, facecolor="none", edgecolor=edge.color, + zorder=edge.zorder, transform=ax.transData, clip_on=True, ) @@ -260,6 +264,7 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): edgecolor=edge.color, facecolor="none", linewidth=edge.width, + zorder=edge.zorder, transform=ax.transData, clip_on=True, ) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 7146ba8a5..49fd0d9d0 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -237,14 +237,14 @@ def _draw_edge_labels(self): vertex_builder = self.vertex_builder edge_builder = self.edge_builder edge_drawer = self.edge_drawer - edge_order = self.edge_order + edge_order = self.edge_order or range(self.graph.ecount()) labels = kwds.get("edge_label", None) if labels is None: return edge_label_iter = ( - (labels[i], edge_builder[i], graph.es[i]) for i in range(edge_order) + (labels[i], edge_builder[i], graph.es[i]) for i in edge_order ) for label, visual_edge, edge in edge_label_iter: # Ask the edge drawer to propose an anchor point for the label @@ -469,8 +469,8 @@ def _reprocess(self): self.edge_order = self._determine_edge_order(graph, kwds) self._draw_groups() - self._draw_vertices() self._draw_edges() + self._draw_vertices() self._draw_vertex_labels() self._draw_edge_labels() From 9121dbb10b8491927b5d48af20c6df216350d701 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 20:57:57 +1000 Subject: [PATCH 034/681] Manual management of zorder --- src/igraph/drawing/matplotlib/graph.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 49fd0d9d0..66e1ab30f 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -125,14 +125,17 @@ def _clear_state(self): def get_children(self): artists = sum( [ - self._vertex_artists, + self._group_artists, self._edge_artists, - self._vertex_labels, + self._vertex_artists, self._edge_labels, - self._group_artists, + self._vertex_labels, ], [], ) + + # NOTE: looks like we have to manage the zorder ourselves + artists.sort(key=lambda x: x.zorder) return tuple(artists) def _set_edge_curve(self, **kwds): From 8e63abd9ccacca5c095b2f8136b73615140f5457 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 21:33:56 +1000 Subject: [PATCH 035/681] zorder in the draw function makes children more consistent --- src/igraph/drawing/matplotlib/graph.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 66e1ab30f..ad8098102 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -134,8 +134,6 @@ def get_children(self): [], ) - # NOTE: looks like we have to manage the zorder ourselves - artists.sort(key=lambda x: x.zorder) return tuple(artists) def _set_edge_curve(self, **kwds): @@ -503,7 +501,8 @@ def draw(self, renderer, *args, **kwds): if (not self.get_children()) or self.stale: self._reprocess() - for art in self.get_children(): + # NOTE: looks like we have to manage the zorder ourselves + for art in sorted(self.get_children(), key=lambda x: x.zorder): art.draw(renderer, *args, **kwds) def contains(self, mouseevent): From 9bb39625895355c9de42141c02d09989a3cee4ca Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 21:54:24 +1000 Subject: [PATCH 036/681] Return artist in group hull and speed up sorting for zorder --- src/igraph/drawing/matplotlib/graph.py | 7 +++++-- src/igraph/drawing/matplotlib/polygon.py | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index ad8098102..6bcd474ba 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -367,12 +367,13 @@ def _draw_groups(self): # FIXME: defer this to the draw operation! facecolor = (color[0], color[1], color[2], 0.25 * color[3]) drawer = MatplotlibPolygonDrawer(self.axes) - drawer.draw( + art = drawer.draw( polygon, corner_radius=corner_radius, facecolor=facecolor, edgecolor=color, ) + self._group_artists.append(art) if kwds.get("legend", False): legend_info["handles"].append( @@ -502,7 +503,9 @@ def draw(self, renderer, *args, **kwds): self._reprocess() # NOTE: looks like we have to manage the zorder ourselves - for art in sorted(self.get_children(), key=lambda x: x.zorder): + children = list(self.get_children()) + children.sort(key=lambda x: x.zorder) + for art in children: art.draw(renderer, *args, **kwds) def contains(self, mouseevent): diff --git a/src/igraph/drawing/matplotlib/polygon.py b/src/igraph/drawing/matplotlib/polygon.py index 9cbbf6546..0e10fa4c3 100644 --- a/src/igraph/drawing/matplotlib/polygon.py +++ b/src/igraph/drawing/matplotlib/polygon.py @@ -80,8 +80,10 @@ def draw(self, points, corner_radius=0, **kwds): codes.extend([mpl.path.Path.CURVE4] * 3) u = v - stroke = mpl.patches.PathPatch( + art = mpl.patches.PathPatch( mpl.path.Path(path, codes=codes, closed=True), + transform=ax.transData, + clip_on=True, **kwds, ) - ax.add_patch(stroke) + return art From 59e2ce514722345ab3a153e8e9b94ef2f9a4a2fd Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 22:07:24 +1000 Subject: [PATCH 037/681] Update a few test baseline images, which were manually verified --- .../test_graph/clustering_directed.png | Bin 36425 -> 23399 bytes .../test_graph/graph_basic.png | Bin 24565 -> 22749 bytes .../test_graph/graph_directed.png | Bin 25533 -> 23715 bytes .../test_graph/graph_mark_groups_directed.png | Bin 25533 -> 23715 bytes tests/drawing/matplotlib/test_graph.py | 3 ++- 5 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png index bd2235aa56e1f2decda6b0d4907ddc8817eaed1f..4d3486fe3173ae2f0814632c30485c2efd94a6b2 100644 GIT binary patch literal 23399 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 D<#A&W literal 36425 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≦)ess8d z{X&fHXz`LMf@uQ>2cT}>8_-aN6MJ*9Q5|X&-Y)#)@%`%0TKD92b2>u)hpF8k0-Ipc zt$7ia7>$a=M?R+?@<01e8|LeLd;6BOkfj1(ET{sG*wTXWxr5M6SJ8ohrjj+b9(&ds zl(vFY^X83^w9${w*SfaF&=Eym41QfdVk=yT@;+SLsUE3)OFC$7;gpHX`v7e2hWHBhLsRy_KX?g3Z&&UQzEBmJ>Gd~Dx$3;z-zHsCjy3G@L zKTTJUDSLOF!WXBu*b*M#GEtBEV=@f8SY?wm>HdL5}6Xn!A{GI61$EzQo!IUMo`4gLL8@1g92 z2g$oHC%lh0QC4Gr)(_-bbpAK462BA!*A=&KJTA(8%DKPU_R?p81L1dxbpE;AvFW#q zPCL^n9!u&{ut5v6Cu#;NpHn}%zo4XCvoE?S9Mxa%6>@=uz24nvD#E_?n<*Vo#El=R zU-|u1P3>g4PTeq0L*sq9R}Ikp*fA*4O6z_5tnLIkV{Q68C&&1x50LIw5I$%RvYXc) z=s16vzsus)51Lhu_`ofyQ`~@#>2DfQu&3WQSV&|PTqt~?aLLHGPdgcFnM6)h@G0Gj znpwGmeKf1GHfd_hG1csHBxVpKy6?HUP$5gWvG^kfW!Kj_&U$xy^@T0^<%%Hot4}Wn zB!}>#2$6UD1`9UEJ-|2%rN&uGa=G`NvF2vW#iM6ZQBy8apNNXQEU>^ zOErx{(P+CJ{BpI`2^zRn&eNm4LW7-QeYKVvrMN#HYyo}5u44o&5!!cGybCTxQUV&5 zmR-w~rR;x6MZls(MCO6jjbBpXvoD?iBnlW1M7GT7sc>q(rIS?~NLvMU70>>TCcuYW zb#BnJ+&}ejl86n)r>3SPzLV-h?y(zxsfeL{)n$6in8U{&*H*$u@diRR9jJ?Oq>LIT zJ8g@L&uA}e(YDj7s$xEccH%8cpF9Kpmn#drx+kyjZmQJJDkpzd1Q*vEqtrKsgafHs zZ-U*p#RMZA#%k~$g9>x$lUy{xfkuCNf+Rhd5ySR~NXJt}egso3X=ZKY`@6cLo5(_z zENAT83W{KlpW^hX^FHZaKhE$3;{)*f0D)jg&_Y8&`CX&K4)lL6C zVs^EnEA$bwYmz2~aHWT)&IUxM+_@n_s&RBZwvfJ2D9Aq=sBPg0 z#FcBnk-Hfk7q}GGvoa$!wJePhtaNu6z-XIo9ra56XLc%FaKNaU*(Uym#`Z`9X*I{a zHBn~rUQfyn*4ua`2ngXW$*IUcfzSYUMWC9@S7N^uArc!K0;x%&0_x8MGR z>OLnRf2{EGl?y~tJWR4wQ3OJ!Rz){3e%O0p{lIOMQ|HvrH1II6(`%`oLWQEq_3tW!Tj2&V<;$<8JIz|kbyay3fs9W_gI%kzc5D_I+5|?P8@AVF5A)C z*Y$nZZev2HwnbEkh6Ufe2FbQkCivZ-DWvMPO9MM=C7}S+6~PJ|hVmz{kIHcvK}c}C zMY6px85dN)yWK}GZO;aVtycCrgqf0Y^w#Y$A>nfY4X5gPtYAuTY-&pM>+|L8|73&h zZ0V-qVga*@=h@)A?SB`Ya0`>2_evsJ#h?zWvimy7DYh?!dcu|!CM85_P&rF8<#lrw z%qiAi+gVdy-*5KQe5aBOGzM%<6dK^5WG0(WrJ$w;wY=43Xo+r;bB@)isMVi- zJ*-~QsYxoQEB5&Lujv}qFjp|ed0(bRO(V#D3Wo+Cr+^j=P-?r_*>SX@qR>g551~C< zJ>4IfVB_tQqyG3 zyMI70hYbJX{){7zjJ3Nd>|^Q|z3+2lHN0IjU+cXl-*96#+qxpx5L22U4KOq}gNAQ| zbQdu?NO*bT%-l@vvRAUov9qb}Z_ zUgzVl03OsWK@mt16v`i%!~_WQ>zmMt7wGy63-}~Q&vFVy zBR0;6$akP$pO&_iX!NnAtySn`GRS>?+~a^xJRzK%h!&SbpvR_v=vwEh2C)h!g(%ag z_hdju-PXl>9y?oBws5$igIF@;Tu&w^VUU{LRM?=C^g{`Zy^Xn|DWu~^ijgh+Oo0W` zUnp~hUfz`43cmWNuA=B2)XtN(W5?7F-Lw}d zo3~*3MRZ5)i`eSTYE6A-Eim_%X<>nFNcF~L8=ajBpN;^fimu7Y($^u(n5*%)B=#sY zcptP8Uk4VOPNoI%gkd(_;!CaR3w=&*g=&788PczT1-pn_5#DT))H1-m>?R2-vl@I0 zAXRjIe_CvP*fivMZ_DR>1cGe0sl=>vq!RAy(v|2m|C;zFF$oY`X-93b7Z*KtW$qJN z9#;iF0+oy<7;s>5Yh1b<^cyr=J8oMWealkj87}ez1=BQ2{6l{QKlY@mhM{hGctO z&?PGpjSLR9o28-I8g`v{axQS@=8`V=e+R&LxX6iRxY8quCo*c}%nd~P zA-&nh^R$tVFHhvt&r{H=p6t|ES=)|`Z-H!+??S3_4>p$B8)GcWKmE$JQo z$zD^k8Zu*2Rl@b!*XIN2`6cf)X?Z_2uT5JQ)-!-E`rqsj$p)GMX;+3xg2AX;Mx>}+ zJLOd3Ej**6@j4)^G*2N7-URy|t@(pl#_Hu)r$=GI%sIerISE|U`DLI1A13$AO%&n? zS_9vVeSqbtfByz$qpAsF)Kj?j>F4U4=l{U9M7w5Q z#8N9`nld8**asodTa?b<(vT}{P0-Q|rb+##>_sb|4GWm0r{fGqr}k*R7}NqD{^ZG= z`@7DEplk*KIvfkR9NU?ivThMFL-0*_Fa}JA*=y7hdY77$eWKt>mtSt%Mp6_~}V{i?0IFn~PB-JyBGQuNF-C#MJqf(4M3FKpR816`=d*3LzH z0kK;#bCHp-{O{k5Rm`(MlJ76OalC5x4#+qp@JMke$y2TnAi2S~TKlc@X4mr_BBB4n zyDl582x;;O?-zh}jX;T)a>fpH8Ij13uAY)nhub)frgXLCmhf-0vry?@HQ&53X}|fc z$SE7zHN?~Iy=%xFqTzwV`*KeXe|>d+0Rw%F&FE!Tr3dy(gH#}fz~B@WQ~2k=wdhk z-vr~C#ALFkS*Jz3TCtgwaAFnEnHK)!WC8oZ#qI9=3&FJ_)xG;U@1v6iR{RR2KuDcO z$1sUP7q6CViaN68;ygLaL(fuknDsMJ?3BI#XWSm|6mE1&2-qZmGk+EMH#nYs&lLu9!tyc0C08vtIW++V<8LU+ zt{kqGsRu*sNhm5kpF8>bz_0#N>8AU3OSb|wku&XJETQ$|Ykb(hg}H3~4=*)yp=RKo#@sU(6EW44VWaqM()epBg(0)Yv+8fBx3kJ^s(kn|Uk1$+tM3dy1#Jtf`wE za)}SrO`uJgGhTn#_2=uexjE=e^lK7EiVR*7XFUS6H8}G>uz2?Kl}EvSB!?&}EOh$O z$r0Y%M)(jde^yah|DVU>hkdC=qoVOb1m)Jy%FNEc=8hu^f(o&7yV%w4u%!*JsG%&{ zN-1{uh$$IuY>*@%&Hy@LTwI`yZbA$lWs^5y%MuKMxIF_3QJ(+5sI_|icU_z&3}|jd zuK=JtACeMuPGq~Yxiw4N_iUAf-3#mtofrqFBhVESK$GXdK;IZ%P_8Sepa54`{tevD zp`SxEyq_v-M}e`#_w?wbnE2|4Yjvs>*um&4!1oFxD=<3P!kxXlEMHM6`k%1%zT+$o z#zs304N>sQF);W^%=XtEmD_Wd!MvE;w^@{<`*SWpL}5HVKc?E06CqZsQ2^w1aAU`9 zMG#;pbnEOjA!C8BB}pt800U#4_M1h<1BO0HDJmMWe$IZL#_g0~7bkn@R|HU~UjRKQ z*wYh`3o2(`;{)xQTqd&(4fHBi4Q(qxA@yD8x7Y2$=f=*%_MGlD-REX&s@H!Acto<8 zC1nV&F77*Bt@fafSZ&63UA{Q6guO^+3d)bA2NlLhI?{`D#6eb9T6(KfqU$ftu07;F1&;7pBLvo_#t zSqo5{x$uwoy@VWmGs208;#&PbMHc73u{wv$PnMYc^TPl1C{f|wKQEyC`-Sr|is=C; zqm+bQ(S#b$EOdc~6BBO?H8e}CH=fUKZi@YbBK32J^7fq6@ZwZZ@rp@^RUIx@cpn7Z z`Sxv)U@L(55+)-GjNllr>VR|mOSjng*%m0PgM$sjRtLkHLPB7dW8$!fpX4h2J)Mtp zY%6j8l!GQlbTkxs7Js)Q@*&~urdfra+H|vzUtj*zyK*i%zs{8MId}I zowEK4&wo?-jyB(w(kk!#BQx$;)frh!MBX?XN3=uafVlN{$Fv3o&~o@8iKRUf@O3;R z&baAlQL3glO#X=ZqEk>MrQzi%MV3JY3%E>uu-eDFdp&TLyyp zB)p0VTZ5d(9N^yFUz-LM_~JXL05-+;UjeJ9a2~Md?bG=b5|Cf1wtzpOhG$8G1Hh%7 z7S#B=D=i`~2pe}_;Yw-$!-)krO;(3-M8<%E6)6oVY3#w8G*H6ls06Dw1)F#+)>U!W zNyM6sU19`MJrsPwWxXN8phwbQ#lza+|E@~>H6Mb?lS;RICTV5{V9wzz?e1k-T_BTz zi&3giyVT#krvfq54*=?Jkbb!lfx{DUN5;ApwcLtnLBig2{1v=qk56WDn8=-|IV2cQ zv8?}oL!PpscnHkADA+p!b>b%K`nfvsqi4QjAdeT|cm{{)GEcnt01pBo3kD$W%2WE7 zKpZ_1L(L3t0xad$-rNJ3_U*+6S3VEQl(Y#uITg|Jb_3qx9z>C;{2N{u2 z6$9_oErRMKDynWqq1RxZ5;kn`xRH~do`&;tcJ$>^-vy6It?QkDVo6+>wto`$H_AJ2HvNcb#wJvgyUKb`McawDU708Y{WtI>! z!N~AQZz2Qt7N?Ik@Cap)_?~BV7lXC_1|2P>O%oNIm={ciu?zD@%xY_2jsrP(>f5NK zw2h}-l*wSg zwtVe3I%Ue__Uyc{FuT7xx5h?<$OOm5%FgLYhL00Z>ZRpy(Vx9xm1DN`ga*euny2d_ zoRw!Wnr^dSYD69O?I&KZ|H6yq+vzd|uOLrT0+}p^AQ@yb;yWPcLn9H{XjyM>sUfLj z0g8rALRWXml?^vHnuQ_XHfNk{Ttf!JWj}8Mf+W;@@wLSX z#YhII0T!e@KI~!r{wWgZdH{ArcUO!L+gSU`Kl)y6M9Vy7z2ohQVMJrhFzMQ*3qHTi zo>`ABjQQ`bSgkP>jo|YW)1SkHJ4r0sVVf}|ICxcZYj;F)@AOE|j*dr|G;n`XjH&Sq zCr^^)56xwP(^f|9%9qY))*>g13nYDFl+bKBaA^bWpP&qm{E023kiyu3TO|ICeZHwg z3%&6D@#!=lZF@h zG8Jt&f09eE5z}_BaLW;D={tfY5958cAsHz@xS6P+|2JXa-VLLsglt+|F?z?NaxR2Z zln7fZ|M3=H{kEI^Wm>1zhO@Dvn4NvM;gWAdzmQ8{?B%Y!Kq^kLI7qPjuZ`*S_GY3) z6&2lZmJKFGfMh?`d3<0oo+zAsN&I=n$Q zr52DsofSiW{8Sb_Z_%AU!8|>E@?JiJ@BAy9G(10V16`peF*UL&A)m*V_!GtZDPJW} z&7ZCa|KR3Y@|LHjEC#K2V86q_$BF*wZeJm~o?;L$7G(g2>vfoCM7|I>?yj27y&`aK zcxs*R&Pxd=Ip4`H^*eupmMI_!srtBk>QSI7LML)ogcwF0GN;#;>8PYOkR%QTqrkWj(&UK zWo~6|KDG`R1Pw$;;WKtC%n(gB(d`ften31mw4Nnn7Z+;Ac)R~Zg^SGuex4TV36?)% zPIdvsl7H`mfidTkJ6vX#WZBwV%{yXNlWBo61)!=?H*y>ZIoh4x1h-FejoFT}P(*4F ziM_dw{+Ll)yXI=YWb;w$o(~qB*ulkMh}8~1-JzFKddid>^pafi7l0?QbPgHv`p#ui zaEH3CQjf1$pYKfpx#Q)lDx6Q06Z%ic|6P-dHqH~sEt4~bwQg%OPhGz)&cyN6>gk>Y zm>ZQlKjQ;NkGf8fnl%+C>N5y7KZNKvx>O{B9@(;YHrpvy!Ln~c5}>X&&M!z|I->uR zN85o@F(4bxRKA4FB&$YA{ zw<#r1+PQ~p@%{vganG&qwNs8y%$?&W_F0B8E>2_g7T_ELacW!+xZk(4s)8fKpa@TX zygIku$k*)T`}HGT@)|@3Ve`!7hpsE_f_Q}B8**}wb(R_)|8*LF=6|fMQy9)HCMEX4 zM?6_gi#h9uB1RaE`6JwuKe5YQ;2j(QtaekBsmV|#ANrja1CN!27h0xtlIG5oA93SX zP`wg@k=!a$Ro<@MJ$p*mBC8=u&nR7(?L6`ffzChG4X&Gkc_eBY3wK-v5mJMOc@_ja zV#(FwpI9Q4uxTn04FYxk{HYRuCb(x4CzgC!H`y``TQF&#YxbY|9)NbGr2TI*GLLu1o(c*Z zR(z4wkgXv1UUn9J3>cjb_=u;tGZ&clNLsYVx4!!9mVJJQoL&&Q=Sj<@o4M=Sf9bRv802G~f1-rUW%$)Oy?$3>vu*%x z91)!!^*xHN9IN$iW9~d1Y8ZyI_6Rl_#f6^X5G@^4Ci+SEflKb+8#gA=+IMUi;*#Ay z*>zvC{e!QZxI`MPb?ux58E5lq(aZyawGO(XbA2(~2WHEIOGDe_ygFbOLR9K%z*lh9 zai#30!T!vpFZyM{jDE7@L^oI{?)iDkkWz+M{U~PCBG16F0(T?EY<2F-IUL-`w(qja z{v~|ldxej07^86`4C|2{OmKb-X})SF`4FG;-~#uXYMhtj>%8xPp(^8sxZx7Box)@l zPRPQ&MaI@0U1qHj((l2vgVRv{Wai3>j&v|k*x9OdMN}5X5*zkbJLub(?xCJ#te;T^ z;^b*GU5(p6EtZ3BE#38J?)L51x-CL_&(vKGY27@%xq+SQ@+^LN3)B}c>Xh$>;i^7u z+jp~-non9Pq==3#x*?JHe#;Rgi{Q7xALSmBf?ut$uhKgW_NmP0Y47j{KR9sa6v704 z58^eUL=sN!=8I_&!%$Eg>3}vP81`{l8QBY}P?Efhb5M}=Gk+Xkg<}I(#HpJINY3+!)0{pnF7iD&AULA5e6vFEQw_c8?L!i+oNu5NJEbZ;!7hOulLvEhSn@r)D ziC5}Qe;XNF9qRctfga2}`allJ5CP`%Jd3Qg z>oo5?FOkF9bTb;46kV6Z0%a%wMZiEz20ja^62#(wSXX&WA;rJ7-rg6qej=k$@Jhd? z6I|yK1i6XKMf6`<*_3WmYCh^R>X7ua#u5iu?{4s zi0)XA#CmWln>+?HX|{Hu#99+xL`Qq*uS5UVU&cY)X)n(E4@f!WV-4*GLzSY4a7QDF zg&rR|!iTBk*~x@s)j-<8|9P2*n3`OEqwrk84Cd|p-uX=5mJgP!^R*cdXzCS%BZMax z+j}#M%t&fC13_u^8PG8RDHj#O4D-CfFL7ksclp$b0t*2%N04=@!sVxkID=;a(b>;d7>5VX^539Us5s4g3a^vvN$#tf z)}L0-CmeNd9KOzU{)*R;HdKelwT06xpg1;X&fxv+|8~)1ZtN&`Y#I96itwv9bES!y znmRq4L|3{M-iP6XTLIFN6TY&b`bsSFpr#wa2)gbAz?-h?af0c`^dA_4oy?d8A^s$!Dr8h0;>K$L zGuiarqM>M`NNs5uk5C&AODW~%U^f7R* zyB^>YmwB%K0^-9RWjG?g?sLGK@WVVo=F)Qz7tZ6>P{uSD>w(McTcI=55qk@mRV!W6 zUCF)x<(fi(g=5(7rSh-4`91XAs8f%{ku5##d{2r$P>vrx#($FjBUjIQCIP@`A?7UP zr>wyfK_Do?5Kv|4=oX$-?wwyv5l85mx?wixbF~ zu6xXwnjQ{hU{r#>zEF{_L;!{JtS{quoYnY7-zQf`Kw|bkjUV-^r`%X@AUYmP294w| z4r!D+^P#{)B04_yT`LjC?A;G>XO4Er;$3fm3lw~f;FgA?K^apxVt&QX{r%J}l^^|t zZ_x=Yaq(T6GTL7-%^tqn8i{>Nyy)hsbLp%_O&HW7QUVlMj`<3g~9*oQ-BYsi>sLDtt`6zsBx$m*Mq? z3#CWy2n-c~1SX_d2xZw`Y#O21TmR%5cN_U6e4TgnJ~{uaS+PF;cOA&jFmM{t!O4$9 zD5BYsl|=!aFgAQ|vq&&B3fuM?>;&2cKAEW@|2|F?sR=%LA}3$Inroyus2-TR=V&M! zrX3i|;=&1(#ZOUbp{R7t;iMDgtybL$y|my!|DLIn9UO*`v89ft=0@L4YRb93!mn@r z%cmUTX2k#e8Ly|hWus=U@GKWz{`rX%!y&Sz6r@SsbaK*P{WBMesTFo8JZcN1D< z+nz+mrHMS48h|W5)e!l1{iN0*5B1z}Sk#0@ngCHH;CxB);Pb0y^LM%pJ2D0`SOCPG z^FK8S=tBMY&x1~V$F%(tDqe-fF?m7M28J0p)0wYd|HGcmkZWe1dqM$e#rAVj%Hu(r zovmXc4nh~0KWhL6t1NN0z8h$SAez+G?$cD*B%?B3fYucJabwS zf}d;qL-F%_aLfKxzT3V-lM~3WJS&qBL1TR!7K~x+Q?YXuW_(^Jy2{Jo2Dl-Rr}x?a z{-P0v_qi|+nlMu}ONXUSlLv{L0dnhJZ4k#|q0Mh6F7lTRU+pnvG=}5(&Z=o1siC;pgx)LCd zvw)98O(eQ=B-$vDgiO2{tw2ChP`W^Z zBNInqlJv-T2##-Q&j{7w3`PE;&kZ=cb5!}YQb!0su?u25Rg_m zXpa;weueKMgUmPGU*U(@uL9LBkPpvd2$z zoaDIq{7=X)A0IymPtW0d`sEih$O>`wqd+@rT6J|s5)yIii5>L{%3ueV!z+VCeXwLDo z1WK=k9y7Pf(`e$3@UZdObYRfDIEBQ~=iXfEw}vX`eEph!g3C#Hr7`)mr2r}!<6w|G zQo>QO%WghOa)!z)AxE3}&xwBz74P`s@9wzuvKKFooVf$z_;`JILMA4FEUt8VNZo%2 zhnh2)OC4@9R52iMBj3>nf=OFP8(}rnK0ClIJyozeleV{61M}WjjWt;%F!HT?e0=vG z-Z4i%e=Kvwlk`KxDnxbPpy9>-ZxN|6L|t?YU8X1|NJRqK72VDavl=Lf4_o| za4nA$;M1Eb@CQ%~tX8-n2Ll+p5(k8QMp9B<$frs_eFH8J2a_-KIBS{A%&I%HeY(v} z9Yjo5nY|Pi#cdqtRh?F4OXt`H5A5JN6CQtQqr+_vGP$Rqo#Q zb8^NWN=``sLtYn=WQK2Ip+ss6ly0WB*{OFB1#)psBVPEnQ%iOJ*0^@$ObH)XFu5l( z09A+J`rvJ9DpXu4yYqZRq*w9`6z1`rTY1{foW*|-mlld)F3MePJi~kovj1@|ulWHX zKix%h4mh@6o%ox< z5yc<*UQ=}l))Ao}(~tw@HBKV`cBnlp>)A~bf)KrE)>@vG=h;pdK78n^P^9G{0S!5l zkpjPs@qM%OSeeNi`982mn+J{rU#v0C6%9=zz_I50C{2uzW~z?fW^zJ>xxUM_=8Hr~ z!WzmB7qMK2XYlcCg z7$ee4GE&z9hwaP8g9O@ooydjQk(()LO*Hk9qFnuiQ1M+dt=obRxuJsxR1z3057kwP z?o@3q(u`GLpvdFb_bEFt9pv{5K{z88e-nb=5c#rPQ@w*Cvj2O>my&A^UG-(f8b)te zUl|y;#=(>!!*Pl5BSJ4Fr8Qh$OpCi+b96`y!V|Uxgxmh?c*qRHSyEr`dljyId+rFr z&nr4i<`1*f2yGZ^RMC_Taq@QmkkMi1@b=gzaM^s*$cViEA`(kahVd~GpH;m7S+OV0 zz7ieX)12o}wF?Cg7uZ-jTL3pGL;Q+x_Fb~wfrHZ%+!cgELMw-R&u5rfkCDQ&#GQ(S z_fEYMPI$1;o6%9Cyg01UcW^HB{d)7eiwnb5jGk{Oxdca+^i8R5youp!4>)W3^1Hk@ z^3H;#A%gP7dU%0iHbAscb(guVv_Jr0F=BBn$EJu{CRHin03>7MEUT|eUJnb<%Q}YH>W>aK z3~GIcT&FBezCv+hr3<4|IG~sRQRA{bku=0p9GOK7x8P&d$lXWp{C+(I#msyFm0HNK zSf!CNP=<|=N@oQh$o;O%F*6b}b;re>SE;Axj^cJnxGw+BeHp3t^*|CE_?lOX&6`aK zh!7_J8Omzln1w4t0f)pbWR7vkYyI4=WIHnp%}A=kMjyyjXnyAs6R%z&A6ZCGmH6DMKhvmJk?ocx`2HAyEt4~N8|ZIY zCbHj11IUH|iA;Ly55dF^f^BpUpSE7QJONc10GYBhG}JUuZAqZ0|j}xd&m>` z@$HZu1H>iN{npkU<0UQeSdpkyC>3qT#8ICUlwyVH-iXk(@se!1iaw<#0%hzdy)X|< zybU^ zOLxsACWfS9?LLFY4E++$scF+`o2;tMF@j7@Rv6!sc^tA?bS^J-8FD2HKLmoECob2 zsrk(ev)%uaB>IgVR|#cIH*Y@YU?NkBYf$VIYgF{9IS&?8?oOn{)-<_;lb2r|xd&Iw zUZu>`n)Nk04?M$=#@a$wg=^UmMg(t$hTgi7Z>q3dMK(LTvN?2)7NIiAA=mnDV=$fu zo->%bJ40HDKD|$iu&e{E#ZU9+GyM%Pq ziD2pbnFb`A$R{Jfd9tfxQ_I@?6StLvt>J^U)_wZYp`1>;Qp4&Q2C@SVcEQ!+q5jY$ z#%d!f^4DChn{?tf0=FWJMU>yM-|&H+dg>+kX2SDC%rDLhgUUcL4(w&Q$&w0;$odXu zB;x0-R~)NEYZ=W>yG^W~Q`KtgJ=&#`JEyy$EhD7>@=^q0N}sbgdYmMV7~dc`%ce#@ zhHBK6?8iYxB-cMW4)x6+q7VN1)(-mUS+`dm%BtTx)k#aFY9VNRcE4|OBA`CN+3YuG zz+>>(!u?#EUJ$lMd3NOGZ8DaDsV#^T!L}JYSLR2Ekokk%516hJ{mxw7k*+#A*mC=B zeVN-uv~Fkr=lqP_IP-W~dXnMH(g-Ek`#dZ$-*cd}9KgR5p34K&sy{Y^+l$gl!9q4$ z!?qLot*6tgzNY<=2<_+N5VZ(G>t@OF%box29`Rd!C%}f3O$N+KF61BR(@j zQQP&&`se^cqscmCvBFX<>p_zhTqo$X-kSX$zfIDy(ww|AO2a^Q2F#B>=XWEYiTS=e zpUoD6bd9D3{fBg^8(Y?NH))f%!p-_CbYRzC+`d1N3LFZ5$1?d9Nlp*y(?I;n|86P; zcIYMITE&6;pP5n6F}L4C?`cA+Dlh_v9B^&wD$0OhMhLfGmg4FiJN~w~nGNaGtY>%M zHB#6O<&fTQ*uPs2*XIuu1*hEy{&xrmW6LJGaY4)JvX)yOyh_TuAYB!iU?%pK_~pZP z0Z@l*JZ$CTqd8xvMi)Y~TdKv01Kyf!$}1!&yPB9l#7GL0(&|YAEFx^^?2~jUExPg* zFGym9$PiUgP3IJt(c~NGh_z)C5dR%dmOtzsoz&YpJWy>sM^0<27BtM21;GK#XMBdx zQ%ldRV#0Gq(Nv(}fFk1;Qj?lY$^RXqs@(ouL-uIaVRF;SZ(Wbm!;hcjeoJds@MY%P zn~Q@*=HD)r4gGH@(3vJ6*L`^ezfwCfFQJ z=3ZE*>4nfeiUI54LDCNfh)@I3~;a=bwvzKin=hAr?jKAUIb4c?9LO7jLh1d zpRjqfFsWXt`p53P$&A1m<`*$A7XfiQb@E*1P&0b3`__#PxcodMxGv{cdCo<+T%Kd0 zDx4a-`i5B6mklJ>ILx}F?E(YzlSA}(2IYLc!ADP%URuWd?}0&UzxFMg5+FaZtKhuxQPGuy!NNE`+=M2^+*OVsd3w8LQqYkxx}Q8-s_6t~?VJR| zmC9HOVq(K@;5CV!Vic?v{e^O#kk)?T;ek+|l`gamH9X@JzIp?^>UsDJl|c_u$f03sU=g5#E@(2u zm)0t?Pg@zdF!>Olv8(4u)P~jZNQe@T=5@=kg*~Ku6>BZ`e@|nPcWJgdJ*BS%7ezPb0HI%PobVMCr*-;QT(B zt({_I1eQjMAcD^-Q84X&2j4x6;=FNRxlr)8jOqY+WA*?1r=q<%mc%9qA^ZbQ2u(JE zr!0#)9oWN(mluO*JNa0L6uk#7o(NzhHfk)f(m*S^hK=LANkX)D^UqIFLeVMf-0ga* zd$Z8bZSj$KXSr^LB}T}~Iot+2$fD6~n7Q?Guq3?DfAuZUuU`|)B)}9&d*gT85v@=d zIAQ_tE+zZ6?49-_y~Jg+K|}+8Z1J$|c338Kah~zW^JntBTglqH(>}WP7r{nmdtkEW zot3kK=TA~%M;$xzqiEjxjK;w-4+$C#4fy5-7R#fWRz1Az?<7?WQtrmx-mH|5k!P8L z(y?!AtiZmL0VVgJP!289&6sOZa{-8v5v+^P3!^sRrq!MR-{BUK?NC?yA%?0EaS%^St4G z;n+RaXmuJp85K~uI2alqEq}DR=)b8)bDn$*T&Wv-Y-e5^+uMamBr4_QsWzIH9_+Q7 z_@MWG#0y<2<2bf*aRR6DVcQUA%9nq;Tt+s0r(1;%|Jmyd}soU^wbl=rR7v9!OAVO(#A#++8VH@Qnl(eCBOJUO@Z7b{#{Fp z)63tPb2Su3B-GWA-a)l-qSlj`fv0gXTk90SsbI3j4Ry=p^lG&~o0Mj3S$b(=63LDB zwyE;HWg{bZ@h4&omV|E3Qp}8{H523L+VS;JmKcXlvBKPyT!XhmiiSE2Z~|T~^w+%3 z&mS9Uz(Zy=5Zb_Vty|7lS{5H>&^j8W?-6(ws?A8+#-M_&JO12N{OQz6Nu)*zi1X>SWd3qU!u)9t`jTlFNaFeV`;8~w z3pX~H3B?Q**MP;EEL9Ch4h(K&+#p-M+%(5M-2HGJD^N-l4Ft3zD4Wgl^Z!oTyh<2q zXT39$Q$jlbI?A&zL21)jG+xY*q;u4bZ_&%GvsjP%<;4r{6B87{kX&SIIcLM+)y3N`GS z<19M@hGcjIm)6hu=t7R z*5Due^)70vT8#x`B26B*$MWmRBU@CK+WjigNZ%>r(2jO>gOl0dS;r^~Ilsi*$d+ft2;Tlk22^?YaDEX|TSkeAeMo>Azmcg7I8Aoy zkD=AjiF2_(lWC&gKL_j!?37@)hkCR#N_*&rEP`}2g@V7(-=A24`t+pit%&aWk~K2A zFE?1Kkl21k4JZiI{htWD&z}dDzH({9-hIDsfLg!kh@X2Qp7u=OhWx!eklca+$FO^m z)6FYvND;aZ6r!mR7}F%nNdk@EAu~-eOX*5=W!QPurG7~lhubmE&PBn3mggzu00F+I zB>xe-MrGdmK70SPP9iNmozLjN1vPlfszaON>N!0K8&&)Gutoqz^dOLg(w$raHo^$S zs$@Xt_P76Mxw_uVlwSW7A1Jg{7l-e;^g4~@x3r9nTy2|8QF9Xo<6WfkGu%CTXl|~k zMA`|1<7khPxNal-Epkqp;LAELZ`d<+_4&oY+ZOk2UN9p+<^@`_WdVotHUK6!5w}L-VXNN)pXc-21c{Ra z7Hmaj@6i)WR$#5(ng)-!5^K2xqJ7 zHC%L;LKAO=z3zG`kT6I`5pXxU6pCi4}FER=eB7MY%${M z(xnk0kjx`flL4cNR_=B(J0cRKKO_X=m%Oya$m#H_H5~~s#jjaGymz_5L{K$kOB;Sg z1FlIli`I?ZVzb7N|3Z_U%$pPUQg7}6;|v*xcmjXV8jSLWFofKigpOktI=ZtBv`AE> z1bN)5oFpFf#)w(2+}b{_U4=Za0;nshGgI$FBkI2;h+NMyD9?egq&8ICtM;N~!`0`` zQIb&I)6$X5&Q?CMyygFE!l%l*z`e-LH63bIm6|)ZJXGdQ%vX7r?D+V#MTCHfXHL$q z;w;3Q64=Sim20bwJkGp@Ci?E-ML2VJA!a~XaxjkJ|1v3vYRoFM;q%F7v$KFtDP)UZ z0WcoUeU6urA-A+?HI`@=BGfSI5t63tJCn$#Caxsh48iXOvV}-jv*OZ??@jwVVG3=! z7%kQG^AccMnd#*PInnm$P}7QvisDHHZ+EJ_83e!NUAP+Jz}fQzdHt}6$$5a&k?LGA zuI;N@pEfZBXQ)&DIR}GRxHMT!a)?xpj&+}QS6*`O*DENPt=;SFxC++>e8T!%;^1XS zGA}J74s$=AKAaZFKXcm2ZF6Dn^2xps8fgeN$gAh`mSQjAzTZ=bj81m^w+(GIsy+bZ zUKT^+<+wJ2Ibqsv;|mw4!t?ZrA;7|;uYJ<0VDZ#R5E?q8hf?_Hp(13Gvtpnnd%(_cO?{BC2y7h9Z}k?mFEeakDKoINA+B}`&x;fp}|9QN)V z1g}}^u4JIGu2#a>f=izLburA9AjF_}&dfs0?HcW1adce1-5AbjOX9W}qq8iN5({^V z>0q5=*sY-K;wK|z!5KO*@F?6!dt~D(igg-;ICxAA)dsQw?wqR>{%U(1v0y6U4~Y5< zF}E^Y>To;KK0L*)j>xf`d@Zv4W^qVw`o693M?ZOxEr#CVBZ(HHg;BDtu3g-1>joO@ zAE&y$7xm88F+=)PfVdmDVD3OK2#F3-gJtlRqC69%P}dNHi`Dx_hdbcD9T#_|x|)=} z)Mee+^~hsy!WXfPFrx&cA~;2-c;V=)Y8EtzGOqo8hF#A*CIb%VpQAFe7tZt3qh9DQ z34yohE+}Yb2V-#u7_yLLva^g#{;{4j59MkHUZRT}5sHhMrEKdB#R8hh7&ar8HwFpB zG8X#z?Soujo(J$;@g2fZ4@UQGJa&#xR=Nd#fiwh2#ed<Di+nx>$|Elg0H>6u!j;>u^X_d*VjK)< zgs{|q$8^;+t?B?{(HJ|V=&GwIQdb@o*$@(U8}B{% z&6m)7lvk)_Q*t71CNONz$U&6Dguq!P$9(zXS!UbLyVlJ1KAZsjZ@xS-q@m#@WMd_c-sO;D+vRr6-{PgB^i6Pe%tu2dr!3$l*`lMX&j* zn#fL(!P1ca&_)7<$m&2EY=~kUz~Uh9TbG(&IlhqZ7kyMZ)3P)!7D1{UJJ+xwipTryR5kyWyPQLMdMPH*ACSKpTtixTluz{}$4ldr}Np$)_7ntWJ z1k1IM>;Z^#Xv3G3y7=CsX10~t^jssdLJPA*Dmc#6{PL4%+Pwc)?k4#b`vn|zTdbT_ zmxu3d-L^13U)>uOme1?1S@aH(HGa3GH!O`FOW&K!(Nt6=Z?ZEjC(eQ8|vPKmZ zp8xR(#>z4;#|nlb%QSXpRx-*(;bOfxwX)i%DReQ^1uE}QX%d3&ZqkU*wg-Oiye4Yf zd3j$DZg01z_WS+^2|!8~;|KuhJTyDtlMl@fB(9vRqKh}!|5S2UWx5a3HUw|9nzp`E zj4M5OOBG#YPLrp^_C%E7#)(~g`vKz!GB={~al0_=YS;A}!5Bb4ZNZ%Gu2E-Nsp-^G zy|gdyH#4=Q88Ye;T1!lO`BLM%i^$v%whSOeh)}-$e4B-4PkLPa70$Nu@rjz%N*CNu zV;UbxRY^QJUP!*xAFI@~>Jz@2_B{~5lkcOG=$V&>ykabqxs8}t!-7d!`A?s!uJvP< z*H+@Jx<`0QTPG(vJq0e#P>o+7*Zv5zNfJgrA8dOZAB->o;OmBxe9W0x2YnG@e?t(G zlaDv^{A%A^g#1Xu_x#Y!wkXBpNZPkw#4Z=^)3u!3-0y*4TaEcW#QzT}05@EuXtWn5 zSWQ~4G6Js8GQ$kFeq&gFeyUnbpZUNKRx*hP4cPW!6Y62IZJUA#^KlzrZ_)Jd$zZX_ z5Gza&wTP9G7KReM^en6B)0BYH<=!}kb`K_((=)D3$lip+Tt0jy3_9h zn)~y-A@%*9nV$GMJ@nxJEOhoAOTb!bI=fRM$6nML{%>CpjdV$ADUrdxb1%D6*(9m( zhlrc)lX}M94AXx%2}AW2(qT{ z+!-8Kf1$r)Pj~QkKZFRi;7hVl+s#MJrblqZ*bP~vz%N(UC>^kS5PE5fX8h{74`1ih zEUjg(?kUi=+N#&DO=Eq}f~*T!Z8&zF!+W_(ptY$j1}oWHDoA~+g_EVZd3UOioa6sq zIsvT<61O^pDl=Q#qm`T5N^FS59c=NL|DXphW`PwGL}9Hh+bxrqze{?A`Rs68pS3

9D)I*1gKVRW?;`JbT*9uWH&_P|#}Sc>}|A_)hnl&EvEOm)(FL*XUHV=%pFzZc=ghj9JiVX^58PRn8zSr?9dKFE*wNSc}i`5&2WnED02 z`EY@nuYr@bJ4wr9^u45tfC_|Ia`FFDk5l~j*bV4JkL$qoYi=m1b+eqHh^8Cf;x zDI3t1k7P3o`2RW@aYn+*m8SWe8NJ$Z2Hm$7 z9~GFv?DUVj2S5L&w<@&pmv)viy189t1#hGDK(ZE~Q{UzUMPuaacwPA9$q zK21*fk7~=2%wU`=pw+N!M{KKFnhYuGr9g`eiiHZ-32@}>4YjI#9d`b2_w+-W*`Ly` zU9_)(Ww`Rk>x7P215~8Zyf#;0`;EfyY}SqM^V|4>^#bG-s(5w|W!pW?Y`AW)R-&J= zmX!tk3sw!Ssi^Zjy-j|K6|Twoc(^@7R!|@f80A_q7MeMJ2?To{%aO46II!XbC#?GU z#@U}~XZsjzN&5Ep#@gb<;({y%YSsm?lH>k8Q_ z&&7Q-H)WS0UYjHRqX04zC)1^2m$A-S>vOd9iZCj!tFL={BiP|=}|olKqH^k;02K7eCn34L}w1)XcX=}GyYA~|x2y&FBhD#kus=~XMj zLM|B+wR0c$6yn9mGG&u-GY3T|Mf&@ph3K#v2m%VOIyghz=>>pltB%eB7)3&7Oc{Dp zpGkaluFmGdz}_Y(hYnXhKiaUhBPbq7&C*u5|2~q;^TNm6%s@!W>)$4OhY$W_mB7Fy zT0(bPT4rB~1AgIH8{78Ud3e=$A*@iCPDNV;yeKetGbr9Am5o@&f{Q9yWRz`OuU_zT zvaU-`;4@if{e#d3J1jZ*B)yG#ISq-T)Vs(_-)i=@bBb653n06 z;0q?d9>Bj3cZbcO+@9M@7;HozS!AfBH~*-B%!Q~({Btq{mSz_xtsnkL{;InHWawW{ zuub!hqmOpZg?j$XfI-iV&`<>H3Te5IlQJW2+;d;^FFQilowSYn-Sw#}#lP1-^)-7& zhdbe(z<2A9pI@t?w^|&>VumQj&{V>Xr29C4pe`=tz-HA$3QD5M#yE*Y_e)TG1Z^E` zK7;B*ueJ@TJ_vj2|4e;}ed9~;yk=0U;sbu@>&jq7hvFT_!)}EMuQT|2!>~mMIWnHk zL@&W3qmd;fn&LHS@D_TCydaZ==7rKP;eYGv^XTepG6H6v#ZQJ%S2KjL<*G^Lz}995 z21c?@F{;uT@JV|y(e(;eV*SPl45J0W{}oor2d@VO`@l{c+m6??R&U58-q4F=DzV=^ z*Z27Zy=L*tvR=u<>Z{MI8f!mVj^J;l^rT4|UWJuQ{AQHLuLzVFW*h!{_pEErf+-(# zLOGSD!K>)STcv-QZQpejnqXB1ZmIKpNm-wj);y;ysF1NMlxoyjEvhHy<2=4!Lwxzx zEuPNn%xkoW-n#oCnEVKgMGqAM)r@W{?!C3~XVtOF=hMAeZ;8_tCu6``Vr=p$J0vth8!vNIZrmeHj6i@sX*vrXJmeH9np7f z#}1u6Lk0Hvl?DMCs_^XTZ@0zgvbxVWU}jxLogeg9#HnSG;%FuC8c}11xTFV{urn^} zu)luUBW@-VmQN$wrJEi>kK(r-t{1(x1ZPntqs=UUgx=J$=hCf~@`sbl#8Kv24UeUjYeV9 z@agb)H{)_EBq5Oq0RiZ}-BQ^DdkicF<598k1Z&q2ZQHXY@vhlNiN>&W$5YC!d}m9M z!|K0X)0z4D#BRG^HRP}zw{kkWN|rxKFWkEauSKJFFt6*jveB0b-XVp;B-Ytr)cW(M zIpku^9kUByfC!eIAEM%>SuWQ|bg~?eg~8kB`Ld2}(ji+?ba>JKbozJ6a4-D3nNARs zb}fe~P?uUU>eBe6Qsjx_cbpilS{CmRSrR-Fz2__hj%ns&h|mDNyFKF!@;#Wffq~lv zDxe2pTbhiLYAVrP*&|SORaK=?->Oy%pnTOb;)r9nek)7kfCuKg4M7a;cge*4Y8g}W zKjSmFoP@3R9dxi1d8_mCvGf8+qN<^^+mE z!;-PJ1U(+%>P~Hv_;I^@FvwNuNh4>Zo!?`-e*HBVX3)9upoQaIzAYz#@?QZ`9<#&5 zYIPW^Ax(_3mw@Z%VPh*=>b}d>NO5IO#s-9B7B_!6Kox3}@WhlsB1S z%bjH>liRI^IJP9tPi2ORG^!};SPCYTG;m4TxU003?&`RF)%saB?xh;2<@Sm<`dMiw z>S%kdb-2vU`LGi0O6ll;B}1ck?8C^}a7AI6^7-Ej_~?`6rny@qr#on^=(bJNDk_>` zNVr`2EL%rxO`iA9%S7sr;&}KxT6E&^<*Rc3p&Rqz2Yap9jYBidDDB(kjeECYed0z| zN&bt)LG#gKu5irvwIMkcHMTPL=3i5#7-^SqxA!jUHPO!gID5#jvwWR@Y?ApY<`hMUY) z@qBDmy7^bC$~Fh>$Qq2Nqrr$AARwiW>3X{{-l?%BPv8vxN)uK^g)4MPb z!)Ku>M~c1pCF@x@TjI532Szl%MzMK+qAH#dJjQB|!Q!loEYFHRIG)Ka&)4eJEWAb& zc*2EltPs;bxpMLx>QG|LJ+6HFg@0(DuCn{?^%$Xoi!43q zdw4rfZ(W)$)bIVqTeDEP7v{^rzC42>A%{1i=o^YF-!(1!R-`ArqvyOf^;;%O;Rem- zBwD%YXL56#RU}0S`0o!{ai=p->GUtL5l~yhpFOdilGkwRml$&u;wxal9=>lbp zKu%rLkGIXyHy7PoTw>d&0=VzTS8Qt1*t>0wG*@h0eUetVH;ej4&V>54I$)F)9=bKk z;mUcVs{GdIRyl6);0-~Jgz%_4#tq1OHitXS2U~1g!{PC^N|>Z`ABFMo@1VuR-~`YL zM7A&3Vn0yzQ*qr-Q?l5iNGw16+h2Oqc_!gJtPs7b5OuX=B$87no}?ko&XeyA3h!e@ zLnqLz%*ZF5r$B2|@jhL1g^1)Ik^Pr=taGO-~zHFP+Z$~MUKD08#)vw^k zR#Ltj5=rqE{_d`_@(!LyjTf)Ve78cYE6XjVyYAaySa}4CfDLZyKh6%|($V@nxjQdQ zTz$lJ2PJs0vBA1rrMnqu-v98bDQk1-tLb;Y7X}PC_Uil%h~Yok93FR@U-c!6dJ>eF z_;PD$tt>q~-h5$D<#4z^uX%rm)svF*T2-RptLmdNlynSyi?#w+$5SBA3g>#(GE?FD ztZM9MXdt8RixdpT++cZ*oiQQ7K)1QZ+aTH1%1UTL&>?eU3xjE;T%+N;-`|#`>!pu< zKs$=36pF$_p}wt-38GMUZs8N6P+#OcQ7BX|d|}kbOL+Jw)Kiu_D3qru;Yk$gVbJlv khTr-B|HuFDr?F2PJMyN_)w<>hJV?|%StXflspnq*9~!M#+5i9m diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_basic.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_basic.png index c9883a651e68b79db0fc3509035925de187dd523..259ec8d487269ad52d4479a18943b895132ddc9e 100644 GIT binary patch literal 22749 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 literal 24565 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 cJT3e4e~E)Lzopr0Io*@?*IS* literal 25533 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 cJT3e4e~E)Lzopr0Io*@?*IS* literal 25533 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 Date: Wed, 5 Apr 2023 22:10:05 +1000 Subject: [PATCH 038/681] Remove PathCollection TODOs --- src/igraph/drawing/matplotlib/edge.py | 4 +--- src/igraph/drawing/matplotlib/graph.py | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 04dabf22e..929555ecf 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -56,7 +56,7 @@ class VisualEdgeBuilder(AttributeCollectorBase): return VisualEdgeBuilder def draw_directed_edge(self, edge, src_vertex, dest_vertex): - if src_vertex == dest_vertex: # TODO + if src_vertex == dest_vertex: return self.draw_loop_edge(edge, src_vertex) ax = self.context @@ -220,7 +220,6 @@ def draw_loop_edge(self, edge, vertex): transform=ax.transData, clip_on=True, ) - # FIXME: make a PathCollection?? return [art] def draw_undirected_edge(self, edge, src_vertex, dest_vertex): @@ -268,5 +267,4 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): transform=ax.transData, clip_on=True, ) - # FIXME: make a PathCollection?? return [art] diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 6bcd474ba..5ee0ebbf8 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -364,7 +364,6 @@ def _draw_groups(self): ] # Draw the hull - # FIXME: defer this to the draw operation! facecolor = (color[0], color[1], color[2], 0.25 * color[3]) drawer = MatplotlibPolygonDrawer(self.axes) art = drawer.draw( From 4c10be2063d3b5ddc8865e2c25a03a50a78e8e99 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 22:16:07 +1000 Subject: [PATCH 039/681] Check contains --- src/igraph/drawing/matplotlib/graph.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 5ee0ebbf8..5bfda2636 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -509,17 +509,22 @@ def draw(self, renderer, *args, **kwds): def contains(self, mouseevent): """Track 'contains' event for mouse interactions.""" - props = {} - edge_hit, edge_props = self._edge_artist.contains(mouseevent) - vertex_hit, vertex_props = self._vertex_artist.contains(mouseevent) - props["vertices"] = [self._node_indx[j] for j in vertex_props.get("ind", [])] - props["edges"] = [self._edge_indx[j] for j in edge_props.get("ind", [])] + props = {"vertices": [], "edges": []} + hit = False + for i, art in enumerate(self._edge_artists): + edge_hit = art.contains(mouseevent)[0] + hit |= edge_hit + props["edges"].append(i) - return edge_hit | vertex_hit, props + for i, art in enumerate(self._vertex_artists): + vertex_hit = art.contains(mouseevent)[0] + hit |= vertex_hit + props["vertices"].append(i) + + return hit, props def pick(self, mouseevent): """Track 'pick' event for mouse interactions.""" - # Pick self if self.pickable(): picker = self.get_picker() if callable(picker): From 05c7437cdeb90c81f2f975588c2e47380b0df034 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 5 Apr 2023 23:27:33 +1000 Subject: [PATCH 040/681] Revert test image --- .../test_graph/clustering_directed.png | Bin 23399 -> 36425 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png index 4d3486fe3173ae2f0814632c30485c2efd94a6b2..bd2235aa56e1f2decda6b0d4907ddc8817eaed1f 100644 GIT binary patch literal 36425 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≦)ess8d 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 literal 23399 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 D<#A&W From 9f660d44392ba59478635363f1a4b9f462bbacc2 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 6 Apr 2023 06:43:20 +1000 Subject: [PATCH 041/681] mark_groups now works, update baseline test images --- src/igraph/drawing/matplotlib/graph.py | 29 +++++++++++++----- src/igraph/drawing/matplotlib/polygon.py | 1 + .../test_graph/clustering_directed.png | Bin 36425 -> 34606 bytes .../test_graph/clustering_directed_large.png | Bin 60676 -> 60151 bytes 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 5bfda2636..d6942d8ea 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -133,7 +133,6 @@ def get_children(self): ], [], ) - return tuple(artists) def _set_edge_curve(self, **kwds): @@ -162,21 +161,35 @@ def _set_edge_curve(self, **kwds): return None def get_vertices(self): + """Get vertex artists.""" return self._vertex_artists def get_edges(self): + """Get edge artists. + + Note that for directed edges, an edge might have more than one + artist, e.g. arrow shaft and arrowhead. + """ return self._edge_artists def get_groups(self): + """Get group/cluster/cover artists.""" return self._group_artists def get_vertex_labels(self): + """Get vertex label artists.""" return self._vertex_labels def get_edge_labels(self): + """Get edge label artists.""" return self._edge_labels def get_datalim(self): + """Get limits on x/y axes based on the graph layout data. + + There is a small padding based on the size of the vertex marker to + ensure it fits into the canvas. + """ import numpy as np vertex_builder = self.vertex_builder @@ -228,6 +241,7 @@ def _draw_vertex_labels(self): va="center", transform=self.axes.transData, clip_on=True, + zorder=3, # TODO: overlap, offset, etc. ) self._vertex_labels.append(art) @@ -286,6 +300,7 @@ def _draw_edge_labels(self): color=visual_edge.label_color, transform=self.axes.transData, clip_on=True, + zorder=3, **text_kwds, # TODO: offset, etc. ) @@ -299,14 +314,14 @@ def _draw_groups(self): kwds = self.kwds palette = self.palette layout = self.layout + mark_groups = self.mark_groups vertex_builder = self.vertex_builder - if not kwds.get("mark_groups", False): + if not mark_groups: return # Figure out what to do with mark_groups in order to be able to # iterate over it and get memberlist-color pairs - mark_groups = kwds["mark_groups"] if isinstance(mark_groups, dict): # Dictionary mapping vertex indices or tuples of vertex # indices to colors @@ -315,6 +330,10 @@ def _draw_groups(self): # Vertex clustering group_iter = ((group, color) for color, group in enumerate(mark_groups)) elif hasattr(mark_groups, "__iter__"): + # One-off generators: we need to store the actual list for future + # calls (e.g. resizing, recoloring, etc.). If we don't do this, + # the generator is exhausted: we cannot rewind it. + self.mark_groups = mark_groups = list(mark_groups) # Lists, tuples, iterators etc group_iter = iter(mark_groups) else: @@ -571,10 +590,6 @@ def __init__( self.edge_drawer_factory = edge_drawer_factory def draw(self, graph, *args, **kwds): - # Deferred import to avoid a cycle in the import graph - from igraph.clustering import VertexClustering, VertexCover - - # Positional arguments are not used if args: warn( "Positional arguments to plot functions are ignored " diff --git a/src/igraph/drawing/matplotlib/polygon.py b/src/igraph/drawing/matplotlib/polygon.py index 0e10fa4c3..8e429a9b8 100644 --- a/src/igraph/drawing/matplotlib/polygon.py +++ b/src/igraph/drawing/matplotlib/polygon.py @@ -84,6 +84,7 @@ def draw(self, points, corner_radius=0, **kwds): mpl.path.Path(path, codes=codes, closed=True), transform=ax.transData, clip_on=True, + zorder=4, **kwds, ) return art diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png index bd2235aa56e1f2decda6b0d4907ddc8817eaed1f..8a8179e05c9997cca1a174bfa5702e803efa1167 100644 GIT binary patch literal 34606 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 literal 36425 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≦)ess8d z{X&fHXz`LMf@uQ>2cT}>8_-aN6MJ*9Q5|X&-Y)#)@%`%0TKD92b2>u)hpF8k0-Ipc zt$7ia7>$a=M?R+?@<01e8|LeLd;6BOkfj1(ET{sG*wTXWxr5M6SJ8ohrjj+b9(&ds zl(vFY^X83^w9${w*SfaF&=Eym41QfdVk=yT@;+SLsUE3)OFC$7;gpHX`v7e2hWHBhLsRy_KX?g3Z&&UQzEBmJ>Gd~Dx$3;z-zHsCjy3G@L zKTTJUDSLOF!WXBu*b*M#GEtBEV=@f8SY?wm>HdL5}6Xn!A{GI61$EzQo!IUMo`4gLL8@1g92 z2g$oHC%lh0QC4Gr)(_-bbpAK462BA!*A=&KJTA(8%DKPU_R?p81L1dxbpE;AvFW#q zPCL^n9!u&{ut5v6Cu#;NpHn}%zo4XCvoE?S9Mxa%6>@=uz24nvD#E_?n<*Vo#El=R zU-|u1P3>g4PTeq0L*sq9R}Ikp*fA*4O6z_5tnLIkV{Q68C&&1x50LIw5I$%RvYXc) z=s16vzsus)51Lhu_`ofyQ`~@#>2DfQu&3WQSV&|PTqt~?aLLHGPdgcFnM6)h@G0Gj znpwGmeKf1GHfd_hG1csHBxVpKy6?HUP$5gWvG^kfW!Kj_&U$xy^@T0^<%%Hot4}Wn zB!}>#2$6UD1`9UEJ-|2%rN&uGa=G`NvF2vW#iM6ZQBy8apNNXQEU>^ zOErx{(P+CJ{BpI`2^zRn&eNm4LW7-QeYKVvrMN#HYyo}5u44o&5!!cGybCTxQUV&5 zmR-w~rR;x6MZls(MCO6jjbBpXvoD?iBnlW1M7GT7sc>q(rIS?~NLvMU70>>TCcuYW zb#BnJ+&}ejl86n)r>3SPzLV-h?y(zxsfeL{)n$6in8U{&*H*$u@diRR9jJ?Oq>LIT zJ8g@L&uA}e(YDj7s$xEccH%8cpF9Kpmn#drx+kyjZmQJJDkpzd1Q*vEqtrKsgafHs zZ-U*p#RMZA#%k~$g9>x$lUy{xfkuCNf+Rhd5ySR~NXJt}egso3X=ZKY`@6cLo5(_z zENAT83W{KlpW^hX^FHZaKhE$3;{)*f0D)jg&_Y8&`CX&K4)lL6C zVs^EnEA$bwYmz2~aHWT)&IUxM+_@n_s&RBZwvfJ2D9Aq=sBPg0 z#FcBnk-Hfk7q}GGvoa$!wJePhtaNu6z-XIo9ra56XLc%FaKNaU*(Uym#`Z`9X*I{a zHBn~rUQfyn*4ua`2ngXW$*IUcfzSYUMWC9@S7N^uArc!K0;x%&0_x8MGR z>OLnRf2{EGl?y~tJWR4wQ3OJ!Rz){3e%O0p{lIOMQ|HvrH1II6(`%`oLWQEq_3tW!Tj2&V<;$<8JIz|kbyay3fs9W_gI%kzc5D_I+5|?P8@AVF5A)C z*Y$nZZev2HwnbEkh6Ufe2FbQkCivZ-DWvMPO9MM=C7}S+6~PJ|hVmz{kIHcvK}c}C zMY6px85dN)yWK}GZO;aVtycCrgqf0Y^w#Y$A>nfY4X5gPtYAuTY-&pM>+|L8|73&h zZ0V-qVga*@=h@)A?SB`Ya0`>2_evsJ#h?zWvimy7DYh?!dcu|!CM85_P&rF8<#lrw z%qiAi+gVdy-*5KQe5aBOGzM%<6dK^5WG0(WrJ$w;wY=43Xo+r;bB@)isMVi- zJ*-~QsYxoQEB5&Lujv}qFjp|ed0(bRO(V#D3Wo+Cr+^j=P-?r_*>SX@qR>g551~C< zJ>4IfVB_tQqyG3 zyMI70hYbJX{){7zjJ3Nd>|^Q|z3+2lHN0IjU+cXl-*96#+qxpx5L22U4KOq}gNAQ| zbQdu?NO*bT%-l@vvRAUov9qb}Z_ zUgzVl03OsWK@mt16v`i%!~_WQ>zmMt7wGy63-}~Q&vFVy zBR0;6$akP$pO&_iX!NnAtySn`GRS>?+~a^xJRzK%h!&SbpvR_v=vwEh2C)h!g(%ag z_hdju-PXl>9y?oBws5$igIF@;Tu&w^VUU{LRM?=C^g{`Zy^Xn|DWu~^ijgh+Oo0W` zUnp~hUfz`43cmWNuA=B2)XtN(W5?7F-Lw}d zo3~*3MRZ5)i`eSTYE6A-Eim_%X<>nFNcF~L8=ajBpN;^fimu7Y($^u(n5*%)B=#sY zcptP8Uk4VOPNoI%gkd(_;!CaR3w=&*g=&788PczT1-pn_5#DT))H1-m>?R2-vl@I0 zAXRjIe_CvP*fivMZ_DR>1cGe0sl=>vq!RAy(v|2m|C;zFF$oY`X-93b7Z*KtW$qJN z9#;iF0+oy<7;s>5Yh1b<^cyr=J8oMWealkj87}ez1=BQ2{6l{QKlY@mhM{hGctO z&?PGpjSLR9o28-I8g`v{axQS@=8`V=e+R&LxX6iRxY8quCo*c}%nd~P zA-&nh^R$tVFHhvt&r{H=p6t|ES=)|`Z-H!+??S3_4>p$B8)GcWKmE$JQo z$zD^k8Zu*2Rl@b!*XIN2`6cf)X?Z_2uT5JQ)-!-E`rqsj$p)GMX;+3xg2AX;Mx>}+ zJLOd3Ej**6@j4)^G*2N7-URy|t@(pl#_Hu)r$=GI%sIerISE|U`DLI1A13$AO%&n? zS_9vVeSqbtfByz$qpAsF)Kj?j>F4U4=l{U9M7w5Q z#8N9`nld8**asodTa?b<(vT}{P0-Q|rb+##>_sb|4GWm0r{fGqr}k*R7}NqD{^ZG= z`@7DEplk*KIvfkR9NU?ivThMFL-0*_Fa}JA*=y7hdY77$eWKt>mtSt%Mp6_~}V{i?0IFn~PB-JyBGQuNF-C#MJqf(4M3FKpR816`=d*3LzH z0kK;#bCHp-{O{k5Rm`(MlJ76OalC5x4#+qp@JMke$y2TnAi2S~TKlc@X4mr_BBB4n zyDl582x;;O?-zh}jX;T)a>fpH8Ij13uAY)nhub)frgXLCmhf-0vry?@HQ&53X}|fc z$SE7zHN?~Iy=%xFqTzwV`*KeXe|>d+0Rw%F&FE!Tr3dy(gH#}fz~B@WQ~2k=wdhk z-vr~C#ALFkS*Jz3TCtgwaAFnEnHK)!WC8oZ#qI9=3&FJ_)xG;U@1v6iR{RR2KuDcO z$1sUP7q6CViaN68;ygLaL(fuknDsMJ?3BI#XWSm|6mE1&2-qZmGk+EMH#nYs&lLu9!tyc0C08vtIW++V<8LU+ zt{kqGsRu*sNhm5kpF8>bz_0#N>8AU3OSb|wku&XJETQ$|Ykb(hg}H3~4=*)yp=RKo#@sU(6EW44VWaqM()epBg(0)Yv+8fBx3kJ^s(kn|Uk1$+tM3dy1#Jtf`wE za)}SrO`uJgGhTn#_2=uexjE=e^lK7EiVR*7XFUS6H8}G>uz2?Kl}EvSB!?&}EOh$O z$r0Y%M)(jde^yah|DVU>hkdC=qoVOb1m)Jy%FNEc=8hu^f(o&7yV%w4u%!*JsG%&{ zN-1{uh$$IuY>*@%&Hy@LTwI`yZbA$lWs^5y%MuKMxIF_3QJ(+5sI_|icU_z&3}|jd zuK=JtACeMuPGq~Yxiw4N_iUAf-3#mtofrqFBhVESK$GXdK;IZ%P_8Sepa54`{tevD zp`SxEyq_v-M}e`#_w?wbnE2|4Yjvs>*um&4!1oFxD=<3P!kxXlEMHM6`k%1%zT+$o z#zs304N>sQF);W^%=XtEmD_Wd!MvE;w^@{<`*SWpL}5HVKc?E06CqZsQ2^w1aAU`9 zMG#;pbnEOjA!C8BB}pt800U#4_M1h<1BO0HDJmMWe$IZL#_g0~7bkn@R|HU~UjRKQ z*wYh`3o2(`;{)xQTqd&(4fHBi4Q(qxA@yD8x7Y2$=f=*%_MGlD-REX&s@H!Acto<8 zC1nV&F77*Bt@fafSZ&63UA{Q6guO^+3d)bA2NlLhI?{`D#6eb9T6(KfqU$ftu07;F1&;7pBLvo_#t zSqo5{x$uwoy@VWmGs208;#&PbMHc73u{wv$PnMYc^TPl1C{f|wKQEyC`-Sr|is=C; zqm+bQ(S#b$EOdc~6BBO?H8e}CH=fUKZi@YbBK32J^7fq6@ZwZZ@rp@^RUIx@cpn7Z z`Sxv)U@L(55+)-GjNllr>VR|mOSjng*%m0PgM$sjRtLkHLPB7dW8$!fpX4h2J)Mtp zY%6j8l!GQlbTkxs7Js)Q@*&~urdfra+H|vzUtj*zyK*i%zs{8MId}I zowEK4&wo?-jyB(w(kk!#BQx$;)frh!MBX?XN3=uafVlN{$Fv3o&~o@8iKRUf@O3;R z&baAlQL3glO#X=ZqEk>MrQzi%MV3JY3%E>uu-eDFdp&TLyyp zB)p0VTZ5d(9N^yFUz-LM_~JXL05-+;UjeJ9a2~Md?bG=b5|Cf1wtzpOhG$8G1Hh%7 z7S#B=D=i`~2pe}_;Yw-$!-)krO;(3-M8<%E6)6oVY3#w8G*H6ls06Dw1)F#+)>U!W zNyM6sU19`MJrsPwWxXN8phwbQ#lza+|E@~>H6Mb?lS;RICTV5{V9wzz?e1k-T_BTz zi&3giyVT#krvfq54*=?Jkbb!lfx{DUN5;ApwcLtnLBig2{1v=qk56WDn8=-|IV2cQ zv8?}oL!PpscnHkADA+p!b>b%K`nfvsqi4QjAdeT|cm{{)GEcnt01pBo3kD$W%2WE7 zKpZ_1L(L3t0xad$-rNJ3_U*+6S3VEQl(Y#uITg|Jb_3qx9z>C;{2N{u2 z6$9_oErRMKDynWqq1RxZ5;kn`xRH~do`&;tcJ$>^-vy6It?QkDVo6+>wto`$H_AJ2HvNcb#wJvgyUKb`McawDU708Y{WtI>! z!N~AQZz2Qt7N?Ik@Cap)_?~BV7lXC_1|2P>O%oNIm={ciu?zD@%xY_2jsrP(>f5NK zw2h}-l*wSg zwtVe3I%Ue__Uyc{FuT7xx5h?<$OOm5%FgLYhL00Z>ZRpy(Vx9xm1DN`ga*euny2d_ zoRw!Wnr^dSYD69O?I&KZ|H6yq+vzd|uOLrT0+}p^AQ@yb;yWPcLn9H{XjyM>sUfLj z0g8rALRWXml?^vHnuQ_XHfNk{Ttf!JWj}8Mf+W;@@wLSX z#YhII0T!e@KI~!r{wWgZdH{ArcUO!L+gSU`Kl)y6M9Vy7z2ohQVMJrhFzMQ*3qHTi zo>`ABjQQ`bSgkP>jo|YW)1SkHJ4r0sVVf}|ICxcZYj;F)@AOE|j*dr|G;n`XjH&Sq zCr^^)56xwP(^f|9%9qY))*>g13nYDFl+bKBaA^bWpP&qm{E023kiyu3TO|ICeZHwg z3%&6D@#!=lZF@h zG8Jt&f09eE5z}_BaLW;D={tfY5958cAsHz@xS6P+|2JXa-VLLsglt+|F?z?NaxR2Z zln7fZ|M3=H{kEI^Wm>1zhO@Dvn4NvM;gWAdzmQ8{?B%Y!Kq^kLI7qPjuZ`*S_GY3) z6&2lZmJKFGfMh?`d3<0oo+zAsN&I=n$Q zr52DsofSiW{8Sb_Z_%AU!8|>E@?JiJ@BAy9G(10V16`peF*UL&A)m*V_!GtZDPJW} z&7ZCa|KR3Y@|LHjEC#K2V86q_$BF*wZeJm~o?;L$7G(g2>vfoCM7|I>?yj27y&`aK zcxs*R&Pxd=Ip4`H^*eupmMI_!srtBk>QSI7LML)ogcwF0GN;#;>8PYOkR%QTqrkWj(&UK zWo~6|KDG`R1Pw$;;WKtC%n(gB(d`ften31mw4Nnn7Z+;Ac)R~Zg^SGuex4TV36?)% zPIdvsl7H`mfidTkJ6vX#WZBwV%{yXNlWBo61)!=?H*y>ZIoh4x1h-FejoFT}P(*4F ziM_dw{+Ll)yXI=YWb;w$o(~qB*ulkMh}8~1-JzFKddid>^pafi7l0?QbPgHv`p#ui zaEH3CQjf1$pYKfpx#Q)lDx6Q06Z%ic|6P-dHqH~sEt4~bwQg%OPhGz)&cyN6>gk>Y zm>ZQlKjQ;NkGf8fnl%+C>N5y7KZNKvx>O{B9@(;YHrpvy!Ln~c5}>X&&M!z|I->uR zN85o@F(4bxRKA4FB&$YA{ zw<#r1+PQ~p@%{vganG&qwNs8y%$?&W_F0B8E>2_g7T_ELacW!+xZk(4s)8fKpa@TX zygIku$k*)T`}HGT@)|@3Ve`!7hpsE_f_Q}B8**}wb(R_)|8*LF=6|fMQy9)HCMEX4 zM?6_gi#h9uB1RaE`6JwuKe5YQ;2j(QtaekBsmV|#ANrja1CN!27h0xtlIG5oA93SX zP`wg@k=!a$Ro<@MJ$p*mBC8=u&nR7(?L6`ffzChG4X&Gkc_eBY3wK-v5mJMOc@_ja zV#(FwpI9Q4uxTn04FYxk{HYRuCb(x4CzgC!H`y``TQF&#YxbY|9)NbGr2TI*GLLu1o(c*Z zR(z4wkgXv1UUn9J3>cjb_=u;tGZ&clNLsYVx4!!9mVJJQoL&&Q=Sj<@o4M=Sf9bRv802G~f1-rUW%$)Oy?$3>vu*%x z91)!!^*xHN9IN$iW9~d1Y8ZyI_6Rl_#f6^X5G@^4Ci+SEflKb+8#gA=+IMUi;*#Ay z*>zvC{e!QZxI`MPb?ux58E5lq(aZyawGO(XbA2(~2WHEIOGDe_ygFbOLR9K%z*lh9 zai#30!T!vpFZyM{jDE7@L^oI{?)iDkkWz+M{U~PCBG16F0(T?EY<2F-IUL-`w(qja z{v~|ldxej07^86`4C|2{OmKb-X})SF`4FG;-~#uXYMhtj>%8xPp(^8sxZx7Box)@l zPRPQ&MaI@0U1qHj((l2vgVRv{Wai3>j&v|k*x9OdMN}5X5*zkbJLub(?xCJ#te;T^ z;^b*GU5(p6EtZ3BE#38J?)L51x-CL_&(vKGY27@%xq+SQ@+^LN3)B}c>Xh$>;i^7u z+jp~-non9Pq==3#x*?JHe#;Rgi{Q7xALSmBf?ut$uhKgW_NmP0Y47j{KR9sa6v704 z58^eUL=sN!=8I_&!%$Eg>3}vP81`{l8QBY}P?Efhb5M}=Gk+Xkg<}I(#HpJINY3+!)0{pnF7iD&AULA5e6vFEQw_c8?L!i+oNu5NJEbZ;!7hOulLvEhSn@r)D ziC5}Qe;XNF9qRctfga2}`allJ5CP`%Jd3Qg z>oo5?FOkF9bTb;46kV6Z0%a%wMZiEz20ja^62#(wSXX&WA;rJ7-rg6qej=k$@Jhd? z6I|yK1i6XKMf6`<*_3WmYCh^R>X7ua#u5iu?{4s zi0)XA#CmWln>+?HX|{Hu#99+xL`Qq*uS5UVU&cY)X)n(E4@f!WV-4*GLzSY4a7QDF zg&rR|!iTBk*~x@s)j-<8|9P2*n3`OEqwrk84Cd|p-uX=5mJgP!^R*cdXzCS%BZMax z+j}#M%t&fC13_u^8PG8RDHj#O4D-CfFL7ksclp$b0t*2%N04=@!sVxkID=;a(b>;d7>5VX^539Us5s4g3a^vvN$#tf z)}L0-CmeNd9KOzU{)*R;HdKelwT06xpg1;X&fxv+|8~)1ZtN&`Y#I96itwv9bES!y znmRq4L|3{M-iP6XTLIFN6TY&b`bsSFpr#wa2)gbAz?-h?af0c`^dA_4oy?d8A^s$!Dr8h0;>K$L zGuiarqM>M`NNs5uk5C&AODW~%U^f7R* zyB^>YmwB%K0^-9RWjG?g?sLGK@WVVo=F)Qz7tZ6>P{uSD>w(McTcI=55qk@mRV!W6 zUCF)x<(fi(g=5(7rSh-4`91XAs8f%{ku5##d{2r$P>vrx#($FjBUjIQCIP@`A?7UP zr>wyfK_Do?5Kv|4=oX$-?wwyv5l85mx?wixbF~ zu6xXwnjQ{hU{r#>zEF{_L;!{JtS{quoYnY7-zQf`Kw|bkjUV-^r`%X@AUYmP294w| z4r!D+^P#{)B04_yT`LjC?A;G>XO4Er;$3fm3lw~f;FgA?K^apxVt&QX{r%J}l^^|t zZ_x=Yaq(T6GTL7-%^tqn8i{>Nyy)hsbLp%_O&HW7QUVlMj`<3g~9*oQ-BYsi>sLDtt`6zsBx$m*Mq? z3#CWy2n-c~1SX_d2xZw`Y#O21TmR%5cN_U6e4TgnJ~{uaS+PF;cOA&jFmM{t!O4$9 zD5BYsl|=!aFgAQ|vq&&B3fuM?>;&2cKAEW@|2|F?sR=%LA}3$Inroyus2-TR=V&M! zrX3i|;=&1(#ZOUbp{R7t;iMDgtybL$y|my!|DLIn9UO*`v89ft=0@L4YRb93!mn@r z%cmUTX2k#e8Ly|hWus=U@GKWz{`rX%!y&Sz6r@SsbaK*P{WBMesTFo8JZcN1D< z+nz+mrHMS48h|W5)e!l1{iN0*5B1z}Sk#0@ngCHH;CxB);Pb0y^LM%pJ2D0`SOCPG z^FK8S=tBMY&x1~V$F%(tDqe-fF?m7M28J0p)0wYd|HGcmkZWe1dqM$e#rAVj%Hu(r zovmXc4nh~0KWhL6t1NN0z8h$SAez+G?$cD*B%?B3fYucJabwS zf}d;qL-F%_aLfKxzT3V-lM~3WJS&qBL1TR!7K~x+Q?YXuW_(^Jy2{Jo2Dl-Rr}x?a z{-P0v_qi|+nlMu}ONXUSlLv{L0dnhJZ4k#|q0Mh6F7lTRU+pnvG=}5(&Z=o1siC;pgx)LCd zvw)98O(eQ=B-$vDgiO2{tw2ChP`W^Z zBNInqlJv-T2##-Q&j{7w3`PE;&kZ=cb5!}YQb!0su?u25Rg_m zXpa;weueKMgUmPGU*U(@uL9LBkPpvd2$z zoaDIq{7=X)A0IymPtW0d`sEih$O>`wqd+@rT6J|s5)yIii5>L{%3ueV!z+VCeXwLDo z1WK=k9y7Pf(`e$3@UZdObYRfDIEBQ~=iXfEw}vX`eEph!g3C#Hr7`)mr2r}!<6w|G zQo>QO%WghOa)!z)AxE3}&xwBz74P`s@9wzuvKKFooVf$z_;`JILMA4FEUt8VNZo%2 zhnh2)OC4@9R52iMBj3>nf=OFP8(}rnK0ClIJyozeleV{61M}WjjWt;%F!HT?e0=vG z-Z4i%e=Kvwlk`KxDnxbPpy9>-ZxN|6L|t?YU8X1|NJRqK72VDavl=Lf4_o| za4nA$;M1Eb@CQ%~tX8-n2Ll+p5(k8QMp9B<$frs_eFH8J2a_-KIBS{A%&I%HeY(v} z9Yjo5nY|Pi#cdqtRh?F4OXt`H5A5JN6CQtQqr+_vGP$Rqo#Q zb8^NWN=``sLtYn=WQK2Ip+ss6ly0WB*{OFB1#)psBVPEnQ%iOJ*0^@$ObH)XFu5l( z09A+J`rvJ9DpXu4yYqZRq*w9`6z1`rTY1{foW*|-mlld)F3MePJi~kovj1@|ulWHX zKix%h4mh@6o%ox< z5yc<*UQ=}l))Ao}(~tw@HBKV`cBnlp>)A~bf)KrE)>@vG=h;pdK78n^P^9G{0S!5l zkpjPs@qM%OSeeNi`982mn+J{rU#v0C6%9=zz_I50C{2uzW~z?fW^zJ>xxUM_=8Hr~ z!WzmB7qMK2XYlcCg z7$ee4GE&z9hwaP8g9O@ooydjQk(()LO*Hk9qFnuiQ1M+dt=obRxuJsxR1z3057kwP z?o@3q(u`GLpvdFb_bEFt9pv{5K{z88e-nb=5c#rPQ@w*Cvj2O>my&A^UG-(f8b)te zUl|y;#=(>!!*Pl5BSJ4Fr8Qh$OpCi+b96`y!V|Uxgxmh?c*qRHSyEr`dljyId+rFr z&nr4i<`1*f2yGZ^RMC_Taq@QmkkMi1@b=gzaM^s*$cViEA`(kahVd~GpH;m7S+OV0 zz7ieX)12o}wF?Cg7uZ-jTL3pGL;Q+x_Fb~wfrHZ%+!cgELMw-R&u5rfkCDQ&#GQ(S z_fEYMPI$1;o6%9Cyg01UcW^HB{d)7eiwnb5jGk{Oxdca+^i8R5youp!4>)W3^1Hk@ z^3H;#A%gP7dU%0iHbAscb(guVv_Jr0F=BBn$EJu{CRHin03>7MEUT|eUJnb<%Q}YH>W>aK z3~GIcT&FBezCv+hr3<4|IG~sRQRA{bku=0p9GOK7x8P&d$lXWp{C+(I#msyFm0HNK zSf!CNP=<|=N@oQh$o;O%F*6b}b;re>SE;Axj^cJnxGw+BeHp3t^*|CE_?lOX&6`aK zh!7_J8Omzln1w4t0f)pbWR7vkYyI4=WIHnp%}A=kMjyyjXnyAs6R%z&A6ZCGmH6DMKhvmJk?ocx`2HAyEt4~N8|ZIY zCbHj11IUH|iA;Ly55dF^f^BpUpSE7QJONc10GYBhG}JUuZAqZ0|j}xd&m>` z@$HZu1H>iN{npkU<0UQeSdpkyC>3qT#8ICUlwyVH-iXk(@se!1iaw<#0%hzdy)X|< zybU^ zOLxsACWfS9?LLFY4E++$scF+`o2;tMF@j7@Rv6!sc^tA?bS^J-8FD2HKLmoECob2 zsrk(ev)%uaB>IgVR|#cIH*Y@YU?NkBYf$VIYgF{9IS&?8?oOn{)-<_;lb2r|xd&Iw zUZu>`n)Nk04?M$=#@a$wg=^UmMg(t$hTgi7Z>q3dMK(LTvN?2)7NIiAA=mnDV=$fu zo->%bJ40HDKD|$iu&e{E#ZU9+GyM%Pq ziD2pbnFb`A$R{Jfd9tfxQ_I@?6StLvt>J^U)_wZYp`1>;Qp4&Q2C@SVcEQ!+q5jY$ z#%d!f^4DChn{?tf0=FWJMU>yM-|&H+dg>+kX2SDC%rDLhgUUcL4(w&Q$&w0;$odXu zB;x0-R~)NEYZ=W>yG^W~Q`KtgJ=&#`JEyy$EhD7>@=^q0N}sbgdYmMV7~dc`%ce#@ zhHBK6?8iYxB-cMW4)x6+q7VN1)(-mUS+`dm%BtTx)k#aFY9VNRcE4|OBA`CN+3YuG zz+>>(!u?#EUJ$lMd3NOGZ8DaDsV#^T!L}JYSLR2Ekokk%516hJ{mxw7k*+#A*mC=B zeVN-uv~Fkr=lqP_IP-W~dXnMH(g-Ek`#dZ$-*cd}9KgR5p34K&sy{Y^+l$gl!9q4$ z!?qLot*6tgzNY<=2<_+N5VZ(G>t@OF%box29`Rd!C%}f3O$N+KF61BR(@j zQQP&&`se^cqscmCvBFX<>p_zhTqo$X-kSX$zfIDy(ww|AO2a^Q2F#B>=XWEYiTS=e zpUoD6bd9D3{fBg^8(Y?NH))f%!p-_CbYRzC+`d1N3LFZ5$1?d9Nlp*y(?I;n|86P; zcIYMITE&6;pP5n6F}L4C?`cA+Dlh_v9B^&wD$0OhMhLfGmg4FiJN~w~nGNaGtY>%M zHB#6O<&fTQ*uPs2*XIuu1*hEy{&xrmW6LJGaY4)JvX)yOyh_TuAYB!iU?%pK_~pZP z0Z@l*JZ$CTqd8xvMi)Y~TdKv01Kyf!$}1!&yPB9l#7GL0(&|YAEFx^^?2~jUExPg* zFGym9$PiUgP3IJt(c~NGh_z)C5dR%dmOtzsoz&YpJWy>sM^0<27BtM21;GK#XMBdx zQ%ldRV#0Gq(Nv(}fFk1;Qj?lY$^RXqs@(ouL-uIaVRF;SZ(Wbm!;hcjeoJds@MY%P zn~Q@*=HD)r4gGH@(3vJ6*L`^ezfwCfFQJ z=3ZE*>4nfeiUI54LDCNfh)@I3~;a=bwvzKin=hAr?jKAUIb4c?9LO7jLh1d zpRjqfFsWXt`p53P$&A1m<`*$A7XfiQb@E*1P&0b3`__#PxcodMxGv{cdCo<+T%Kd0 zDx4a-`i5B6mklJ>ILx}F?E(YzlSA}(2IYLc!ADP%URuWd?}0&UzxFMg5+FaZtKhuxQPGuy!NNE`+=M2^+*OVsd3w8LQqYkxx}Q8-s_6t~?VJR| zmC9HOVq(K@;5CV!Vic?v{e^O#kk)?T;ek+|l`gamH9X@JzIp?^>UsDJl|c_u$f03sU=g5#E@(2u zm)0t?Pg@zdF!>Olv8(4u)P~jZNQe@T=5@=kg*~Ku6>BZ`e@|nPcWJgdJ*BS%7ezPb0HI%PobVMCr*-;QT(B zt({_I1eQjMAcD^-Q84X&2j4x6;=FNRxlr)8jOqY+WA*?1r=q<%mc%9qA^ZbQ2u(JE zr!0#)9oWN(mluO*JNa0L6uk#7o(NzhHfk)f(m*S^hK=LANkX)D^UqIFLeVMf-0ga* zd$Z8bZSj$KXSr^LB}T}~Iot+2$fD6~n7Q?Guq3?DfAuZUuU`|)B)}9&d*gT85v@=d zIAQ_tE+zZ6?49-_y~Jg+K|}+8Z1J$|c338Kah~zW^JntBTglqH(>}WP7r{nmdtkEW zot3kK=TA~%M;$xzqiEjxjK;w-4+$C#4fy5-7R#fWRz1Az?<7?WQtrmx-mH|5k!P8L z(y?!AtiZmL0VVgJP!289&6sOZa{-8v5v+^P3!^sRrq!MR-{BUK?NC?yA%?0EaS%^St4G z;n+RaXmuJp85K~uI2alqEq}DR=)b8)bDn$*T&Wv-Y-e5^+uMamBr4_QsWzIH9_+Q7 z_@MWG#0y<2<2bf*aRR6DVcQUA%9nq;Tt+s0r(1;%|Jmyd}soU^wbl=rR7v9!OAVO(#A#++8VH@Qnl(eCBOJUO@Z7b{#{Fp z)63tPb2Su3B-GWA-a)l-qSlj`fv0gXTk90SsbI3j4Ry=p^lG&~o0Mj3S$b(=63LDB zwyE;HWg{bZ@h4&omV|E3Qp}8{H523L+VS;JmKcXlvBKPyT!XhmiiSE2Z~|T~^w+%3 z&mS9Uz(Zy=5Zb_Vty|7lS{5H>&^j8W?-6(ws?A8+#-M_&JO12N{OQz6Nu)*zi1X>SWd3qU!u)9t`jTlFNaFeV`;8~w z3pX~H3B?Q**MP;EEL9Ch4h(K&+#p-M+%(5M-2HGJD^N-l4Ft3zD4Wgl^Z!oTyh<2q zXT39$Q$jlbI?A&zL21)jG+xY*q;u4bZ_&%GvsjP%<;4r{6B87{kX&SIIcLM+)y3N`GS z<19M@hGcjIm)6hu=t7R z*5Due^)70vT8#x`B26B*$MWmRBU@CK+WjigNZ%>r(2jO>gOl0dS;r^~Ilsi*$d+ft2;Tlk22^?YaDEX|TSkeAeMo>Azmcg7I8Aoy zkD=AjiF2_(lWC&gKL_j!?37@)hkCR#N_*&rEP`}2g@V7(-=A24`t+pit%&aWk~K2A zFE?1Kkl21k4JZiI{htWD&z}dDzH({9-hIDsfLg!kh@X2Qp7u=OhWx!eklca+$FO^m z)6FYvND;aZ6r!mR7}F%nNdk@EAu~-eOX*5=W!QPurG7~lhubmE&PBn3mggzu00F+I zB>xe-MrGdmK70SPP9iNmozLjN1vPlfszaON>N!0K8&&)Gutoqz^dOLg(w$raHo^$S zs$@Xt_P76Mxw_uVlwSW7A1Jg{7l-e;^g4~@x3r9nTy2|8QF9Xo<6WfkGu%CTXl|~k zMA`|1<7khPxNal-Epkqp;LAELZ`d<+_4&oY+ZOk2UN9p+<^@`_WdVotHUK6!5w}L-VXNN)pXc-21c{Ra z7Hmaj@6i)WR$#5(ng)-!5^K2xqJ7 zHC%L;LKAO=z3zG`kT6I`5pXxU6pCi4}FER=eB7MY%${M z(xnk0kjx`flL4cNR_=B(J0cRKKO_X=m%Oya$m#H_H5~~s#jjaGymz_5L{K$kOB;Sg z1FlIli`I?ZVzb7N|3Z_U%$pPUQg7}6;|v*xcmjXV8jSLWFofKigpOktI=ZtBv`AE> z1bN)5oFpFf#)w(2+}b{_U4=Za0;nshGgI$FBkI2;h+NMyD9?egq&8ICtM;N~!`0`` zQIb&I)6$X5&Q?CMyygFE!l%l*z`e-LH63bIm6|)ZJXGdQ%vX7r?D+V#MTCHfXHL$q z;w;3Q64=Sim20bwJkGp@Ci?E-ML2VJA!a~XaxjkJ|1v3vYRoFM;q%F7v$KFtDP)UZ z0WcoUeU6urA-A+?HI`@=BGfSI5t63tJCn$#Caxsh48iXOvV}-jv*OZ??@jwVVG3=! z7%kQG^AccMnd#*PInnm$P}7QvisDHHZ+EJ_83e!NUAP+Jz}fQzdHt}6$$5a&k?LGA zuI;N@pEfZBXQ)&DIR}GRxHMT!a)?xpj&+}QS6*`O*DENPt=;SFxC++>e8T!%;^1XS zGA}J74s$=AKAaZFKXcm2ZF6Dn^2xps8fgeN$gAh`mSQjAzTZ=bj81m^w+(GIsy+bZ zUKT^+<+wJ2Ibqsv;|mw4!t?ZrA;7|;uYJ<0VDZ#R5E?q8hf?_Hp(13Gvtpnnd%(_cO?{BC2y7h9Z}k?mFEeakDKoINA+B}`&x;fp}|9QN)V z1g}}^u4JIGu2#a>f=izLburA9AjF_}&dfs0?HcW1adce1-5AbjOX9W}qq8iN5({^V z>0q5=*sY-K;wK|z!5KO*@F?6!dt~D(igg-;ICxAA)dsQw?wqR>{%U(1v0y6U4~Y5< zF}E^Y>To;KK0L*)j>xf`d@Zv4W^qVw`o693M?ZOxEr#CVBZ(HHg;BDtu3g-1>joO@ zAE&y$7xm88F+=)PfVdmDVD3OK2#F3-gJtlRqC69%P}dNHi`Dx_hdbcD9T#_|x|)=} z)Mee+^~hsy!WXfPFrx&cA~;2-c;V=)Y8EtzGOqo8hF#A*CIb%VpQAFe7tZt3qh9DQ z34yohE+}Yb2V-#u7_yLLva^g#{;{4j59MkHUZRT}5sHhMrEKdB#R8hh7&ar8HwFpB zG8X#z?Soujo(J$;@g2fZ4@UQGJa&#xR=Nd#fiwh2#ed<Di+nx>$|Elg0H>6u!j;>u^X_d*VjK)< zgs{|q$8^;+t?B?{(HJ|V=&GwIQdb@o*$@(U8}B{% z&6m)7lvk)_Q*t71CNONz$U&6Dguq!P$9(zXS!UbLyVlJ1KAZsjZ@xS-q@m#@WMd_c-sO;D+vRr6-{PgB^i6Pe%tu2dr!3$l*`lMX&j* zn#fL(!P1ca&_)7<$m&2EY=~kUz~Uh9TbG(&IlhqZ7kyMZ)3P)!7D1{UJJ+xwipTryR5kyWyPQLMdMPH*ACSKpTtixTluz{}$4ldr}Np$)_7ntWJ z1k1IM>;Z^#Xv3G3y7=CsX10~t^jssdLJPA*Dmc#6{PL4%+Pwc)?k4#b`vn|zTdbT_ zmxu3d-L^13U)>uOme1?1S@aH(HGa3GH!O`FOW&K!(Nt6=Z?ZEjC(eQ8|vPKmZ zp8xR(#>z4;#|nlb%QSXpRx-*(;bOfxwX)i%DReQ^1uE}QX%d3&ZqkU*wg-Oiye4Yf zd3j$DZg01z_WS+^2|!8~;|KuhJTyDtlMl@fB(9vRqKh}!|5S2UWx5a3HUw|9nzp`E zj4M5OOBG#YPLrp^_C%E7#)(~g`vKz!GB={~al0_=YS;A}!5Bb4ZNZ%Gu2E-Nsp-^G zy|gdyH#4=Q88Ye;T1!lO`BLM%i^$v%whSOeh)}-$e4B-4PkLPa70$Nu@rjz%N*CNu zV;UbxRY^QJUP!*xAFI@~>Jz@2_B{~5lkcOG=$V&>ykabqxs8}t!-7d!`A?s!uJvP< z*H+@Jx<`0QTPG(vJq0e#P>o+7*Zv5zNfJgrA8dOZAB->o;OmBxe9W0x2YnG@e?t(G zlaDv^{A%A^g#1Xu_x#Y!wkXBpNZPkw#4Z=^)3u!3-0y*4TaEcW#QzT}05@EuXtWn5 zSWQ~4G6Js8GQ$kFeq&gFeyUnbpZUNKRx*hP4cPW!6Y62IZJUA#^KlzrZ_)Jd$zZX_ z5Gza&wTP9G7KReM^en6B)0BYH<=!}kb`K_((=)D3$lip+Tt0jy3_9h zn)~y-A@%*9nV$GMJ@nxJEOhoAOTb!bI=fRM$6nML{%>CpjdV$ADUrdxb1%D6*(9m( zhlrc)lX}M94AXx%2}AW2(qT{ z+!-8Kf1$r)Pj~QkKZFRi;7hVl+s#MJrblqZ*bP~vz%N(UC>^kS5PE5fX8h{74`1ih zEUjg(?kUi=+N#&DO=Eq}f~*T!Z8&zF!+W_(ptY$j1}oWHDoA~+g_EVZd3UOioa6sq zIsvT<61O^pDl=Q#qm`T5N^FS59c=NL|DXphW`PwGL}9Hh+bxrqze{?A`Rs68pS3

9D)I*1gKVRW?;`JbT*9uWH&_P|#}Sc>}|A_)hnl&EvEOm)(FL*XUHV=%pFzZc=ghj9JiVX^58PRn8zSr?9dKFE*wNSc}i`5&2WnED02 z`EY@nuYr@bJ4wr9^u45tfC_|Ia`FFDk5l~j*bV4JkL$qoYi=m1b+eqHh^8Cf;x zDI3t1k7P3o`2RW@aYn+*m8SWe8NJ$Z2Hm$7 z9~GFv?DUVj2S5L&w<@&pmv)viy189t1#hGDK(ZE~Q{UzUMPuaacwPA9$q zK21*fk7~=2%wU`=pw+N!M{KKFnhYuGr9g`eiiHZ-32@}>4YjI#9d`b2_w+-W*`Ly` zU9_)(Ww`Rk>x7P215~8Zyf#;0`;EfyY}SqM^V|4>^#bG-s(5w|W!pW?Y`AW)R-&J= zmX!tk3sw!Ssi^Zjy-j|K6|Twoc(^@7R!|@f80A_q7MeMJ2?To{%aO46II!XbC#?GU z#@U}~XZsjzN&5Ep#@gb<;({y%YSsm?lH>k8Q_ z&&7Q-H)WS0UYjHRqX04zC)1^2m$A-S>vOd9iZCj!tFL={BiP|=}|olKqH^k;02K7eCn34L}w1)XcX=}GyYA~|x2y&FBhD#kus=~XMj zLM|B+wR0c$6yn9mGG&u-GY3T|Mf&@ph3K#v2m%VOIyghz=>>pltB%eB7)3&7Oc{Dp zpGkaluFmGdz}_Y(hYnXhKiaUhBPbq7&C*u5|2~q;^TNm6%s@!W>)$4OhY$W_mB7Fy zT0(bPT4rB~1AgIH8{78Ud3e=$A*@iCPDNV;yeKetGbr9Am5o@&f{Q9yWRz`OuU_zT zvaU-`;4@if{e#d3J1jZ*B)yG#ISq-T)Vs(_-)i=@bBb653n06 z;0q?d9>Bj3cZbcO+@9M@7;HozS!AfBH~*-B%!Q~({Btq{mSz_xtsnkL{;InHWawW{ zuub!hqmOpZg?j$XfI-iV&`<>H3Te5IlQJW2+;d;^FFQilowSYn-Sw#}#lP1-^)-7& zhdbe(z<2A9pI@t?w^|&>VumQj&{V>Xr29C4pe`=tz-HA$3QD5M#yE*Y_e)TG1Z^E` zK7;B*ueJ@TJ_vj2|4e;}ed9~;yk=0U;sbu@>&jq7hvFT_!)}EMuQT|2!>~mMIWnHk zL@&W3qmd;fn&LHS@D_TCydaZ==7rKP;eYGv^XTepG6H6v#ZQJ%S2KjL<*G^Lz}995 z21c?@F{;uT@JV|y(e(;eV*SPl45J0W{}oor2d@VO`@l{c+m6??R&U58-q4F=DzV=^ z*Z27Zy=L*tvR=u<>Z{MI8f!mVj^J;l^rT4|UWJuQ{AQHLuLzVFW*h!{_pEErf+-(# zLOGSD!K>)STcv-QZQpejnqXB1ZmIKpNm-wj);y;ysF1NMlxoyjEvhHy<2=4!Lwxzx zEuPNn%xkoW-n#oCnEVKgMGqAM)r@W{?!C3~XVtOF=hMAeZ;8_tCu6``Vr=p$J0vth8!vNIZrmeHj6i@sX*vrXJmeH9np7f z#}1u6Lk0Hvl?DMCs_^XTZ@0zgvbxVWU}jxLogeg9#HnSG;%FuC8c}11xTFV{urn^} zu)luUBW@-VmQN$wrJEi>kK(r-t{1(x1ZPntqs=UUgx=J$=hCf~@`sbl#8Kv24UeUjYeV9 z@agb)H{)_EBq5Oq0RiZ}-BQ^DdkicF<598k1Z&q2ZQHXY@vhlNiN>&W$5YC!d}m9M z!|K0X)0z4D#BRG^HRP}zw{kkWN|rxKFWkEauSKJFFt6*jveB0b-XVp;B-Ytr)cW(M zIpku^9kUByfC!eIAEM%>SuWQ|bg~?eg~8kB`Ld2}(ji+?ba>JKbozJ6a4-D3nNARs zb}fe~P?uUU>eBe6Qsjx_cbpilS{CmRSrR-Fz2__hj%ns&h|mDNyFKF!@;#Wffq~lv zDxe2pTbhiLYAVrP*&|SORaK=?->Oy%pnTOb;)r9nek)7kfCuKg4M7a;cge*4Y8g}W zKjSmFoP@3R9dxi1d8_mCvGf8+qN<^^+mE z!;-PJ1U(+%>P~Hv_;I^@FvwNuNh4>Zo!?`-e*HBVX3)9upoQaIzAYz#@?QZ`9<#&5 zYIPW^Ax(_3mw@Z%VPh*=>b}d>NO5IO#s-9B7B_!6Kox3}@WhlsB1S z%bjH>liRI^IJP9tPi2ORG^!};SPCYTG;m4TxU003?&`RF)%saB?xh;2<@Sm<`dMiw z>S%kdb-2vU`LGi0O6ll;B}1ck?8C^}a7AI6^7-Ej_~?`6rny@qr#on^=(bJNDk_>` zNVr`2EL%rxO`iA9%S7sr;&}KxT6E&^<*Rc3p&Rqz2Yap9jYBidDDB(kjeECYed0z| zN&bt)LG#gKu5irvwIMkcHMTPL=3i5#7-^SqxA!jUHPO!gID5#jvwWR@Y?ApY<`hMUY) z@qBDmy7^bC$~Fh>$Qq2Nqrr$AARwiW>3X{{-l?%BPv8vxN)uK^g)4MPb z!)Ku>M~c1pCF@x@TjI532Szl%MzMK+qAH#dJjQB|!Q!loEYFHRIG)Ka&)4eJEWAb& zc*2EltPs;bxpMLx>QG|LJ+6HFg@0(DuCn{?^%$Xoi!43q zdw4rfZ(W)$)bIVqTeDEP7v{^rzC42>A%{1i=o^YF-!(1!R-`ArqvyOf^;;%O;Rem- zBwD%YXL56#RU}0S`0o!{ai=p->GUtL5l~yhpFOdilGkwRml$&u;wxal9=>lbp zKu%rLkGIXyHy7PoTw>d&0=VzTS8Qt1*t>0wG*@h0eUetVH;ej4&V>54I$)F)9=bKk z;mUcVs{GdIRyl6);0-~Jgz%_4#tq1OHitXS2U~1g!{PC^N|>Z`ABFMo@1VuR-~`YL zM7A&3Vn0yzQ*qr-Q?l5iNGw16+h2Oqc_!gJtPs7b5OuX=B$87no}?ko&XeyA3h!e@ zLnqLz%*ZF5r$B2|@jhL1g^1)Ik^Pr=taGO-~zHFP+Z$~MUKD08#)vw^k zR#Ltj5=rqE{_d`_@(!LyjTf)Ve78cYE6XjVyYAaySa}4CfDLZyKh6%|($V@nxjQdQ zTz$lJ2PJs0vBA1rrMnqu-v98bDQk1-tLb;Y7X}PC_Uil%h~Yok93FR@U-c!6dJ>eF z_;PD$tt>q~-h5$D<#4z^uX%rm)svF*T2-RptLmdNlynSyi?#w+$5SBA3g>#(GE?FD ztZM9MXdt8RixdpT++cZ*oiQQ7K)1QZ+aTH1%1UTL&>?eU3xjE;T%+N;-`|#`>!pu< zKs$=36pF$_p}wt-38GMUZs8N6P+#OcQ7BX|d|}kbOL+Jw)Kiu_D3qru;Yk$gVbJlv khTr-B|HuFDr?F2PJMyN_)w<>hJV?|%StXflspnq*9~!M#+5i9m diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png index 6d7f5f038171bf243b89e7e0d67581e0921c7df5..a6ea8972f330c3b60de970b50a37f014b747aa2f 100644 GIT binary patch literal 60151 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 literal 60676 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 Q;K8M?qODwd%Od!H02y`u>i_@% From 8a7f368db90a1b70114e9bc106913fb1d018eaee Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 6 Apr 2023 13:13:01 +1000 Subject: [PATCH 042/681] Vertex label offset --- src/igraph/drawing/matplotlib/graph.py | 32 ++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index d6942d8ea..bb7e24247 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -210,6 +210,8 @@ def get_datalim(self): return (mins, maxs) def _draw_vertex_labels(self): + import numpy as np + kwds = self.kwds layout = self.layout vertex_builder = self.vertex_builder @@ -233,16 +235,34 @@ def _draw_vertex_labels(self): vertex.label_size, ) - art = mpl.text.Text( - *coords, + # Locate text relative to vertex in data units. This is consistent + # with the vertex size being in data units, but might be not fully + # satisfactory when zooming in/out. In that case, revisit this + # section + dist = vertex.label_dist + angle = vertex.label_angle + if vertex.size is not None: + vertex_width = vertex.size + vertex_height = vertex.size + else: + vertex_width = vertex.width + vertex_height = vertex.height + xtext = coords[0] + dist * vertex_width * np.cos(angle) + ytext = coords[1] + dist * vertex_height * np.sin(angle) + xytext = (xtext, ytext) + textcoords = 'data' + + art = mpl.text.Annotation( vertex.label, + coords, + xytext=xytext, + textcoords=textcoords, fontsize=label_size, ha="center", va="center", transform=self.axes.transData, clip_on=True, zorder=3, - # TODO: overlap, offset, etc. ) self._vertex_labels.append(art) @@ -292,17 +312,15 @@ def _draw_edge_labels(self): ) text_kwds["rotation"] = rotation - art = mpl.text.Text( - x, - y, + art = mpl.text.Annotation( label, + (x, y), fontsize=visual_edge.label_size, color=visual_edge.label_color, transform=self.axes.transData, clip_on=True, zorder=3, **text_kwds, - # TODO: offset, etc. ) self._vertex_labels.append(art) From a57011db4ebe2f7b71d8c408a737e51701d573d8 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 6 Apr 2023 14:43:27 +1000 Subject: [PATCH 043/681] Correct logic in draw --- src/igraph/drawing/matplotlib/graph.py | 2 +- .../test_graph/graph_edit_children.png | Bin 24177 -> 22431 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index bb7e24247..5b2ed04bd 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -535,7 +535,7 @@ def draw(self, renderer, *args, **kwds): if not self.get_visible(): return - if (not self.get_children()) or self.stale: + if not self.get_children(): self._reprocess() # NOTE: looks like we have to manage the zorder ourselves diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_edit_children.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_edit_children.png index 33fa772b2dfe4aa8da5819da407060178cb44a0f..14a9122d80c3d75900e9c77d4a09d04e540763f2 100644 GIT binary patch literal 22431 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%0AL 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 From c8ef8175a62311a255b38cba1cef40b5fdffcab7 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 6 Apr 2023 14:48:54 +1000 Subject: [PATCH 044/681] Try new conditional import for matplotlib --- src/igraph/drawing/matplotlib/graph.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 5b2ed04bd..0524d052b 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -28,6 +28,10 @@ __all__ = ("MatplotlibGraphDrawer",) mpl, plt = find_matplotlib() +if mpl is not None: + Artist = mpl.artist.Artist +else: + Artist = object ##################################################################### @@ -81,7 +85,7 @@ def method(self, *args, **kwargs): "set_picker", ) ) -class GraphArtist(mpl.artist.Artist, AbstractGraphDrawer): +class Graph(Artist, AbstractGraphDrawer): """Artist for an igraph.Graph object. Arguments: @@ -250,7 +254,7 @@ def _draw_vertex_labels(self): xtext = coords[0] + dist * vertex_width * np.cos(angle) ytext = coords[1] + dist * vertex_height * np.sin(angle) xytext = (xtext, ytext) - textcoords = 'data' + textcoords = "data" art = mpl.text.Annotation( vertex.label, @@ -619,7 +623,7 @@ def draw(self, graph, *args, **kwds): ax = self.ax # Create artist - art = GraphArtist( + art = Graph( graph, vertex_drawer_factory=self.vertex_drawer_factory, edge_drawer_factory=self.edge_drawer_factory, From 5659847341eede1383c27714578cae244b00858b Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 6 Apr 2023 14:55:08 +1000 Subject: [PATCH 045/681] Try again with mpl imports --- src/igraph/drawing/matplotlib/graph.py | 4 ++-- tests/drawing/matplotlib/test_graph.py | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 0524d052b..1d5854f2e 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -28,9 +28,9 @@ __all__ = ("MatplotlibGraphDrawer",) mpl, plt = find_matplotlib() -if mpl is not None: +try: Artist = mpl.artist.Artist -else: +except AttributeError: Artist = object ##################################################################### diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index 594b7489e..bbc7554d2 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -15,6 +15,7 @@ try: import matplotlib as mpl + mpl.use("agg") import matplotlib.pyplot as plt except ImportError: @@ -68,16 +69,20 @@ def test_mark_groups_squares(self): plt.close("all") g = Graph.Ring(5, directed=True) fig, ax = plt.subplots() - plot(g, target=ax, mark_groups=True, vertex_shape="s", - layout=self.layout_small_ring) + plot( + g, + target=ax, + mark_groups=True, + vertex_shape="s", + layout=self.layout_small_ring, + ) @image_comparison(baseline_images=["graph_edit_children"], remove_text=True) def test_mark_groups_squares(self): plt.close("all") g = Graph.Ring(5) fig, ax = plt.subplots() - plot(g, target=ax, vertex_shape="o", - layout=self.layout_small_ring) + plot(g, target=ax, vertex_shape="o", layout=self.layout_small_ring) graph_artist = ax.get_children()[0] dot = graph_artist.get_vertices()[0] dot.set_facecolor("blue") @@ -87,7 +92,7 @@ def test_mark_groups_squares(self): def test_gh_587(self): plt.close("all") g = Graph.Ring(5) - with overridden_configuration('plotting.backend', 'matplotlib'): + with overridden_configuration("plotting.backend", "matplotlib"): plot(g, target="graph_basic.png", layout=self.layout_small_ring) @@ -169,8 +174,7 @@ def test_clustering_directed_small(self): g = Graph.Ring(5, directed=True) clu = VertexClustering(g, [0] * 5) fig, ax = plt.subplots() - plot(clu, target=ax, mark_groups=True, - layout=self.layout_small_ring) + plot(clu, target=ax, mark_groups=True, layout=self.layout_small_ring) @image_comparison(baseline_images=["clustering_directed_large"], remove_text=True) def test_clustering_directed_large(self): From 495ce27a930c7939f9c8d7afe4fd1b21f2629548 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 6 Apr 2023 15:01:04 +1000 Subject: [PATCH 046/681] New try for import of Artist --- src/igraph/drawing/matplotlib/graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 1d5854f2e..f60c354c2 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -18,7 +18,7 @@ from igraph._igraph import convex_hull, VertexSeq from igraph.drawing.baseclasses import AbstractGraphDrawer -from igraph.drawing.utils import Point +from igraph.drawing.utils import Point, FakeModule from .edge import MatplotlibEdgeDrawer from .polygon import MatplotlibPolygonDrawer @@ -31,7 +31,7 @@ try: Artist = mpl.artist.Artist except AttributeError: - Artist = object + Artist = FakeModule ##################################################################### From 3f6bdbbea4af46e9dbdadb30c0e7877008adc738 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 6 Apr 2023 23:43:24 +0200 Subject: [PATCH 047/681] fix: allow NumPy integers as colors when plotting, closes #656 --- src/igraph/drawing/colors.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/igraph/drawing/colors.py b/src/igraph/drawing/colors.py index 67d226d97..4c977e04b 100644 --- a/src/igraph/drawing/colors.py +++ b/src/igraph/drawing/colors.py @@ -84,14 +84,14 @@ def get(self, v): return self._cache[v] except KeyError: pass - if isinstance(v, int): + if isinstance(v, str): + result = color_name_to_rgba(v) + else: if v < 0: raise IndexError("color index must be non-negative") if v >= self._length: raise IndexError("color index too large") result = self._get(v) - else: - result = color_name_to_rgba(v) self._cache[v] = result return result @@ -466,7 +466,7 @@ def color_name_to_rgba(color, palette=None): try: components = palette.get(color) except AttributeError: - raise ValueError("palette index used when no palette was given") + raise ValueError("palette index used when no palette was given") from None if len(components) < 4: components += [1.0] * (4 - len(components)) else: From db979528eb1634252b1b89bdcca33907acee64fa Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Fri, 7 Apr 2023 19:26:47 +1000 Subject: [PATCH 048/681] matplotlib artist: Graph.set --- src/igraph/drawing/matplotlib/graph.py | 79 ++++++++++++++++++-------- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index f60c354c2..bc0607907 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -36,6 +36,14 @@ ##################################################################### +class _Unset: + def __repr__(self): + return "" + + +_UNSET = _Unset() + + # NOTE: https://github.com/networkx/grave/blob/main/grave/grave.py def _stale_wrapper(func): """Decorator to manage artist state.""" @@ -101,26 +109,31 @@ def __init__( graph, vertex_drawer_factory=MatplotlibVertexDrawer, edge_drawer_factory=MatplotlibEdgeDrawer, + mark_groups=None, layout=None, - mark_groups=False, palette=None, **kwds, ): super().__init__() self.graph = graph - self.layout = self.ensure_layout(layout, graph) self.vertex_drawer_factory = vertex_drawer_factory self.edge_drawer_factory = edge_drawer_factory - self.mark_groups = mark_groups - self.edge_curved = self._set_edge_curve(**kwds) - self.palette = palette self.kwds = kwds + self.kwds["mark_groups"] = mark_groups + self.kwds["palette"] = palette + self.kwds["layout"] = layout + self._kwds_post_update() + + def _kwds_post_update(self): + self.kwds["layout"] = self.ensure_layout(self.kwds["layout"], self.graph) + self.edge_curved = self._set_edge_curve(**self.kwds) self._clear_state() + self.stale = True def _clear_state(self): - self._vertex_artists = [] - self._edge_artists = [] + self._vertices = [] + self._edges = [] self._vertex_labels = [] self._edge_labels = [] self._group_artists = [] @@ -130,8 +143,8 @@ def get_children(self): artists = sum( [ self._group_artists, - self._edge_artists, - self._vertex_artists, + self._edges, + self._vertices, self._edge_labels, self._vertex_labels, ], @@ -166,7 +179,7 @@ def _set_edge_curve(self, **kwds): def get_vertices(self): """Get vertex artists.""" - return self._vertex_artists + return self._vertices def get_edges(self): """Get edge artists. @@ -174,7 +187,7 @@ def get_edges(self): Note that for directed edges, an edge might have more than one artist, e.g. arrow shaft and arrowhead. """ - return self._edge_artists + return self._edges def get_groups(self): """Get group/cluster/cover artists.""" @@ -197,9 +210,10 @@ def get_datalim(self): import numpy as np vertex_builder = self.vertex_builder + layout = self.kwds["layout"] - mins = np.min(self.layout, axis=0) - maxs = np.max(self.layout, axis=0) + mins = np.min(layout, axis=0) + maxs = np.max(layout, axis=0) # Pad by vertex size, to ensure they fit if vertex_builder.size is not None: @@ -217,7 +231,7 @@ def _draw_vertex_labels(self): import numpy as np kwds = self.kwds - layout = self.layout + layout = self.kwds["layout"] vertex_builder = self.vertex_builder vertex_order = self.vertex_order @@ -334,9 +348,9 @@ def _draw_groups(self): from igraph.clustering import VertexClustering, VertexCover kwds = self.kwds - palette = self.palette - layout = self.layout - mark_groups = self.mark_groups + palette = self.kwds["palette"] + layout = self.kwds["layout"] + mark_groups = self.kwds["mark_groups"] vertex_builder = self.vertex_builder if not mark_groups: @@ -433,7 +447,7 @@ def _draw_groups(self): def _draw_vertices(self): """Draw the vertices""" graph = self.graph - layout = self.layout + layout = self.kwds["layout"] vertex_drawer = self.vertex_drawer vertex_builder = self.vertex_builder vertex_order = self.vertex_order @@ -449,7 +463,7 @@ def _draw_vertices(self): ) for vertex, visual_vertex, coords in vertex_coord_iter: art = vertex_drawer.draw(visual_vertex, vertex, coords) - self._vertex_artists.append(art) + self._vertices.append(art) def _draw_edges(self): """Draw the edges""" @@ -478,7 +492,7 @@ def _draw_edges(self): src, dest = edge.tuple src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] arts = drawer_method(visual_edge, src_vertex, dest_vertex) - self._edge_artists.extend(arts) + self._edges.extend(arts) def _reprocess(self): """Prepare artist and children for the actual drawing. @@ -487,13 +501,15 @@ def _reprocess(self): marshalled to their specific artists. """ # clear state and mark as stale + # since all children artists are part of the state, clearing it + # will trigger a deletion by the backend at the next draw cycle self._clear_state() self.stale = True # get local refs to everything (just for less typing) graph = self.graph - palette = self.palette - layout = self.layout + palette = self.kwds["palette"] + layout = self.kwds["layout"] kwds = self.kwds # Construct the vertex, edge and label drawers @@ -548,16 +564,31 @@ def draw(self, renderer, *args, **kwds): for art in children: art.draw(renderer, *args, **kwds) + def set( + self, + **kwds, + ): + """Set multiple parameters at once. + + The same options can be used as in the igraph.plot function. + """ + if len(kwds) == 0: + return + + self.kwds.update(kwds) + # NOTE: this also clears the state and sets the stale property + self._kwds_post_update() + def contains(self, mouseevent): """Track 'contains' event for mouse interactions.""" props = {"vertices": [], "edges": []} hit = False - for i, art in enumerate(self._edge_artists): + for i, art in enumerate(self._edges): edge_hit = art.contains(mouseevent)[0] hit |= edge_hit props["edges"].append(i) - for i, art in enumerate(self._vertex_artists): + for i, art in enumerate(self._vertices): vertex_hit = art.contains(mouseevent)[0] hit |= vertex_hit props["vertices"].append(i) From c261f28b0eccb93238177326f70f67dc734f877d Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sat, 8 Apr 2023 14:06:20 +1000 Subject: [PATCH 049/681] Add specific set methods via decorator --- src/igraph/drawing/__init__.py | 5 ++- src/igraph/drawing/graph.py | 2 +- src/igraph/drawing/matplotlib/graph.py | 49 +++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/__init__.py b/src/igraph/drawing/__init__.py index 5ae708ccc..06bcda90a 100644 --- a/src/igraph/drawing/__init__.py +++ b/src/igraph/drawing/__init__.py @@ -264,13 +264,16 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): warn("%s does not support plotting" % (obj,)) return else: - plotter( + result = plotter( backend, target, palette=palette, *args, **kwds, ) + # NOTE: for matplotlib, result is the container Artist. It would be + # good to return this instead of target, like we do for Cairo. + # However, that breaks API so let's wait for a major release if save_path is not None: if backend == "matplotlib": diff --git a/src/igraph/drawing/graph.py b/src/igraph/drawing/graph.py index ce56fe7ad..aa38d0571 100644 --- a/src/igraph/drawing/graph.py +++ b/src/igraph/drawing/graph.py @@ -555,4 +555,4 @@ def __plot__(self, backend, context, *args, **kwds): "drawer_factory", DrawerDirectory.resolve(self, backend)(context), ) - drawer.draw(self, *args, **kwds) + return drawer.draw(self, *args, **kwds) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index bc0607907..ff2c06afa 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -81,6 +81,52 @@ def method(self, *args, **kwargs): return cls +def _additional_set_methods(attributes, cls=None): + """Decorator to add specific set methods for children properties.""" + if cls is None: + return partial(_additional_set_methods, attributes) + + def make_setter(name): + def method(self, value): + self.set(**{name: value}) + return method + + for attr in attributes: + desc = attr.replace('_', ' ') + method = make_setter(attr) + method.__name__ = f"set_{attr}" + method.__doc__ = f"Set {desc}." + setattr(cls, f"set_{attr}", method) + + return cls + + +@_additional_set_methods( + ( + "vertex_color", + "vertex_size", + "vertex_font", + "vertex_label", + "vertex_label_angle", + "vertex_label_color", + "vertex_label_dist", + "vertex_label_size", + "vertex_order", + "vertex_shape", + "vertex_size", + "edge_color", + "edge_curved", + "edge_font", + "edge_arrow_size", + "edge_arrow_width", + "edge_width", + "edge_label", + "edge_background", + "edge_align_label", + "autocurve", + "layout", + ) +) @_forwarder( ( "set_clip_path", @@ -576,7 +622,6 @@ def set( return self.kwds.update(kwds) - # NOTE: this also clears the state and sets the stale property self._kwds_post_update() def contains(self, mouseevent): @@ -693,3 +738,5 @@ def draw(self, graph, *args, **kwds): # Autoscale for x/y axis limits ax.autoscale_view() + + return art From cfdbe4af569c82906db06b53e791db2c96471f77 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sat, 8 Apr 2023 14:25:05 +1000 Subject: [PATCH 050/681] Add docs on new feature in example from gallery --- doc/examples_sphinx-gallery/visual_style.py | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/doc/examples_sphinx-gallery/visual_style.py b/doc/examples_sphinx-gallery/visual_style.py index 8273edfd6..9d33968a1 100644 --- a/doc/examples_sphinx-gallery/visual_style.py +++ b/doc/examples_sphinx-gallery/visual_style.py @@ -47,3 +47,25 @@ # default, you can use igraph's `configuration instance # :class:`igraph.configuration.Configuration`. A quick example on how to use # it can be found here: :ref:`tutorials-configuration`. + +# %% +# In the matplotlib backend, igraph creates a special container +# :class:`igraph.drawing.matplotlib.graph.Graph` which is a matplotlib Artist +# and the first child of the target Axes. That object can be used to customize +# the plot appearance after the initial drawing, e.g.: +g = ig.Graph.Barabasi(n=30, m=1) +fig, ax = plt.subplots() +ig.plot(g, target=ax) +artist = ax.get_children()[0] +# Option 1: +artist.set(vertex_color="blue") +# Option 2: +artist.set_vertex_color("blue") +plt.show() + +# %% +# .. note:: +# The ``artist.set`` method can be used to change multiple properties at +# once and is generally more efficient than multiple calls to specific +# ``artist.set_...` methods. + From c665543e2983fbeabf855ced7e370290a8b50866 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 13 Apr 2023 11:33:35 +0200 Subject: [PATCH 051/681] feat: added Graph.Triangular_Lattice() and Graph.Hexagonal_Lattice(), closes #658 --- src/_igraph/graphobject.c | 110 ++++++++++++++++++++++++++++++++++++-- tests/test_generators.py | 35 ++++++++++++ 2 files changed, 141 insertions(+), 4 deletions(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 8986018e1..dcbb0bd87 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -2583,6 +2583,47 @@ PyObject *igraphmodule_Graph_Growing_Random(PyTypeObject * type, return (PyObject *) self; } +/** \ingroup python_interface_graph + * \brief Generates a regular hexagonal lattice + * \return a reference to the newly generated Python igraph object + * \sa igraph_hexagonal_lattice + */ +PyObject *igraphmodule_Graph_Hexagonal_Lattice(PyTypeObject * type, + PyObject * args, PyObject * kwds) +{ + igraph_vector_int_t dimvector; + igraph_bool_t directed; + igraph_bool_t mutual; + PyObject *o_directed = Py_False, *o_mutual = Py_True; + PyObject *o_dimvector = Py_None; + igraphmodule_GraphObject *self; + igraph_t g; + + static char *kwlist[] = { "dim", "directed", "mutual", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO", kwlist, + &o_dimvector, &o_directed, &o_mutual)) + return NULL; + + directed = PyObject_IsTrue(o_directed); + mutual = PyObject_IsTrue(o_mutual); + + if (igraphmodule_PyObject_to_vector_int_t(o_dimvector, &dimvector)) + return NULL; + + if (igraph_hexagonal_lattice(&g, &dimvector, directed, mutual)) { + igraphmodule_handle_igraph_error(); + igraph_vector_int_destroy(&dimvector); + return NULL; + } + + igraph_vector_int_destroy(&dimvector); + + CREATE_GRAPH_FROM_TYPE(self, g, type); + + return (PyObject *) self; +} + /** \ingroup python_interface_graph * \brief Generates a bipartite graph from an incidence matrix * \return a reference to the newly generated Python igraph object @@ -2730,9 +2771,9 @@ PyObject *igraphmodule_Graph_K_Regular(PyTypeObject * type, } /** \ingroup python_interface_graph - * \brief Generates a regular lattice + * \brief Generates a regular square lattice * \return a reference to the newly generated Python igraph object - * \sa igraph_lattice + * \sa igraph_square_lattice */ PyObject *igraphmodule_Graph_Lattice(PyTypeObject * type, PyObject * args, PyObject * kwds) @@ -3547,6 +3588,47 @@ PyObject *igraphmodule_Graph_Tree_Game(PyTypeObject * type, return (PyObject *) self; } +/** \ingroup python_interface_graph + * \brief Generates a regular triangular lattice + * \return a reference to the newly generated Python igraph object + * \sa igraph_triangular_lattice + */ +PyObject *igraphmodule_Graph_Triangular_Lattice(PyTypeObject * type, + PyObject * args, PyObject * kwds) +{ + igraph_vector_int_t dimvector; + igraph_bool_t directed; + igraph_bool_t mutual; + PyObject *o_directed = Py_False, *o_mutual = Py_True; + PyObject *o_dimvector = Py_None; + igraphmodule_GraphObject *self; + igraph_t g; + + static char *kwlist[] = { "dim", "directed", "mutual", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO", kwlist, + &o_dimvector, &o_directed, &o_mutual)) + return NULL; + + directed = PyObject_IsTrue(o_directed); + mutual = PyObject_IsTrue(o_mutual); + + if (igraphmodule_PyObject_to_vector_int_t(o_dimvector, &dimvector)) + return NULL; + + if (igraph_triangular_lattice(&g, &dimvector, directed, mutual)) { + igraphmodule_handle_igraph_error(); + igraph_vector_int_destroy(&dimvector); + return NULL; + } + + igraph_vector_int_destroy(&dimvector); + + CREATE_GRAPH_FROM_TYPE(self, g, type); + + return (PyObject *) self; +} + /** \ingroup python_interface_graph * \brief Generates a graph based on the Watts-Strogatz model * \return a reference to the newly generated Python igraph object @@ -13663,6 +13745,16 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "@param citation: whether the new edges should originate from the most\n" " recently added vertex.\n"}, + /* interface to igraph_hexagonal_lattice */ + {"Hexagonal_Lattice", (PyCFunction) igraphmodule_Graph_Hexagonal_Lattice, + METH_VARARGS | METH_CLASS | METH_KEYWORDS, + "Hexagonal_Lattice(dim, directed=False, mutual=True)\n--\n\n" + "Generates a regular hexagonal lattice.\n\n" + "@param dim: list with the dimensions of the lattice\n" + "@param directed: whether to create a directed graph.\n" + "@param mutual: whether to create all connections as mutual\n" + " in case of a directed graph.\n"}, + /* interface to igraph_incidence */ {"_Incidence", (PyCFunction) igraphmodule_Graph_Incidence, METH_VARARGS | METH_CLASS | METH_KEYWORDS, @@ -13777,11 +13869,11 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " either \"in\", \"out\", \"mutual\" or \"undirected\"\n" "@param center: Vertex ID for the central vertex in the star.\n"}, - // interface to igraph_lattice + // interface to igraph_square_lattice {"Lattice", (PyCFunction) igraphmodule_Graph_Lattice, METH_VARARGS | METH_CLASS | METH_KEYWORDS, "Lattice(dim, nei=1, directed=False, mutual=True, circular=True)\n--\n\n" - "Generates a regular lattice.\n\n" + "Generates a regular square lattice.\n\n" "@param dim: list with the dimensions of the lattice\n" "@param nei: value giving the distance (number of steps) within which\n" " two vertices will be connected.\n" @@ -14013,6 +14105,16 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " undirected graphs.\n" }, + /* interface to igraph_triangular_lattice */ + {"Triangular_Lattice", (PyCFunction) igraphmodule_Graph_Triangular_Lattice, + METH_VARARGS | METH_CLASS | METH_KEYWORDS, + "Triangular_Lattice(dim, directed=False, mutual=True)\n--\n\n" + "Generates a regular triangular lattice.\n\n" + "@param dim: list with the dimensions of the lattice\n" + "@param directed: whether to create a directed graph.\n" + "@param mutual: whether to create all connections as mutual\n" + " in case of a directed graph.\n"}, + /* interface to igraph_watts_strogatz_game */ {"Watts_Strogatz", (PyCFunction) igraphmodule_Graph_Watts_Strogatz, METH_VARARGS | METH_CLASS | METH_KEYWORDS, diff --git a/tests/test_generators.py b/tests/test_generators.py index 25bfb56d9..104f27cf3 100644 --- a/tests/test_generators.py +++ b/tests/test_generators.py @@ -129,6 +129,24 @@ def testFullCitation(self): self.assertRaises(ValueError, Graph.Full_Citation, -2) + def testHexagonalLattice(self): + el = [ + (0, 1), (0, 6), (1, 2), (2, 3), (2, 8), (3, 4), (4, 10), + (5, 6), (5, 11), (6, 7), (7, 8), (7, 13), (8, 9), (9, 10), + (9, 15), (11, 12), (12, 13), (13, 14), (14, 15) + ] + g = Graph.Hexagonal_Lattice([2, 2]) + self.assertEqual(sorted(g.get_edgelist()), el) + + g = Graph.Hexagonal_Lattice([2, 2], directed=True, mutual=False) + self.assertEqual(sorted(g.get_edgelist()), el) + + g = Graph.Hexagonal_Lattice([2, 2], directed=True, mutual=True) + self.assertEqual( + sorted(g.get_edgelist()), + sorted(el + [(y, x) for x, y in el]) + ) + def testLCF(self): g1 = Graph.LCF(12, (5, -5), 6) g2 = Graph.Famous("Franklin") @@ -346,6 +364,23 @@ def testSBM(self): pref_matrix[0][1] = 0.7 self.assertRaises(InternalError, Graph.SBM, 60, pref_matrix, types) + def testTriangularLattice(self): + g = Graph.Triangular_Lattice([2, 2]) + self.assertEqual( + sorted(g.get_edgelist()), [(0, 1), (0, 2), (0, 3), (1, 3), (2, 3)] + ) + + g = Graph.Triangular_Lattice([2, 2], directed=True, mutual=False) + self.assertEqual( + sorted(g.get_edgelist()), [(0, 1), (0, 2), (0, 3), (1, 3), (2, 3)] + ) + + g = Graph.Triangular_Lattice([2, 2], directed=True, mutual=True) + self.assertEqual( + sorted(g.get_edgelist()), + [(0, 1), (0, 2), (0, 3), (1, 0), (1, 3), (2, 0), (2, 3), (3, 0), (3, 1), (3, 2)] + ) + @unittest.skipIf(np is None, "test case depends on NumPy") def testAdjacencyNumPy(self): mat = np.array( From a633ab24d66e0aff15c424ac759fd795d54f5b8f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 13 Apr 2023 22:07:28 +0200 Subject: [PATCH 052/681] doc: fixing a few documentation warnings --- doc/source/tutorial.es.rst | 2 +- src/_igraph/graphobject.c | 5 +++-- src/_igraph/igraphmodule.c | 4 ++-- src/igraph/sparse_matrix.py | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/source/tutorial.es.rst b/doc/source/tutorial.es.rst index d6e89d39c..ea5727155 100644 --- a/doc/source/tutorial.es.rst +++ b/doc/source/tutorial.es.rst @@ -1,6 +1,6 @@ .. include:: include/global.rst -.. _tutorial: +.. _tutorial_es: .. currentmodule:: igraph diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index dcbb0bd87..9b958d806 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -14634,7 +14634,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { {"eigen_adjacency", (PyCFunction) igraphmodule_Graph_eigen_adjacency, METH_VARARGS | METH_KEYWORDS, - "" }, + "eigen_adjacency(algorithm=None, which=None, arpack_options=None)\n--\n\n" }, /* interface to igraph_[st_]edge_connectivity */ {"edge_connectivity", (PyCFunction) igraphmodule_Graph_edge_connectivity, @@ -14820,7 +14820,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { /* interface to igraph_get_shortest_path_astar */ {"get_shortest_path_astar", (PyCFunction) igraphmodule_Graph_get_shortest_path_astar, METH_VARARGS | METH_KEYWORDS, - "get_shortest_path(v, to, heuristics, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" + "get_shortest_path_astar(v, to, heuristics, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" "Calculates the shortest path from a source vertex to a target vertex in a\n" "graph using the A-Star algorithm and a heuristic function.\n\n" "@param v: the source vertex of the path\n" @@ -16128,6 +16128,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { {"_layout_sugiyama", (PyCFunction) igraphmodule_Graph_layout_sugiyama, METH_VARARGS | METH_KEYWORDS, + "_layout_sugiyama()\n--\n\n" "Internal function, undocumented.\n\n" "@see: Graph.layout_sugiyama()\n\n"}, diff --git a/src/_igraph/igraphmodule.c b/src/_igraph/igraphmodule.c index 6fa7d7f04..50e2d7bca 100644 --- a/src/_igraph/igraphmodule.c +++ b/src/_igraph/igraphmodule.c @@ -826,7 +826,7 @@ static PyMethodDef igraphmodule_methods[] = }, {"umap_compute_weights", (PyCFunction)igraphmodule_umap_compute_weights, METH_VARARGS | METH_KEYWORDS, - "layout_umap_compute_weights(graph, dist)\n" + "umap_compute_weights(graph, dist)\n" "--\n\n" "@param graph: directed graph to compute weights for.\n" "@param dist: distances associated with the graph edges.\n" @@ -850,7 +850,7 @@ static PyMethodDef igraphmodule_methods[] = "to zero whenever edges in opposite directions are found in the input\n" "distance graph. You can pipe the output of this function directly into\n" "Graph.layout_umap() as follows:\n" - "C{weights = igraph.layout_umap_compute_weights(graph, dist)}\n" + "C{weights = igraph.umap_compute_weights(graph, dist)}\n" "C{layout = graph.layout_umap(weights=weights)}\n\n" "@see: Graph.layout_umap()\n" }, diff --git a/src/igraph/sparse_matrix.py b/src/igraph/sparse_matrix.py index 82a7b7120..3b7622828 100644 --- a/src/igraph/sparse_matrix.py +++ b/src/igraph/sparse_matrix.py @@ -49,7 +49,7 @@ def _convert_mode_argument(mode): def _maybe_halve_diagonal(m, condition): """Halves all items in the diagonal of the given SciPy sparse matrix in - coo mode _if_ and _only if_ the given condition is True. + coo mode *if* and *only if* the given condition is True. Returns the row, column and data arrays. """ From 6a1b89d9e904e97d020f7dcba246537c46c40137 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 14 Apr 2023 22:35:41 +0200 Subject: [PATCH 053/681] doc: fix documentation build on readthedocs --- src/igraph/drawing/colors.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/igraph/drawing/colors.py b/src/igraph/drawing/colors.py index 4c977e04b..6d2dad274 100644 --- a/src/igraph/drawing/colors.py +++ b/src/igraph/drawing/colors.py @@ -86,6 +86,8 @@ def get(self, v): pass if isinstance(v, str): result = color_name_to_rgba(v) + elif hasattr(v, "__iter__"): # lists, tuples etc + return result # no need to cache else: if v < 0: raise IndexError("color index must be non-negative") From 669fe5b45640b70e1cdc875a4a98bc1dad8d85b8 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 14 Apr 2023 22:46:10 +0200 Subject: [PATCH 054/681] fix: fix typo in previous commit --- src/igraph/drawing/colors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/igraph/drawing/colors.py b/src/igraph/drawing/colors.py index 6d2dad274..192abe308 100644 --- a/src/igraph/drawing/colors.py +++ b/src/igraph/drawing/colors.py @@ -87,7 +87,7 @@ def get(self, v): if isinstance(v, str): result = color_name_to_rgba(v) elif hasattr(v, "__iter__"): # lists, tuples etc - return result # no need to cache + return v # no need to cache else: if v < 0: raise IndexError("color index must be non-negative") From 5972fde4fc04f3391d217fa9ce99649f0315425d Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 21 Apr 2023 15:11:58 +0200 Subject: [PATCH 055/681] fix: remove unused _Unset class and _UNSET instance --- src/igraph/drawing/matplotlib/graph.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index ff2c06afa..31e639104 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -36,14 +36,6 @@ ##################################################################### -class _Unset: - def __repr__(self): - return "" - - -_UNSET = _Unset() - - # NOTE: https://github.com/networkx/grave/blob/main/grave/grave.py def _stale_wrapper(func): """Decorator to manage artist state.""" From e8ab5c578d8c0ce1751426c61d98b5f08baaea42 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 21 Apr 2023 17:53:26 +0200 Subject: [PATCH 056/681] refactor: renamed Matplotlib Graph artist to GraphArtist --- doc/examples_sphinx-gallery/visual_style.py | 2 +- src/igraph/drawing/matplotlib/graph.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/examples_sphinx-gallery/visual_style.py b/doc/examples_sphinx-gallery/visual_style.py index 9d33968a1..232942a11 100644 --- a/doc/examples_sphinx-gallery/visual_style.py +++ b/doc/examples_sphinx-gallery/visual_style.py @@ -50,7 +50,7 @@ # %% # In the matplotlib backend, igraph creates a special container -# :class:`igraph.drawing.matplotlib.graph.Graph` which is a matplotlib Artist +# :class:`igraph.drawing.matplotlib.graph.GraphArtist` which is a matplotlib Artist # and the first child of the target Axes. That object can be used to customize # the plot appearance after the initial drawing, e.g.: g = ig.Graph.Barabasi(n=30, m=1) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 31e639104..4269e5d5e 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -131,7 +131,7 @@ def method(self, value): "set_picker", ) ) -class Graph(Artist, AbstractGraphDrawer): +class GraphArtist(Artist, AbstractGraphDrawer): """Artist for an igraph.Graph object. Arguments: @@ -691,7 +691,7 @@ def draw(self, graph, *args, **kwds): ax = self.ax # Create artist - art = Graph( + art = GraphArtist( graph, vertex_drawer_factory=self.vertex_drawer_factory, edge_drawer_factory=self.edge_drawer_factory, From ae4bd3fac0963b6bf0f0a5dd70a2ab4e8afb6361 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Sat, 22 Apr 2023 22:40:52 +0200 Subject: [PATCH 057/681] fix: don't treat compiler warnings as errors while compiling the C core, refs #654 --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index f6918f254..9b9f97da2 100644 --- a/setup.py +++ b/setup.py @@ -254,6 +254,11 @@ def _compile_in( # No need to build tests args.append("-DBUILD_TESTING=OFF") + # Do not treat compilation warnings as errors in case someone is trying + # to "pip install" igraph in an environment for which we don't provide + # wheels and the compiler complains about harmless things + args.append("-DIGRAPH_WARNINGS_AS_ERRORS=OFF") + # Set install directory during config step instead of install step in order # to avoid having the architecture name in the LIBPATH (e.g. lib/x86_64-linux-gnu) args.append("-DCMAKE_INSTALL_PREFIX=" + str(install_folder)) From 8b0bc042f5e16917c982f9af89da32bc3201e34d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 14:02:48 +0000 Subject: [PATCH 058/681] build(deps): bump pypa/cibuildwheel from 2.12.1 to 2.12.3 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.12.1 to 2.12.3. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.12.1...v2.12.3) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cf9edebae..4b79fe8a3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.12.1 + uses: pypa/cibuildwheel@v2.12.3 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" @@ -38,7 +38,7 @@ jobs: CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.12.1 + uses: pypa/cibuildwheel@v2.12.3 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -63,7 +63,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.12.1 + uses: pypa/cibuildwheel@v2.12.3 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -88,7 +88,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.12.1 + uses: pypa/cibuildwheel@v2.12.3 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -155,7 +155,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.12.1 + uses: pypa/cibuildwheel@v2.12.3 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -214,7 +214,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.12.1 + uses: pypa/cibuildwheel@v2.12.3 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From eb29a5a59a5e8477e44a60a77853f102ee0b6e64 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Tue, 2 May 2023 09:53:59 +1000 Subject: [PATCH 059/681] Fix a few doc errors and warnings (#661) --- doc/examples_sphinx-gallery/visual_style.py | 7 ++- src/_igraph/graphobject.c | 8 ++-- src/_igraph/igraphmodule.c | 17 ++++---- src/igraph/drawing/matplotlib/graph.py | 48 ++++++++++++--------- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/doc/examples_sphinx-gallery/visual_style.py b/doc/examples_sphinx-gallery/visual_style.py index 232942a11..04f899ef8 100644 --- a/doc/examples_sphinx-gallery/visual_style.py +++ b/doc/examples_sphinx-gallery/visual_style.py @@ -65,7 +65,6 @@ # %% # .. note:: -# The ``artist.set`` method can be used to change multiple properties at -# once and is generally more efficient than multiple calls to specific -# ``artist.set_...` methods. - +# The :meth:`igraph.drawing.matplotlib.graph.GraphArtist.set` method can +# be used to change multiple properties at once and is generally more +# efficient than multiple calls to specific ``artist.set_...`` methods. diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 9b958d806..821b91588 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -16148,7 +16148,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "@param weights: precomputed edge weights if you have them, as an alternative\n" " to setting the C{dist} argument. Zero weights will be ignored if this\n" " argument is set, e.g. if you computed the weights via\n" - " igraph.layout_umap_compute_weights().\n" + " igraph.umap_compute_weights().\n" "@param dim: the desired number of dimensions for the layout. dim=2\n" " means a 2D layout, dim=3 means a 3D layout.\n" "@param seed: if C{None}, uses a random starting layout for the\n" @@ -16166,13 +16166,13 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "if weights are precomputed, the graph will be treated as undirected. A special\n" "case is when the graph is directed but the precomputed weights are symmetrized\n" "in a way only one of each pair of opposite edges has nonzero weight, e.g. as\n" - "computed by igraph.layout_umap_compute_weights(). For example:\n" - "C{weights = igraph.layout_umap_compute_weights(graph, dist)}\n" + "computed by igraph.umap_compute_weights(). For example:\n" + "C{weights = igraph.umap_compute_weights(graph, dist)}\n" "C{layout = graph.layout_umap(weights=weights)}\n\n" "@newfield ref: Reference\n" "@ref: L McInnes, J Healy, J Melville: UMAP: Uniform Manifold Approximation\n" " and Projection for Dimension Reduction. arXiv:1802.03426.\n" - "@see: igraph.layout_umap_compute_weights()\n\n"}, + "@see: igraph.umap_compute_weights()\n\n"}, //////////////////////////// // VISITOR-LIKE FUNCTIONS // diff --git a/src/_igraph/igraphmodule.c b/src/_igraph/igraphmodule.c index 50e2d7bca..a7edd9315 100644 --- a/src/_igraph/igraphmodule.c +++ b/src/_igraph/igraphmodule.c @@ -826,16 +826,10 @@ static PyMethodDef igraphmodule_methods[] = }, {"umap_compute_weights", (PyCFunction)igraphmodule_umap_compute_weights, METH_VARARGS | METH_KEYWORDS, - "umap_compute_weights(graph, dist)\n" - "--\n\n" - "@param graph: directed graph to compute weights for.\n" - "@param dist: distances associated with the graph edges.\n" - "@return: Symmetrized weights associated with each edge. If the distance\n" - " graph has both directed edges between a pair of vertices, one of the\n" - " returned weights will be set to zero.\n\n" - "Compute undirected UMAP weights from directed distance graph.\n\n" + "umap_compute_weights(graph, dist)\n--\n\n" + "Compute undirected UMAP weights from directed distance graph.\n" "UMAP is a layout algorithm that usually takes as input a directed\n" - "distance graph, e.g. a k nearest neighbor graph based on Euclidean\n" + "distance graph, for instance a k nearest neighbor graph based on Euclidean\n" "distance between points in a vector space. The graph is directed\n" "because vertex v1 might consider vertex v2 a close neighbor, but v2\n" "itself might have many neighbors that are closer than v1.\n" @@ -852,6 +846,11 @@ static PyMethodDef igraphmodule_methods[] = "Graph.layout_umap() as follows:\n" "C{weights = igraph.umap_compute_weights(graph, dist)}\n" "C{layout = graph.layout_umap(weights=weights)}\n\n" + "@param graph: directed graph to compute weights for.\n" + "@param dist: distances associated with the graph edges.\n" + "@return: Symmetrized weights associated with each edge. If the distance\n" + " graph has both directed edges between a pair of vertices, one of the\n" + " returned weights will be set to zero.\n\n" "@see: Graph.layout_umap()\n" }, {"set_progress_handler", igraphmodule_set_progress_handler, METH_O, diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 4269e5d5e..34eb62f6e 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -81,10 +81,11 @@ def _additional_set_methods(attributes, cls=None): def make_setter(name): def method(self, value): self.set(**{name: value}) + return method for attr in attributes: - desc = attr.replace('_', ' ') + desc = attr.replace("_", " ") method = make_setter(attr) method.__name__ = f"set_{attr}" method.__doc__ = f"Set {desc}." @@ -134,12 +135,11 @@ def method(self, value): class GraphArtist(Artist, AbstractGraphDrawer): """Artist for an igraph.Graph object. - Arguments: - graph: An igraph.Graph object to plot - layout: A layout object or matrix of coordinates to use for plotting. - Each element or row should describes the coordinates for a vertex. - vertex_style: A dictionary specifying style options for vertices. - edge_style: A dictionary specifying style options for edges. + @param graph: An igraph.Graph object to plot + @param layout: A layout object or matrix of coordinates to use for plotting. + Each element or row should describes the coordinates for a vertex. + @param vertex_style: A dictionary specifying style options for vertices. + @param edge_style: A dictionary specifying style options for edges. """ def __init__( @@ -247,21 +247,25 @@ def get_datalim(self): """ import numpy as np - vertex_builder = self.vertex_builder layout = self.kwds["layout"] - mins = np.min(layout, axis=0) - maxs = np.max(layout, axis=0) - - # Pad by vertex size, to ensure they fit - if vertex_builder.size is not None: - mins -= vertex_builder.size * 1.1 - maxs += vertex_builder.size * 1.1 + if len(layout) == 0: + mins = np.array([0, 0]) + maxs = np.array([1, 1]) else: - mins[0] -= vertex_builder.width * 0.55 - mins[1] -= vertex_builder.height * 0.55 - maxs[0] += vertex_builder.width * 0.55 - maxs[1] += vertex_builder.height * 0.55 + mins = np.min(layout, axis=0) + maxs = np.max(layout, axis=0) + + # Pad by vertex size, to ensure they fit + vertex_builder = self.vertex_builder + if vertex_builder.size is not None: + mins -= vertex_builder.size * 1.1 + maxs += vertex_builder.size * 1.1 + else: + mins[0] -= vertex_builder.width * 0.55 + mins[1] -= vertex_builder.height * 0.55 + maxs[0] += vertex_builder.width * 0.55 + maxs[1] += vertex_builder.height * 0.55 return (mins, maxs) @@ -465,7 +469,8 @@ def _draw_groups(self): facecolor=facecolor, edgecolor=color, ) - self._group_artists.append(art) + if art is not None: + self._group_artists.append(art) if kwds.get("legend", False): legend_info["handles"].append( @@ -575,7 +580,8 @@ def _reprocess(self): for child in self.get_children(): # set the figure / axes on child, this ensures each primitive # knows where to draw - child.set_figure(self.figure) + if hasattr(child, "set_figure"): + child.set_figure(self.figure) child.axes = self.axes # forward the clippath/box to the children need this logic From e4bf5e10a9a8cbc4b2118117039ada865cb5f045 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 10 May 2023 11:39:17 +0200 Subject: [PATCH 060/681] fix: Graph.layout_reingold_tilford() now accepts vertex names as roots, closes #666 --- CHANGELOG.md | 3 ++ src/_igraph/convert.c | 101 ++++++++++++++++++++++++-------------- src/_igraph/convert.h | 8 +-- src/_igraph/graphobject.c | 14 +++--- tests/test_layouts.py | 6 +++ 5 files changed, 85 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a66ffaaef..ebd5c8967 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,9 @@ - `VertexClustering.giant()` now accepts the null graph. The giant component of a null graph is the null graph according to our conventions. +- `Graph.layout_reingold_tilford()` now accepts vertex names in the `roots=...` + keyword argument. + ### Removed - Removed defunct `Graph.community_leading_eigenvector_naive()` method. Not a diff --git a/src/_igraph/convert.c b/src/_igraph/convert.c index 466653296..a8a46ab5b 100644 --- a/src/_igraph/convert.c +++ b/src/_igraph/convert.c @@ -3262,6 +3262,68 @@ int igraphmodule_PyObject_to_optional_vid(PyObject *o, igraph_integer_t *vid, ig } } +/** + * \ingroup python_interface_conversion + * \brief Tries to interpret a Python object as a list of vertex IDs. + * + * \param o the Python object + * \param result the vertex IDs will be stored here + * \param graph the graph that will be used to interpret vertex names + * if a string was given in o. It may also be a null pointer + * if we don't need name lookups. + * \return 0 if everything was OK, 1 otherwise + */ +int igraphmodule_PyObject_to_vid_list(PyObject* o, igraph_vector_int_t* result, igraph_t* graph) { + PyObject *iterator; + PyObject *item; + igraph_integer_t vid; + + if (PyBaseString_Check(o)) { + /* exclude strings; they are iterable but cannot yield meaningful vertex IDs */ + PyErr_SetString(PyExc_TypeError, "cannot convert string to a list of vertex IDs"); + return 1; + } + + iterator = PyObject_GetIter(o); + if (iterator == NULL) { + PyErr_SetString(PyExc_TypeError, "conversion to vertex sequence failed"); + return 1; + } + + if (igraph_vector_int_init(result, 0)) { + Py_DECREF(iterator); + igraphmodule_handle_igraph_error(); + return 1; + } + + while ((item = PyIter_Next(iterator))) { + vid = -1; + + if (igraphmodule_PyObject_to_vid(item, &vid, graph)) { + Py_DECREF(item); + break; + } + + Py_DECREF(item); + + if (igraph_vector_int_push_back(result, vid)) { + igraphmodule_handle_igraph_error(); + /* no need to destroy 'result' here; will be done outside the loop due + * to PyErr_Occurred */ + break; + } + } + + Py_DECREF(iterator); + + if (PyErr_Occurred()) { + igraph_vector_int_destroy(result); + return 1; + } + + return 0; +} + /** * \ingroup python_interface_conversion * \brief Tries to interpret a Python object as a vertex selector @@ -3346,9 +3408,6 @@ int igraphmodule_PyObject_to_vs_t(PyObject *o, igraph_vs_t *vs, /* Object cannot be converted to a single vertex ID, * assume it is a sequence or iterable */ - PyObject *iterator; - PyObject *item; - if (PyBaseString_Check(o)) { /* Special case: strings and unicode objects are sequences, but they * will not yield valid vertex IDs */ @@ -3358,40 +3417,7 @@ int igraphmodule_PyObject_to_vs_t(PyObject *o, igraph_vs_t *vs, /* Clear the exception set by igraphmodule_PyObject_to_vid */ PyErr_Clear(); - iterator = PyObject_GetIter(o); - if (iterator == NULL) { - PyErr_SetString(PyExc_TypeError, "conversion to vertex sequence failed"); - return 1; - } - - if (igraph_vector_int_init(&vector, 0)) { - Py_DECREF(iterator); - igraphmodule_handle_igraph_error(); - return 1; - } - - while ((item = PyIter_Next(iterator))) { - vid = -1; - - if (igraphmodule_PyObject_to_vid(item, &vid, graph)) { - Py_DECREF(item); - break; - } - - Py_DECREF(item); - - if (igraph_vector_int_push_back(&vector, vid)) { - igraphmodule_handle_igraph_error(); - /* no need to destroy 'vector' here; will be done outside the loop due - * to PyErr_Occurred */ - break; - } - } - - Py_DECREF(iterator); - - if (PyErr_Occurred()) { - igraph_vector_int_destroy(&vector); + if (igraphmodule_PyObject_to_vid_list(o, &vector, graph)) { return 1; } @@ -3522,7 +3548,6 @@ int igraphmodule_PyObject_to_eid(PyObject *o, igraph_integer_t *eid, igraph_t *g return 0; } - /** * \ingroup python_interface_conversion * \brief Tries to interpret a Python object as an edge selector diff --git a/src/_igraph/convert.h b/src/_igraph/convert.h index 15bf4ead8..d318ce585 100644 --- a/src/_igraph/convert.h +++ b/src/_igraph/convert.h @@ -121,9 +121,11 @@ int igraphmodule_append_PyIter_of_graphs_to_vector_ptr_t_with_type(PyObject *it, igraph_vector_ptr_t *v, PyTypeObject **g_type); int igraphmodule_PyObject_to_vid(PyObject *o, igraph_integer_t *vid, igraph_t *graph); int igraphmodule_PyObject_to_optional_vid(PyObject *o, igraph_integer_t *vid, igraph_t *graph); -int igraphmodule_PyObject_to_vs_t(PyObject *o, igraph_vs_t *vs, - igraph_t *graph, igraph_bool_t *return_single, - igraph_integer_t *single_vid); +int igraphmodule_PyObject_to_vid_list(PyObject *o, igraph_vector_int_t *vids, igraph_t *graph); +int igraphmodule_PyObject_to_vs_t( + PyObject *o, igraph_vs_t *vs, igraph_t *graph, + igraph_bool_t *return_single, igraph_integer_t *single_vid +); int igraphmodule_PyObject_to_eid(PyObject *o, igraph_integer_t *eid, igraph_t *graph); int igraphmodule_PyObject_to_es_t(PyObject *o, igraph_es_t *es, igraph_t *graph, igraph_bool_t *return_single); diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 821b91588..6e5763f5d 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -8220,8 +8220,11 @@ PyObject *igraphmodule_Graph_layout_reingold_tilford(igraphmodule_GraphObject if (roots_o != Py_None) { roots_p = &roots; - if (igraphmodule_PyObject_to_vector_int_t(roots_o, roots_p)) return 0; + if (igraphmodule_PyObject_to_vid_list(roots_o, roots_p, &self->g)) { + return 0; + } } + if (rootlevels_o != Py_None) { rootlevels_p = &rootlevels; if (igraphmodule_PyObject_to_vector_int_t(rootlevels_o, rootlevels_p)) { @@ -9607,17 +9610,16 @@ PyObject *igraphmodule_Graph_isoclass(igraphmodule_GraphObject * self, if (vids) { igraph_vector_int_t vidsvec; - if (igraphmodule_PyObject_to_vector_int_t(vids, &vidsvec)) { - PyErr_SetString(PyExc_ValueError, - "Error while converting PyList to igraph_vector_int_t"); + if (igraphmodule_PyObject_to_vid_list(vids, &vidsvec, &self->g)) { return NULL; } if (igraph_isoclass_subgraph(&self->g, &vidsvec, &isoclass)) { + igraph_vector_int_destroy(&vidsvec); igraphmodule_handle_igraph_error(); return NULL; } - } - else { + igraph_vector_int_destroy(&vidsvec); + } else { if (igraph_isoclass(&self->g, &isoclass)) { igraphmodule_handle_igraph_error(); return NULL; diff --git a/tests/test_layouts.py b/tests/test_layouts.py index 3f8910bce..cabc9c5ae 100644 --- a/tests/test_layouts.py +++ b/tests/test_layouts.py @@ -350,6 +350,12 @@ def testReingoldTilford(self): lo = g.layout("rt", root=[0, 100], rootlevel=[2, 10]) self.assertEqual(lo[100][1] - lo[0][1], 8) + # test named vertices + g.vs["name"] = [f"v{i}" for i in range(g.vcount())] + lo = g.layout("rt", root=["v0", "v100"]) + self.assertEqual(lo[100][1] - lo[0][1], 0) + + def testBipartite(self): g = Graph.Full_Bipartite(3, 2) From 478e896ecb7470655803b6222fa1574ae9ef59f0 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 10 May 2023 13:46:09 +0200 Subject: [PATCH 061/681] doc: require PyDoctor >= 23.4.0 because of the search-related fixes --- doc/source/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/requirements.txt b/doc/source/requirements.txt index af675f44c..959667565 100644 --- a/doc/source/requirements.txt +++ b/doc/source/requirements.txt @@ -6,7 +6,7 @@ sphinxbootstrap4theme sphinx-gallery sphinx-rtd-theme sphinxcontrib-jquery -pydoctor +pydoctor>=23.4.0 numpy scipy From c22e1d64ab7be1fbf7e06bff730b4cfb7acc43a7 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 11 May 2023 16:11:33 +1000 Subject: [PATCH 062/681] Use graph layout attribute if found (#663) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plotting: use graph layout attribute if found --------- Co-authored-by: Tamás Nepusz --- src/igraph/drawing/baseclasses.py | 19 +++++++++++++----- src/igraph/drawing/matplotlib/graph.py | 4 ++-- .../test_graph/graph_layout_attribute.png | Bin 0 -> 8845 bytes tests/drawing/matplotlib/test_graph.py | 10 ++++++++- 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 tests/drawing/matplotlib/baseline_images/test_graph/graph_layout_attribute.png diff --git a/src/igraph/drawing/baseclasses.py b/src/igraph/drawing/baseclasses.py index 6a983225a..60d819f96 100644 --- a/src/igraph/drawing/baseclasses.py +++ b/src/igraph/drawing/baseclasses.py @@ -121,7 +121,7 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): raise NotImplementedError def get_label_position(self, edge, src_vertex, dest_vertex): - """returns the position where the label of an edge should be drawn. the + """Returns the position where the label of an edge should be drawn. the default implementation returns the midpoint of the edge and an alignment that tries to avoid overlapping the label with the edge. @@ -266,9 +266,13 @@ def ensure_layout(layout, graph=None): C{layout} method of the given I{graph} if I{graph} is not C{None}. - - If I{layout} is C{None}, the C{layout} method of - I{graph} will be invoked with no parameters, which - will call the default layout algorithm. + - If I{layout} is C{None} and I{graph} has a "layout" + attribute, call this same function with the value of that + attribute. + + - If I{layout} is C{None} and I{graph} does not have a "layout" + attribute, the C{layout} method of I{graph} will be invoked + with no parameters, which will call the default layout algorithm. - Otherwise, I{layout} will be passed on to the constructor of L{Layout}. This handles lists of lists, lists of tuples @@ -284,7 +288,12 @@ def ensure_layout(layout, graph=None): if isinstance(layout, Layout): layout = Layout(layout.coords) - elif isinstance(layout, str) or layout is None: + elif isinstance(layout, str): + layout = graph.layout(layout) + elif (layout is None) and hasattr(graph, "attributes") and \ + ('layout' in graph.attributes()): + layout = AbstractGraphDrawer.ensure_layout(graph['layout'], graph=graph) + elif layout is None: layout = graph.layout(layout) else: layout = Layout(layout) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 34eb62f6e..46839f154 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -253,8 +253,8 @@ def get_datalim(self): mins = np.array([0, 0]) maxs = np.array([1, 1]) else: - mins = np.min(layout, axis=0) - maxs = np.max(layout, axis=0) + mins = np.min(layout, axis=0).astype(float) + maxs = np.max(layout, axis=0).astype(float) # Pad by vertex size, to ensure they fit vertex_builder = self.vertex_builder diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_layout_attribute.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_layout_attribute.png new file mode 100644 index 0000000000000000000000000000000000000000..c074d6298e391a5875a827bf43f9d7a9e1b8eb36 GIT binary patch literal 8845 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 Date: Tue, 16 May 2023 00:13:22 +0200 Subject: [PATCH 063/681] fix: disallow using integers as vertex names in add_vertex(), refs #664 --- src/igraph/basic.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/igraph/basic.py b/src/igraph/basic.py index 0f35f89bf..01b6a0a4e 100644 --- a/src/igraph/basic.py +++ b/src/igraph/basic.py @@ -62,6 +62,8 @@ def _add_vertex(graph, name=None, **kwds): vertex = graph.vs[vid] for key, value in kwds.items(): vertex[key] = value + if isinstance(name, int): + raise TypeError("cannot use integers as vertex names; use strings instead") if name is not None: vertex["name"] = name return vertex From 9d537949a9f3b4aded2c18c7609a05bbeeb788d0 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 16 May 2023 00:49:21 +0200 Subject: [PATCH 064/681] fix: fix failing test --- src/igraph/basic.py | 8 ++++++-- tests/test_basic.py | 9 ++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/igraph/basic.py b/src/igraph/basic.py index 01b6a0a4e..e672ef7d9 100644 --- a/src/igraph/basic.py +++ b/src/igraph/basic.py @@ -57,15 +57,19 @@ def _add_vertex(graph, name=None, **kwds): C{add_vertices(1)} if you don't need the L{Vertex} object and want to avoid the overhead of creating t. """ + if isinstance(name, int): + raise TypeError("cannot use integers as vertex names; use strings instead") + vid = graph.vcount() graph.add_vertices(1) vertex = graph.vs[vid] + for key, value in kwds.items(): vertex[key] = value - if isinstance(name, int): - raise TypeError("cannot use integers as vertex names; use strings instead") + if name is not None: vertex["name"] = name + return vertex diff --git a/tests/test_basic.py b/tests/test_basic.py index a342d84fa..48ce89d1a 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -120,17 +120,20 @@ def testAddVertex(self): self.assertTrue("name" in g.vertex_attributes()) self.assertEqual(g.vs["name"], [None, "foo"]) - vertex = g.add_vertex(3) + self.assertRaises(TypeError, g.add_vertex, 3) + + vertex = g.add_vertex("3") + print(g.vcount(), g.ecount()) self.assertTrue(g.vcount() == 3 and g.ecount() == 0) self.assertEqual(2, vertex.index) self.assertTrue("name" in g.vertex_attributes()) - self.assertEqual(g.vs["name"], [None, "foo", 3]) + self.assertEqual(g.vs["name"], [None, "foo", "3"]) vertex = g.add_vertex(name="bar") self.assertTrue(g.vcount() == 4 and g.ecount() == 0) self.assertEqual(3, vertex.index) self.assertTrue("name" in g.vertex_attributes()) - self.assertEqual(g.vs["name"], [None, "foo", 3, "bar"]) + self.assertEqual(g.vs["name"], [None, "foo", "3", "bar"]) vertex = g.add_vertex(name="frob", spam="cheese", ham=42) self.assertTrue(g.vcount() == 5 and g.ecount() == 0) From 36e62e0d105836a6cfa3cc405c772574765ea2cf Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 18 May 2023 16:16:17 +1000 Subject: [PATCH 065/681] Subclass matplotlib collection for edges --- src/igraph/drawing/matplotlib/edge.py | 61 ++++++++++++++++++++++--- src/igraph/drawing/matplotlib/graph.py | 43 ++++++++++++----- src/igraph/drawing/matplotlib/vertex.py | 16 +++++-- src/igraph/drawing/shapes.py | 23 ++++------ 4 files changed, 107 insertions(+), 36 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 929555ecf..5a01ce84e 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -1,6 +1,7 @@ """Drawers for various edge styles in Matplotlib graph plots.""" from math import atan2, cos, pi, sin +from copy import deepcopy from igraph.drawing.baseclasses import AbstractEdgeDrawer from igraph.drawing.metamagic import AttributeCollectorBase @@ -78,9 +79,11 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): # Determine where the edge intersects the circumference of the # vertex shape: Tip of the arrow - x2, y2 = intersect_bezier_curve_and_circle( - x_src, y_src, xc1, yc1, xc2, yc2, x_dest, y_dest, dest_vertex.size / 2.0 - ) + ## FIXME + #x2, y2 = intersect_bezier_curve_and_circle( + # x_src, y_src, xc1, yc1, xc2, yc2, x_dest, y_dest, dest_vertex.size / 2.0 + #) + x2, y2 = x_dest, y_dest # Calculate the arrow head coordinates angle = atan2(y_dest - y2, x_dest - x2) # navid @@ -136,12 +139,14 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): else: # Determine where the edge intersects the circumference of the # vertex shape. - x2, y2 = dest_vertex.shape.intersection_point( - x2, y2, x1, y1, dest_vertex.size - ) + # FIXME + #x2, y2 = dest_vertex.shape.intersection_point( + # x2, y2, x1, y1, dest_vertex.size + #) + x2, y2 = x_dest, y_dest # Draw the arrowhead - angle = atan2(y_dest - y2, x_dest - x2) + angle = atan2(y_dest - y_src, x_dest - x_src) arrow_size = 15.0 * edge.arrow_size arrow_width = 10.0 / edge.arrow_width aux_points = [ @@ -268,3 +273,45 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): clip_on=True, ) return [art] + + +class EdgeCollection(mpl.collections.LineCollection): + def __init__(self, *args, **kwargs): + self._vertex_bboxes = kwargs.pop("vertex_bboxes") + ret = super().__init__(*args, **kwargs) + self._paths_original = deepcopy(self._paths) + return ret + + + def _update_path_from_vertices(self): + # Get actual coordinates of the vertex bbox edges + for p, p_orig, bboxes in zip(self._paths, self._paths_original, self._vertex_bboxes): + coords = p_orig.vertices + + # Start vertex + if coords[0, 0] == coords[1, 0]: + bbox_offsetx = 0 + bbox_offsety = bboxes[0].extents[1 + 2 * int(coords[1, 1] > coords[0, 1])] + else: + ratio = (coords[1, 1] - coords[0, 1]) / (coords[1, 0] - coords[0, 0]) + bbox_offsetx = bboxes[0].extents[2 * int(coords[1, 0] > coords[0, 0])] + bbox_offsety = bboxes[1].extents[1 + 2 * int(coords[1, 1] > coords[0, 1])] * abs(ratio) + voff = np.array([bbox_offsetx, bbox_offsety]) + start = ax.transData.inverted().transform(ax.transData.transform(coords[0]) + voff) + p.vertices[0] = start + + # End vertex + if coords[-2, 0] == coords[-1, 0]: + bbox_offsetx = 0 + bbox_offsety = bboxes[1].extents[1 + 2 * int(coords[-2, 1] > coords[-1, 1])] + else: + ratio = (coords[-1, 1] - coords[-2, 1]) / (coords[-1, 0] - coords[-2, 0]) + bbox_offsetx = bboxes[0].extents[2 * int(coords[-2, 0] > coords[-1, 0])] + bbox_offsety = bboxes[1].extents[1 + 2 * int(coords[-2, 1] > coords[-1, 1])] * abs(ratio) + voff = np.array([bbox_offsetx, bbox_offsety]) + end = ax.transData.inverted().transform(ax.transData.transform(coords[-1]) + voff) + p.vertices[-1] = end + + def draw(self, renderer): + self._update_path_from_vertices() + return super().draw(renderer) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 46839f154..93ab256de 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -30,8 +30,12 @@ mpl, plt = find_matplotlib() try: Artist = mpl.artist.Artist + PatchCollection = mpl.collections.PatchCollection + IdentityTransform = mpl.transforms.IdentityTransform except AttributeError: Artist = FakeModule + PatchCollection = FakeModule + IdentityTransform = FakeModule ##################################################################### @@ -256,16 +260,21 @@ def get_datalim(self): mins = np.min(layout, axis=0).astype(float) maxs = np.max(layout, axis=0).astype(float) - # Pad by vertex size, to ensure they fit - vertex_builder = self.vertex_builder - if vertex_builder.size is not None: - mins -= vertex_builder.size * 1.1 - maxs += vertex_builder.size * 1.1 - else: - mins[0] -= vertex_builder.width * 0.55 - mins[1] -= vertex_builder.height * 0.55 - maxs[0] += vertex_builder.width * 0.55 - maxs[1] += vertex_builder.height * 0.55 + # 5% padding, on each side + pad = (maxs - mins) * 0.05 + mins -= pad + maxs += pad + + ## Pad by vertex size, to ensure they fit + #vertex_builder = self.vertex_builder + #if vertex_builder.size is not None: + # mins -= vertex_builder.size * 1.1 + # maxs += vertex_builder.size * 1.1 + #else: + # mins[0] -= vertex_builder.width * 0.55 + # mins[1] -= vertex_builder.height * 0.55 + # maxs[0] += vertex_builder.width * 0.55 + # maxs[1] += vertex_builder.height * 0.55 return (mins, maxs) @@ -504,9 +513,19 @@ def _draw_vertices(self): vertex_coord_iter = ( (vs[i], vertex_builder[i], layout[i]) for i in vertex_order ) + offsets = [] + patches = [] for vertex, visual_vertex, coords in vertex_coord_iter: art = vertex_drawer.draw(visual_vertex, vertex, coords) - self._vertices.append(art) + patches.append(art) + offsets.append(list(coords)) + art = PatchCollection( + patches, + offsets=offsets, + offset_transform=self.axes.transData, + ) + art.set_transform(IdentityTransform()) + self._vertices.append(art) def _draw_edges(self): """Draw the edges""" @@ -732,7 +751,7 @@ def draw(self, graph, *args, **kwds): ax.set_yticks([]) # Set equal aspect to get actual circles - ax.set_aspect(1) + #ax.set_aspect(1) # Autoscale for x/y axis limits ax.autoscale_view() diff --git a/src/igraph/drawing/matplotlib/vertex.py b/src/igraph/drawing/matplotlib/vertex.py index 00270a010..2c3143d28 100644 --- a/src/igraph/drawing/matplotlib/vertex.py +++ b/src/igraph/drawing/matplotlib/vertex.py @@ -7,6 +7,15 @@ from igraph.drawing.baseclasses import AbstractVertexDrawer from igraph.drawing.metamagic import AttributeCollectorBase from igraph.drawing.shapes import ShapeDrawerDirectory +from igraph.drawing.matplotlib.utils import find_matplotlib +from igraph.drawing.utils import FakeModule + +mpl, _ = find_matplotlib() +try: + IdentityTransform = mpl.transforms.IdentityTransform +except AttributeError: + IdentityTransform = FakeModule + __all__ = ("MatplotlibVertexDrawer",) @@ -36,7 +45,7 @@ class VisualVertexBuilder(AttributeCollectorBase): # FIXME? mpl.rcParams["font.size"]) position = dict(func=self.layout.__getitem__) shape = ("circle", ShapeDrawerDirectory.resolve_default) - size = 0.2 + size = 30 width = None height = None zorder = 2 @@ -60,13 +69,14 @@ def draw(self, visual_vertex, vertex, coords): art = visual_vertex.shape.draw_path( ax, - coords[0], - coords[1], + 0, #coords[0], # FIXME + 0, #coords[1], width, height, facecolor=visual_vertex.color, edgecolor=visual_vertex.frame_color, linewidth=visual_vertex.frame_width, zorder=visual_vertex.zorder, + transform=IdentityTransform(), ) return art diff --git a/src/igraph/drawing/shapes.py b/src/igraph/drawing/shapes.py index 69d39bb4d..6598766d4 100644 --- a/src/igraph/drawing/shapes.py +++ b/src/igraph/drawing/shapes.py @@ -96,10 +96,9 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): height = height or width if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): return mpl.patches.Rectangle( - (center_x - width / 2, center_y - height / 2), + - width / 2, - height / 2, width, height, - transform=ctx.transData, clip_on=True, **kwargs, ) @@ -169,9 +168,8 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): @see: ShapeDrawer.draw_path""" if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): return mpl.patches.Circle( - (center_x, center_y), + (0, 0), width / 2, - transform=ctx.transData, clip_on=True, **kwargs, ) @@ -211,7 +209,6 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): return mpl.patches.Polygon( vertices, closed=True, - transform=ctx.transData, clip_on=True, **kwargs, ) @@ -247,14 +244,13 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): height = height or width if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): vertices = [ - [center_x - 0.5 * width, center_y + 0.333 * height], - [center_x + 0.5 * width, center_y + 0.333 * height], - [center_x, center_y - 0.667 * height], + [- 0.5 * width, 0.333 * height], + [0.5 * width, 0.333 * height], + [0, -0.667 * height], ] return mpl.patches.Polygon( vertices, closed=True, - transform=ctx.transData, clip_on=True, **kwargs, ) @@ -291,15 +287,14 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): height = height or width if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): vertices = [ - [center_x - 0.5 * width, center_y], - [center_x, center_y - 0.5 * height], - [center_x + 0.5 * width, center_y], - [center_x, center_y + 0.5 * height], + [-0.5 * width, 0], + [0, -0.5 * height], + [0.5 * width, 0], + [0, 0.5 * height], ] return mpl.patches.Polygon( vertices, closed=True, - transform=ctx.transData, clip_on=True, **kwargs, ) From 57714e267188052458340320ee9b271f4e9dc3b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 14:00:34 +0000 Subject: [PATCH 066/681] build(deps): bump mymindstorm/setup-emsdk from 11 to 12 Bumps [mymindstorm/setup-emsdk](https://github.com/mymindstorm/setup-emsdk) from 11 to 12. - [Release notes](https://github.com/mymindstorm/setup-emsdk/releases) - [Commits](https://github.com/mymindstorm/setup-emsdk/compare/v11...v12) --- updated-dependencies: - dependency-name: mymindstorm/setup-emsdk dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 05857b88c..36babc937 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -181,7 +181,7 @@ jobs: with: python-version: '3.10.2' - - uses: mymindstorm/setup-emsdk@v11 + - uses: mymindstorm/setup-emsdk@v12 with: version: '3.1.14' From aebf64210e56c2c84f0fa3efbed719c95d66a351 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sun, 28 May 2023 11:09:50 +1000 Subject: [PATCH 067/681] PatchCollection for vertices and edges, according to working prototype --- src/igraph/drawing/matplotlib/edge.py | 136 +++++++++++++++---------- src/igraph/drawing/matplotlib/graph.py | 33 +++++- 2 files changed, 113 insertions(+), 56 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 5a01ce84e..595c77086 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -1,6 +1,6 @@ """Drawers for various edge styles in Matplotlib graph plots.""" -from math import atan2, cos, pi, sin +from math import atan2, cos, pi, sin, sqrt from copy import deepcopy from igraph.drawing.baseclasses import AbstractEdgeDrawer @@ -10,11 +10,16 @@ euclidean_distance, get_bezier_control_points_for_curved_edge, intersect_bezier_curve_and_circle, + FakeModule, ) __all__ = ("MatplotlibEdgeDrawer",) mpl, plt = find_matplotlib() +try: + PatchCollection = mpl.collections.PatchCollection +except AttributeError: + PatchCollection = FakeModule class MatplotlibEdgeDrawer(AbstractEdgeDrawer): @@ -168,8 +173,16 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): path["vertices"].append([x_arrow_mid, y_arrow_mid]) path["codes"].append("LINETO") + # Add arrowhead in the path, the exact positions are recomputed within + # EdgeCollection before each draw so they don't matter here. The + # path for an arrowhead is: headbase (current), headleft, tip, + # headright, headbase, so we need to add 4 (degenerate) vertices. + # Assuming the arrowhead uses straight lines, they are all LINETO + path["vertices"].extend([path["vertices"][-1] for x in range(4)]) + path["codes"].extend(["LINETO" for x in range(4)]) + # Draw the edge - arrowshaft = mpl.patches.PathPatch( + arrowpatch = mpl.patches.PathPatch( mpl.path.Path( path["vertices"], codes=[getattr(mpl.path.Path, x) for x in path["codes"]], @@ -182,21 +195,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): clip_on=True, ) - # Draw the arrow head - arrowhead = mpl.patches.Polygon( - [ - [x2, y2], - aux_points[0], - aux_points[1], - ], - closed=True, - facecolor=edge.color, - edgecolor="none", - zorder=edge.zorder, - transform=ax.transData, - clip_on=True, - ) - return [arrowshaft, arrowhead] + return arrowpatch def draw_loop_edge(self, edge, vertex): """Draws a loop edge. @@ -225,7 +224,7 @@ def draw_loop_edge(self, edge, vertex): transform=ax.transData, clip_on=True, ) - return [art] + return art def draw_undirected_edge(self, edge, src_vertex, dest_vertex): """Draws an undirected edge. @@ -272,46 +271,81 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): transform=ax.transData, clip_on=True, ) - return [art] + return art -class EdgeCollection(mpl.collections.LineCollection): +class EdgeCollection(PatchCollection): def __init__(self, *args, **kwargs): - self._vertex_bboxes = kwargs.pop("vertex_bboxes") - ret = super().__init__(*args, **kwargs) + kwargs["match_original"] = True + self._vertex_sizes = kwargs.pop("vertex_sizes", None) + self._directed = kwargs.pop("directed", False) + self._arrow_size = kwargs.pop("arrow_sizes", 0) + self._arrow_width = kwargs.pop("arrow_widths", 0) + super().__init__(*args, **kwargs) self._paths_original = deepcopy(self._paths) - return ret - def _update_path_from_vertices(self): - # Get actual coordinates of the vertex bbox edges - for p, p_orig, bboxes in zip(self._paths, self._paths_original, self._vertex_bboxes): - coords = p_orig.vertices - - # Start vertex - if coords[0, 0] == coords[1, 0]: - bbox_offsetx = 0 - bbox_offsety = bboxes[0].extents[1 + 2 * int(coords[1, 1] > coords[0, 1])] + if self._vertex_sizes is None: + return + + paths_original = self._paths_original + vertex_sizes = self._vertex_sizes + trans = self.axes.transData.transform + trans_inv = ax.transData.inverted().transform + + # Get actual coordinates of the vertex border (rough) + for i, (path_orig, sizes) in enumerate(zip(paths_original, vertex_sizes)): + self._paths[i] = path = deepcopy(path_orig) + coords = path_orig.vertices + coordst = trans(coords) + self._update_path_edge_start(path, coords, coordst, sizes[0], trans, trans_inv) + if self._directed: + self._update_path_edge_end_directed( + path, coords, coordst, sizes[1], trans, trans_inv, + self._arrow_sizes[i], self._arrow_widths[i], + ) else: - ratio = (coords[1, 1] - coords[0, 1]) / (coords[1, 0] - coords[0, 0]) - bbox_offsetx = bboxes[0].extents[2 * int(coords[1, 0] > coords[0, 0])] - bbox_offsety = bboxes[1].extents[1 + 2 * int(coords[1, 1] > coords[0, 1])] * abs(ratio) - voff = np.array([bbox_offsetx, bbox_offsety]) - start = ax.transData.inverted().transform(ax.transData.transform(coords[0]) + voff) - p.vertices[0] = start - - # End vertex - if coords[-2, 0] == coords[-1, 0]: - bbox_offsetx = 0 - bbox_offsety = bboxes[1].extents[1 + 2 * int(coords[-2, 1] > coords[-1, 1])] - else: - ratio = (coords[-1, 1] - coords[-2, 1]) / (coords[-1, 0] - coords[-2, 0]) - bbox_offsetx = bboxes[0].extents[2 * int(coords[-2, 0] > coords[-1, 0])] - bbox_offsety = bboxes[1].extents[1 + 2 * int(coords[-2, 1] > coords[-1, 1])] * abs(ratio) - voff = np.array([bbox_offsetx, bbox_offsety]) - end = ax.transData.inverted().transform(ax.transData.transform(coords[-1]) + voff) - p.vertices[-1] = end - + self._update_path_edge_end_undirected(path, coords, coordst, sizes[1], trans, trans_inv) + + def _update_path_edge_start(self, path, coords, coordst, size, trans, trans_inv): + theta = atan2(*((coordst[1] - coordst[0])[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= size + start = trans_inv(trans(coords[0]) + voff) + path.vertices[0] = start + + def _update_path_edge_end_undirected( + elf, path, coords, coordst, size, trans, trans_inv, + ): + theta = atan2(*((coordst[-2] - coordst[-1])[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= size + end = trans_inv(trans(coords[-1]) + voff) + path.vertices[-1] = end + + def _update_path_edge_end_directed( + self, path, coords, coordst, size, trans, trans_inv, + arrow_size, arrow_width): + + def dist(a, b): + return sqrt(((a - b)**2).sum()) + + # The path for arrows is start-headmid-headleft-tip-headright-headmid + # So, tip is the 3rd-to-last and headmid the last + theta = atan2(*((coordst[-6] - coordst[-3])[::-1])) + voff_unity = 0 * coordst[0] + voff_unity[:] = [cos(theta), sin(theta)] + voff = voff_unity * size + voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] + + tip = trans_inv(trans(coords[-3]) + voff) + headbase = trans_inv(trans(tip) + arrow_size * voff_unity) + headleft = trans_inv(trans(headbase) + 0.5 * arrow_width * voff_unity_90) + headright = trans_inv(trans(headbase) - 0.5 * arrow_width * voff_unity_90) + path.vertices[-5:] = [headbase, headleft, tip, headright, headbase] + def draw(self, renderer): self._update_path_from_vertices() return super().draw(renderer) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 93ab256de..15e929c0c 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -20,7 +20,7 @@ from igraph.drawing.baseclasses import AbstractGraphDrawer from igraph.drawing.utils import Point, FakeModule -from .edge import MatplotlibEdgeDrawer +from .edge import MatplotlibEdgeDrawer, EdgeCollection from .polygon import MatplotlibPolygonDrawer from .utils import find_matplotlib from .vertex import MatplotlibVertexDrawer @@ -550,11 +550,34 @@ def _draw_edges(self): else: # Lines drawer_method = edge_drawer.draw_undirected_edge + + vertex_sizes = [] + edgepatches = [] + arrow_sizes = [] + arrow_widths = [] for edge, visual_edge in edge_coord_iter: - src, dest = edge.tuple - src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] - arts = drawer_method(visual_edge, src_vertex, dest_vertex) - self._edges.extend(arts) + edge_vertices = [vertex_builder[v] for v in edge.tuple] + edge_vertex_sizes = [] + for visual_vertex in edge_vertices: + if visual_vertex.size is not None: + edge_vertex_sizes.append(visual_vertex.size) + else: + edge_vertex_sizes.append( + max(visual_vertex.width, visual_vertex.height)) + art = drawer_method(visual_edge, *edge_vertices) + edgepatches.append(art) + vertex_sizes.append(edge_vertex_sizes) + arrow_sizes.append(visual_edge.arrow_size) + arrow_widths.append(visual_edge.arrow_width) + + edgecoll = EdgeCollection( + edgepatches, + vertex_sizes=vertex_sizes, + directed=directed, + arrow_sizes=arrow_sizes, + arrow_widths=arrow_widths, + ) + self._edges.append(edgecoll) def _reprocess(self): """Prepare artist and children for the actual drawing. From b7da7d3e99566cc75fa0034b75b9f1aeedd01a6e Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sun, 28 May 2023 12:55:08 +1000 Subject: [PATCH 068/681] Undirected edges kind of work --- src/igraph/drawing/matplotlib/edge.py | 28 ++++++++++++------------- src/igraph/drawing/matplotlib/graph.py | 7 ++++--- src/igraph/drawing/matplotlib/vertex.py | 4 ++-- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 595c77086..b979116d9 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -46,8 +46,8 @@ class VisualEdgeBuilder(AttributeCollectorBase): drawing""" _kwds_prefix = "edge_" - arrow_size = 0.007 - arrow_width = 1.4 + arrow_size = 10 + arrow_width = 10 color = ("#444", self.palette.get) curved = (0.0, self._curvature_to_float) label = None @@ -268,7 +268,7 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): facecolor="none", linewidth=edge.width, zorder=edge.zorder, - transform=ax.transData, + #transform=ax.transData, clip_on=True, ) return art @@ -279,8 +279,8 @@ def __init__(self, *args, **kwargs): kwargs["match_original"] = True self._vertex_sizes = kwargs.pop("vertex_sizes", None) self._directed = kwargs.pop("directed", False) - self._arrow_size = kwargs.pop("arrow_sizes", 0) - self._arrow_width = kwargs.pop("arrow_widths", 0) + self._arrow_sizes = kwargs.pop("arrow_sizes", 0) + self._arrow_widths = kwargs.pop("arrow_widths", 0) super().__init__(*args, **kwargs) self._paths_original = deepcopy(self._paths) @@ -291,7 +291,7 @@ def _update_path_from_vertices(self): paths_original = self._paths_original vertex_sizes = self._vertex_sizes trans = self.axes.transData.transform - trans_inv = ax.transData.inverted().transform + trans_inv = self.axes.transData.inverted().transform # Get actual coordinates of the vertex border (rough) for i, (path_orig, sizes) in enumerate(zip(paths_original, vertex_sizes)): @@ -301,11 +301,13 @@ def _update_path_from_vertices(self): self._update_path_edge_start(path, coords, coordst, sizes[0], trans, trans_inv) if self._directed: self._update_path_edge_end_directed( - path, coords, coordst, sizes[1], trans, trans_inv, - self._arrow_sizes[i], self._arrow_widths[i], - ) + path, coords, coordst, sizes[1], trans, trans_inv, + self._arrow_sizes[i], self._arrow_widths[i], + ) else: - self._update_path_edge_end_undirected(path, coords, coordst, sizes[1], trans, trans_inv) + self._update_path_edge_end_undirected( + path, coords, coordst, sizes[1], trans, trans_inv, + ) def _update_path_edge_start(self, path, coords, coordst, size, trans, trans_inv): theta = atan2(*((coordst[1] - coordst[0])[::-1])) @@ -317,7 +319,7 @@ def _update_path_edge_start(self, path, coords, coordst, size, trans, trans_inv) def _update_path_edge_end_undirected( elf, path, coords, coordst, size, trans, trans_inv, - ): + ): theta = atan2(*((coordst[-2] - coordst[-1])[::-1])) voff = 0 * coordst[0] voff[:] = [cos(theta), sin(theta)] @@ -328,10 +330,6 @@ def _update_path_edge_end_undirected( def _update_path_edge_end_directed( self, path, coords, coordst, size, trans, trans_inv, arrow_size, arrow_width): - - def dist(a, b): - return sqrt(((a - b)**2).sum()) - # The path for arrows is start-headmid-headleft-tip-headright-headmid # So, tip is the 3rd-to-last and headmid the last theta = atan2(*((coordst[-6] - coordst[-3])[::-1])) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 15e929c0c..374dff04b 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -570,14 +570,15 @@ def _draw_edges(self): arrow_sizes.append(visual_edge.arrow_size) arrow_widths.append(visual_edge.arrow_width) - edgecoll = EdgeCollection( + art = EdgeCollection( edgepatches, vertex_sizes=vertex_sizes, directed=directed, arrow_sizes=arrow_sizes, arrow_widths=arrow_widths, + transform=self.axes.transData, ) - self._edges.append(edgecoll) + self._edges.append(art) def _reprocess(self): """Prepare artist and children for the actual drawing. @@ -612,8 +613,8 @@ def _reprocess(self): self.edge_order = self._determine_edge_order(graph, kwds) self._draw_groups() - self._draw_edges() self._draw_vertices() + self._draw_edges() self._draw_vertex_labels() self._draw_edge_labels() diff --git a/src/igraph/drawing/matplotlib/vertex.py b/src/igraph/drawing/matplotlib/vertex.py index 2c3143d28..e93e31949 100644 --- a/src/igraph/drawing/matplotlib/vertex.py +++ b/src/igraph/drawing/matplotlib/vertex.py @@ -69,8 +69,8 @@ def draw(self, visual_vertex, vertex, coords): art = visual_vertex.shape.draw_path( ax, - 0, #coords[0], # FIXME - 0, #coords[1], + 0, + 0, width, height, facecolor=visual_vertex.color, From 3b8f660cedcc419c3bcbbcbd0d18834ed0bd1ece Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sun, 28 May 2023 14:54:24 +1000 Subject: [PATCH 069/681] Edges work, marking groups still buggy --- src/igraph/drawing/matplotlib/edge.py | 45 ++++---------------------- src/igraph/drawing/matplotlib/graph.py | 3 +- 2 files changed, 9 insertions(+), 39 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index b979116d9..5e1132fb4 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -46,8 +46,8 @@ class VisualEdgeBuilder(AttributeCollectorBase): drawing""" _kwds_prefix = "edge_" - arrow_size = 10 - arrow_width = 10 + arrow_size = 15 + arrow_width = 15 color = ("#444", self.palette.get) curved = (0.0, self._curvature_to_float) label = None @@ -142,35 +142,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): path["codes"].extend(["CURVE4"] * 3) else: - # Determine where the edge intersects the circumference of the - # vertex shape. - # FIXME - #x2, y2 = dest_vertex.shape.intersection_point( - # x2, y2, x1, y1, dest_vertex.size - #) - x2, y2 = x_dest, y_dest - - # Draw the arrowhead - angle = atan2(y_dest - y_src, x_dest - x_src) - arrow_size = 15.0 * edge.arrow_size - arrow_width = 10.0 / edge.arrow_width - aux_points = [ - ( - x2 - arrow_size * cos(angle - pi / arrow_width), - y2 - arrow_size * sin(angle - pi / arrow_width), - ), - ( - x2 - arrow_size * cos(angle + pi / arrow_width), - y2 - arrow_size * sin(angle + pi / arrow_width), - ), - ] - - # Midpoint of the base of the arrow triangle - x_arrow_mid, y_arrow_mid = (aux_points[0][0] + aux_points[1][0]) / 2.0, ( - aux_points[0][1] + aux_points[1][1] - ) / 2.0 - # Draw the line - path["vertices"].append([x_arrow_mid, y_arrow_mid]) + path["vertices"].append(dest_vertex.position) path["codes"].append("LINETO") # Add arrowhead in the path, the exact positions are recomputed within @@ -188,10 +160,9 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): codes=[getattr(mpl.path.Path, x) for x in path["codes"]], ), edgecolor=edge.color, - facecolor="none", + facecolor=edge.color, linewidth=edge.width, zorder=edge.zorder, - transform=ax.transData, clip_on=True, ) @@ -221,7 +192,6 @@ def draw_loop_edge(self, edge, vertex): facecolor="none", edgecolor=edge.color, zorder=edge.zorder, - transform=ax.transData, clip_on=True, ) return art @@ -268,7 +238,6 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): facecolor="none", linewidth=edge.width, zorder=edge.zorder, - #transform=ax.transData, clip_on=True, ) return art @@ -313,7 +282,7 @@ def _update_path_edge_start(self, path, coords, coordst, size, trans, trans_inv) theta = atan2(*((coordst[1] - coordst[0])[::-1])) voff = 0 * coordst[0] voff[:] = [cos(theta), sin(theta)] - voff *= size + voff *= size / 2 start = trans_inv(trans(coords[0]) + voff) path.vertices[0] = start @@ -323,7 +292,7 @@ def _update_path_edge_end_undirected( theta = atan2(*((coordst[-2] - coordst[-1])[::-1])) voff = 0 * coordst[0] voff[:] = [cos(theta), sin(theta)] - voff *= size + voff *= size / 2 end = trans_inv(trans(coords[-1]) + voff) path.vertices[-1] = end @@ -335,7 +304,7 @@ def _update_path_edge_end_directed( theta = atan2(*((coordst[-6] - coordst[-3])[::-1])) voff_unity = 0 * coordst[0] voff_unity[:] = [cos(theta), sin(theta)] - voff = voff_unity * size + voff = voff_unity * size / 2 voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] tip = trans_inv(trans(coords[-3]) + voff) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 374dff04b..59fc1089f 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -523,6 +523,7 @@ def _draw_vertices(self): patches, offsets=offsets, offset_transform=self.axes.transData, + match_original=True, ) art.set_transform(IdentityTransform()) self._vertices.append(art) @@ -775,7 +776,7 @@ def draw(self, graph, *args, **kwds): ax.set_yticks([]) # Set equal aspect to get actual circles - #ax.set_aspect(1) + ax.set_aspect(1) # Autoscale for x/y axis limits ax.autoscale_view() From d3e42995072f9893783087bc713ff43f5073fbd4 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sun, 28 May 2023 15:03:12 +1000 Subject: [PATCH 070/681] Vertex labels and related offsets are fine, missing group marking --- src/igraph/drawing/matplotlib/graph.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 59fc1089f..c626338cf 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -316,20 +316,18 @@ def _draw_vertex_labels(self): else: vertex_width = vertex.width vertex_height = vertex.height - xtext = coords[0] + dist * vertex_width * np.cos(angle) - ytext = coords[1] + dist * vertex_height * np.sin(angle) + xtext = dist * 0.5 * vertex_width * np.cos(angle) + ytext = dist * 0.5 * vertex_height * np.sin(angle) xytext = (xtext, ytext) - textcoords = "data" art = mpl.text.Annotation( vertex.label, coords, xytext=xytext, - textcoords=textcoords, + textcoords='offset points', fontsize=label_size, ha="center", va="center", - transform=self.axes.transData, clip_on=True, zorder=3, ) From f949f158f389719b6285d3dd31934dd7c3599d2a Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 29 May 2023 18:58:25 +1000 Subject: [PATCH 071/681] All works, baseline images unchanged --- src/igraph/drawing/matplotlib/edge.py | 8 +- src/igraph/drawing/matplotlib/graph.py | 127 ++++++++++------------ src/igraph/drawing/matplotlib/polygon.py | 131 +++++++++++++++-------- src/igraph/drawing/shapes.py | 2 +- tests/drawing/matplotlib/test_graph.py | 18 +++- 5 files changed, 159 insertions(+), 127 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 5e1132fb4..f557964af 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -253,10 +253,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._paths_original = deepcopy(self._paths) - def _update_path_from_vertices(self): - if self._vertex_sizes is None: - return - + def _update_paths(self): paths_original = self._paths_original vertex_sizes = self._vertex_sizes trans = self.axes.transData.transform @@ -314,5 +311,6 @@ def _update_path_edge_end_directed( path.vertices[-5:] = [headbase, headleft, tip, headright, headbase] def draw(self, renderer): - self._update_path_from_vertices() + if self._vertex_sizes is not None: + self._update_paths() return super().draw(renderer) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index c626338cf..f1aab7cff 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -18,10 +18,10 @@ from igraph._igraph import convex_hull, VertexSeq from igraph.drawing.baseclasses import AbstractGraphDrawer -from igraph.drawing.utils import Point, FakeModule +from igraph.drawing.utils import FakeModule from .edge import MatplotlibEdgeDrawer, EdgeCollection -from .polygon import MatplotlibPolygonDrawer +from .polygon import HullCollection from .utils import find_matplotlib from .vertex import MatplotlibVertexDrawer @@ -174,24 +174,24 @@ def _kwds_post_update(self): self.stale = True def _clear_state(self): - self._vertices = [] - self._edges = [] + self._vertices = None + self._edges = None self._vertex_labels = [] self._edge_labels = [] - self._group_artists = [] + self._groups = None self._legend_info = {} def get_children(self): - artists = sum( - [ - self._group_artists, - self._edges, - self._vertices, - self._edge_labels, - self._vertex_labels, - ], - [], - ) + artists = [] + if self._groups is not None: + artists.append(self._groups) + # This way vertices are on top of edges, since they are drawn later + if self._edges is not None: + artists.append(self._edges) + if self._vertices is not None: + artists.append(self._vertices) + artists.extend(self._edge_labels) + artists.extend(self._vertex_labels) return tuple(artists) def _set_edge_curve(self, **kwds): @@ -233,7 +233,7 @@ def get_edges(self): def get_groups(self): """Get group/cluster/cover artists.""" - return self._group_artists + return self._groups def get_vertex_labels(self): """Get vertex label artists.""" @@ -256,25 +256,19 @@ def get_datalim(self): if len(layout) == 0: mins = np.array([0, 0]) maxs = np.array([1, 1]) - else: - mins = np.min(layout, axis=0).astype(float) - maxs = np.max(layout, axis=0).astype(float) - - # 5% padding, on each side - pad = (maxs - mins) * 0.05 - mins -= pad - maxs += pad - - ## Pad by vertex size, to ensure they fit - #vertex_builder = self.vertex_builder - #if vertex_builder.size is not None: - # mins -= vertex_builder.size * 1.1 - # maxs += vertex_builder.size * 1.1 - #else: - # mins[0] -= vertex_builder.width * 0.55 - # mins[1] -= vertex_builder.height * 0.55 - # maxs[0] += vertex_builder.width * 0.55 - # maxs[1] += vertex_builder.height * 0.55 + return (mins, maxs) + + # NOTE: Better than this would be to compute bounding boxes explicitely, + # e.g. for vertex labels. However, that needs to be done very carefully + # (e.g. see the note for mpl.artist.Artist.get_window_extent). We + # currently lack the knowledge to ensure that would work well, but + # that might change in the future. + mins = np.min(layout, axis=0).astype(float) + maxs = np.max(layout, axis=0).astype(float) + # 8% padding, on each side + pad = (maxs - mins) * 0.08 + mins -= pad + maxs += pad return (mins, maxs) @@ -396,15 +390,15 @@ def _draw_groups(self): # Deferred import to avoid a cycle in the import graph from igraph.clustering import VertexClustering, VertexCover + mark_groups = self.kwds["mark_groups"] + if not mark_groups: + return + kwds = self.kwds palette = self.kwds["palette"] layout = self.kwds["layout"] - mark_groups = self.kwds["mark_groups"] vertex_builder = self.vertex_builder - if not mark_groups: - return - # Figure out what to do with mark_groups in order to be able to # iterate over it and get memberlist-color pairs if isinstance(mark_groups, dict): @@ -432,6 +426,10 @@ def _draw_groups(self): } # Iterate over color-memberlist pairs + polygons = [] + corner_radii = [] + facecolors = [] + edgecolors = [] for group, color_id in group_iter: if not group or color_id is None: continue @@ -446,38 +444,12 @@ def _draw_groups(self): # Get the vertex indices that constitute the convex hull hull = [group[i] for i in convex_hull([layout[idx] for idx in group])] - # Calculate the preferred rounding radius for the corners - corner_radius = 1.25 * max(vertex_builder[idx].size for idx in hull) - - # Construct the polygon + # Construct the hull polygon polygon = [layout[idx] for idx in hull] - if len(polygon) == 2: - # Expand the polygon (which is a flat line otherwise) - a, b = Point(*polygon[0]), Point(*polygon[1]) - c = corner_radius * (a - b).normalized() - n = Point(-c[1], c[0]) - polygon = [a + n, b + n, b - c, b - n, a - n, a + c] - else: - # Expand the polygon around its center of mass - center = Point( - *[sum(coords) / float(len(coords)) for coords in zip(*polygon)] - ) - polygon = [ - Point(*point).towards(center, -corner_radius) for point in polygon - ] - - # Draw the hull + # Calculate rounding radius and facecolor + corner_radius = 1.25 * max(vertex_builder[idx].size for idx in hull) facecolor = (color[0], color[1], color[2], 0.25 * color[3]) - drawer = MatplotlibPolygonDrawer(self.axes) - art = drawer.draw( - polygon, - corner_radius=corner_radius, - facecolor=facecolor, - edgecolor=color, - ) - if art is not None: - self._group_artists.append(art) if kwds.get("legend", False): legend_info["handles"].append( @@ -491,6 +463,21 @@ def _draw_groups(self): ) legend_info["labels"].append(str(color_id)) + if len(polygon) >= 1: + polygons.append(mpl.path.Path(polygon)) + corner_radii.append(corner_radius) + facecolors.append(facecolor) + edgecolors.append(color) + + art = HullCollection( + polygons, + corner_radius=corner_radii, + facecolor=facecolors, + edgecolor=edgecolors, + transform=self.axes.transData, + ) + self._groups = art + if kwds.get("legend", False): self.legend_info = legend_info @@ -524,7 +511,7 @@ def _draw_vertices(self): match_original=True, ) art.set_transform(IdentityTransform()) - self._vertices.append(art) + self._vertices = art def _draw_edges(self): """Draw the edges""" @@ -577,7 +564,7 @@ def _draw_edges(self): arrow_widths=arrow_widths, transform=self.axes.transData, ) - self._edges.append(art) + self._edges = art def _reprocess(self): """Prepare artist and children for the actual drawing. diff --git a/src/igraph/drawing/matplotlib/polygon.py b/src/igraph/drawing/matplotlib/polygon.py index 8e429a9b8..c014e9b22 100644 --- a/src/igraph/drawing/matplotlib/polygon.py +++ b/src/igraph/drawing/matplotlib/polygon.py @@ -1,49 +1,52 @@ +from copy import deepcopy + from igraph.drawing.utils import calculate_corner_radii from igraph.utils import consecutive_pairs +from igraph.drawing.utils import Point, FakeModule from .utils import find_matplotlib -__all__ = ("MatplotlibPolygonDrawer",) +__all__ = ("HullCollection",) mpl, plt = find_matplotlib() - - -class MatplotlibPolygonDrawer: - """Class that is used to draw polygons in matplotlib. - - The corner points of the polygon can be set by the C{points} - property of the drawer, or passed at construction time. Most - drawing methods in this class also have an extra C{points} - argument that can be used to override the set of points in the - C{points} property.""" - - def __init__(self, ax): - """Constructs a new polygon drawer that draws on the given - Matplotlib axes. - - @param ax: the matplotlib Axes to draw on - """ - self.context = ax - - def draw(self, points, corner_radius=0, **kwds): - """Draws a polygon to the associated axes. - - @param points: the coordinates of the corners of the polygon, - in clockwise or counter-clockwise order, or C{None} if we are - about to use the C{points} property of the class. - @param corner_radius: if zero, an ordinary polygon will be drawn. - If positive, the corners of the polygon will be rounded with - the given radius. - """ - if len(points) < 2: - # Well, a polygon must have at least two corner points - return - - ax = self.context +try: + PathCollection = mpl.collections.PathCollection +except AttributeError: + PatchCollection = FakeModule + + +class HullCollection(PathCollection): + """Collection for hulls connecting vertex covers/clusters. + + The class takes the normal arguments of a PathCollection, plus one argument + called "corner_radius" that specifies how much to smoothen the polygon + vertices into round corners. This argument can be a float or a sequence + of floats, one for each hull to be drawn. + """ + def __init__(self, *args, **kwargs): + self._corner_radii = kwargs.pop("corner_radius", None) + super().__init__(*args, **kwargs) + self._paths_original = deepcopy(self._paths) + try: + self._corner_radii = list(iter(self._corner_radii)) + except TypeError: + self._corner_radii = [self._corner_radii for x in self._paths] + + def _update_paths(self): + paths_original = self._paths_original + corner_radii = self._corner_radii + trans = self.axes.transData.transform + trans_inv = self.axes.transData.inverted().transform + + for i, (path_orig, radius) in enumerate(zip(paths_original, corner_radii)): + self._paths[i] = self._compute_path_with_corner_radius( + path_orig, radius, trans, trans_inv, + ) + + @staticmethod + def _round_corners(points, corner_radius): if corner_radius <= 0: - # No rounded corners, this is simple - stroke = mpl.patches.Polygon(points, **kwds) - ax.add_patch(stroke) + return (points, None) # Rounded corners. First, we will take each side of the # polygon and find what the corner radius should be on @@ -80,11 +83,47 @@ def draw(self, points, corner_radius=0, **kwds): codes.extend([mpl.path.Path.CURVE4] * 3) u = v - art = mpl.patches.PathPatch( - mpl.path.Path(path, codes=codes, closed=True), - transform=ax.transData, - clip_on=True, - zorder=4, - **kwds, - ) - return art + return (path, codes) + + @staticmethod + def _expand_path(coordst, radius): + if len(coordst) == 1: + # Expand a rectangle around a single vertex + a = Point(*coordst[0]) + c = Point(radius, 0) + n = Point(-c[1], c[0]) + polygon = [a + n, a - c, a - n, a + c] + elif len(coordst) == 2: + # Flat line, make it an actual shape + a, b = Point(*coordst[0]), Point(*coordst[1]) + c = radius * (a - b).normalized() + n = Point(-c[1], c[0]) + polygon = [a + n, b + n, b - c, b - n, a - n, a + c] + else: + # Expand the polygon around its center of mass + center = Point( + *[sum(coords) / float(len(coords)) for coords in zip(*coordst)] + ) + polygon = [ + Point(*point).towards(center, -radius) for point in coordst + ] + return polygon + + def _compute_path_with_corner_radius( + self, path_orig, radius, trans, trans_inv, + ): + # Move to point/canvas coordinates + coordst = trans(path_orig.vertices) + # Expand around vertices + polygon = self._expand_path(coordst, radius) + # Compute round corners + (polygon, codes) = self._round_corners(polygon, radius) + # Return to data coordinates + polygon = [trans_inv(x) for x in polygon] + return mpl.path.Path(polygon, codes) + + def draw(self, renderer): + if self._corner_radii is not None: + self._update_paths() + return super().draw(renderer) + diff --git a/src/igraph/drawing/shapes.py b/src/igraph/drawing/shapes.py index 6598766d4..df4d00c70 100644 --- a/src/igraph/drawing/shapes.py +++ b/src/igraph/drawing/shapes.py @@ -96,7 +96,7 @@ def draw_path(ctx, center_x, center_y, width, height=None, **kwargs): height = height or width if hasattr(plt, "Axes") and isinstance(ctx, plt.Axes): return mpl.patches.Rectangle( - - width / 2, - height / 2, + (- width / 2, - height / 2), width, height, clip_on=True, diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index f40bcdb78..ad7a64dab 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -86,15 +86,15 @@ def test_mark_groups_squares(self): ) @image_comparison(baseline_images=["graph_edit_children"], remove_text=True) - def test_mark_groups_squares(self): + def test_edit_children(self): plt.close("all") g = Graph.Ring(5) fig, ax = plt.subplots() plot(g, target=ax, vertex_shape="o", layout=self.layout_small_ring) graph_artist = ax.get_children()[0] - dot = graph_artist.get_vertices()[0] - dot.set_facecolor("blue") - dot.radius *= 0.5 + dots = graph_artist.get_vertices() + dots.set_facecolor("blue") + dots.radius *= 0.5 @image_comparison(baseline_images=["graph_basic"], remove_text=True) def test_gh_587(self): @@ -190,7 +190,15 @@ def test_clustering_directed_large(self): g = Graph.Ring(50, directed=True) clu = VertexClustering(g, [0] * 3 + [1] * 17 + [2] * 30) fig, ax = plt.subplots() - plot(clu, layout=self.layout_large_ring, target=ax, mark_groups=True) + plot( + clu, + vertex_size=17, + edge_arrow_size=5, + edge_arrow_width=5, + layout=self.layout_large_ring, + target=ax, + mark_groups=True, + ) def suite(): From 682daaea46f0e6a55b9c0c5ca5226075b369ada8 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 29 May 2023 19:07:43 +1000 Subject: [PATCH 072/681] Remove fixed aspect ratio --- src/igraph/drawing/matplotlib/graph.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index f1aab7cff..80636b723 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -760,9 +760,6 @@ def draw(self, graph, *args, **kwds): ax.set_xticks([]) ax.set_yticks([]) - # Set equal aspect to get actual circles - ax.set_aspect(1) - # Autoscale for x/y axis limits ax.autoscale_view() From 7c5bb84efd706855b79bc65276fa5e11eb7b8639 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 29 May 2023 22:00:24 +1000 Subject: [PATCH 073/681] mpl baseline images, tweak some tests --- src/igraph/drawing/matplotlib/graph.py | 35 ++++++++++++++---- .../test_graph/clustering_directed.png | Bin 34606 -> 36495 bytes .../test_graph/clustering_directed_large.png | Bin 60151 -> 62421 bytes .../test_graph/graph_basic.png | Bin 22749 -> 22683 bytes .../test_graph/graph_directed.png | Bin 23715 -> 23740 bytes .../test_graph/graph_layout_attribute.png | Bin 8845 -> 18111 bytes .../test_graph/graph_mark_groups_directed.png | Bin 23715 -> 23740 bytes .../graph_mark_groups_squares_directed.png | Bin 0 -> 19296 bytes tests/drawing/matplotlib/test_graph.py | 1 - 9 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 80636b723..ea09440f5 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -258,15 +258,36 @@ def get_datalim(self): maxs = np.array([1, 1]) return (mins, maxs) - # NOTE: Better than this would be to compute bounding boxes explicitely, - # e.g. for vertex labels. However, that needs to be done very carefully - # (e.g. see the note for mpl.artist.Artist.get_window_extent). We - # currently lack the knowledge to ensure that would work well, but - # that might change in the future. + # Use the layout as a base, and expand using bboxes from other artists mins = np.min(layout, axis=0).astype(float) maxs = np.max(layout, axis=0).astype(float) - # 8% padding, on each side - pad = (maxs - mins) * 0.08 + + # NOTE: unlike other Collections, the vertices are a vanilla class: + # PatchCollection with an offset transform using transData. Therefore, + # care should be taken if one wants to include it here + if self._vertices is not None: + trans = self.axes.transData.transform + trans_inv = self.axes.transData.inverted().transform + verts = self._vertices + for path, offset in zip(verts.get_paths(), verts._offsets): + bbox = path.get_extents() + mins = np.minimum(mins, trans_inv(bbox.min + trans(offset))) + maxs = np.maximum(maxs, trans_inv(bbox.max + trans(offset))) + + if self._edges is not None: + for path in self._edges.get_paths(): + bbox = path.get_extents() + mins = np.minimum(mins, bbox.min) + maxs = np.maximum(maxs, bbox.max) + + if self._groups is not None: + for path in self._groups.get_paths(): + bbox = path.get_extents() + mins = np.minimum(mins, bbox.min) + maxs = np.maximum(maxs, bbox.max) + + # 5% padding, on each side + pad = (maxs - mins) * 0.05 mins -= pad maxs += pad diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png index 8a8179e05c9997cca1a174bfa5702e803efa1167..195b0f379f299c97eef8f1455538eac3fa9bbfef 100644 GIT binary patch literal 36495 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ⅈ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 MhMIiAwflkp1D<^8i2wiq literal 34606 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 diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png index a6ea8972f330c3b60de970b50a37f014b747aa2f..ed3c2dd1a223a05a0a29f8d7c22888fa1dc15d27 100644 GIT binary patch literal 62421 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

}O`wpYJ2qIF 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 JiWRJ${SW^{U!(v4 literal 60151 zcmeFZWm{EU8!k+DcQ;6PH;8mM(hY)icXvoirywP*v~+hUjkJJBr_?*v{T%Q91N-a# z0K#Ijm~)J)&KSn3tIDCHkf1<8L7^+i%VVLLP7QJ+z!{ zJiN`_tf5rQJzN}}Jsj;VsJyJ*-0hv6c-Z;bxml^~JUm?7g*iCh|DOxko!x9X7!Qan zz?&eu$Q!srL1CIhKA-D+pL``pPmv*CfbZfkktP5Cmt|qF{`aCxK?;=2 z|1Lc7}y%-fFH5ngN?;;XfF>loteLw*&OyQ{dv|HliDXw+3?G)VnAhsoQ zRem^%(2A<_S}M+JV5}=nQRa3Xz*gbq@^%(z8_nowaWL9J(Q6(2(tK&;(u+v>cvi~p zS*aFC@!OSIQv(KC$r3KrvR`4IS|hMZ>iIlY8NCL;uD8HsnsQ2g{GPx-a+&+zc6?CT&PNMx; zSo{ueS(3Kn#3h=?+qtrL6rLSwGm`NA>Bhe3XC8TVc25;Wl;jeTe{4m%+B&K- zrkVNu%9;w+Ue*2H8(SLBAF@?4&}GH0c{?>-{twA7F|-(nWIhSQ6-vfO8p%i6!vw33 z1+_jQ*tEk!Q@Y<8BiUrILJ3Vo`*}pin-)IV1gU8tQC~#DQAs0dgskl{kS={7@G#m! z@mkXO*e*J?vrtO$qawZ{ppZPl7D1s;VlZ;)&BMO`VLTCHcrgW))1omON|!Ya}KZ}%^jiKpt1Pu{;0nVqSS#wVHkFvMHV z?%B}KuJ-$rJqaQv1sx+}%=^_Ab7lUcU!0PYD}0CeGx7ZISIiu8d003U6cikn8zZfI z#|2%F;no7J8yg!+tj9C2P>$bp`CZ4!aHh)OfUOYz*${8MWIo&^I$qs5W+|HaYaUlR z#^@Df&vv=c6Q7RNP=%A+$wZFrWN6>cgbnddEk>LhcX)AG{zU6zk1E#IRTrsNC#Z)h z>8bw_@=dLOc|BVS7Gbu|RH6wMR%QO~a#|w0+f2Mcqk)KoWTs%I2b~jUQOcmSD5}aw z_h$DicHL~V{XAJf^Zg$L0sUSS-NsbXwIaSRzKM%SbXcU07yf?INGUA;g@EV>W$u>? zj&XfiEGeUX?%LM51e@k^K6LvSSd4oy72R5+(ez5KP1j9>A_}V<9&!{`=&)k<#i;~h zF$9+CV^358lEeVMJ(i!fCaBPolsznIuzZ_XoRor4rN1atZco;mJimmoN8&y2nT8?n zV?{Hn`9|^NnWL48?p^+O8>RomU7L?#y$6VE5eB^fFd9J1K{^S|8i>Q@RBH zy1KeLt~AFgePqWbB#iFr60;slFAjXTNoO^fE4g<9+mbBtOymbs7p|aXh#7zp=yz+r zJCed+sx;4QGm+KXSY*wKabVY{AiHU3CKT{^J`5IUX!nmb12=bSBB=ll1%;}#G)z)b zl6IALtk>U_t%C!**`-XuVWBW&8?iqM4B4S*R%n)1{+U=MBOf4r+)e!`GpCHz8vKwd zlv%r&p3VLZ%i|eOHQJv@R6-;a6pQPXA9VB#<~kcFc_DD>b(KWgum>$6NVar#+;SX8g5fFohwLUZk0< zCSmdMO8lxn$;AV*tfj`6+O1h~GNLq9q5Y`{67&+6mRD!Ly6eHfz?|LOOx@fG(MJ*K zHs#Q>ZV4|QD(Ve!XTI{0R=h`{M&W~WoIdH6wn@#*3z6=o>`6O2(IHEFspwY)1c}`i zgDBsh_Z`rj5Edwyub{@(yd`<-3DV8ruTvGfpPz`t1AM+!>9Cn}W*JCKgh_-RvwyNH z>ijg*EUhK}u-g<(;q`lpTvJn%(V&rTXM=M1#GykYSexh9_BCUQq=e7)p5EbVOWo+_ z%BnF;iN~J8_-C2QPelk7Gw?3oPm5g4;2Bx)ni&&Ye));~YVj}o&?oWOPeb6E*~DAU zWl5|=6}oI91(GUE5>i7sUyGjCSkZT1id5^r;U48Jf_`tWg!)#Ud-Zgir^RX%$7U+4 z^0$0Kgxo&8!+|gHFR2!%bs{l8kId06*;4HA-X5N5vHq_|i<_@`UbT~DA;c4~mndg* zAAa||+*i3dUhc2d`h2j|KwGAmv3&@w_NSUsY_fAhhS9s7to!9(heBv(xjnc(Qm0z? z@P*R<@}TDxaTYRMze8QO?CD0=WS-sB?95U>1wrEnSh6B!9pZkXf}J*)6bZTrtn#sS zixW`(BJAuyCFeMUv1S_A5*<`f<&L0!94%BfM-e+nvFshLHSWj~a%Z@b3vMdV(V&B! zAtXYr)~(&1mUsy`DAv%>U^V=fFf*f`L@qM)b$s!PYS@TevO!C~#mRWZSg+2+`u<{X zqEMm`_myf<6*JVIpI=@#Xep0B_+&w~dfk%@Cz1OfP>+s|4h#%Ho&7EhZhW`LOcY;m zT=1hR9{u0TIjN=if^x48A9RZ4A5O!sfr4-VXK3{Q2|} z84Yb<>cj*STSrI8WfMxo>zGPND4SWQ3JV*%ICy?KY*ZK~gGy9150#L;-gcUT-Sm6j zRz2h!>u~~JHS~D#=DPA=WK2voZ*NUaoZnOVI}_PFMy)QPAe}Y7zSG%%5jUOYJ4{V< zAPU(s6SUv_Z5mXrkj6luENJ_q2w{gvCicjBi5?8dhx>M2ksATs7#!X%x>2p$Hm>Q?^mv)W;guzDNOB-SD6SM>8 zp8}3cJ=cF0=P^1w4sjlCPZwV-oVPxaQ}Obq7Zp)aeCrUPr;m(?fNRDfIC<_8Sp-cE z2M0&c|Av*CnmQsX%7T|<9>d+!bFVP?nfgYRRn&UO6L03&4$%-NvJ9BpQX$RNwJ>*WS1!nkfv0W4`ki|CqHn%ebH9-B zw+k^4IW-1NQBAhfIHaWUU%s%>D`kEHm35)UV7`VSP^wpokpktN`;SgUO>DG8bXIf| z#SX8(OAVHYh!|w@s|Xp)3=B~f6^u_D=LamrHrxXwXH|QHMN;8Q9o`(DRrAMO#2g$P z$jHbz2Z(3tsgT+_Ru2YZar4Cd`TIRJ|E{)x!u<$K62ANu>TSq&F%}uw#KCN7Q($|! zeV(9e7^F566DxoX1&v?(%i9cg7(abXic=I>Imf2lx{V1`0JpVWM<0AXy&tU3hyU6Wwkkeu zD+#)v3s&hP>)`Now0LOX!9pc2Kfi(ZH&tcjfvKsaK*ZbPZyG9p2G6lp(nvmci%x>f zQ+9N8EFY$$r{6jb5U3YM$?6zqMCmg0l~Ysv$gc8{-PmrUQ|RI5?+#e6PoF+PZT|hM z5{*GF_%LtK3fr3F+tpD?`FG{(PG2M{*lQa>84WyXY3Wu9FY*GeOJOM8BJtuz=iBd& z`I&in6YZXV^l_RaE~$TOj4|3}@bVg>@5S{+1@m*>er{{_ZzKb*5Kmeq zF4i(w^tiA8R1%4zRd7_ypz{hm;Rd3ktNbv-G(u|cNoUepYPF}ueWl!aYx4q~Q{M1? zmEXeB@^Gz(7zifJ;hJaoV+|eSn8zJ z_N#~5+O6nAKVzPBH zZL*WV+o7!dCJBIzRwdv5>%GAM613k3jE#>^x4-OTSM670S=my91n?ovrP*#atT!C- za?O2uw&V?}sHiAZS5y1fuY7?p4?P&0ImC+^QU@1ELhe!IB3_^eAR{ApK25EX33>GAg6)2AS4 zKIO98hvbtCb6eYwx+&G(bsLT=^~gc+1=B-cQ+v-cpydeVKzMyTF~q>Y@Hm`{%;9rr zbls6PGB%!vVT*q;l?{oHM-^~dgEW?yn3!gXN-67XZfi*1nyNg-eQ>9?o99#hH`@ra zvCtj#G`Xl`=wM;=8KKPuH**;k% z_SZLISicYF-+W;ts}zySuf^+!B1iMJv-VZ6#;s*PEhFatKkHmd_eRn&_ z5_4h6+TXr?OTT5r%nccERN)}E&X*1!LZ`^_-#$4}-5E-Bb#v?M?G0692nyT!0L_r? zV~nm3^$7Di8of;S%Ug!&FQDb25eviZLkF9!yi=p$#72uo58yt>B_rdmJJW7+vn~j{ zF*y2B9i5nnj!wcSX<*wsZVbbiiyy#z&l&t2@Uzx<{Q2pj&ErtB9iL52O|90XYpfhS zcSbggDBu$}6m9S3d$Zm?`2FeYl#iSRYJ?pFmqFcu-f6Rj9MOzO$iR~Woq;oeXGuCsYvariqN)lGEF#6F~thLY4%`cP)U zh8K_zgh0bKiVcRsB61%rOP%$vH{7K8Ql-Mxz*sAS22H=q>y2A&&0H~1nw zGmeEF=De{RJkOU9lG2MYmb#hZ*N8PW+%LnJsHi*hY7&E+Rw1g{6c={7MF>^khI!cJ zC($tkITOquN0M8&WcAuXPDG?~rI-Rx5H97f-{1uRc0@^x1wqqYPF>p|+sa&~_*F3j zUz4~Hs{8(g`Rv7;ig=yN+=EHDVb7$iqviOltSsdRYe69)F2^NK*>0X3SOJWppt`X4 z{I$iq(%JiGfW?%o}l$aPzdv$Mqf=RaKjWwtu_5QQ8!Ier!i_~%zK!4g-wIi3) z;%cDfH1R!$^E<7LblzXK25fQ1eGK~-QT1Ey6V#&A@~0x%$^~cr!jI8i%GXEBhF`f! z60b;Sl1Fk<&bXEh+Z5sUtRthWNiOzwIiSU6?jBCN=i!s%N`eboEUr;BAGJ1rII5f% z_^AJ57A3#qeI1R#=Z-aRZ}-?QF=4~+Isp3YIlr?dn@DpcRvU!okV(N(6`aqWQnmq{ zlkuTq@IS3k6d|uf4d0UY{$Q`4XnlX+VO7hZp*B%cpl;} z#rs_!W&hZro40o$0bSR^V1^rmQbgI&gH=~oSFl5P{+o`W-_5ZC80#k}fe81zVP(TZ3XAY~{+p?w1h35P@ht~h zU??gdM~@)^nj3`=v`vse8b}A*J1<2=6!7E&v$Fu`5jYx6EG=STqie zL(CD3=`^uc%v#w~9#93_O#fyO7ZHV5jln?OAB~BNiyL0T*xKGc*Xp|C|0AUl3m3N^ z+?L&XJKxWrKkdujPnO^A%ny%6eEsVA_5?<|G ziUroiw5hLji2}cZaD#(`QD42iLL(Ez0#E-v`vyJgE5d>*^OX!H0p3;cDy<}EJ^nG- z@!jsYn%z>pdHK%r%F6cX>GZevs}~b@@#28qnSh|3WLHp4_$YMJ?UQW`J=Opyy=x99Cro|}-&XKqqtBKFq`=N?mKpiJE{xbNDq^TA3NvI9 zfO$Zi>+<(b3$NZD`Sq*NW-_M%An`CgI9zI7KOxqc<5gY&qw%(UjJVhdJr# z1E#@Gg8=_PS7?+Xkn%g4y*xjiiDc!zwIH%BQnbR~50Y4{c|=y37j)Z20`oErKR*E? zA|jZE>=r6CGM!o9_<gLA3-qg}o)_;%eF3H60Y zolS|H&U_E_$HB#&e^QW_r($A4wzahl2n>t`d$Rp0_IT|(ZrR0p;jQZ0s!1l=qyO#i zr+US`s*L-i_&Q|_O)YtI?D)G#)3c%6!u#yZX5P~Vun@-oWic;$;*XkrwvBDx&wxlN z`0Xn?a))sA@A^+C_XU1QI^#m@QRxGxT~Dyt-Gt;d^N)MKu|<0+c{ew1DJdx<(AfUE z=;`Uv(9#-on6nLS$PzgXg}0%gMa-7U&4V51LBN7vAIo3?qetAv>Zd$n*Z|BMmgDo& zeKm{i{@ezSlQm*WO3DqACxXw@`Lcm(k-DP7ZO?d&l+3O6P7?(}BI~-{HAcHMrsw#8 zYIW!wvJHrur%khqz}nvWgc*ZX(jz>kAv~Xb;xUXZ2dHJPgi+qR7_crA9hNbTaneuh z@td$$0`I;^J;?4Xv}q~-^T5d|H|HfWXs~$G4t|8OXJTT)>oh}T9SO6w9KcC(#}i^c4?wX(+m6rm;RCEGtEN^Xc%DVN}Cd&L>5=N2Xid9Zs;n5$!pjkSl#{+Jy{E9=fXtfxV`}}MWxgwMEp2-*)K<+ZjmCc zR-db+Q8F58~WMO0oPE7JidT(w}sm8Qhob*)~ zzV1~Shr|UfJ)@NW3QvN$40gsBSD^nvI$vmtJdIXX7{~X=sZ%st!Iz!j<`VoUxq!}U zdlIFvOi9$9)dbWQ=(4cBPSbtYzbkyl$H&~0&`8M0z2M&JzTcsIURCvLIinT*r?UV4 z>N}Q1??Tsd1bGL`wFCed{5>8VqLa zg4T7B9|cI^1RGw$witwk<{C{`w1d=BxF_ZsG-+w`p+9i>&w z0P7H^hKy&j#e=CDLOLD$Tef*TRrZ7M=YYSv*{B`kbAH z8##NiH-7K6-%^ni_fr=(xCqBj?}5lnfUy_lh&V%0JR|FI*=p<~N1=IM+AFn2n@JL0 zl~RDADyqg__Mb4Lpr0o5)=bQJ14MQVj}|H|PhRf|FW%?WEl)auOa-{k$c4*alv?JT z3UC56rsSJY&SwaQ%Zj);XDD@>`IFWOZSKDtU9P1Uy0tGCJ!wNXmj6)HRx$hEo>&{4 zaeJLCRo?Els%4{CACS-F0tUjW`nZ-+xTK^+zsUw&Df}Z&&|c^OHGB@Avus_63GcfF z#(u@&Ck#sQiJ?T&!aZ9eBTTwGjBD=V6fRtoPHD$Yj)GD;5I-Q7!rU!Fy;7qs$3 zeN#t9Mw+?X0n+Dh!_fhW#6^;*U1yT-{(I_Bg;B*BKQ#p=N)zG9dsrF)&7+Lvx?=cu zfU3jWOEA|_oSL&a^F&}}f3QUWP)Cs=+g{lc2Dg4FXVI5D__3jH?3hbOXR;mUL+pex z9=qW;$8TdfaocY+@ZSBXvYsUZbdR9f^YlSDZ+NDqCA4-C%zV~Rz&=kXGFXM~b5fm( zRLeymZlPby=3&uHADbbf+x2vGDiOAyk#=Lt7cKY7y(88DwKNblgZ{Ma1WMM$HRb6~ ziJ7~rD>SXy=yoK++Sq-eH%pCA!EZ3Su)C%FTd;*jb-N;wj_Ff_q-1T!ARB0P1kF^D zcs4w_DG39_woSvz3JT_1L6jLvL-RG>jHw z!N*2NBeK2yCW)*&VS0@k=7v9>jUQ4`rRd?o3*u^EXh__H^dqinf+d+HQGdYxe0q7_ zeseZ1fixa{DlE7W{KeKGm#C(^z2;(cT4II62Vpo_@F#D71><(oWQnAB&z-cm*Ow~& zW`~1=+uYenJ6!rbUHH2v6c#EXI@S(pa>$yWC+$@!ZJV2wtG6rc8dwmucZoZ11PvWA`2Q>ITyOf@r3W4 zbd0nrBpj34raXZpW)|j~`igk4!ebJyzrWwt{VLa}BM|-i4Zd(OA_b-*!ZZ9{FiO&F zQUKpQ3&`uxa(hh)^l$Av!+sPkR-^#hbRJDOE%%V}0pyh(*zWZSC%YAPQAE2CW zWz4TlO*@f z!^sja@}0J#N57e~=9DgR7)$X*$;GnyED5HjvI%npdy$8DC>&~#X-1AIBtgwk0Gkx? z21kCAZNq}U$zDN8mWRZ9jfYGi@SjI!ooUj)e3XnP*HDq71obn|>oVQzw-r@!iHR!h zPe+w6#(V1F-eq&#u!JHAmJS$Qp0QkFs(NU)L`;?RvR{i>r-CZlm zQ-ke;gOMZ8>NabCR2$gk*lCWiiz?~qBr#&XcMGpEJ4RK8cnW~>is9~)^n1eR3Ow0= z4uoY@m$2un-*}&WBK44{pk6bOL+@;FAFQ_s#0KJQ(eto3BWEEsbr&WU7Ez2agKoV^9-CfHA>Uv@98GXVT}KQuGZF8_0Ov0fM>cLc`OH< z;HSOtyZd_xGU0bxLfQ#^HJLS{X4W#0WUZ9BwYhmV)1NADK{BsD`EFwq{rfh{VF9}g z7ghJ3bd2Nt%pK*+j;G0IH0!KE)+){G;$i2d`p|(0nKOaQurE?fmGxeK--5(2zpzIL z4+WFCR(DV!4+pEv7QhXbx-Q1xPNZMIhBQbJ-M;}NPozjP^EUgQ*cwy*Q7i?b(f}1C zn!+ZY&5|gbG6=9%Ks_jYRA5rf_BN)LDW(bp(Y=iG1`n2~2P^7~PR)im0IJ5Q2`2~E zdZM!ey<%Nkx6b&zTOmm58;^sTP=HD;K)gxhzDWJ4wJvaRiffc?>gawj;4~{D?7EAq zTN)N8nT??(%lE_MSK#+6*%#xvCY=`UA(~|_qTMlY!sh4E3yZp(MQwO0jKS+h^SZ_s3f3ouuqmJJ=wP=3kvg-rf%foqgeymh0tp0jVTQ@+@aA9iP{C7=_Oy?8A{=$5Is}&Usr7%YXF5FL1S%pT*i4N@Cu3BUGtBW z(%jjtKub~`7LCZ`(~}0Sw!ZT|RPVnyYru)H7Q_>p1Pps?my#GC^oi~ph?Zl~1VeUA zz9}sqNZFqS2YJh9lYdyb?x6q|DviYC`=t_DGcd|e7cNv{;FDiIU?;Q^rBe$Y32I-%eE3w@aPrOd;0ss zxvj@O1%7Q2s2j+P8ajQPQhOY57aca*w}}5@V2Mn90Req@?y+3#S3-@OM&Dad+zK16)TIFcyB)pr! z5--VJ4>!`@R9F?Mqn~PFStJe0HxIW)(?_)!wT9N%qok4CBcr2v{EqGVX!_LsD`#N4 zMmNK!ik%ybkP}JxEw&?KA&Lo*o~(pxtE*W6nkol64AfeyYdAiOuFLKc_Q}9n@5&g7 zx1RUgmUk*Z9OZ^%1x6-ak^tgymtiqP%CA^7Enr7wxV+MG;c!OSy}05uJU%~kovwF| z0_D%3&5!=P;hgA*cxKGr3|=PGybwASLMovVafSdh2o!``>-4>pS5=*I>B?j?oGX%o zeZJel%!Fg3KC;16B!~Z6i=rwC~-Vi@pmobqlq8jK7NbdzW_@eBT&T(gZ{<- zaL`N3`hYYEWqKt}-Qf3?Y0YIMX`i0$5grvO2&QmJ{XYlG?bA^8r8GC+U)?U)98 z-SbBzYF0Xcw+0vNRp%3(fV&GfTb}&rQ{d@Zn|lIBxlK=;j?(R#$mkHYL~A)&T!z4rXPz7jor;J#`C93s>O#0?~A0+&xFbn8B}iC{2l^9QlYuG(Rk=P#gp04y4i=ozZtG} zBI*NXwp1vY7z;a8!-F>*My`8W;)A%;&8NoS1F}Dw24?#t`z&y1kF@qPcj1|#)FW&J z{85=Ilt>0Nq_A-L>h0gHt1YK3SKJ^BdBy56OUtcXy!#!n-~bm*}ya@5V@41xh2?&EtcX(Y*0#AcT*X@H>tl}08Jls9R} zU;1@^Q>IuH?Mfh?)=8+*om$hP>^c2e<1zN|o6r>1;^qM>YO z7cli3&4!cwaKwt?Gpe|x8bvpbAN=)`BOGN>cPJ5TYtKfPKm8q+^d~00TCyKiI{iO> z-~);m_=0AP_@0DlMFQU#O9h(lDIVZ^9WSMv7}7J1E(RnDY@{DM9 zcAfnq00;vP0?-jZvyXlCNt*G>GGTs9w#Kkkh(Y?UicwzM-!uRhGywl_xbl?+LL9C% zq56dx{BW-h*Hkh$IBP`v6kT$oAON_HtlPoKD=_y)D-Yc zQOe?8odNgUh&L3H=-QLrS=}43yXIvAkywLixw)kH%-UukM!|4-xEC<_38CWnS5skq zeLdQ*rv4;kWgt}_D5(8x{269|O6?X8sb}V~baTl;0LTNB7I<(uV>z8K^7%zh3zhu< zT31{b)R>_#DWI19SZ=aysIq{k0J^}f5c6N5KhWQnF1RS?LlEGwdPsiiyKqse93>@g=}UCvA!${-pED~U&(xHa(W>I%t7|0R9j%lW*lLD< zh~lLSfzoYSX>>rLc1wrcmsE<(Tqp)W*??V8dTZmG^yTk5`m#c%@#+Vwo~fy+M#xR2 z0$WJbr(>%ETbjcS{p8M{>r|h(5|QaX=+rbGw@b&6LA(}kCUj~q;M81F(*SdRUFkgM z3+nyM%g#kN`tvt4m{rL{ZTrRAeE4u+w66k6XR&Nm z{d$;`Ziv6V_tDQU4s%GJwZ0?H>H14Cobli$0=S{0pNRh+O{7&4;UyFOGzXwD=RCSQed#S20*GBUE0 zWsx+UOk`{zEZ?9;fO1`2Ug;Dc9RfB$6rcfOy%Ou+kD zDDY5;v)3k(HiENIYMz&^`xR(Z-+$CFe2~nUOUJwiF4YMVTL75=q09UC6qtX&L*xLX zR8aOy{KnT-`WbviSbbQH9$odHj1>*czei4thZsQczVz=viMUH#IeVe0*foWA`^y(~{r96*m`I zMP|sV^_bj}WBi|v%^2~sF%t>~ICh74HjX!GnV4dQ-1k3qWqo$@_WoV@xuDOCvmPuL z=*e3bkyqEg`D=Lx%U!R;{BI_1P`g15Z1=ln4t{wO7}sNe#m^iFp8$AG2%QKFd)vFa za6Q1@Bj|OkALVLfWK^O1h2+cIuhJUItD7m(C_BW{&=~av*9_OnIMVtM(f}nJ-LZ!< z82IKHIH_NsVG|RN0`)-1=Z;EaRzsgjH{FFrDt@00Vp;^o2m4_PA-4#~4C9yIXgxmH z9UKgd(=)t@_4S+psl5i8BRf00kDs5-GLkY9wQ@#!x{SU)5%8z#8yfB$9mReA{0iaq zzc>R3r3;vK;wb?lG>^Y4835Vg{;%gQeYX^8DRDB_PHb&!)#!E#Z1+B`y`^nqNs$5V zW6HgN&9Ru`+U=IE?QQr4JsDq`TOSuO6=E#jK$bVQpR64J3*e%}_vSr%hr!U5b#+L`i;4dABT7E>M?{2Hj2fst zXL#GeY}eBSOW>Y_Fs@~a_&{wszquJ28tVLO1O!Dr$gI9UnLGb%0(6ul3bC;bSbqg| z9Q7xiGdWE06GHSFcb{=n(_r~r{`XKZG;taU(yuK^S1aTPJN*Qu@kAgk5Q&Iu z?nBf7RzI4}W>439?U$!pO3I)s>Sp*2_{O)*t?*<1DEx%)eS+5>c%3&y4bi)RirY<3 zN5|=XVgwp)g-Mq%#8Uk0{fosFS0ABdEGvS%w1g86MDu?8ZNXiFCT0_$YrL|hA^tU& z@pVKnuhLulL^8qwwdgh3Hrs|GVSrJaTV!k+gS5jYY$Jv^lwyeR8~U~Y?q5N-Y*khJ zKY`p&qqnrW3bsWKq%MT`e!%=YtUrrnn&x>1{m*^xL6Rkl(-lUq)(E->7E}DUyEJl{ zK$ijy6CovNtsfyp4@N6n(SJoN{_WujCI-fko$Z32c;n^jG2D?Hvq0^-8Q@8Tg!MqR zKm{360!&a4Q$8Ru%|tiT6QOHDT+N#KaL5Ac2x9~`l&xrhx4oYzD#{TLo8~hl@Swc` z*S5#{-ahx_d0;?Bx8`l=iq78mH`wz!2(Mqm0y2MpL=-#+hmeSfB`1+SK_?n`S)1Py z3sJqJvc{+@6*y#@JN{@DdizA1-bErSkF+VEQbR#H%-KynBGqgAk>Kb1=+*Q=CW6k7r~Mfjj1zmh8Es0H^!n+ z&w=v_G1A+;L6iW^^jD?g`@H3}oA(FcNX9(vW=jDV72zDNT2VJ!923I~O6;H)u)Fzx z35;ZrTqPj)v6<(Ju*o1WzfK8M`hAP74J(lzSxO~fM#u$R9NIU8r?v^0oTkjf%OYsl zQld9(?|{x7fo-!K8G#i7*#n>V_VMIij+Tb)5AWZ<=b|H~aLbHMkmR0oQ3smv^73*q zy@OxB4k}S98fG9x^H9!tg52v;!Y+BL-o|)jYG9ZxDRS?Pl!P%DpmB0#`TGp8Uy<>A zeTCxgI_9NfCae829av+^bVdyr-pxk%aJo=0xctSjB$ZSEap4rH1!}VKm7)chKkI}xUl6i`{)(D$;TibNZ}=o$ky87v9YlzFjiiFBYfB%54r)~DsAPO zktk-;O~fm=_VeY|O%yW6 z3q1_k)U+HQ~btEU3KvdZlXSO4z3 z9|ECVP?;IDKk2mT-Vr~Z4StN%mPvuvpq8O7wXbGJx zs?kx$)oJ(o8<+ou{71FkXN^)>2<5Q4xHiDRz!h7myvMdNHX2PUlfnSDu8olkdw(*# z?t561?N-BZk*9;*GLERqv02cwXwBQQx}3E(ST#}T^>*X^^WkZ8hiby^mZqlCfcp!` z90dxt&1ClAQrs}|C&UkbWGXxpqAMJ zj)#8W9x@>5OlK+9n+u%&`iTWv4Cd_ib{HV!H}M3nfMrKRfYqteE_U4kOK&P}xR~2d zM$i!RwWbV~-0h+mNy7?~YwXKShy}qEs(CZvNzkxGvgnt?N{V4$49)ix6T=bF1w~%X zw_SR+dv}K=tC0a0)k2j{JZO6@c;A1|3*&p$WSPOz{woZa4`EA|8Y) z-O0A|ot>Tg+h3^1YX+%Z{z^FH?_Ym;t8w>WTBb%xi%zo8Gd4DMd~O-Lha@)#PcJ8= zxV=vDvA{<&qY6v{1X<~R2R4v{eyxBrHULs;`LE0K^J3fS0!GE3t6HV8HgL2q!}YT^MfSV^x? z9H<=ioPmF|72`rn<&2kG>d54hg*T5-rbS`|ZO-C;l#K5lz)1uTtTY-_E+quqD5 zb#^tsxt+R$Nr;|^YP1Q3C^*vFT(pbwufX9|UWMOnCP})_P9i$LK>{l{HvJpeJ-6q| zlC`i6Y2+x3)*7||9&G^tJ(h|LE|Hb?ORm;!X-=`&>tad41{ z5H!3IYUghBUqPsaK`1IYSzbw1Rp8`DG>H2WMyHB*-bJM96kU!=WcB24kY#m}w+{`n z&HGLI78eOIF_S&~v$cp5>n#y$jF3CLLQ6}(3N3Y5Z98Z|7-koIePqx% z_!RfRi6My6kM~CE^^Uu^EuzTMbkO73_%Fm)GSKvp*fqPf@wreS;({sg8*6sg*4c~a zU}y?@5;i09TVIpY$rp|+Q63m&O3LQ>ytB8LvBy_y8vUdCT4HO<&osrn|LXnQlaumE zo>yQxG{^W1&wwb{qmcy8B0}L;W>MFDqNBfb3X_hpU;)JucwT4Aln9e3C8j2pc@)@F z&~`$Pk_EYt?@+T)^M$=Fjzugr@FE4bff&Rnh3wUc>wiqi1xUO!5Z?NX>=;K2(6+XB z`=p%Irr046Qt?;N1Nt45o%8k&r&2~|^(t)|;BXyUA7JdWTc~#Xq7N3s0xMf%5196+l9BdUz7ERZz%XFf)|&7Ux= zc%ZMTkeShPA|r^2#6W1xnOwZ@W7R-x=gH1C)FLdI0aP3kY9eu|bJxFfxvsV%Cg2y9 z0zNa1AGV>tn|ucy7{^dWFDJA*@3!NYMfIjJ4Vq-93ETYe-~C+Bds7go>+F+N$jdwB zE^e&u76J>1GZ&7!-RGiD+!^#B&&(Sjj|m^lCi!F#>9#EDOTl=F|NMBVrnnwRV?4wS z>?OJlaR4ix-=k<`fg&0Ke{&paGif%0B{tos-Tioh3O*2XZV0n}=heTC1J4+XZlS|K}H*o>d!@C$ck|o#9|*K&?)a?GzZcTpbxy>-Lr@ z`MsnTzcxQJ12p;emirstS+G~26j_qdW?P{VaZj=^NyR=Ee8Vb%`Ug&nWeJ+oJfda& z4CX9lQn%1UCg3p2`x$?TAm9`G@j%&@paBUM{veH<`Xa@bG9QIHOO#kOKWw?FY4Hy& z0DguoG$B(2MqMazn)zU$-;;;ZEQv6wZ3zw*^pKy%_k9U`QZp-}NN9F;_6t%nap{fB z1gEM~<+lZg=dW1|Mx;w(5qe;g(Vi5?v`jYe04e(Z*LU)=_OPSU90_^b*00+HfW`)f zLfDYGbQ`?VtN}V0WGgCIce^2JJSPCJ%%e~VH=Cx5oK4TJCpX%>0VsYj&17S%s6y1x z@NN|6Bt=8$3N?TFhlLOSXYr3=GXV#Jv$GhM?-o3xskj_RuBBr`+4K79rMJ6-w)T`O zyRpIMb_ah+YT1~}eOO;V%4L(?Sy$C1&~tC>vr}$%Nr-lLpNFjx58OP^ z5W~vmRd8-x>gw3ot#|)@{N;HU5uX12;11Kt5BcvyU%`rG*2B%f5>p1u!K5t&(WmOs z$jn-4CuT~}{}OxIaDNo5yA%ezr+QRloKE8rbDS8YoR*`Lnk{n&`lp5ypUUOuYo$#& z!KRG7)qT_M9Sx>3xJN=$-Yyt@DUBpI572HsqeaNJ z)!T#U|LA|r)YFVrwC`0udKcR<`c*g*3qGSdo+Zi{lV{(p6V z)A0R1(f&NIpsyyT4FCJE0hvHPt0hh`&e2a&{>2&cG{Zs#?8{G_(XrGBA>8Ss>LjgX zd%L)*)F>&y+sD1rL0pe?DM9!T`8ac_!EuzEjN;;O!Dq-l3^#8(9d8h8Fb7mWtNumP zKYVewlUOWa>W(iVdVrz}V-~G6Hr=IK+$TfO@`P=t= zkTAs6s+&YtG>$vwWZm%Mr=ha}e+n4^PKn;kN;9&BMbT@-Kpi?NNmD-NG2UhmU;4_> zQQs+8KNAJ~s!ynjRqF8m$CtkQ(nulT#B1ZbVdjN<=4I8}x3B@w64MXF&d#TD6eKcO zz{#)sZ7%2MzN%h~v%|PJUnI%CSyq5 zb86kYZH{F00)rT_Z~)`zbsEqhIemLCc!^{Iw)vE?p+twu%nWcW_bAymme-O2zbiEg zH3($R-kZNOjb$cJW50e~oNMdQb8)3;ly2-!WGmUN&=pA$*bZ87Di4?~je`=V3T*PM zh4K`F!6uk8KkK4Jysy~*fLZKx!^~7!;!%w%)RIhTv2GVc5j{ajWBTL=JRl*CjKBjs<6d~OIF*5d?B5b;waw?jeLOQ#qA)Z&L|zK#JHa#t)xJ@tYCHNa%KMZ- zR&ZFqLMkyY015B`phl)d3b|hu5c1ec|6LK{*#{FApij%CBT?4c%e<%1F}r*B#tAj> z1kj=y?Q+l&Uh~RYGODUNT^%pyhlD_lWwPb+q>acG7yHfqTlwnpz~5|FTo)&LjVCC) ze|wCAfu6`>G>VmOvHo*mTZdKIJ>SE0x0Far zw}66li==>*Afbeal1is^NViByNtbjZt$-liAt5c@zd6tM^S=LiUFtda+4tVF*UYT7 zrY?0NU$3aKXvk0yuNR|glj?PxQnARlS5vj@(7GS^EUJ~Oa-7o764OHzxZp?lX)^qU z{aq3U9E25*i+_*e-hrRON0XV_)Y}3N9wZ=&w^y@WU4f7{4}Ez=2%BrN!Wj*XH z(vr-#*Q2jSa`CI>`NBlmv8&&X=*k~&k2qQbUN9#6s>|DAscSd8>NIs+{F~d5^AX{+ zLijTFqsYp|ME5I&gS(RdVkXTe1K2zOpDz(BMEJWN9DYBDVRp3mQK(y50pw=9lSEG4 z2m%_B1t19uP;i*Fx9=2(&NP0-^y~=g7*Us%(52!b1k@zemlRU!KD!n_KUBD@a}+)B>9pVz9DO@=48Sjh1D){-g`z zysIFC)jL$m6r+eVW2ao>*-v52q45~DBVRP2^wfv9zWhqsxdv60X?;EF;iHu%eDRY%~%A1tx~7|l$%g=)TYWzQ9+)D{KKGx zHzHgCu9!bc6Lq(?whpzwns#L93+R*eVn@q4?Coq{HcxqQ5g7r8n zCvY(c3JT78LY7lyJx(BWOOpN95M>7??3_4{`>n^;XT#lm?p=& zpc<%iV74ABT3h{jhl!Q-h3&3?jk7rlsykxUz@pkhiFI7&?5qzTo12*%k|LxX_UZm;`8xOoPkkdLA8e-rf9>FSdY6bSC$m5u^)tgr zF?*&I5s?an_hdfP#ubm1s2;^8x3L0kyR(XGTj6*4bL(YEe+`()6C{O)MA zq=Iya5DC%9;^iQA0|Rgtc}#k;{F?7jtR z7)qb);>Fqe9tm3g6HfQw$1Y5LRm_9rsl779Ag*h+sdLqA)O2W){ao}(_MmQBeeX}a z-krRMA45a$k6B$o`o(Fl@R}#Az5A8mziZ6h%8Lb?st~HA7*QA0xN;nxn&+pcV}w?! z7UN~$E3j&OokLda;JhTWatrZboFY^n9*5bhzrLu7TCVhrKeT5=(Y_++QA26xSr9jJ zH5a~esOTzHyalj%Y@@BGGwi%&dnj}7@_@c!{+~LvJ#56U(!G$aN}(W;G2P#I z{!d9xy5`j{#^&?`aSsB)-mZ{n;8x~qSCb3m4kAg(|Is$;Bz|;U_DCcM%dNN*L8v1hs4YlU84K=wNXgpy<6zMzh0TOW+2P`{^(#j4#hO9599T@PIw)FF#Vh7^+QW*P(k{!4^EqPHGfJI50u5)Bvo}PAjzBWVuT%E{u-=in$J{J2tjkM;if+ z3a$i_&1^m7uwqZ9KXBf8GCBq7s2?Bh`9H+N$k*4p5qN?224cey4%X0ttdZN}o8|4# z^8#dq9I93#b4@v+%n2RTYU8D50-qi;5&MKbRVi$Zr%H;;dg>*Prt#gd-U0ht1bQ2$ z6t`l8IwZLUaSazTD*+Thu4DCRS8inbC@CKep`Gp6>m0ki!*qy#WH2Nwtl`2qg4}2} z1n6$K-9!m?4jWF`&oCseo)Rhr;g7Ufa*Dd+aIvPo@;XW2NH$Y*;DQiIDg9RBENj&PS+liC6Q3(Env$H31$ZHD=Nc-dj4kwqG z#)M*fz&1^4Csp7>A;?dZ9t#T}iu8j6&B3yvpapXRJif^MZTOo|6* zR5g-7q8X1-qNLr+No>UtS1dL0mG9}(1I&l`I@LO$5wbiTL&7MFi3f)jk51iHW7%L7 zxtJmO^0CIcG#|jglaeQugA$g@T^;#fduNOHvU^ zqBL9JnV|i-9YAm-x;|RPzkgSfM1_x{j!n`sOA!t)sX>FY>_{%36-gEUm&vXD+NTV(hmg$}k zE+{C_Wi&}HPtu_RYfD#K*H$?Q$M^jvfND9TCmIh2&)$*M64?1z8zO2E1y7g(k$e;y zt3a(+JcFDgS;(7qYMkmf1lfBT;ZOI<4@`GX9Pd%m8YyiWG=nW1HZ$qko2EG|jXlJJ z<#6g|IG9sPP@f;)_f7@7AtTp6+Dpq#zpB)cb#D!bL}WE87eCWZ5;;Iw~K= z@FKJycr|5`!EHA6@rN8e|f`S<^hWg8L6VTQ0q5ehdC;xm`&gQX-$_mIT zEdTtC2f!$6oq>E#Fe|r!!e&kSn=SqvfAiq@ldTqXR${vend8=6K@Xi~ir4=clR=Ia zaTY`+ud=)_hJ=h3zgmxd{u$4_KP#(p<7&^@fy@hK8elv>U{g8{B~>v&p{VPz zQtNN2W2-`hve4X(-nNnww>)cQZZN?DG>DYJh6APU9BDs{r-eEno9}j3#Kkwph`sYhLIK6hBk)TDL%9bVmmSnlKGhp=xZEGi z(Z`8)M=XEWWaYvdCUjtC8`gd#5n|8-uMWI@LVz5!_5)q6JgdNNFJtcQRm;sGeVs0^ zIHl{q$5Ed>+6_54EQMn;1?|v?k!lxWc=EmzN;dAb<5SlWd_Y558GE6vaNgK z#?nb@+S-s{ss`YYskqVH?vVoi(u2xmR#$#P3pTldXfh%VF6iHqasD+Z3&iWKv)9s< z0`65%OH0esT9SuqBMUvmp4tGs#htS))x{|{CWwnxP+v!P*f@&Hw#3{@Z4D+yN9S!E zK9A2{jjv?@_rm=JoM33&fj}V_+OrcA6G?)BfgsrfJroeh4YbG@brHcgz_w+y#)w-F ziIz4u-BOTh63R~AH%&49i5n8iH#gWq=pQ~;{m*)2O>pS0I;=6+f zV%%1}GUTiCs3eS^U=z#F?aaDW*7U|^hG5eXL77>=>k)S=S?v zv{m*6M;rbOKBMWDX(w=lxbAkG2)k{uy+cMpnpYtZ!$w2iMD*oVC?%0GgWRv4UoY`` zEntFj73XPBY#pvCJ7PtJJcQ9OJ0PSt8B2hut^DQu@)B9sQkC z`Sd_rM@Fvs;d`b3D&e)l>%SixlkJ~i-l~bmjpnqm5A%c8iFEH{wcJ1PPjemWw+)(4 zmqM+*)J4ak^0nVJZEN?po&ERV)BKn1kKLut6c_hJA`dz(jkDigd}IjpI(#YkCAsJO z%;#F7hjJ)H8rhwl8)SYcs7Idv^v^c((oeT*Bz<_1N0b=;M!e)}lr}LTH1fWBf55^i zM-UP@?iZz92m}*0ErpviI({^0)bCDWXNIw+eW8Zv%arDV1mXdJC_!|zE~FuiF}5vN z2^sOyujXGp;k?7TgF5Fcjf%NHtjwD;dxbw==0{_=q*-pLN)iC7ku1eel5}bAYQ|Uj zQJsD7Uc6xRJQtIH^Tu*PTcG3t;hj(NpqSJvFbzRj-qMF7dgT@z^6Mf5?@sOsMS1KA zdzKHd3k3574mrUadFViCXTJGQ5FOc9z5IVl;QfM-#PzDPb{tsX?a>GqJHFUh%CX|y zp{Q-eZEUr@>=F=*{c=FYD1d~39nF}t-Gr}i+z%2?lSbpL4qX&?07-?UN6tdxXN9N|2J))rveZ^OFs=f?pT z4h8{iLyRFmqPDz3wes`zOyd)D5k-xqFx)d^wv{@Hv}Mgd%6sK!FDVu7toe^Rt`Cym=_$QL8p6+A2Egj*v-8TM0Vb9xp z#4E_34U5_?qj%PzfK+q%PyCjpq%@lSr)i|xa#AhsA88Iv2Y)6XX@|rEG6Fbbg~o zP#F1aPam0>^$@u%LXWBX1X{x*kAZ74|9Z z*4B<+WTz{$)7N-9hlQN3t^t+~r3ThC=w1c*;YME|0^D$x{K9&^cc^ti470NR)wwHf zsRym@c+7^#D7397CZs++I8V18Ka>K$)YEHsairT1@G$U@#Y_ zU*DPO0hDBWtsvh?wW)FuFKqep&rDw*P9h19TzX{n7IJD(OpdZet!VUj##u>uQW{8j z86S-tZtHSC^J!|@SOc9}i0c7)hSgm@TTUIu(24{ojwRcd5TU~z?sgN^=4ZO5)|9#% zOuTnIeLhwMZ{YE*sCTRyPvde0X?Er`JBhmit8D82yDJ&v;(QzEFc4kY<-Z24#=qPC z9p9pJ6CfhjS(HF?&t$?ZV>%1XXfss&uHi*08yaq*vUKtJ#@${3RYVZfNdb?YAFJs9{X&H%?g6S>|E zAcg#2)@p$*3yDoS1R8r{`*P9@K(de?#QR|HgH1*ypoh}O70?+*p;fWcq#gA{2C4xY z=!`h%h#I2_EPx|_8#q8|Dxc5Ik9j!c7|aCQ z=bFw7dXBfx$BMnK4h^FdxXrcYNG1QP6+vs09uxa6-q5WTt$vhUS`#ul^~ptNj+Z)$puvr=a2_IO@%GGsY`?E_;l z>n*7V3~+Bp7vCdL_Weyh6mtxapeAcUDd5 z(o#|hL6(0n&kh>l`uYBSBCDVjiMvD%y*!$WS$# z_m9_3kH11CfBRRpE)Y=(-i-D9W4Pwewx zY~V)>RNOXj>WcIPL8^+046P&y!w(QauxVajYNc@NEgn#-36g!UCtke@H{cg#LtxnW@n#{IT!6$o^&haPRGC*m_;t=VY#XxHBf5v?5c-pFJqFqx{3DCWP zra1j*p>iiN1Fgcy!k%dp9Gv2Fj>l3ywBhg8GfHEyG-kFZD}(ewT(l60&cw`=Gi$qR zrkJljjM}+WF2&?$I^sST?r4cy>2O#}q_3%+;s@z_m(zea8C;?~A z^4Fsr;O5E(29)5PtgXEP5(A*^2@4A^?CeB%Itk1Ku&wUQ_yXY6jy_n+bTGeiJ_?|a z(#-SssjU@8IA4T>v~_l(6A}^v%>D?{g68JtGjVYShj7H#O_a;-Ufp{cXhikf@PBfH zjh#whN5X;wV;^DUi)+atx1VcecUjxaQQ=x?B$(yy3}Mn*H%cN+W*x|oli*H^1PK=? z1lD%_fgV-2OM4buE_BN1%I|35Ri{tU%=&sFmj@^ybD&bk_a%4vw`@(i{X&{#YMsKe^0q{iQqN1X9b}a`| z7vbfe3Ep9Fh=8B3h=m_;_fdxHLF(hil_}T!fEjFNz0=Is{_JHV#YPZ8S~dJJdBU*`sipOCRF2IY-K%K zAP-a@M+*}MxddwJ!_+AK%EM5npPx4Co@*EWjjx1rFnEVJE5Dx$30c_dQW&T(y~~qW z(T<2aqMxCLc?irft6O8jzebhgHrfC zM~fw!+>R?B5<;xm-yf#%k!qt@`0ZIk26ZHEhd#z$$h^G& zr6*ex<$gKJe!_Mpye3i_smS=+AJOpyt;fPa!1$}oRF-rjfkn#uiIR$3FD(2-;vVsK7;hPs z_%rnak}RZH*gbBgjajyBDU$P5YcrtfhTKJ5Mn)}*?c0-4sSIut_mf~36Y)?I|AMqH z(tZjmslv#tta&qTSTb0+fax$9H^952 z-!J&pBOvwHW|_%Eplrq@BPaJBQn2SAvQ&$oeWmQUrX+9&Wv(rMN!;HSrG3HT_3a{epS-XcKA( z{(R4Y)1+Q)^RsTb`>f+tHtt^j;6wyc13re)uwYj6DN0TG%Y#?BGG^(p_D>pIGn~$tVkqw|-5*GA2`Lyr>q~ZtuVm|E`#WCRrfclUK3(q5##CZ7%DGakk1Av% z)e-1M&u@Yx_Qc8{7)4%NyZ+r)&knc2#A`v#@$UyE$QQl?KK7kBZyKBjn;zqsBD=CO z<9y>bI4pfn`z^|T9Eu?i-H%BN&e?M@>5#NFMhU@km={dBg)CD*n(?GrtnrY9%P`+t z5h&TVlU&9|gSRFtAMr9W$w^m2w`RidWP#H|(D=*P(Hz}1b8t`mSe9}%yAKd>F^ ze>XQ?y_}iAgWqoQ3h$}VvXZJs90!*Hxmi~o&_>P7p(X2eeEV`AQ|u@%O=v7Tq?voO zVRzwp`!X$u=;TMr!`ON#p4?xa`P)h*6&4XVZq&b+j2$fir!Qb?^{3lSWKpVwXNp!{ z#1|`M3!`420*s3PN$aR(v7+bu;(Xiu7Ek6E4+f8@f$MVE%s41XI9=Ua5Zq&&nVEUn z^aA~^rY3Fj!9Lrzk5vHa9lsPbO z$-{vPja5{1sH7ju(v~I9XO{sRPn#2hX0EE=C!quPge>7_EneaUx%=VhF9k83DDnKY zi}HnfqnRZ%S|JqS6c-yDmFA++yT!J}_%N%Y(`b;gLRQ5^DT}2s6vu(?hp~~<*m923 zmoVB;e`bhz0uit@?Zj0pbRD%L#_K)Odj zaE{ZXF1exX0XY{yRT*IRUa9)BgF*1Gs%al)Uq!|Os<5!%yQEn?oEj);UQ}LZ=*?#e zH)YFygc&d7#X~%=+ZebbNdP#eMO#R&Q=B0XB* zW?o#Vi&$PZtLbWPs_l{AVpT=VVrBm{|ZA&rleA9^$!B0)Be#9#0$Oh4~W552* zw|xqU=koS8F4`wgRe9`OX+IVa_@#&k5@qcf@QXvc|;O+1anJvX~b7$?27pc&BdeT3|DBMWC+U#13OW&YNWz{v{($@>J8EH*XHr z=~YenDA#92ktPWIQ|vpTa}(0=5~R5Te#o@$c>mq0rYnlVUexu@n6|c%{WK}16RlF+ zb6{!+SGX2fo_S(|Ni>m1h|%FW$<*Yw!8~W=LA=C0xxnoI2eI#mp)`XkV_+~ch!B*4 z^jc1%3%RDk{#zkiUpJI@!@wrf+%Z=sIP1scZ4^|~0qP`igVMf}KZ$Pi!^L;d(4`$5 zB-AxYMa10>GpxQS9Db`<@^~=NfF7Sgt-QmP!LM4G(x?Yr2F&hD!K1J z$64ZRTUIj&uj#`Upbx|_1h|hSu8$3zv4fB z2mt{_(mhbLa$76R-R@I4B3#}<$B%)Di3t+kvhwoG7oDL9(y_C%GpYPv0dR-b)r^DWm>Cmx&(KAU+2Z`K%yUl)%YptAx9*PVO z361?E0R!bP-E?0#`Vsm77)CzVDcak!10vbPH){$6&HP5`BdCFB%f1Cf&_Hvvpp^_dS7CYuJP!nQXKo1>7AY0 znU7C+4QpE=JE;`%@k4#LgLkmzSFqZS7vLg{02?teD0%7zv_9bMjssZc-HAS&>0$$+ zqT*sYhXjy|@!YxdYFcOB;(Xe6=nE#-Gqj^k+2t-^eaSsqJK>U-wwvt27_SwsZTN>6 zIskI=N}--x>QXMkTT}740;Efeh-lF_S$WRt7td)Rp@Z;#yJ~{A5qx9cKVJ|WV!F8f zJ)_5^XwQCZ^0t_@P&Yp#@!xEN&~{TETcAu#Y`KnhDhUY^*aQ_l`xcs=%`}4fRa?1q zm4q}-G?sJ;A#4ojD}Q;etE?+UfAxS%Qc@COIB=E$Qs0iE;!JJM(@RHiW@*APu`6q4 z1S3H{YjQdHKk)QM!0uUFnQiUZZkEe5sIl3H@exT9QSoGg*14?NxY0rX`|O3)T-~tp zr>~Kg{{B@0*J>`hC$Mq!Co9}+dOo16wxgJ z`1-v5U7JzpE-nKOF(>D%IYVCMW;+HvYAk4Uzomgdo~s_z(*rQ2ha0BER1sp)cmDi1 z%+5a3?D+}2dBL&Q&cUJ22x&OOxA{l4mDY}`UNEL29g#-<@2?;{YyD(vvD*j`xzgjz z0T^qlhKA>O15@8NhZ~&f!Bhtn(=3>loS+AKq-{Dc(bT(G{njmNxTZAi(ZBDv65@F% z(AB|0=-&O;c6)tfEG#U!7inQ%?mlmDW~HY`Qdb`=!n|`&W`5+PpSMoXfMFN`v8fOd zG&`|iYqY=05i})dmj}IXrmM;1?d7!_kbfds(%;6C)zHZ*z_hbxZ=1Glkp=;_!>%+8 zHKPp<|E((r42=H7wn24uLpm`^F|mK{PVJh&;WPbSX8I#IJX?YY#|7nq6kgday&Sd~ z4ehj7lQHGXUFP|hNdt!)=j27PtOq8?2+b)@v{oL7>5@dWjqeTgLGRRc`C|>3>x&ee za|{ubx%d2{@VP<0;RoYT6jYEUjKO~L7F6A>Xm((JGg~k}UYH2|=@J^Y3gU*L-MYIiua}=Mx#~6x-K#w%n+AT$wtDZgp5_hgoMPR&%^gk40vj0MSZ=%Uyw{>T; zPbBzG;4m^Vp=n>C?A_bP!Qn%B)sbkd#<1@z{td<-CDqlnX{oo} zTw~6A725Wv@F8<(e`u8gVrNBc1J^$tLqqD0AiPC(Ki{uO*BAqsr-s_t4?R<$L-m8O zKu=?SxzW~`;HOUTqyJv~+TdmmOQllwQ|)+2>wZ|Moioh7<8o z9)6%*?rJmkZYwNp|MdkluBWH#(!Dv#fPwZi5TeP80UC+%sy8jJg~(N-f*%rj zsdJO<0F#P;W}b!CCp%>xbw)^XD=qq9OGzQ0S&+PjiK5%y0q!sAtC(?|dEUdU|JR78 zqTv0jT3dk_T0xq_@nmGn+UlA5KsiwA#_}2Sk4_7SwQDeIR#1O||83r+Gl3S{{QY0iXF7G-ywbs{^8S9C%gbxlz z?zHe26_rL9HWjc|=oVqU?3Phf^cpO40a$_A+SYEr<@3Gar8&qau4UY>>H~C%8LbhY zxVR*LWnJf>Pq(?WCvfrETfn?e4pfbVKfAB)3sqa~QM1XbD)^)beGA2yT}m5&=7ogm!_M z7nHfL?>`v(P>5wpg}C@Yz^$VLg2cE?SD@F?1{wL_CD;zg z(IR#s&f?<2PDvuiAn=>XUd`09hmxSZvM_urRN(fpwG~NVfJ`QMskZpja*#xbJ{r^LzQ5~~*K=%B<-3VWk z`(8?YwB<%C|F4ya(SuS_-z*Q+pDFM2H9BJ4?!szaPE5%(IPsa|TpoX#Q#NZu$=4-J z5%f*>`ar3ybr|}UMKxupLSMkBx_Z^&!Qj6;N&bw_Y|jxpebT zcnKt+!MOZD>z`CXLK2wOC>=tA6U*Wm&QO@JDTBp8+c$D6kYH3-o<;4q`$s&Q0$q0+ z3F_nR{@vT;JRk~?Oyp`SP`RB}RlORHz4mIo)TafdBak2mP646h#F);_c^QYk%nCi? zOYN@eo6$K%F~Iy(nHL{%vSPCxoD3`u878 zcnVh*Mik)TLx*?jK2!z*@%=2*e;Vx=+e5Llb*VF~{4<{~0R`_rg^l6bL^kPfDfh9l zu%Is3f7sUEZZbqaQT5onjf{~3`WY)L4}yYxl}6XA<$Ag|5Fvz0N@8(DS0?a>+>xw0Rp5l zSf<#VoK2cKu`K5{8Q-jrOjc^<4liTS}FD>Pj#=aG#h*N5kg5(P7wKz4taw<}~d><=T4PVaFN z6SMOqpwoyXEd|bdpx#{OJ*=9m;T5#T7!s)SGSrjxp1?-p1Ku+SNP)INAYo)4*ma^MCN@L|2d6R#QLGLM zwe@s;1gjB4@21{@(JCve!2xHuR-xn_T{G|Emyx5KOgKZZ(ma& zcWMDRd8acE#b=*-cx>OV^kC9NA@xyAUT|ppk(_4Rp`@(*@<&q8>Cw2Vo{qsAQQCE6 zYC?V--_BaYSo_rbz+U=5VMLiHyTQo#XC{J%?=97jWYpy3p@tfE2jMrA{(%X{TVjbY zcQ3;iRlmuJyXnIR%55isb>~P5q%fb}giev^)tS|wuE%w2`G$4>dTCVC2}&DLE{>%? zQZb+6t-Q&F4T_f7zqKK*%H0;5os)C#_3!QM?3EYO>d5luM-%?$;!2|hZH*T@1~@Wu zasw!?u4N{^t~X6KpV_@!X5a6Xdbd4Xi#y)Bo`Rfu!|D2LWqW=wyIrQ9)cy)%L8G5B z%kBM~%f)uAUla&1B9`kM!yNk%ed6)BeN@+nljYPI76nx)Gxt>+^B(jGFE8ZT>K%Q~q^tk%=wLUEt_2x9FH{<=<=Q1x(tHC{?TP!Lj zNA>Sjju}sp93OeKS5Ka9mI7htw}<1ROyxI|)4ipnf*vcx?rs~Yqyx2PTg4Pou_xsp zYOYN&7PZtZSp(SGn=&#BOJR$D5}^dXIIIj+PJuu7cxsU(&ao;gm7ODOTlO)U{64I2 z$xc6zvhIHY^zzj^l9x!H=WG}8al+{Ink+63e0Jj{&w-3eH63x_NnTTI(>F_p08iO ze#byxR8NT`%6RdF=-UHZ81Jfr!4*xCtF*4k!ln!9eJcBh4-4(MKXsKtdxwP`Sv)T9 zRoT2PC^q)Ie_6iLmCQJ1pPv?ka`#cf@zWKq95NzyA>g^$HwgH8NV>6quZ|?5p`rP| zCn3LM&2Qm(T{oGlUB^G;Ncg+tZF7r@{epxX+-W%MHbUrLhtY)Z%HQJn`I+`awZimG zWyEhoSlQ(sZ^}rz>4z_`Am~m=Kb7FrU`R_3<=~2)F@@6+df$lt_=G9$Ce@#iJ8_yR zd;RfOjjgf6+fVFXhvi7?sAea-gy&_dN+Bpj?6<_u4)dYf2Gu>}{(o0FlNBt807WHa zv*k#~$mrlysEJ-uk8{0yvyhYc<90MAEno7tlEz^)mg;TK7KHNAeY~WRhIHj%#;Mj& z5becI%RFq4%N)e1R~H~4xI-TFwiMHA-!$&$#4&U$BTq7mgM)i|x%$oe-L~$5heqwb zf?oaaxVcwzGjAqE>{=TnY@3z|RvTuE4oxLCeT^byl?rw2q9t$NmB0J~AM4*JHdq4o zXLo*ns`*|)i+b#OPli9?2un4kDg%OQvxJq-=Mt)r%RZTQ&cnqCx zd)zcx7Bb#d2+xphaQcpkUfv(Je}Y{3oaY&mwvqeKAWM1@VV-UcFNTK)o!?tY37vIv za&qi9i=FNEObDv4NQVl7$v>49J^HG{?e9G28VhrIPeq?YtC`W<42s}-?-F+OPle@w`GXTa1|fA%!8hxT+oa!%ZG`qOb+G%99efB4d4{Qj z8aSS2yjbpfdb+_%Bax_?_g{p@T^+c8VI{7ur`H42s3c)~{>`zg@P0BBIphUleJKg3 zPQ5(cb3xoVc4d+|pW*VoOpG_*aTc&>Ep178*NnhHlA0~oz2mEEYXVloOmkk#_~bnL zGD+qd_t~&8^Wl>PyEA*st+$a;%jVn%xhjL>_z{t&)-bn6OE1ZG8^)<2f`DH2o7?*O z`jEEU!MN0s?8mWLcfx{$<34a3m`n-A-scn=C*^6`V4)PFygp5y zNy&6_?q@?;@?k!M`f_qiL=KLsMEsuhlLgve0w1#e8}x49m3*YEqQV3Pd&o*isHmQ~ z-6CiIfH+2mJg0{vlDv}c?b}WVla}ex2?%JHGPa#GZWMK zeq8<*t!@|R}fuwu=o`aE5v+sl72{BzuWH;S> z>-(#{bjz!ghsd0LKQU5PD}G3P=FBKGngC# zKPs)Lh>M?}9|?=VX?0pKJrsaTjKtn`|4Ph77D_&avW)+x-RpZ=F%H zd_4?Hn5ZrBqoeQP(RyI(8oA~S{|gQ7xy>yu{u$0mjMa!m%;(P${qJcbv@o%d`OAya z%eL=Uy`4@gETQT>TT8#mlUN-HuwP!V^%iLBq2nwJBV|RLQL#%tk3(X(I@jJ(cLS)9 zT>BC!@x9{N%jpgu+9Zng`Dt7x6aA5|8eedDn-0Z*#7{7@A}=S0Vg~PI#(npSS}ZB> zEg?!E%KIBTZHY3h{uKYWH|-yVu44;Jo6oaVqL82=0kuyW=T^?rxS?A_(m_Kx;lUq| zB=C0=jlFsw(RpGS2EA=TK3p7Z!%U*sF(}_Yd1%+V2=ne1_ZB;@)ewg^1Iz%v(>Txk zZ1Xdj-bJnXx3+-#qp4)D+3%S&x}9k^>LBbN6jUaH%z1pB>h!TG(P z5s&Lgc!^2pu_sZe7JdEt)NXwg*QOTP2}YmC$*Uf#&ka6c@tJh^lG2XX*|B zN*$IH!u{3?v$9O)8qX%2s28jUW+e1Skjdh&H6}w(mO$V0v@)K=S1*@^R_2hvtEZwCi?FAnmPZB zjYhveW^|8~ z+U<4tUdS~@ZX-^T_4i;GYD@G5YlpaAm{ax%%sy`ZXeU4t&WRMggg{*3f%pufcS8HZ zt@X(}g1Q$SequIqv%Esxy+ur{x;xk8`6(YZn$OYBETCC7#L4Kp^U1!>3$hAfuEO;i zuWzq?W2BVqHDOaIbOf#r!UL6ljEu~4J+ROl^K1R8MR1*r--yq(a((e=6A5B&D#GBq z_U8ImD++wr2)!9=!Vx`0(Yq27b6?1#qtkMlDE8waY73-1xbF>aJcr**O-;p4W-5Od z>Z148qbBtlTXrd-b)npY zxuQAPy_NHspol@Fp8w0E`3`xC=TB8CDG)Ch%#>Zu{*3qhQ0b@`=%~g-e(ys>kE<7G z{_}ga!1~xWBdy0CGO%yNcWzp40?=_y2Gd@+p*V~oPL5Kk5hU8nk?!L>P(cA-Za6~H zY6HD=o8P;}RuT+svJh!Lw8CvF5C9-MBf|$;D)*o)0GGY<@JnLiUl6C+VUW-f`={lJ za+byZ59r7#MLl$g4Q>9LElGUZLu5JZ^3sC$UUVM6@v#ojht!lXmCnfXlq?VFO33*(|m%3 z2E-{KBb>3(Djzj~%k+Om5~$B%L7NJ`W@97|)x|?f9rC>@8ki{wJ=Pe=iJ@%{GDWYG zo1`=c{Cp+xaMWyfRvlMAz*D<(>XR;9;={D>mV_9A_65lw?T@evs;S(2`TtlsRC``=FrnSu?Y6R zQXf!xCZRML;=OysB%h7xw8dx1ZSW08(U~z1QLT%c`o{2p-0N!eL;{MXwJR~oSmzzI zCEzH2{!kQR*pl=55Cb`nq08{eF&dlsXavnrcF0$BMomM+Fb^B7)KL1EJsP<_IBZq$?2;( zz#f3<^J)qT7!A(5s~{jlh(x`w57MFd9)EcFuI2pZ4@LeHWDzI4A%A%_*#N8@l>%MD z`uBbYHv7e%Ha0wtFvWZ6J3AALO-DtReH{lXK}2leTgzWr@|+6c!Fga4+84ph$e65QzFYP}KEs07 z;Wgqmpt{%2Mb`2!^yKZy_H_69FTyf!Z;~OhU{sO)=?FQYGSWnA{)o!ZTvY?`(^!TW zt(1|=3u~VJ`}b2?mj!9qFdzCyiMvBEdC(#(?W=s#eb`(1!Oy=R*g}tBP?0CqZi@9n zMgPLLaTGq+=#~rwM123(Omly#+Ibsj<=y!jHI55D_#P-?sP7h6j05O1Fe485_jp8| zsF%hJcImmfx%pxtmaxk_dq!0==Y|P?fifrVr2e>@BQn|muKAfbzj$c9_y5F4=yB%y12R+?Av(?cHvP`)t-w__X!Jg zwRy2lADEa_XkLf{S|({(Q<~jjYaEZ_v6m&Qtu{h}2_%5~xR-Mv?dMV8TF*n->Tq?Q zMMaJMiP$Y0q3ld{G^qK#Vf8-{0 z28U}3VH-B~?(nx!CU*_7c`uo%6zI9SAc-X2l=Ak};vK7>_39HXc}WDcrZe#4gU;As z?W-$O@{9nj%Ex2o-*=l_78x@H2-Qn~P%QOlBBiOTZ*2WC^TyfpwJ`BpQRW4^F zKuW4H2w0bj)*&e=*6IMN_)OM&{x7JoS6Hg50?~A3_kqN_Pd*`n_in+D;>?Uk z0RjKs5w%w18%+kcg~Ttt=d1+KfEoc(GW zE4f4_|65fJLowsV;lqF!#PX((f6_~tG$-mc@6Qmb-` z#7j=~J}wUV#f98Uc&g>i%ul2xUG|+<{bKLKla}=D+RxYQ+N5O_vJAk3{?U;Z28zr5 ztkT!c(pTrwF9pBNGXGqWZp$Yt`ve%d8k)D@z5{$O58)pCnzKFqBhM&bQ}o%FFK<&m z1GIxjljcn1Z?Z{wc7G41{>{lxTzkp0$#<6C8Hy?0ZI^fQ>eZ{=0@#`yp+E|T$>(PD z?M{WFog!l=Yw|}HThjjdP6c&TPrkn1xGN9yrw9(`odm=;ulG9funC?Lt8nl*(sRJ^ z0rrku=bi?&+8h1??Y45@TFigN3F4&PZofx(?R%QFffx?`vZr!J+OZ_h%Bre!D}bm3 z9Wre)+~#laYerOJ`s|iw{focTD$>b8*Bq9z*5^Vm%!ih|uYkv!tKC*VFWYrc%<(Xu z4#R7I=ti3!(sEB1AkoSlvwmySMl;w)Mn;eT;E!iaC&fq!FQQ^(#NA}nnbZ*<)#6 zb7n%|MXY;_Qu>7ELQ z2qkw}yaDB2Ofxm{JY+y2bJOp}*y-ya!3Ik1a~v-VNNo>)F;YQ3fND} z1{`DNJgG6^Q|CEMe?KCX`y=XWY8ceJ9zEjs)i5+Xn#(#9iLFUaEPscr?Y;eKYh&?1 z$_;Nds0w&$ljBWayuiQH)^=#DP*YR)_xCS#Y(D2>W*fLOs2+S2b?HF)`*6Q%3nTsY zKW|RZ5?cW4=3h>x-({*;KnlV*r5Uv80@npEGBSZ!4cL_#DK@zu?9hD$UiI}aBN7vasM3P%lx=Vt0F&D!%!BQB*hr3*#rgm2Kg=%fe)bhP{2N zv3c!F%$63v^|3I6eI|yE<#f*T=Vrg?I-SG44<$pVhumX%uVo9-unXJTxEa1s@%p?g zvJ|-~lEDM(t7q0VkW#Ll452_nv9$ey{!1!2%#L`j9>26JZ!O(!g0Ks9-0sr2cyUXn65Vil z0tbCZk)z1im6FoNJ0tIh6o#UmJYuu4<;Y-4@OPMAj@sJtS+BBpd+Z(Fp@)e^sY$o} z1I4=k=o!C7_9^LUj{~#+cg*wtpNQ_$bl5&}ESCcK_lr0>wuipr7wXow?3b)V5>l zLfS+ye)ZY;L*dI!Nxml@c8@0JbLqtGM6={L5+H2Sad_5jECEeRpM3FAZyvRYrxvOq z&z^OgyJP83!I_+z6mZmz$9<)4Lvy-? zfETj3VqzDP8DK8X+9oVBFW!CGGPp|`9VA;;+k}-ep8HOea*|SwTfXP>%lw(;+jy_B z@5tr0l>Qn5sQw(h-*nwgcX!;uz`nC*?RRXMcls?(2E6cbwieJQ=#TGIYz%JZe|Wu@ zNn2PDbS9<*>0*QqmOpQNOxEh>r}DW7oNyWuPip z9R7e^%Zj5q{o~~<^3>K8FT>}4lX=z^(Z;etZhr4}rtYSeEzR3FOiTP0yqks+r z@iAntZn<~=P9`0+v39)sg(-ABxNLS67w?-JYpSnUATHzlR99?ww~0w)kkSEWPR>@1_~Fz!O;3%WC}e#vq`3rlq|;kBWp2skQo7&r{!}H9mg+ zMap##;?_P62r!%O)^NxvAd_`#abpvQ0p-E=?K-!1b>%qilic3h>+v!{eFo+4K<9i@ z>B7YHScGn$F!F?R3e$S~P1(3gwCdeY<0|Xta|Sy~r53 zN&dsn7flR;eqvZ-a{fXqZ;Hz|fbmOhU7F0ij{N_FWM`sEXXsATur$?Uy^}-LT=C~ePV~+;RyGi zPDOWbjo#wcR+^{6OC5B45-M!E>GgBS%#q(w;T3-{yI?8z9jc949?)=3{BZ|uv!aNk z3A@6W?{7|2>0hL`{>H~l-fw1bIdx*&y?ZM5lR34Va<*JhO@lW<>Sk20*J0cU#(pq9 zUTdxe>n__lITQ3R3R{1pW@hX+F#z5rincPOT5NZ@MfjDIXU{%U^Hg3F2ZT2I=aZM1 z6*u)>$BWHrln}kp@<_KFRUB~nW{_q^4Rq0Js?!s1!_3XCg>Uxg>E{3ogWn0d58K-f zfvjI^O5Vd^?BOt@go;p5j*gz5Pz2}X>>lI!BXcMqPD31c;vlK54yo+>cPsq=ahhg z!po`<0b){OcGV;7j{ETgkXj+6BDxnP$DIaero8p0_gRVUIUb%-?$5%!n?8hpxkCKIwxz1?}`?fRF9qmuTx_lPP z)a5zkZA^?s>#qzxpKRE&S%;0nu)4BxFCX7~{R+r1n{(Mt28sPORarx~S|{}NW~oJZ z@e4tdwv9zSAf-fp>AEhLkl?|CdxeGRk1$i>-Ctg9lLd)~IR=u}&Ek;atDx6@Y_WSv zt_vXxKeOzLzOipTNPP9WnA;_K#>D|__Qlj2iyZ9i<*BBn`l%*FY1&&W*VX@R$}%J- z#%r98!+G?#6{4Ssk+272=ytFOHsQuBAw3M37xFQ_Nl;VolazeGE*hzmpu>0LZ_+8e zDMGm2kCwN8rT1E6L9y?w++Pzfo#*)1for(EWo`X^I7QHles>3uC)$!$h@< zeBV*o)Lr`O7&Lg7=1K{0m-8}LRN|tms;m2AZg*OgKY59CZZZz?Jt*{enzz=FNhTQO zv)3yvihzY2Z_5fo?XoJf@c2;V+q)R4VSC8&14=Wi_n3zxoFc6nS*K7@Sb)m0a(yvq zpIjDirl;snR#w-w22+z=VojU!L(zkZn``n=5UlSu#Kynn<;$0f(?xf!JM-8oa(3-x zIImC^x?DtIn5+%%s~5CzL%M}VVY!x;?DgBRp6rv~>Qj3Kl zi(W)*Fc6L4s5a(`JM7a3UN`$&JbhzPU7iQ?%%!b(nEG(oijp2lFBfo)aOeEsn?>Tug?)xxvZgePc^*0ZJXhR{AMFL5L?0}x( zhEMW!@`{MNykyo^kNZkf9>g=%){WY+d}%Z>g=qaV*BM?>^N_JQL_2UPT?!S5^`J3U zX6h{DDcI!Zc0F4B@Wmctu{zhvoK4~On7MB^A%~)AVFH`dWimUau&iPS8u9Bo6t-Dy zSz7_tB@kfUuQ)0$tGz$VtN)&BUZ}P1D!30+dR2O3DE7p_4dK4O5tYNSPcg!M`$Zjpzh&DNuc1Za%>wlE@z-pgog2 zP~d4fZ(g(WvzK}cj+wd}s0Y*1I#c|xV@cX|dRV(}Veao6K9iOdrWs2r{qMYLwX6Y% z{gokc6Lk22jGd*{ar@^%Vl>gAEhrW z&zfK#@ACec0ze{eZoKU_S=+*t5m~Lnw^;?pe*X$lNEh?RifQ-pmelvCo{qrR8|(0p zI-j(qGn%%(wpM8&OI%rv2`2rDdg3L%M64dmj?Ir)=xk>K)A;Fv)S`HB`bl#C==ryA zyI;ARlrzYCG-t@N2#{?5$+=eY>+HU*s`5j`NqKtHX!^3T>gxKaT6SStkh&oHB#L&g zZ!LlIwQ{en7=upryIbnJ&Fjf14gi!2nLM7jE!P1o$cB9-pN>yzJ&9jPFw99;)7$LY zd^!7AuA{%=8Si^_a{n!76P|B9zJ2>%rTpPB5ICITuMdUEY&$sT@cT^jg6snZ&i?1k>qE+eK^6l2E%mf@iJX%k>8!6Lc zy!p>TK3K|!f;rgS%)HjL;8e(7;l$xFG^LQG*rX+8`JO+dcA2qeAies5slkd2Hl;*A zh~y-Axg+l0u~|GR6gJNY@x;69jc*&5COfw|4MqM568Cm`?f-%|f0kuArs3T_Wu6bN zOUM3#Qq{b5i#*Jk$G)=k+{JFkrvrZUbynZ~Sqii+U<+Ulzv9BlVQ5bZlVR5%F-_bd zGDdp)j^4FD_@Uwr2aox_*v&bIx4c$c&|Mble#;cpLJpNZZ{wsf0ULv6-7X=)ssC5B zNbcw$N{MZGjEd?RmfP-(r>UJfeVV}Q$)gI;6I*W$pen6kPEXfsMPbQQf03$Tm!Li2g%G`>^rjInUNCJ8c*;K!&n*kl00#y^#+r z?J0eTN4{^k;T;*&Ymo@TVQZ8kD1(b<&%)POy#(|KI$h}zTCe!YoA{gPmJW#d--ohViM_1mJ870oKyWL@zDH^TZ z+zz9qwSZJWz_SqVc9IQmmz6k7ffq>A`1Z1+DMwNC+M0wYy3<^Kh@_#i zr4N}9EHe0gvBOplV-h!*&^GYB1!o0u&d7_P^^N%sV`HzaBO~IrhDEtM6!s4@z?ffI z|In#k#@!Aqg?)8bp>pcAHd!$L2-y5h%seN)4Gdpr&z?Pspao3wdkua8cgNNyi)$q>M}Z>tqdE#>1ohi>X^EeZ-v6_tBk=2IOv(Ub1=4u#&1ef!9Jdr@-3npm{p2^mPi=7zgP=ijmajQxNeMJ!x_T6OG?OVwGtyJm`Vg(0u%Ok|!y4hr*m&S1) zLB~M@5iN7`VvnQqcZXgddIbgL@3wo%t5*WMO`;GT_#BW5we5DCttEiD?#wk*2p&vL zo$xI>`+8$4`5;voS%{AeQH?hlxxWOZP9)ub z(Vi0mZMI3qz&kk7G@rxJPyS$Zm1Aw}>`tt;jNTMW0byXJ#Jn)1=Wo`>Y;nHxFwd$rWf7#`J|cib)I1Pi&Y_ z=}%S7&kRnF#PiQj#>XB{P06AOmOPG6$pL}dl=m6ak4(yQpMxOv4+#&aoSQS}|6`wX zX}0=M;Zg(iWn@Xlh1}tZ+s@Vo8M!?V4@ZmJmT#MLN6KS9v}LsI!&4qz=&$ggxF(!p z)n&cfs}d5~bh*$b>QjG{B3JzOk&%~P^LPrL1qVOsTe@7_{-wTVZqj*q>2IRTgl5CB z;0#|1W)_}yXO3H=REP4f+H!Ypp*!rA-LT-qZtLeaCoIC-duaC3=+w=0&!j_kjHywg zdPu!<4+CpvEGwc+5*^wxmVkc6%Lvh2!8*5US#Ds3(K+wXlea0 z@06+v<3?}yr-xcUoUt7H(-(AeEHwHGKKIf`=bNs>`!LF4+OpaXNcKlV1@@)RpoZHf zZI_4tevTq4l`Td0IgI>m?8seK8mbr1Cv$1w7Zr04D|cPJs5qr)lm9#;2wy{4acQr# zoo%LBPRFaSpu2g+Y{kWztc#kYb9KSC(qWA*rsezlb2a6=-xj)qe&8o^9NEYUcCc!er(3dc$VJfQ z-hAZ0Bq}c-0r1n*po_AKG&e0Orbmu*=il(?)7?^$-}>BHk_8{(Uetj+dJe(UKA zs(s0V%JtR^7I(H@Q~5I%af#aG42W4nC)cRO4MI(y!@=6`S8*Ck@+WtEg7>RY zOqm;aQ+84=P}mlcr~9^4*glYB<$QUf{#8d+ZLI~2TGM`;uN>(xE=I}UwMEsdutcurU+4NVa6^YP;pjUQ_F$}KJx&+V}PWO}^WF_IP?V#o_@R%)B5@2#pyUZWw0NA>iLBeT|t2v+Vs|g$H}I zIkYgJAF3s(Yd`rI_8fiz{eqjcmJv4uqsYC|2){9ZqRtkpg<`mpMSjun+V3s!ttc)X z9X|lA$pAQhg31RVgJC;oh!w7v!i_#0l0*y#@eOG`|M9FZs<)A&Q15U6-T#iGf`~v* z^Uk`R3F7UGUDw9jV-69YdsMEASEzY-Uz4dE=!W>eUwx_GThk3>?)p??x(GtZ5bAvu z!VvGni)p9;LTsN^)IY$PZ)(5}xkDV38{8A;*jWUbxGGGcc|uWS(k6?EM!!E_4hL9> zwNZ+0zp`FgVHsDM3i28HVa4Ym@Jg6|-;zD@!N)~Z$MQOTn7V|#BUNkW{U4z{p?XE7 zx#zjt3cZzu^^z55wi*Fe$mtCbmUo@r3#5u~pXp)XUIJeeu6!e*l(oQ>R#8=@b~%p4 z=Z}-NV0H2cXz`Mbb$2bdB(pLh+*tp8CmuYDh^U0fq^hz~e#RAAP^IL7o<}9evxm4V zD}BD+tQE@f$9W(q`f(DjJ;Y+5|T9adUdzS_)vjoA;9P- z+@8vXYw0Z6oY_14W6zLT;eJ|VAm;7z=JTot^#j8H~yoFY8b@d1aL&hgmpP~mx zxlCxL#lT_pK%7!G;gSKz2!8vpkX|y^GX>GhG)&6Y+n*~gnH3M%WRKJC<7BaU1{ce)jsE^AR5^|szj>B}8UrXP<()!mG`wFE^G#S

t-9E?o!9o_@9JI4T;Ld5YR!r}Q;yD_fv+^No4oufFy4>C?UV0d;ceEaY@I2hE{6 z!w9@^8j+>SS`4*%xJw3^k~=*7qXWD|RRRzjHC;^0FFN%?(09Te4?LjK*WZ{vtC<;` z(~LPRlL~#dAOdr>%F^HZ2zy@Z*i(I@3X>lwB{?c29;qRE?AHPRM_bjicn1Q}Rcse` zJkahyn>WvH-M%w|g#8W$K_YAeJnmacGY^@L{^s;Ptt!Z?!w!M5giR}h^{UR^-|-~t zBd=n;Hy$Y=2F%legx_tfb!(W@LVH&Ht_F`cnhU)RG{!WSK z$!Fj{awG<~ZCQCA{0EuHKuph&BJ8=>r7VC=L!BA|P1y3@VqUp4BxxOSWs zI#6SEx7nRBTC#dYp4C>k0rb{B=LW?-uQ?rBpWnZK^Cq*hD9nQ2B^P_0%#(kw+wqV5 z-*7wVo6^kRczcInl*a}L(ctapvy!W}ZZ>L9dv6XI8-rJt4^+mG6K3Wl@Ea!Gc^t}EABeU>tMdDz(QSBH)a zS^x8)xNwpqSW-|(h_0flA}?&YZs5ni5od9^rr#@D==??+_Z@CcxemS#i}8gYEziBg z6j_b=0`Ajx?b#Bxi`;vwf?kTyzDB+dp~BEP?BzajsYmV5sq7AS*wEATKDXOu#K;P6 zwXE?u?7SA?S7`vGMP1N7ryH6=t(fixwKG3X+Wk+Md2MfT&>hX5cBeL1&ptL51y*Pw z?m5-lJgt^#2{PL5|0GErL`U9@`MM(?T9=n*5ZB97`Z)SN@zI{AitFx^<1ZKKv9fY+ zB1ucXD875BEZveKhg4(20i9G&X`emULu^Srkhcn6DSc4ZBcJGVh4iHkza@?%=iURi zSLL@+**PxO%E3D3x$|Pb2s*vE9cAT_7^}tni{d*J?w3z+p*ZU728uJ%{ zsv2osR3XD{c|Y0ibjGdoLSjw)_0Er1zR5zPurqawE6wzQ#~Qn)?fm?n4>!*!0?Q_5 ze1o7B#%VY2wgGinRl3MzcHc#K5zGzVNu)Ta;s#oZVWv3GJ2;HFpMJHV$AG=>WySP| zmL#qRXGB*!aK(Q?w>G`8YCl{1!E9x^r}OI-0M6RV>kOHD+><0%j&=u)=rfY(rX^j! z_wdNAaaZoom%j1}j%1w}$7v43_reBvhhQ_{14qrwc#&jd0d5?pZsXURdgV{ueUn6p zN}qxJ#@ZVT{^>noGMv??dxF)tKUitk2jp-oZprGPdAh5ZN%^RXib-rpWeX_eO3r>f zIA5DIEko(WrjsXd05AWmP9dQ1K-PPGw-fSMOn}z|3|`h|`nrp7k@f{enYh!Srq=wJvSWXxvW*(n9`b~K zH8whY>wx?TJKdh+$Ja#f9pp8`#e-B_1=s_WsNcVTKa2kcK_oaS%%E|?iK?54zU2^M zo1U2h2V`0Qs`l6WYI(;4lv!;bblzWsIk@!ovAd7}22{)niQIe0?Pu&QGo*Yeb8a;u zAbK9pN3>~r`fK;wA(4v{S;dc6}+GkWM+$w0`42GkiLOKKf-gh#>iBCrSGUqSf`}%)xH@nDUC7RC-yXT)a7X%TQm#1jt zHe!LN1kATt8>R1KpPe;-8z_rz7nu>7*vVXPM5_OQ6t!~WO6Na_4?x6pnZ4|L$Wt;D zTMBe%zKNrnnb(RBkEGQ{2(;9ghTA!jdz55WXAu7Uc?s5}_IS!GWp8eAhHScwhb!kD zeF5j$In^oD64Hi8KdUq$gw)bvgv`2ru=cV;beqpc(Fp1KDe?j`{)V_yx~L9MdwFd< zO7et1g-_<@UxpQrWDuk4BCnOq`yMuh6VAhAo2xt`hSx}*!nR;l3_*HA zxw40zG)Xqui)lAU<(VI%@edPiyR$ZvmYpwZiG2q&du?A(5L7NP@^y(tXSH}deC}+^ zrO&>L^^*n)0(V#qqXHo-JQUV#K6;+jLvbzDk14npHD^BqJCB`X?dFuXxXq=RAmS^# zPvtW`p*rc>kj|I6en5Hsi{Bj#4Qm`%iBpV_v*X4ODB8RzrUz9Px0oEjc*6J4pn`{E z(`cQ}aq9V_cjok5{3|+qE2uGpr8=?gea?!^*gHGKF{O{8n6$^qjCE#QN(M$Nad9XV zg;@l(A<}vR(duyjiLskL%y=G8Le+PTv-`z)jqnnu`eNk`Q=PZp49O>qR04^|@_|!M z_fxs6EiY@cavye0Y8OXd9Wi3Pi(Z!PmY)G| zaKCTP{Kt#ysL^R0Z-^LB1SvC~cv#}Sd3kMUQl-vvWq!LLr3gKu31}FlQbB4~v6=f|^Y`;eITs`S}FeZLCZdq%nOnAG_!)j1rm ztgfE*KF+H%i7lm1euJHXL7^eM5EvJtaH_?msz|8EUNB&VTWDfx4zFFz;pr*w6L4d! zU>@M%g)EW6m9(Uqu6aJ*e^H2k5D{*yHtZ$*Ti{kS_r5%-c1SS0v)3~9 zRg`8s*iU>#H51=`A}$VWh2T3g^E1pkS+*vA&yX?jv%ph8A@Z?NR} z(rNYe70V-k1NUsq%XzpeX6Car_nsK@FcIP~{7GG%9--jGk4ALf4%aT3Aa3nVyrGgB zlqtOouI(wqZuTMP>XPHG8+V`=a9wvs8TDtGSx}U?8`+;OoEhkRu5c0ck`d| zEAU)*HRC0ybd?{$;ss_J`3(#8D&8^?%WZ4R- zG4FupG4i!BV*rZcH+C3$<=Cxrkvt-B9!sH_aCFLW$Z747ml2OW|Dn%u{a*Ejql=SD z+5dh76GN9kHwC zR0+Tyo`J+q<#{$Pt{R{i+K9d;gQac|kfs^3dX8?%>|pUHr*p_*?3M?B=5O}%wMI5N z_m7vpeyW)5%xR?JfpXAYR{G}PrZ+vyR$^Nic-9voN{cWT$M&vUtoo!^ONZU&4q_%M zoDF5biLj3M0S^XK^t|{kt?uW@mbdd`DTV16)+s5e<>?Y<*Hu7VfeLQ-XbkkBW}xZy z)%A?L!yFM{aptX7j6TljJA}*{ca$Y|kD@DrD|isWLfyvwz+juwpQ&C(6FTvyK=T2K zH4&m+EKk>87r^`#3)b5avfJy8A7-i#?LMVle?UH)0t{4~TF~Sid|g0aQU>$A@~a&G zd<;&AI-eM(SF0KqLF_FRsM#h9+N{fRH#eSFIeSCJ$-0^!G_|Rvp|KzP3yufWJjksO zeEp6#f1)Iv`?X~)bLX9*Ge9r(+Z#E8&0*8sDKqNwJY+Tv59T7 z6(nbY+)8v24EpeGb)-q>m06AG=yt5F&4N}jGYfE*XPE*18|-L{JmS@^H=gc@jwmVB z@M64w|9;+Lr#m<-m2PT?1p?ddT6AbFPEOqEeUw%vb&O>>q=JX1y0=UjMh9}|{A)RM z*)VHIvheVr#E5d>dWc7akRzEzewHw&$@@pgu;)hll{-21;GI;iyQ==k5l$Ar%q(jo zdEKq?*J&@tKtxjhHLS@Lw)121ffRBZQgxHgqzJ@7 zI|_D)KPF4Gtjd~oX@}AxwWtw z^CQs?X`VbOG+6WS(2A+S8=}ki$=Dv;NQ^}dW22dyO?xPxp3!KKeswF6%rma(A z@wH(x!AX9t>7)9LBiBQ4P|Yshnl6WprOVS>B`toO2QU2*Ox50a*W)*YkUAk^#9-`6 z9i*H*I>>85+?ovacP9sZEc?m_Kjh!IQ1#@S`=XKcx0u-cFMRv=hqkx3`_!CL(GnF9 z7-|l%xQt_RA`?Bsj)+q+C=B`kxZV&#v6dMXpx#21QX;Io>1T&dWZ8;aGSo!rt(gz@ zU!~l5i=8Y) zK7vZ!@pI>pO=Eb653L-cQxv`%7y^#;edo1cc9B$~vHxj!r9ppICLx2bWeIhn4hFA}?i^n?e&>FcGa}A0x{zn*IP&HV3#g@3 zBnDCj0VO{e10PB&m7d$#_S%?f&d#{Cz_++lQAfC{`zHwK%!MfZ?*@@AslO( znhZEo-=EuWEamtpI>!YfWl-Dd+S(PFHc%N|2jvV{vvi>6hzlxcBw=PxWM1~I@a-hk z^q)9>LO>jo&I&V46#^4RW;Rv_+gq1r&T4M`suD+ql^M*sF!j*1w0kJlbne>l(9Nwr zy1;EWP8=^8H@^_N+qFS*Pj={!(Ak{1U*uPcvQ)W&fGt`fB0NT>%S1~y`;`Hr32qL zy)x3%v*-UFQ9ljujxojPou5K`s@fv)8x674oBU)m*NYli_8p@1?B5@UCOjZlosiXrsk7PZJoG#@8jcVyYB`eM!?N5 zdDcGKwWfZ3=JqJ#w3IltKGZ7C#2G@Qxgs1-+db@)`{Ly9bf^5FcL`kEJNFadXpmD};nii>-gBl3Xe+B8m1o+KxskBNK0btdFi!0~ma%H+9CY*kg zuU_TWA6$Wa7^cj1mckgjf8`-6CzH+Ev*U?vj+Ti#4&P*M&g5ldrVXCK%Gz2!m}!v@ z9;?T=I3bl#Bxif?AhX?uVPO_5Y;2gnCxVwGQS$^+c6nMEX{4u{H1LLOTrPfC*@BkX-!(~BKtF@V z_S?2jPmakP+UL(tyI-6}&W5=`TG7Z&za0~1TotuIE+}P0gU!-Fm~d5WGaOet^f@g_ zAC^YX-k*0Mjd}fHDO^&r`;kER@=%YR_ua2IdrIgvu3lqNH~}JwB}GLA=^8~$$`RUP zo6Fh}(p5=MUWB0`drep1y^G;P-7#jI6}~TDs7pvFzdPpo>RQiv!=nSN%2OLV=;z8m zT^N)xpSYxJGTj&S=B*sxN$7;np5kGdsZ!-2!UZ?ir&q@K?KV9ZL$yN9GHis!D_Q{I z0jS5*;R`W=d;26L)Cc(apNEF30)n~l>3mPLQ{BvUjh8Q!;ZH-(fR3&%B)0p7gaWW{ z>%2R;EoGJN{0G_aYQeN5JGGz^AXQmiC1o5@ltaGi6QaBpA>iU?49@S!TbE_vVU%k( zNw;{q3v)C=tyeTd{>?I*^sScI?&{{pD*}$3E@e_C3{7CSwA)HDZ4km;)nBE%G*e-* zCb8v{QNAqryMgB#V&~qJW}JskOUkN_5R)=;ubJ<<&Vfcb6b^!s-w7cV#h;e%+&1^J zOk9$e+FhYw$otg}ZaqEY`zIc1Iuw7KqA45TwUVPEsf4&_>(uT>)`eBccOy$Mk>0ObR6MPKqiR=2jT$&AS#mF{>^50`y$R&M4{|k=V zJwGbb3k}ar@w%eQ`~Q-leE7NVbWhK!0MQjJ&ZM!O1^^iDwb+j`Ru5ed0P zx}-T1NH z=muxRC7wY6i(2q^KfvQXsj6|Iw9jP|r(L41b_=YmdjG?VAtuA^Ac(8;Km-_C zT0&DNvcz9zZH#U+9}Mz1R2({-n@rnIMZ{jQc%yt8{l7bF?l5cHlnl5bJ?Wbh zQnZ|gf5x`4v$JF8hAT(X*lU?DA)%#tfj*+UgjKA2SNHZ#k6B_j&X0(F!3P{9Z+Y-Y z5nsgS&?`g>DQn-jA&Yar_j*Pe@-zL(DQVy%xCtaTuzH>%wdJvc4rC+06PtW+a^Go~ zOc@xA6upQHv;caoNGeu=;}fmqyN|2)yUvf!FIRNIHMnzFGEl*LH61I>L;v z`DAx>?zUzf6?$5Im~-qdeYsX+9;8HI&e#%;4E(`HLgZm0#K^4eF1a03cD9c#sXNKP~!S`%# znC$Lze@Dz#Td6ST-4YVEsHv8H;yRTII!1HHG#?~_K{yjtGgaVUIRb^E{|o<=LRrrA zfB$L%)D5|IsC8sOJwvPk!n~f|%5{Xxi^V?gyCb{!SaVNThoSv3IjCq^Ad37iwn93$ zaPzPivn#-uJd6)5+9c~DwL0f;$DMmuin?WLS^rq8DHO1Tb z=b%#Cr@TJLic_v1=Q;2>;DlE|dW_9(M!{eF===8@(Ax7@g;E*f6x=i17|(P$Gva72 zT-=5(Ef$bUM&ELVjt}*WwDLwaRrL+~q{D9Bdqm8Zt8|9rg_cbO}VyplQ1 z^IMf)mYWPZX~`?=lOJC|Aw*Ol+ntug6_;MOd}{b2h?4Qk4Ynl*m~V*wl_T=M|d$sMlo(RMtXm&Is zr5_=XrB8kmU!OfQW?M56g#{jG1X{2z-_ebA{ z%DWJVzb>5Ei<<>1}jFNbRhuUayKE?Yf6n^DJo?bQA zgr^S?Q_hG*fx*?d-K*7muR(;O_^+~$ODU3m?)%k?H=ZUuurX(36EHF8>XTn?cdGAT z;FSCxq!4Bd#%utt(9!|A;!Iky6TS~3_Egz+bC}Sj`lP1Xzw%nyde~)7iIIeXn1_NS=!nY-)JVBI1&6ftFlcbc?|F}4ebl;5(y5S0sCtswUGH;Ha z|9G+1Iw5bvZ40AV?q~nXsq6VhDyI#@#rU@@cT;BY;*J}-i!yL-Uy_r8nu(z@>X5jw z@Zgz3WufR{g!^~k`FoCC5?$_6{Dce{5jPA{w!+~s1rynYP5b-Q(lnE(>M1&hLiLRJ z(Ha2J`%#~RP!f+BY9daHIjFClN@cAlVDIaWw3O2R0i}9Om#JsfRy>B6C&Wnt0uMi3 zNPOkU_U85L?%V52?f>Me9hti4 zue>qD$};l|rGp^bv19P+iJMV9;WWQNqZxTs$HnN@xvGmgi|5M%&K=DqJQ5gp0bkK} z%%sgCd~Q(vy6Ke75#_{pR&BGk4qr9F6}}@B+4LVPX?gOrfv4i>3#ymG1Ti^KfRHZV ztEstV-F8MrMHp(k}^VyMO>|H68Ea!w+65eUrE~d=_)xrkpmR4_9LM zFr+tBYoPs}*ehS(E3ZA%AEG@|zB@%1;~%jZ(~DFSigRQ^5rh9&y*DmiXy1%wna#ME z`){`PM#biamEW@?Q__Wr7d%7@#CRQ_WSXF#g}W4-iLOkJ^UVy=#0Wa+)p1-^tF($*wO$^8Fbl#Lm(=f?K4cfGkX4G9>w z$PP5#-al}C6Aqi%$!|QVE)zl`!ZdA@l)sBS(qjWHM2j+SW8G3hCdlJOtzhDJ7v#S3 z^XD$62J>kXuOeDGZM(_BWH{Qi;;(!QL`VuN)ZNpcyn#ZXIXQJ>G^a>EuUacK$fDzT zMPM3|9A*i)5XSel5uxyERbamGq>#GR%5y2QXPddWEeTOpcApkf0!IJHL)pGxW`3`|OlN%gw&KjqatQa9upmC(iYz@H zX3+rQL2oaOxq+1LJEK6Sb}s89S?BAf(%Oh$4{ByjCwr zo+f{UoSJ1M8a!53YNS$~tghEHz&2M!&2g(No!^ucv-sDVOW>gz_nmvK@d-Z%UA`d# zig7A$mNATN+uVXfrf4b*PSNt5K9m5hCZCiftgp@1D=swm?bs3Ro%F+9S!>T)w$DOQ zV^OWg#i@<6yz{q*BQ1>NXvC~Zl9_1v}g?7c^}jw0&dLHXGKN!H{Ja3!pQ?wDYJN0^7 zeyALrJ{Z^-hD-bee}0_h zy9?y`z#|(c>~g)mk5_vg^UpMtiF?y#01pesks-=vL)nQibJlC059YlE^mk{5r2Jnec!KQ6R{ag3Ohu z)tu^;!l46tbzaYGvONdLpP3GWyZg;-_Ugz|+~I32>3qn|5D1WeMcnYzBtTcnd0fIf zD{_Ly$Aw>lUq?-A1&xM?Q6A=V>!V^mO{iKg{kckCT~nj@x2|h5EY0Wf&E%X11YcBB zgERfQi#NFmRvke>5k`jFn z`Rw=3{;_S%zgmW7Ne=rufu$S}5n-rKN8|=(ynh)HyvsyZkv6lDSHknMXc+3lp32~^ z!K~|z{G|1{Mpj{V5D`eldM(^t{g;Qnjr+&ivhuUAuyRaXT}G?=->PS_j(`7t27N16 zV(Ub;%}0K*CTdV62T*lsQ|SPz6G3j%=4#>Qf6_$Q7P%B%r@wQpo0Bu5mjn*ckmF

oeQxRAGU1F~El$1fDnbe_CV2NyNuhng?VMp>S4+k8qe_War+tD`gGP7ALu zZc&7|DTULJm!FL{qzn{ofh7Y!Dh65~+wjDhmRdg9DG`Y{ch+&$;E<0Wucc=MEh%VZ zhzdgSGCn>Y!VMMo0ETT_p(sJXfDdw?iq3dFkzuY_#;9J)29zoQ>4^u0NPL1c>#cc3 zAYudRBW36-(tLbLL4)$8>Y916L$BNe%b)Is2iyHuA2Pm0j0@IOKK1o&ih6{fy!B-( zyZij;e0bs!G6;lGlsgd^^j21WXt#HYBpwdb<*3+NoStqUEs9>d!1Ivh(sYls-Q*Z& zXyKqsRA^vIfuxmE-I4m=b2~|f#~%8>U?duxL49_H-83^Z{5Df)aY{34BVQf`Kll8O z`JcQyPKXmcW}82Mk=~E}pEg3c2 zaziBZ9-X@>#xAu6!Yc&M@T*py^`*=?iML$rv(8RJbfkU zySiOs-R3K#K9g0})sZa3O$^vk#l&Om9mXQmTemGx2KL?bCCP<-eHOTYq0becTLO^3!pxhkRdzT1Zx(dBuRR|18_VCly7$ zR+ce)SQOle3R$vxz)wR=!tNso9be3|1|MP|IMP_LLs7&Q=&_+g85{Y86p0kbDfNN8 z+Gmn9m&&p9Xe`ON?UVNC2yg#tdEN*4 z7F5%O5E^|Rq#j`nvJ=7=lhn`uu2Nkkk`E!&#TIp#3~87%IGD&!9o@rIeks5vo|%Vd zs!{Wb7zc{DI7o#^Ul%XxY}bsw<~O_MkzwZAbmeD)?jwdnz%Bo~r8$N_6T_ERX4D{h z(5>j+++a%1rl4UEA5#DE9FsQ@S)<{#KEIo5=y;xT>9lBYFxv=*e*tCMkBbQ;>sOM2 z6y}KB`qgqjH8s`T`$&NIG5;1C=egm8nHBkJ#a%D&)go zql5p2l0B(Q)Rz#5Lgf%OK5pmpEuX8Rd|)LEq16qzNXkQo9&~gyvWYLHOqU&XKd*Id zJ~;QTTbeUgRpst=0dvcjoVGrfVE;#nP%RrMh5D zDQYQ7YZALQjJ0)25Opw$D6zy+ORU{&9n(%oMba_W*3Mxp(+p~vpw=>$hC~~shoU%` zv_|KC&%bfb^Fw}muPfK}yzleA&vW13@8>HnDfw zqif`!TC(H1?XZEp1a0`nwekYI@Gx=S>h9XcW8`ep7Iy>r)N zQjSEC2KS=~GWT|zhgqATDMXyK2Ypa@7PAN%ex33+c{+izdC>eM%kTCSDg^!9P03I zyZa1S^zqn^&L~BXmSIH|pVm?4>U*B@zTj%(zuYIAPh|DYAdWXCUXh)cu(!x~_|TWz z3V9jBnN8t72I-SY5CPtotLcK+)iyVCj>@?n$q>%*m|t)SolW{79kdO3O7)N^1#ZMebqYqp-tB>p>vh~fjT8`Hu|e$KuD-Bw0;J0jLk z6-!J0swomxhdTT~$%F>Gp9E8GMQM3CLQ(|05(dO1&SXdJS$kKYLD-P9_e-5{ZDkz%uzs*SE&+RV`6hW&G1C@C5fga&|0(EEfBF@aK(7q4&a6{lwvU8h+OQbNv)|P5N%V07BlF~!hp|&GBOJ>(FQ}zXE36*8baig&5 zsSiS*(O}?Pt7;9Zl*~Vr%Az%8p=X)Fv~iP%G>3{aW-*n7lNE$<*W5Mk9LvhoW#qx1 zAn=AT?3W|?CsW@BLxZRFRd0P(M zxgItfVVM=8o*3Tagc`V?Blu+z)ioFsqbZ*mg5|N2y?w{b3`J1H<9bjcB8!szg?`9! z|G*(O_eQS<3xNrD9%t4O34Bv%S!Z!p)m2owsy=wO*M~BoaSsvGC?e<8auVo(m{_>5;w*zkN_xw>v3q7ta79Kg2~b)EaF$=PUA&d1E?I6ZzT35=5FXM3#a(Kz z6Wie|w`5%D_Sd;-X!817jbo+I=yfPnqBYf?$1)66Up{6?*j2eRu5#|&{`nuOTlfz1 z3qii^%M)W7AJS+A!EWWvVHd5~lQob#9j{}w)3WMnM(Ju>(wdh+9|mA2%t;1J`1zZH zNNR0Nw`k*>hS{8{chPO^)oXR!a4WkzqKmwuqB4_RLps0nO?Q3BV3Q^Qg+o!cE zqnCV+iXVZPbX&XgRma7o_jh)YNb`QVJmEu9M%QOOn=fde3VogLTk_py5d}~=S;LFj z_GBI{a9D#h8zl52KV|K8fY9;O;6DaWQsIYIY>|wwC2?~LD@YvE5q?_lI_d%62kaax zIoUb;p=HmKlNx^{ueB{!k#7W)gAFMZxeG9W?t*y&AR?%LpFk!9#x*}=3Bs_=MD8>) l)WFa3-|_#8{s-qtkiz}-z9Ie6i@OJ4*jZn})n4+w{Wmt~&d&e< diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_basic.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_basic.png index 259ec8d487269ad52d4479a18943b895132ddc9e..06cbf300a1ce5eac2143369a17824690984c8e7e 100644 GIT binary patch literal 22683 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 diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed.png index 19f703fdeb3a515dde9a07e125aabd2987c05749..89d646b0fcd215ab38e93cc6c0fe6887806e4f89 100644 GIT binary patch literal 23740 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 Ib4q9e0FPl{r~m)} literal 23715 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 cJT3e4e~E)Lzopr0Io*@?*IS* diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_layout_attribute.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_layout_attribute.png index c074d6298e391a5875a827bf43f9d7a9e1b8eb36..ed7d14a4f881140a91d880d4c49847dcee35f2b3 100644 GIT binary patch literal 18111 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 F{{ygKr8)or literal 8845 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 Ib4q9e0FPl{r~m)} literal 23715 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 cJT3e4e~E)Lzopr0Io*@?*IS* diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png new file mode 100644 index 0000000000000000000000000000000000000000..f8183bf82dc24f85a5cf4f094489bdab98bedfbd GIT binary patch literal 19296 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 literal 0 HcmV?d00001 diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index ad7a64dab..b80776d3d 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -94,7 +94,6 @@ def test_edit_children(self): graph_artist = ax.get_children()[0] dots = graph_artist.get_vertices() dots.set_facecolor("blue") - dots.radius *= 0.5 @image_comparison(baseline_images=["graph_basic"], remove_text=True) def test_gh_587(self): From de52768804f3af27face29120b2e8d59d75164b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 May 2023 14:02:21 +0000 Subject: [PATCH 074/681] build(deps): bump pypa/cibuildwheel from 2.12.3 to 2.13.0 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.12.3 to 2.13.0. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.12.3...v2.13.0) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36babc937..93d6d40fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" @@ -38,7 +38,7 @@ jobs: CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -63,7 +63,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -88,7 +88,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -155,7 +155,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -242,7 +242,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From d1e21a0b188a44c3d618f1c10c288394c242b420 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 31 May 2023 21:17:19 +1000 Subject: [PATCH 075/681] Update edges upon vertex size change --- src/igraph/drawing/matplotlib/edge.py | 2 +- src/igraph/drawing/matplotlib/graph.py | 106 +++++++++++++----- src/igraph/drawing/matplotlib/polygon.py | 2 +- src/igraph/drawing/matplotlib/vertex.py | 84 +++++++++++++- .../test_graph/graph_edit_children.png | Bin 22431 -> 22535 bytes tests/drawing/matplotlib/test_graph.py | 3 +- 6 files changed, 165 insertions(+), 32 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index f557964af..d54bb0935 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -13,7 +13,7 @@ FakeModule, ) -__all__ = ("MatplotlibEdgeDrawer",) +__all__ = ("MatplotlibEdgeDrawer", "EdgeCollection") mpl, plt = find_matplotlib() try: diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index ea09440f5..cc693de37 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -23,18 +23,16 @@ from .edge import MatplotlibEdgeDrawer, EdgeCollection from .polygon import HullCollection from .utils import find_matplotlib -from .vertex import MatplotlibVertexDrawer +from .vertex import MatplotlibVertexDrawer, VertexCollection __all__ = ("MatplotlibGraphDrawer",) mpl, plt = find_matplotlib() try: Artist = mpl.artist.Artist - PatchCollection = mpl.collections.PatchCollection IdentityTransform = mpl.transforms.IdentityTransform except AttributeError: Artist = FakeModule - PatchCollection = FakeModule IdentityTransform = FakeModule ##################################################################### @@ -158,8 +156,8 @@ def __init__( ): super().__init__() self.graph = graph - self.vertex_drawer_factory = vertex_drawer_factory - self.edge_drawer_factory = edge_drawer_factory + self._vertex_drawer_factory = vertex_drawer_factory + self._edge_drawer_factory = edge_drawer_factory self.kwds = kwds self.kwds["mark_groups"] = mark_groups self.kwds["palette"] = palette @@ -262,7 +260,7 @@ def get_datalim(self): mins = np.min(layout, axis=0).astype(float) maxs = np.max(layout, axis=0).astype(float) - # NOTE: unlike other Collections, the vertices are a vanilla class: + # NOTE: unlike other Collections, the vertices are basically a # PatchCollection with an offset transform using transData. Therefore, # care should be taken if one wants to include it here if self._vertices is not None: @@ -298,8 +296,10 @@ def _draw_vertex_labels(self): kwds = self.kwds layout = self.kwds["layout"] - vertex_builder = self.vertex_builder - vertex_order = self.vertex_order + vertex_builder = self._vertex_builder + vertex_order = self._vertex_order + + self._vertex_labels = [] # Construct the iterator that we will use to draw the vertex labels if vertex_order is None: @@ -351,10 +351,12 @@ def _draw_vertex_labels(self): def _draw_edge_labels(self): graph = self.graph kwds = self.kwds - vertex_builder = self.vertex_builder - edge_builder = self.edge_builder - edge_drawer = self.edge_drawer - edge_order = self.edge_order or range(self.graph.ecount()) + vertex_builder = self._vertex_builder + edge_builder = self._edge_builder + edge_drawer = self._edge_drawer + edge_order = self._edge_order or range(self.graph.ecount()) + + self._edge_labels = [] labels = kwds.get("edge_label", None) if labels is None: @@ -404,7 +406,7 @@ def _draw_edge_labels(self): zorder=3, **text_kwds, ) - self._vertex_labels.append(art) + self._edge_labels.append(art) def _draw_groups(self): """Draw the highlighted vertex groups, if requested""" @@ -418,7 +420,7 @@ def _draw_groups(self): kwds = self.kwds palette = self.kwds["palette"] layout = self.kwds["layout"] - vertex_builder = self.vertex_builder + vertex_builder = self._vertex_builder # Figure out what to do with mark_groups in order to be able to # iterate over it and get memberlist-color pairs @@ -506,9 +508,9 @@ def _draw_vertices(self): """Draw the vertices""" graph = self.graph layout = self.kwds["layout"] - vertex_drawer = self.vertex_drawer - vertex_builder = self.vertex_builder - vertex_order = self.vertex_order + vertex_drawer = self._vertex_drawer + vertex_builder = self._vertex_builder + vertex_order = self._vertex_order vs = graph.vs if vertex_order is None: @@ -525,7 +527,8 @@ def _draw_vertices(self): art = vertex_drawer.draw(visual_vertex, vertex, coords) patches.append(art) offsets.append(list(coords)) - art = PatchCollection( + + art = VertexCollection( patches, offsets=offsets, offset_transform=self.axes.transData, @@ -537,10 +540,10 @@ def _draw_vertices(self): def _draw_edges(self): """Draw the edges""" graph = self.graph - vertex_builder = self.vertex_builder - edge_drawer = self.edge_drawer - edge_builder = self.edge_builder - edge_order = self.edge_order + vertex_builder = self._vertex_builder + edge_drawer = self._edge_drawer + edge_builder = self._edge_builder + edge_order = self._edge_order es = graph.es if edge_order is None: @@ -606,18 +609,24 @@ def _reprocess(self): kwds = self.kwds # Construct the vertex, edge and label drawers - self.vertex_drawer = self.vertex_drawer_factory(self.axes, palette, layout) - self.edge_drawer = self.edge_drawer_factory(self.axes, palette) + if not hasattr(self, "_vertex_drawer"): + self._vertex_drawer = self._vertex_drawer_factory(self.axes, palette, layout) + if not hasattr(self, "_edge_drawer"): + self._edge_drawer = self._edge_drawer_factory(self.axes, palette) # Construct the visual vertex/edge builders based on the specifications # provided by the vertex_drawer and the edge_drawer - self.vertex_builder = self.vertex_drawer.VisualVertexBuilder(graph.vs, kwds) - self.edge_builder = self.edge_drawer.VisualEdgeBuilder(graph.es, kwds) + if not hasattr(self, "_vertex_builder"): + self._vertex_builder = self._vertex_drawer.VisualVertexBuilder( + graph.vs, kwds) + if not hasattr(self, "_edge_builder"): + self._edge_builder = self._edge_drawer.VisualEdgeBuilder( + graph.es, kwds) # Determine the order in which we will draw the vertices and edges # These methods come from AbstractGraphDrawer - self.vertex_order = self._determine_vertex_order(graph, kwds) - self.edge_order = self._determine_edge_order(graph, kwds) + self._vertex_order = self._determine_vertex_order(graph, kwds) + self._edge_order = self._determine_edge_order(graph, kwds) self._draw_groups() self._draw_vertices() @@ -625,6 +634,47 @@ def _reprocess(self): self._draw_vertex_labels() self._draw_edge_labels() + # When the vertices change size, one has to redraw the edges to match + # the boundary of the marker. Unless one has granular control over exactly + # what edges to redraw, it's simpler to just redraw the whole thing. That + # requires adapting the vertex_builder (already done in VertexCollection) + # and then redrawing the container artist. + def vertex_size_callback(artist): + sizes = artist.get_sizes() + for size, vb in zip(sizes, self._vertex_builder): + vb.size = size + self._reprocess() + + # Callbacks for other vertex properties, to ensure they are in sync + # with vertex_builder. + # NOTE: no need to reprocess here because it does not affect other + # parts of the container artist (e.g. edges) + def stale_callback(artist): + # If the stale state emerges from other properties, we can salvage + # the other artists but we have to update the vertex builder anyway + # in case a _reprocess is triggered by something else. + prop_pairs = ( + ("edgecolor", "frame_color"), + ("facecolor", "color"), + ("linewidth", "frame_width"), + ("zorder", "zorder"), + ("sizes", "size"), + ) + for mpl_prop, ig_prop in prop_pairs: + values = getattr(artist, "get_" + mpl_prop)() + try: + iter(values) + except TypeError: + values = [values] * len(artist.get_paths()) + for value, visual_vertex in zip(values, self._vertex_builder): + setattr(visual_vertex, ig_prop, value) + + # If the size is stale, one needs to redraw everything + if artist._stale_size: + self._reprocess() + + self._vertices._stale_callback_post = stale_callback + # Forward mpl properties to children # TODO sort out all of the things that need to be forwarded for child in self.get_children(): diff --git a/src/igraph/drawing/matplotlib/polygon.py b/src/igraph/drawing/matplotlib/polygon.py index c014e9b22..b68438ada 100644 --- a/src/igraph/drawing/matplotlib/polygon.py +++ b/src/igraph/drawing/matplotlib/polygon.py @@ -12,7 +12,7 @@ try: PathCollection = mpl.collections.PathCollection except AttributeError: - PatchCollection = FakeModule + PathCollection = FakeModule class HullCollection(PathCollection): diff --git a/src/igraph/drawing/matplotlib/vertex.py b/src/igraph/drawing/matplotlib/vertex.py index e93e31949..89c874d4a 100644 --- a/src/igraph/drawing/matplotlib/vertex.py +++ b/src/igraph/drawing/matplotlib/vertex.py @@ -13,11 +13,13 @@ mpl, _ = find_matplotlib() try: IdentityTransform = mpl.transforms.IdentityTransform + PatchCollection = mpl.collections.PatchCollection except AttributeError: IdentityTransform = FakeModule + PatchCollection = FakeModule -__all__ = ("MatplotlibVertexDrawer",) +__all__ = ("MatplotlibVertexDrawer", "VertexCollection") class MatplotlibVertexDrawer(AbstractVertexDrawer): @@ -80,3 +82,83 @@ def draw(self, visual_vertex, vertex, coords): transform=IdentityTransform(), ) return art + + +class VertexCollection(PatchCollection): + """Collection of vertex patches for plotting. + + This class takes additional keyword arguments compared to PatchCollection: + + @param vertex_builder: A list of vertex builders to construct the visual + vertices. This is updated if the size of the vertices is changed. + @param size_callback: A function to be triggered after vertex sizes are + changed. Typically this redraws the edges. + """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._stale_size = False + + def get_sizes(self): + """Same as get_size.""" + return self.get_size() + + def get_size(self): + """Get vertex sizes. + + If width and height are unequal, get the largest of the two. + + @return: A list of vertex sizes. + """ + import numpy as np + + sizes = [] + for path in self.get_paths(): + bbox = path.get_extents() + mins, maxs = bbox.min, bbox.max + width, height = maxs - mins + size = max(width, height) + sizes.append(size) + return np.array(sizes) + + def set_sizes(self, sizes): + """Set vertex sizes. + + This rescales the current vertex symbol/path linearly, using this + value as the largest of width and height. + + @param sizes: A sequence of vertex sizes or a single size. + """ + paths = self._paths + try: + iter(sizes) + except TypeError: + sizes = [sizes] * len(paths) + + sizes = list(sizes) + current_sizes = self.get_sizes() + for path, cursize in zip(paths, current_sizes): + # Circular use of sizes + size = sizes.pop(0) + sizes.append(size) + # Rescale the path for this vertex + path.vertices *= size / cursize + + self._stale_size = True + self.stale = True + + def set_size(self, size): + """Set vertex size, the same for all vertices. + + @param size: A single vertex size. + """ + self.set_sizes([size] * len(self.get_paths())) + + @property + def stale(self): + return super().stale + + @stale.setter + def stale(self, val): + PatchCollection.stale.fset(self, val) + if val and hasattr(self, "_stale_callback_post"): + self._stale_callback_post(self) diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_edit_children.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_edit_children.png index 14a9122d80c3d75900e9c77d4a09d04e540763f2..eedbdeb3e6e6a0125b4bb38c61b00824d6ae87e4 100644 GIT binary patch literal 22535 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%0AL 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 t`y_ca=>NSF^#9&}`v1dgV&@c1V Date: Thu, 1 Jun 2023 11:48:04 +1000 Subject: [PATCH 076/681] New vertex sizes in docs, remaining bug with loops --- doc/examples_sphinx-gallery/articulation_points.py | 2 +- doc/examples_sphinx-gallery/betweenness.py | 2 +- doc/examples_sphinx-gallery/bipartite_matching.py | 2 +- .../bipartite_matching_maxflow.py | 2 +- doc/examples_sphinx-gallery/bridges.py | 4 ++-- doc/examples_sphinx-gallery/cluster_contraction.py | 8 ++++---- doc/examples_sphinx-gallery/configuration.py | 2 +- doc/examples_sphinx-gallery/connected_components.py | 2 +- doc/examples_sphinx-gallery/delaunay-triangulation.py | 4 ++-- doc/examples_sphinx-gallery/erdos_renyi.py | 4 ++-- doc/examples_sphinx-gallery/isomorphism.py | 2 +- doc/examples_sphinx-gallery/online_user_actions.py | 2 +- doc/examples_sphinx-gallery/quickstart.py | 2 +- doc/examples_sphinx-gallery/simplify.py | 2 +- doc/examples_sphinx-gallery/topological_sort.py | 2 +- doc/examples_sphinx-gallery/visual_style.py | 2 +- doc/examples_sphinx-gallery/visualize_cliques.py | 2 ++ doc/examples_sphinx-gallery/visualize_communities.py | 2 +- src/igraph/drawing/matplotlib/edge.py | 1 + src/igraph/drawing/matplotlib/graph.py | 9 ++++++--- 20 files changed, 32 insertions(+), 26 deletions(-) diff --git a/doc/examples_sphinx-gallery/articulation_points.py b/doc/examples_sphinx-gallery/articulation_points.py index 2b92b3704..89fb3f197 100644 --- a/doc/examples_sphinx-gallery/articulation_points.py +++ b/doc/examples_sphinx-gallery/articulation_points.py @@ -27,7 +27,7 @@ ig.plot( g, target=ax, - vertex_size=0.3, + vertex_size=30, vertex_color="lightblue", vertex_label=range(g.vcount()), vertex_frame_color = ["red" if v in articulation_points else "black" for v in g.vs], diff --git a/doc/examples_sphinx-gallery/betweenness.py b/doc/examples_sphinx-gallery/betweenness.py index a9e568e70..3e2e644a6 100644 --- a/doc/examples_sphinx-gallery/betweenness.py +++ b/doc/examples_sphinx-gallery/betweenness.py @@ -45,7 +45,7 @@ def plot_betweenness(g, vertex_betweenness, edge_betweenness, ax, cax1, cax2): # Plot graph g.vs["color"] = [cmap1(betweenness) for betweenness in scaled_vertex_betweenness] - g.vs["size"] = ig.rescale(vertex_betweenness, (0.1, 0.5)) + g.vs["size"] = ig.rescale(vertex_betweenness, (10, 50)) g.es["color"] = [cmap2(betweenness) for betweenness in scaled_edge_betweenness] g.es["width"] = ig.rescale(edge_betweenness, (0.5, 1.0)) ig.plot( diff --git a/doc/examples_sphinx-gallery/bipartite_matching.py b/doc/examples_sphinx-gallery/bipartite_matching.py index dd7885b07..ad7538fa2 100644 --- a/doc/examples_sphinx-gallery/bipartite_matching.py +++ b/doc/examples_sphinx-gallery/bipartite_matching.py @@ -45,7 +45,7 @@ g, target=ax, layout=g.layout_bipartite(), - vertex_size=0.4, + vertex_size=30, vertex_label=range(g.vcount()), vertex_color="lightblue", edge_width=[3 if e.target == matching.match_of(e.source) else 1.0 for e in g.es], diff --git a/doc/examples_sphinx-gallery/bipartite_matching_maxflow.py b/doc/examples_sphinx-gallery/bipartite_matching_maxflow.py index 6164e0e47..28b06e0b7 100644 --- a/doc/examples_sphinx-gallery/bipartite_matching_maxflow.py +++ b/doc/examples_sphinx-gallery/bipartite_matching_maxflow.py @@ -59,7 +59,7 @@ g, target=ax, layout=layout, - vertex_size=0.4, + vertex_size=30, vertex_label=range(g.vcount()), vertex_color=["lightblue" if i < 9 else "orange" for i in range(11)], edge_width=[1.0 + flow.flow[i] for i in range(g.ecount())] diff --git a/doc/examples_sphinx-gallery/bridges.py b/doc/examples_sphinx-gallery/bridges.py index ba821e88b..fb55c0b42 100644 --- a/doc/examples_sphinx-gallery/bridges.py +++ b/doc/examples_sphinx-gallery/bridges.py @@ -35,7 +35,7 @@ ig.plot( g, target=ax, - vertex_size=0.3, + vertex_size=30, vertex_color="lightblue", vertex_label=range(g.vcount()) ) @@ -69,7 +69,7 @@ ig.plot( g, target=ax, - vertex_size=0.3, + vertex_size=30, vertex_color="lightblue", vertex_label=range(g.vcount()), edge_background="#FFF0", # transparent background color diff --git a/doc/examples_sphinx-gallery/cluster_contraction.py b/doc/examples_sphinx-gallery/cluster_contraction.py index f39e71d5d..aa7cf38a7 100644 --- a/doc/examples_sphinx-gallery/cluster_contraction.py +++ b/doc/examples_sphinx-gallery/cluster_contraction.py @@ -55,7 +55,7 @@ target=ax1, mark_groups=True, palette=palette1, - vertex_size=0.1, + vertex_size=15, edge_width=0.5, ) fig1.set_size_inches(20, 20) @@ -67,8 +67,8 @@ # for each node in the original graph: layout = g.layout_kamada_kawai() g.vs["x"], g.vs["y"] = list(zip(*layout)) -g.vs["size"] = 1 -g.es["size"] = 1 +g.vs["size"] = 15 +g.es["size"] = 15 # %% # Then we can generate the cluster graph that compresses each community into a @@ -114,7 +114,7 @@ target=ax2, palette=palette1, # set a minimum size on vertex_size, otherwise vertices are too small - vertex_size=[max(0.2, size / 20) for size in cluster_graph.vs["size"]], + vertex_size=[max(20, size) for size in cluster_graph.vs["size"]], edge_color=g.es["color"], edge_width=0.8, ) diff --git a/doc/examples_sphinx-gallery/configuration.py b/doc/examples_sphinx-gallery/configuration.py index fb0c07483..ab408886d 100644 --- a/doc/examples_sphinx-gallery/configuration.py +++ b/doc/examples_sphinx-gallery/configuration.py @@ -40,7 +40,7 @@ # %% # Finally, we can plot the graph. You will notice that even though we did not # create a dedicated figure and axes, matplotlib is now used by default: -ig.plot(g, vertex_color=colors, vertex_size=1, edge_width=0.3) +ig.plot(g, vertex_color=colors, vertex_size=15, edge_width=0.3) plt.show() # %% diff --git a/doc/examples_sphinx-gallery/connected_components.py b/doc/examples_sphinx-gallery/connected_components.py index e85869cd5..008f66cec 100644 --- a/doc/examples_sphinx-gallery/connected_components.py +++ b/doc/examples_sphinx-gallery/connected_components.py @@ -30,7 +30,7 @@ components, target=ax, palette=ig.RainbowPalette(), - vertex_size=0.07, + vertex_size=7, vertex_color=list(map(int, ig.rescale(components.membership, (0, 200), clamp=True))), edge_width=0.7 ) diff --git a/doc/examples_sphinx-gallery/delaunay-triangulation.py b/doc/examples_sphinx-gallery/delaunay-triangulation.py index 8f95b6e75..ba6ce5a85 100644 --- a/doc/examples_sphinx-gallery/delaunay-triangulation.py +++ b/doc/examples_sphinx-gallery/delaunay-triangulation.py @@ -56,7 +56,7 @@ g, layout=layout, target=ax, - vertex_size=0.04, + vertex_size=4, vertex_color="lightblue", edge_width=0.8 ) @@ -90,7 +90,7 @@ g, layout=layout, target=ax, - vertex_size=0.0, + vertex_size=0, edge_width=0.2, edge_color="white", ) diff --git a/doc/examples_sphinx-gallery/erdos_renyi.py b/doc/examples_sphinx-gallery/erdos_renyi.py index cb3ddf530..c4f2879f7 100644 --- a/doc/examples_sphinx-gallery/erdos_renyi.py +++ b/doc/examples_sphinx-gallery/erdos_renyi.py @@ -67,14 +67,14 @@ target=axs[1, 0], layout="circle", vertex_color="lightblue", - vertex_size=0.15 + vertex_size=15 ) ig.plot( g4, target=axs[1, 1], layout="circle", vertex_color="lightblue", - vertex_size=0.15 + vertex_size=15 ) axs[1, 0].set_ylabel('N. edges') plt.show() diff --git a/doc/examples_sphinx-gallery/isomorphism.py b/doc/examples_sphinx-gallery/isomorphism.py index dd1e130b8..668b43f16 100644 --- a/doc/examples_sphinx-gallery/isomorphism.py +++ b/doc/examples_sphinx-gallery/isomorphism.py @@ -44,7 +44,7 @@ visual_style = { "vertex_color": "lightblue", "vertex_label": [0, 1, 2, 3, 4], - "vertex_size": 0.4, + "vertex_size": 25, } fig, axs = plt.subplots(1, 3) diff --git a/doc/examples_sphinx-gallery/online_user_actions.py b/doc/examples_sphinx-gallery/online_user_actions.py index 8ad9142d6..969a65b7a 100644 --- a/doc/examples_sphinx-gallery/online_user_actions.py +++ b/doc/examples_sphinx-gallery/online_user_actions.py @@ -70,7 +70,7 @@ # %% # Then we can prepare vertex sizes based on their closeness to other vertices vertex_size = g.closeness() -vertex_size = [0.5 * v**2 if not np.isnan(v) else 0.05 for v in vertex_size] +vertex_size = [10 * v**2 if not np.isnan(v) else 10 for v in vertex_size] # %% # Finally, we can plot the graph: diff --git a/doc/examples_sphinx-gallery/quickstart.py b/doc/examples_sphinx-gallery/quickstart.py index 8fcefb43e..ec6f7ddb7 100644 --- a/doc/examples_sphinx-gallery/quickstart.py +++ b/doc/examples_sphinx-gallery/quickstart.py @@ -40,7 +40,7 @@ g, target=ax, layout="circle", # print nodes in a circular layout - vertex_size=0.1, + vertex_size=30, vertex_color=["steelblue" if gender == "M" else "salmon" for gender in g.vs["gender"]], vertex_frame_width=4.0, vertex_frame_color="white", diff --git a/doc/examples_sphinx-gallery/simplify.py b/doc/examples_sphinx-gallery/simplify.py index 6d626fc71..46b753a82 100644 --- a/doc/examples_sphinx-gallery/simplify.py +++ b/doc/examples_sphinx-gallery/simplify.py @@ -39,7 +39,7 @@ # choose a consistent visual style: visual_style = { "vertex_color": "lightblue", - "vertex_size": 0.4, + "vertex_size": 20, "vertex_label": [0, 1, 2, 3, 4], } diff --git a/doc/examples_sphinx-gallery/topological_sort.py b/doc/examples_sphinx-gallery/topological_sort.py index 04971131b..7699b54b1 100644 --- a/doc/examples_sphinx-gallery/topological_sort.py +++ b/doc/examples_sphinx-gallery/topological_sort.py @@ -52,7 +52,7 @@ g, target=ax, layout='kk', - vertex_size=0.3, + vertex_size=25, edge_width=4, vertex_label=range(g.vcount()), vertex_color="white", diff --git a/doc/examples_sphinx-gallery/visual_style.py b/doc/examples_sphinx-gallery/visual_style.py index 04f899ef8..803ed115d 100644 --- a/doc/examples_sphinx-gallery/visual_style.py +++ b/doc/examples_sphinx-gallery/visual_style.py @@ -15,7 +15,7 @@ # various setting we want to customize: visual_style = { "edge_width": 0.3, - "vertex_size": 1.5, + "vertex_size": 15, "palette": "heat", "layout": "fruchterman_reingold" } diff --git a/doc/examples_sphinx-gallery/visualize_cliques.py b/doc/examples_sphinx-gallery/visualize_cliques.py index 44f0ff713..3fee6fb06 100644 --- a/doc/examples_sphinx-gallery/visualize_cliques.py +++ b/doc/examples_sphinx-gallery/visualize_cliques.py @@ -28,6 +28,7 @@ ig.plot( ig.VertexCover(g, [clique]), mark_groups=True, palette=ig.RainbowPalette(), + vetex_size=5, edge_width=0.5, target=ax, ) @@ -59,6 +60,7 @@ ig.VertexCover(g, [clique]), mark_groups=True, palette=ig.RainbowPalette(), + vetex_size=5, target=ax, ) plt.axis('off') diff --git a/doc/examples_sphinx-gallery/visualize_communities.py b/doc/examples_sphinx-gallery/visualize_communities.py index 7cfd90746..df19ebf5e 100644 --- a/doc/examples_sphinx-gallery/visualize_communities.py +++ b/doc/examples_sphinx-gallery/visualize_communities.py @@ -40,7 +40,7 @@ palette=palette, edge_width=1, target=ax, - vertex_size=0.3, + vertex_size=20, ) # Create a custom color legend diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index d54bb0935..c6d64e265 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -250,6 +250,7 @@ def __init__(self, *args, **kwargs): self._directed = kwargs.pop("directed", False) self._arrow_sizes = kwargs.pop("arrow_sizes", 0) self._arrow_widths = kwargs.pop("arrow_widths", 0) + self._curved = kwargs.pop("curved", None) super().__init__(*args, **kwargs) self._paths_original = deepcopy(self._paths) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index cc693de37..1283571f5 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -30,10 +30,10 @@ mpl, plt = find_matplotlib() try: Artist = mpl.artist.Artist - IdentityTransform = mpl.transforms.IdentityTransform + Affine2D = mpl.transforms.Affine2D except AttributeError: Artist = FakeModule - IdentityTransform = FakeModule + Affine2D = FakeModule ##################################################################### @@ -533,8 +533,8 @@ def _draw_vertices(self): offsets=offsets, offset_transform=self.axes.transData, match_original=True, + transform=Affine2D(), ) - art.set_transform(IdentityTransform()) self._vertices = art def _draw_edges(self): @@ -565,6 +565,7 @@ def _draw_edges(self): edgepatches = [] arrow_sizes = [] arrow_widths = [] + curved = [] for edge, visual_edge in edge_coord_iter: edge_vertices = [vertex_builder[v] for v in edge.tuple] edge_vertex_sizes = [] @@ -579,6 +580,7 @@ def _draw_edges(self): vertex_sizes.append(edge_vertex_sizes) arrow_sizes.append(visual_edge.arrow_size) arrow_widths.append(visual_edge.arrow_width) + curved.append(visual_edge.curved) art = EdgeCollection( edgepatches, @@ -586,6 +588,7 @@ def _draw_edges(self): directed=directed, arrow_sizes=arrow_sizes, arrow_widths=arrow_widths, + curved=curved, transform=self.axes.transData, ) self._edges = art From b148b5587f49a7bd76c8891c25ec0cd55c265704 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 1 Jun 2023 15:37:29 +1000 Subject: [PATCH 077/681] Solve bug with loops and curved edges and add test --- src/igraph/drawing/matplotlib/edge.py | 438 +++++++++--------- src/igraph/drawing/matplotlib/graph.py | 21 +- .../test_graph/clustering_directed.png | Bin 36495 -> 36628 bytes .../test_graph/clustering_directed_large.png | Bin 62421 -> 62446 bytes .../test_graph/graph_directed.png | Bin 23740 -> 23948 bytes .../graph_directed_curved_loops.png | Bin 0 -> 23883 bytes .../test_graph/graph_mark_groups_directed.png | Bin 23740 -> 23948 bytes .../graph_mark_groups_squares_directed.png | Bin 19296 -> 19476 bytes tests/drawing/matplotlib/test_graph.py | 11 + 9 files changed, 230 insertions(+), 240 deletions(-) create mode 100644 tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index c6d64e265..f485f0143 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -61,257 +61,249 @@ class VisualEdgeBuilder(AttributeCollectorBase): return VisualEdgeBuilder - def draw_directed_edge(self, edge, src_vertex, dest_vertex): - if src_vertex == dest_vertex: - return self.draw_loop_edge(edge, src_vertex) - - ax = self.context - (x1, y1), (x2, y2) = src_vertex.position, dest_vertex.position - (x_src, y_src), (x_dest, y_dest) = src_vertex.position, dest_vertex.position - - # Draw the edge - path = {"vertices": [], "codes": []} - path["vertices"].append([x1, y1]) - path["codes"].append("MOVETO") - - if edge.curved: - # Calculate the curve - aux1, aux2 = get_bezier_control_points_for_curved_edge(x1, y1, x2, y2, edge.curved) - - # Coordinates of the control points of the Bezier curve - xc1, yc1 = aux1 - xc2, yc2 = aux2 - - # Determine where the edge intersects the circumference of the - # vertex shape: Tip of the arrow - ## FIXME - #x2, y2 = intersect_bezier_curve_and_circle( - # x_src, y_src, xc1, yc1, xc2, yc2, x_dest, y_dest, dest_vertex.size / 2.0 - #) - x2, y2 = x_dest, y_dest - - # Calculate the arrow head coordinates - angle = atan2(y_dest - y2, x_dest - x2) # navid - arrow_size = 15.0 * edge.arrow_size - arrow_width = 10.0 / edge.arrow_width - aux_points = [ - ( - x2 - arrow_size * cos(angle - pi / arrow_width), - y2 - arrow_size * sin(angle - pi / arrow_width), - ), - ( - x2 - arrow_size * cos(angle + pi / arrow_width), - y2 - arrow_size * sin(angle + pi / arrow_width), - ), - ] - - # Midpoint of the base of the arrow triangle - x_arrow_mid, y_arrow_mid = (aux_points[0][0] + aux_points[1][0]) / 2.0, ( - aux_points[0][1] + aux_points[1][1] - ) / 2.0 - - # Vector representing the base of the arrow triangle - x_arrow_base_vec, y_arrow_base_vec = ( - aux_points[0][0] - aux_points[1][0] - ), (aux_points[0][1] - aux_points[1][1]) - - # Recalculate the curve such that it lands on the base of the arrow triangle - aux1, aux2 = get_bezier_control_points_for_curved_edge(x_src, y_src, x_arrow_mid, y_arrow_mid, edge.curved) - - # Offset the second control point (aux2) such that it falls precisely - # on the normal to the arrow base vector. Strictly speaking, - # offset_length is the offset length divided by the length of the - # arrow base vector. - offset_length = (x_arrow_mid - aux2[0]) * x_arrow_base_vec + ( - y_arrow_mid - aux2[1] - ) * y_arrow_base_vec - offset_length /= ( - euclidean_distance(0, 0, x_arrow_base_vec, y_arrow_base_vec) ** 2 - ) - - aux2 = ( - aux2[0] + x_arrow_base_vec * offset_length, - aux2[1] + y_arrow_base_vec * offset_length, - ) - - # Draw the curve from the first vertex to the midpoint of the base - # of the arrow head - path["vertices"].append(aux1) - path["vertices"].append(aux2) - path["vertices"].append([x_arrow_mid, y_arrow_mid]) - path["codes"].extend(["CURVE4"] * 3) - - else: - path["vertices"].append(dest_vertex.position) - path["codes"].append("LINETO") - - # Add arrowhead in the path, the exact positions are recomputed within - # EdgeCollection before each draw so they don't matter here. The - # path for an arrowhead is: headbase (current), headleft, tip, - # headright, headbase, so we need to add 4 (degenerate) vertices. - # Assuming the arrowhead uses straight lines, they are all LINETO - path["vertices"].extend([path["vertices"][-1] for x in range(4)]) - path["codes"].extend(["LINETO" for x in range(4)]) - - # Draw the edge - arrowpatch = mpl.patches.PathPatch( - mpl.path.Path( - path["vertices"], - codes=[getattr(mpl.path.Path, x) for x in path["codes"]], - ), + def build_patch(self, edge, src_vertex, dest_vertex): + art = mpl.patches.PathPatch( + mpl.path.Path([[0, 0]]), edgecolor=edge.color, - facecolor=edge.color, + facecolor=edge.color if src_vertex != dest_vertex else "none", linewidth=edge.width, zorder=edge.zorder, clip_on=True, ) - - return arrowpatch - - def draw_loop_edge(self, edge, vertex): - """Draws a loop edge. - - The default implementation draws a small circle. - - @param edge: the edge to be drawn. Visual properties of the edge - are defined by the attributes of this object. - @param vertex: the vertex to which the edge is attached. Visual - properties are given again as attributes. - """ - ax = self.context - radius = vertex.size * 1.5 - center_x = vertex.position[0] + cos(pi / 4) * radius / 2.0 - center_y = vertex.position[1] - sin(pi / 4) * radius / 2.0 - art = mpl.patches.Arc( - (center_x, center_y), - radius / 2.0, - radius / 2.0, - theta1=0, - theta2=360.0, - linewidth=edge.width, - facecolor="none", - edgecolor=edge.color, - zorder=edge.zorder, - clip_on=True, - ) return art - def draw_undirected_edge(self, edge, src_vertex, dest_vertex): - """Draws an undirected edge. - - The default implementation of this method draws undirected edges - as straight lines. Loop edges are drawn as small circles. - - @param edge: the edge to be drawn. Visual properties of the edge - are defined by the attributes of this object. - @param src_vertex: the source vertex. Visual properties are given - again as attributes. - @param dest_vertex: the target vertex. Visual properties are given - again as attributes. - """ - if src_vertex == dest_vertex: - return self.draw_loop_edge(edge, src_vertex) - - ax = self.context - - path = {"vertices": [], "codes": []} - path["vertices"].append(src_vertex.position) - path["codes"].append("MOVETO") - - if edge.curved: - (x1, y1), (x2, y2) = src_vertex.position, dest_vertex.position - aux1, aux2 = get_bezier_control_points_for_curved_edge(x1, y1, x2, y2, edge.curved) - path["vertices"].append(aux1) - path["vertices"].append(aux2) - path["vertices"].append(dest_vertex.position) - path["codes"].extend(["CURVE4"] * 3) - else: - path["vertices"].append(dest_vertex.position) - path["codes"].append("LINETO") + # The following two methods are replaced by dummy functions, the rest is + # taken care of in EdgeCollection for efficiency + def draw_directed_edge(self, edge, src_vertex, dest_vertex): + return self.build_patch(edge) - art = mpl.patches.PathPatch( - mpl.path.Path( - path["vertices"], - codes=[getattr(mpl.path.Path, x) for x in path["codes"]], - ), - edgecolor=edge.color, - facecolor="none", - linewidth=edge.width, - zorder=edge.zorder, - clip_on=True, - ) - return art + def draw_undirected_edge(self, edge, src_vertex, dest_vertex): + return self.build_patch(edge) class EdgeCollection(PatchCollection): def __init__(self, *args, **kwargs): kwargs["match_original"] = True - self._vertex_sizes = kwargs.pop("vertex_sizes", None) + self._visual_vertices = kwargs.pop("visual_vertices", None) self._directed = kwargs.pop("directed", False) self._arrow_sizes = kwargs.pop("arrow_sizes", 0) self._arrow_widths = kwargs.pop("arrow_widths", 0) self._curved = kwargs.pop("curved", None) super().__init__(*args, **kwargs) - self._paths_original = deepcopy(self._paths) - def _update_paths(self): - paths_original = self._paths_original - vertex_sizes = self._vertex_sizes - trans = self.axes.transData.transform - trans_inv = self.axes.transData.inverted().transform + @staticmethod + def _get_edge_vertex_sizes(edge_vertices): + sizes = [] + for visual_vertex in edge_vertices: + if visual_vertex.size is not None: + sizes.append(visual_vertex.size) + else: + sizes.append(max(visual_vertex.width, visual_vertex.height)) + return sizes + + def _compute_paths(self, transform=None): + import numpy as np + + visual_vertices = self._visual_vertices + if transform is None: + transform = self.get_transform() + trans = transform.transform + trans_inv = transform.inverted().transform # Get actual coordinates of the vertex border (rough) - for i, (path_orig, sizes) in enumerate(zip(paths_original, vertex_sizes)): - self._paths[i] = path = deepcopy(path_orig) - coords = path_orig.vertices + paths = [] + for i, edge_vertices in enumerate(visual_vertices): + coords = np.vstack( + [ + edge_vertices[0].position, + edge_vertices[1].position, + ] + ) coordst = trans(coords) - self._update_path_edge_start(path, coords, coordst, sizes[0], trans, trans_inv) - if self._directed: - self._update_path_edge_end_directed( - path, coords, coordst, sizes[1], trans, trans_inv, - self._arrow_sizes[i], self._arrow_widths[i], + sizes = self._get_edge_vertex_sizes(edge_vertices) + if self._curved is not None: + curved = self._curved[i] + else: + curved = False + + # Loops require special attention, discard any previous calculations + if edge_vertices[0] == edge_vertices[1]: + path = self._compute_path_loop( + coordst[0], + sizes[0], + trans_inv, + ) + + elif self._directed: + path = self._compute_path_directed( + coordst, + sizes, + trans_inv, + curved, + self._arrow_sizes[i], + self._arrow_widths[i], ) else: - self._update_path_edge_end_undirected( - path, coords, coordst, sizes[1], trans, trans_inv, + path = self._compute_path_undirected( + coordst, + sizes, + trans_inv, + curved, ) - def _update_path_edge_start(self, path, coords, coordst, size, trans, trans_inv): - theta = atan2(*((coordst[1] - coordst[0])[::-1])) - voff = 0 * coordst[0] - voff[:] = [cos(theta), sin(theta)] - voff *= size / 2 - start = trans_inv(trans(coords[0]) + voff) - path.vertices[0] = start + paths.append(path) + return paths + + def _compute_path_loop(self, coordt, size, trans_inv): + # Make arc (class method) + path = mpl.path.Path.arc(-90, 180) + vertices = path.vertices.copy() + codes = path.codes + + # Rescale to be as large as the vertex + vertices *= size / 2 + # Center top right + vertices += size / 2 + # Offset to place and transform to data coordinates + vertices = trans_inv(coordt + vertices) + + path = mpl.path.Path( + vertices, codes=codes, + ) + return path + + def _compute_path_undirected(self, coordst, sizes, trans_inv, curved): + path = {"vertices": [], "codes": []} + path["codes"].append("MOVETO") + if not curved: + path["codes"].append("LINETO") + + # Start + theta = atan2(*((coordst[1] - coordst[0])[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= sizes[0] / 2 + path["vertices"].append(coordst[0] + voff) + + # End + voff[:] = [cos(theta), sin(theta)] + voff *= sizes[1] / 2 + path["vertices"].append(coordst[1] - voff) + else: + path["codes"].extend(["CURVE4"] * 3) + + aux1, aux2 = get_bezier_control_points_for_curved_edge( + *coordst.ravel(), + curved, + ) + + # Start + theta = atan2(*((aux1 - coordst[0])[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= sizes[0] / 2 + path["vertices"].append(coordst[0] + voff) + + # Bezier + path["vertices"].append(aux1) + path["vertices"].append(aux2) - def _update_path_edge_end_undirected( - elf, path, coords, coordst, size, trans, trans_inv, + # End + theta = atan2(*((coordst[1] - aux2)[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= sizes[1] / 2 + path["vertices"].append(coordst[1] - voff) + + path = mpl.path.Path( + path["vertices"], + codes=[getattr(mpl.path.Path, x) for x in path["codes"]], + ) + path.vertices = trans_inv(path.vertices) + return path + + def _compute_path_directed( + self, coordst, sizes, trans_inv, curved, arrow_size, arrow_width ): - theta = atan2(*((coordst[-2] - coordst[-1])[::-1])) - voff = 0 * coordst[0] - voff[:] = [cos(theta), sin(theta)] - voff *= size / 2 - end = trans_inv(trans(coords[-1]) + voff) - path.vertices[-1] = end - - def _update_path_edge_end_directed( - self, path, coords, coordst, size, trans, trans_inv, - arrow_size, arrow_width): - # The path for arrows is start-headmid-headleft-tip-headright-headmid - # So, tip is the 3rd-to-last and headmid the last - theta = atan2(*((coordst[-6] - coordst[-3])[::-1])) - voff_unity = 0 * coordst[0] - voff_unity[:] = [cos(theta), sin(theta)] - voff = voff_unity * size / 2 - voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] - - tip = trans_inv(trans(coords[-3]) + voff) - headbase = trans_inv(trans(tip) + arrow_size * voff_unity) - headleft = trans_inv(trans(headbase) + 0.5 * arrow_width * voff_unity_90) - headright = trans_inv(trans(headbase) - 0.5 * arrow_width * voff_unity_90) - path.vertices[-5:] = [headbase, headleft, tip, headright, headbase] + path = {"vertices": [], "codes": []} + path["codes"].append("MOVETO") + if not curved: + path["codes"].extend(["LINETO"] * 5) + + # Start + theta = atan2(*((coordst[1] - coordst[0])[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= sizes[0] / 2 + path["vertices"].append(coordst[0] + voff) + + # End with arrow (base-left-top-right-base) + theta = atan2(*((coordst[1] - coordst[0])[::-1])) + voff_unity = 0 * coordst[0] + voff_unity[:] = [cos(theta), sin(theta)] + voff = voff_unity * sizes[1] / 2 + tip = coordst[1] - voff + + voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] + headbase = tip - arrow_size * voff_unity + headleft = headbase + 0.5 * arrow_width * voff_unity_90 + headright = headbase - 0.5 * arrow_width * voff_unity_90 + path["vertices"].extend( + [ + headbase, + headleft, + tip, + headright, + headbase, + ] + ) + else: + # Bezier + aux1, aux2 = get_bezier_control_points_for_curved_edge( + *coordst.ravel(), + curved, + ) + + # Start + theta = atan2(*((aux1 - coordst[0])[::-1])) + voff = 0 * coordst[0] + voff[:] = [cos(theta), sin(theta)] + voff *= sizes[0] / 2 + start = coordst[0] + voff + + # End with arrow (base-left-top-right-base) + theta = atan2(*((coordst[1] - aux2)[::-1])) + voff_unity = 0 * coordst[0] + voff_unity[:] = [cos(theta), sin(theta)] + voff = voff_unity * sizes[1] / 2 + tip = coordst[1] - voff + + voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] + headbase = tip - arrow_size * voff_unity + headleft = headbase + 0.5 * arrow_width * voff_unity_90 + headright = headbase - 0.5 * arrow_width * voff_unity_90 + + # This is a dirty trick to make the facecolor work + # without making a separate Patch, which would be a little messy + path["codes"].extend(["CURVE4"] * 6 + ["LINETO"] * 4) + path["vertices"].extend([ + headbase, aux2, aux1, + start, aux1, aux2, + headbase, + headleft, + tip, + headright, + headbase, + ]) + + path = mpl.path.Path( + path["vertices"], + codes=[getattr(mpl.path.Path, x) for x in path["codes"]], + ) + path.vertices = trans_inv(path.vertices) + return path def draw(self, renderer): - if self._vertex_sizes is not None: - self._update_paths() + if self._visual_vertices is not None: + self._paths = self._compute_paths() return super().draw(renderer) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 1283571f5..4508fff45 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -554,37 +554,24 @@ def _draw_edges(self): edge_coord_iter = ((es[i], edge_builder[i]) for i in edge_order) directed = graph.is_directed() - if directed: - # Arrows and the likes - drawer_method = edge_drawer.draw_directed_edge - else: - # Lines - drawer_method = edge_drawer.draw_undirected_edge - vertex_sizes = [] + visual_vertices = [] edgepatches = [] arrow_sizes = [] arrow_widths = [] curved = [] for edge, visual_edge in edge_coord_iter: edge_vertices = [vertex_builder[v] for v in edge.tuple] - edge_vertex_sizes = [] - for visual_vertex in edge_vertices: - if visual_vertex.size is not None: - edge_vertex_sizes.append(visual_vertex.size) - else: - edge_vertex_sizes.append( - max(visual_vertex.width, visual_vertex.height)) - art = drawer_method(visual_edge, *edge_vertices) + art = edge_drawer.build_patch(visual_edge, *edge_vertices) edgepatches.append(art) - vertex_sizes.append(edge_vertex_sizes) + visual_vertices.append(edge_vertices) arrow_sizes.append(visual_edge.arrow_size) arrow_widths.append(visual_edge.arrow_width) curved.append(visual_edge.curved) art = EdgeCollection( edgepatches, - vertex_sizes=vertex_sizes, + visual_vertices=visual_vertices, directed=directed, arrow_sizes=arrow_sizes, arrow_widths=arrow_widths, diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png index 195b0f379f299c97eef8f1455538eac3fa9bbfef..a50e0e8a68c1981445081258be4b2f0ed4cf2c28 100644 GIT binary patch literal 36628 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 xi9&^2$K#?A|U_( literal 36495 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ⅈ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 MhMIiAwflkp1D<^8i2wiq diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png index ed3c2dd1a223a05a0a29f8d7c22888fa1dc15d27..9a8da6e28a8e55f9b23179f4f2258cddc8e0e972 100644 GIT binary patch literal 62446 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 ~;;^^d5Y(AL_0mUy-C_ODGT*U4|u<*yahse*v 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

}O`wpYJ2qIF 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 JiWRJ${SW^{U!(v4 diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed.png index 89d646b0fcd215ab38e93cc6c0fe6887806e4f89..e4800a3e0da0987575ca8c577748348b3c179417 100644 GIT binary patch literal 23948 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 ZKC#W>Ugg4^C}0X<@O1TaS?83{1OQ@QUZem3 literal 23740 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 Ib4q9e0FPl{r~m)} diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png new file mode 100644 index 0000000000000000000000000000000000000000..e572fa7bc4600268ede2ecfe814ae4a44e87d06b GIT binary patch literal 23883 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 Da5`{Q literal 0 HcmV?d00001 diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_directed.png index 89d646b0fcd215ab38e93cc6c0fe6887806e4f89..e4800a3e0da0987575ca8c577748348b3c179417 100644 GIT binary patch literal 23948 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 ZKC#W>Ugg4^C}0X<@O1TaS?83{1OQ@QUZem3 literal 23740 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 Ib4q9e0FPl{r~m)} diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png index f8183bf82dc24f85a5cf4f094489bdab98bedfbd..4655ce1c18d701edc6f0e9554ad003658186b9eb 100644 GIT binary patch literal 19476 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 literal 19296 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 diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index 12c1e8db1..7d41676a4 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -63,6 +63,17 @@ def test_directed(self): fig, ax = plt.subplots() plot(g, target=ax, layout=self.layout_small_ring) + @image_comparison(baseline_images=["graph_directed_curved_loops"], remove_text=True) + def test_directed_curved_loops(self): + plt.close("all") + g = Graph.Ring(5, directed=True) + g.add_edge(0, 0) + fig, ax = plt.subplots() + plot( + g, target=ax, layout=self.layout_small_ring, + edge_curved=[0] * 4 + [0.3], + ) + @image_comparison(baseline_images=["graph_mark_groups_directed"], remove_text=True) def test_mark_groups(self): plt.close("all") From 478beb7f0fa8b2dc8cfaee41c90399f01ed8d46e Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 1 Jun 2023 15:53:47 +1000 Subject: [PATCH 078/681] Better docs for GraphArtist --- doc/source/visualisation.rst | 12 +++++++----- src/igraph/drawing/matplotlib/graph.py | 14 +++++--------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/doc/source/visualisation.rst b/doc/source/visualisation.rst index e8121551c..24b752e36 100644 --- a/doc/source/visualisation.rst +++ b/doc/source/visualisation.rst @@ -143,15 +143,17 @@ you might want to change the size and color of the vertices:: >>> import matplotlib.pyplot as plt >>> fig, ax = plt.subplots() >>> ig.plot(g, target=ax) - >>> dot = ax.get_children()[0] # This is a Circle for the first vertex - >>> dot.set_color('tomato') - >>> dot.radius *= 2 # double the default radius + >>> artist = ax.get_children()[0] # This is a GraphArtist + >>> dots = artist.get_vertices() + >>> dot.set_facecolors(['tomato'] * g.vcount()) + >>> dot.set_sizes(dot.get_sizes() * 2) # double the default radius That also helps as a workaround if you cannot figure out how to use the plotting options below: just use the defaults and then customize the appearance of your graph via standard `matplotlib`_ tools. -.. note:: The order of `ax.get_children()` is the following: (i) patches for clustering hulls if requested; - (ii) patches for vertices; (iii) patches for edges: for undirected graphs, there's one patch per edge. For directed graphs, there's a *pair* of patches, associated with the arrow body and head, respectively. +.. note:: The order of `artist.get_children()` is the following: (i) one artist for clustering hulls if requested; + (ii) one artist for edges; (iii) one artist for vertices; (iv) one artist for **each** edge label; (v) one + artist for **each** vertex label. To use `matplotlib_` as your default plotting backend, you can set: diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 4508fff45..053e2f010 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -218,27 +218,23 @@ def _set_edge_curve(self, **kwds): return None def get_vertices(self): - """Get vertex artists.""" + """Get VertexCollection artist.""" return self._vertices def get_edges(self): - """Get edge artists. - - Note that for directed edges, an edge might have more than one - artist, e.g. arrow shaft and arrowhead. - """ + """Get EdgeCollection artist.""" return self._edges def get_groups(self): - """Get group/cluster/cover artists.""" + """Get HullCollection group/cluster/cover artists.""" return self._groups def get_vertex_labels(self): - """Get vertex label artists.""" + """Get list of vertex label artists.""" return self._vertex_labels def get_edge_labels(self): - """Get edge label artists.""" + """Get list of edge label artists.""" return self._edge_labels def get_datalim(self): From 3106e65328b18eae04360d122a66e44d6e431d11 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Sat, 3 Jun 2023 18:17:31 +1000 Subject: [PATCH 079/681] Callback and small bugfix for edge editing --- src/igraph/drawing/matplotlib/edge.py | 102 +++++++++++++++++- src/igraph/drawing/matplotlib/graph.py | 38 ++++--- src/igraph/drawing/matplotlib/vertex.py | 17 ++- .../graph_directed_curved_loops.png | Bin 23883 -> 23632 bytes .../test_graph/graph_edit_children.png | Bin 22535 -> 23762 bytes tests/drawing/matplotlib/test_graph.py | 4 + 6 files changed, 134 insertions(+), 27 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index f485f0143..bb77b8ef6 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -86,8 +86,8 @@ def __init__(self, *args, **kwargs): kwargs["match_original"] = True self._visual_vertices = kwargs.pop("visual_vertices", None) self._directed = kwargs.pop("directed", False) - self._arrow_sizes = kwargs.pop("arrow_sizes", 0) - self._arrow_widths = kwargs.pop("arrow_widths", 0) + self._arrow_sizes = kwargs.pop("arrow_sizes", None) + self._arrow_widths = kwargs.pop("arrow_widths", None) self._curved = kwargs.pop("curved", None) super().__init__(*args, **kwargs) @@ -135,13 +135,19 @@ def _compute_paths(self, transform=None): ) elif self._directed: + if (self._arrow_sizes is None) or (self._arrow_widths is None): + arrow_size = 0 + arrow_width = 0 + else: + arrow_size = self._arrow_sizes[i] + arrow_width = self._arrow_widths[i] path = self._compute_path_directed( coordst, sizes, trans_inv, curved, - self._arrow_sizes[i], - self._arrow_widths[i], + arrow_size, + arrow_width, ) else: path = self._compute_path_undirected( @@ -155,6 +161,8 @@ def _compute_paths(self, transform=None): return paths def _compute_path_loop(self, coordt, size, trans_inv): + import numpy as np + # Make arc (class method) path = mpl.path.Path.arc(-90, 180) vertices = path.vertices.copy() @@ -167,6 +175,16 @@ def _compute_path_loop(self, coordt, size, trans_inv): # Offset to place and transform to data coordinates vertices = trans_inv(coordt + vertices) + # Hack used for any curved lines to deal with facecolor + vertices = np.vstack([ + vertices, + vertices[:-1][::-1], + ]) + codes = np.concatenate([ + codes, + codes[1:], + ]) + path = mpl.path.Path( vertices, codes=codes, ) @@ -307,3 +325,79 @@ def draw(self, renderer): if self._visual_vertices is not None: self._paths = self._compute_paths() return super().draw(renderer) + + def get_arrow_sizes(self): + """Same as get_arrow_size.""" + return self.get_arrow_size() + + def get_arrow_size(self): + """Get arrow sizes for the edges (directed only). + + @return: An array of arrow sizes. + """ + import numpy as np + + if self._arrow_sizes is None: + arrow_sizes = [0 for x in self.get_paths()] + else: + arrow_sizes = self._arrow_sizes + return np.array(arrow_sizes) + + def set_arrow_size(self, sizes): + """Set arrow sizes. + + @param sizes: A sequence of arrow sizes or a single size. + """ + try: + iter(sizes) + except TypeError: + sizes = [sizes] * len(self._paths) + self._arrow_sizes = sizes + self.stale = True + + def set_arrow_sizes(self, sizes): + """Same as set_arrow_size""" + return self.set_arrow_size(sizes) + + def get_arrow_widths(self): + """Same as get_arrow_width.""" + return self.get_arrow_width() + + def get_arrow_width(self): + """Get arrow widths for the edges (directed only). + + @return: An array of arrow widths. + """ + import numpy as np + + if self._arrow_widths is None: + arrow_widths = [0 for x in self.get_paths()] + else: + arrow_widths = self._arrow_widths + return np.array(arrow_widths) + + def set_arrow_width(self, widths): + """Set arrow widths. + + @param widths: A sequence of arrow widths or a single width. + """ + try: + iter(widths) + except TypeError: + widths = [widths] * len(self._paths) + self._arrow_widths = widths + self.stale = True + + def set_arrow_widths(self, widths): + """Same as set_arrow_width""" + return self.set_arrow_width(widths) + + @property + def stale(self): + return super().stale + + @stale.setter + def stale(self, val): + PatchCollection.stale.fset(self, val) + if val and hasattr(self, "stale_callback_post"): + self.stale_callback_post(self) diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 053e2f010..42dd70802 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -620,22 +620,11 @@ def _reprocess(self): self._draw_vertex_labels() self._draw_edge_labels() - # When the vertices change size, one has to redraw the edges to match - # the boundary of the marker. Unless one has granular control over exactly - # what edges to redraw, it's simpler to just redraw the whole thing. That - # requires adapting the vertex_builder (already done in VertexCollection) - # and then redrawing the container artist. - def vertex_size_callback(artist): - sizes = artist.get_sizes() - for size, vb in zip(sizes, self._vertex_builder): - vb.size = size - self._reprocess() - # Callbacks for other vertex properties, to ensure they are in sync # with vertex_builder. # NOTE: no need to reprocess here because it does not affect other # parts of the container artist (e.g. edges) - def stale_callback(artist): + def vertex_stale_callback(artist): # If the stale state emerges from other properties, we can salvage # the other artists but we have to update the vertex builder anyway # in case a _reprocess is triggered by something else. @@ -659,7 +648,30 @@ def stale_callback(artist): if artist._stale_size: self._reprocess() - self._vertices._stale_callback_post = stale_callback + # Edge callback, keeps the edge builder in sync with the actual state + # of the artist + def edge_stale_callback(artist): + prop_pairs = ( + ("edgecolor", "color"), + ("linewidth", "width"), + ("zorder", "zorder"), + ("arrow_size", "arrow_size"), + ("arrow_width", "arrow_width"), + ) + for mpl_prop, ig_prop in prop_pairs: + values = getattr(artist, "get_" + mpl_prop)() + try: + iter(values) + except TypeError: + values = [values] * len(artist.get_paths()) + for value, visual_edge in zip(values, self._edge_builder): + setattr(visual_edge, ig_prop, value) + + # Sync facecolor from edgecolor + if mpl_prop == "edgecolor": + artist._facecolors = artist._edgecolors + self._vertices.stale_callback_post = vertex_stale_callback + self._edges.stale_callback_post = edge_stale_callback # Forward mpl properties to children # TODO sort out all of the things that need to be forwarded diff --git a/src/igraph/drawing/matplotlib/vertex.py b/src/igraph/drawing/matplotlib/vertex.py index 89c874d4a..49bd7389b 100644 --- a/src/igraph/drawing/matplotlib/vertex.py +++ b/src/igraph/drawing/matplotlib/vertex.py @@ -107,7 +107,7 @@ def get_size(self): If width and height are unequal, get the largest of the two. - @return: A list of vertex sizes. + @return: An array of vertex sizes. """ import numpy as np @@ -120,7 +120,7 @@ def get_size(self): sizes.append(size) return np.array(sizes) - def set_sizes(self, sizes): + def set_size(self, sizes): """Set vertex sizes. This rescales the current vertex symbol/path linearly, using this @@ -146,12 +146,9 @@ def set_sizes(self, sizes): self._stale_size = True self.stale = True - def set_size(self, size): - """Set vertex size, the same for all vertices. - - @param size: A single vertex size. - """ - self.set_sizes([size] * len(self.get_paths())) + def set_sizes(self, sizes): + """Same as set_size.""" + self.set_size(sizes) @property def stale(self): @@ -160,5 +157,5 @@ def stale(self): @stale.setter def stale(self, val): PatchCollection.stale.fset(self, val) - if val and hasattr(self, "_stale_callback_post"): - self._stale_callback_post(self) + if val and hasattr(self, "stale_callback_post"): + self.stale_callback_post(self) diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png index e572fa7bc4600268ede2ecfe814ae4a44e87d06b..9d505b466397c96afaa26cbb855622172a7e6a42 100644 GIT binary patch literal 23632 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 Lu6{1-oD!M<#+|^X literal 23883 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 Da5`{Q diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_edit_children.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_edit_children.png index eedbdeb3e6e6a0125b4bb38c61b00824d6ae87e4..21234699ae6300d349c1956a206eeb02da69717b 100644 GIT binary patch literal 23762 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 Q26hTYGPgdGW#$_3U-XbBD*ylh literal 22535 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 svCoHBfQoebvH$ Date: Wed, 7 Jun 2023 16:36:07 +0200 Subject: [PATCH 080/681] doc: remove direct references to executing setup.py as it is now deprecated --- README.md | 54 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 92892f595..8ae55c896 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,8 @@ Python 3.7 and later. Make sure that you have Microsoft Visual Studio 2015 or later installed, and of course Python 3.7 or later. First extract the source to a suitable directory. If you launch the Developer command prompt and navigate to the directory where you extracted the source code, you should be able to build -and install igraph using `python setup.py install` +and install igraph using `pip install .`, assuming that you have `pip` +installed in your Python environment. You may need to set the architecture that you are building on explicitly by setting the environment variable @@ -105,17 +106,17 @@ set IGRAPH_EXTRA_LIBRARIES=libxml2,lzma,zlib,iconv,charset set IGRAPH_EXTRA_DYNAMIC_LIBRARIES: wsock32,ws2_32 ``` -You can now build and install `igraph` again by simply running `python -setup.py build`. Please make sure to use a clean source tree, if you built -previously without GraphML, it will not update the build. +You can now build and install `igraph` again by simply running `pip install .`. +Please make sure to use a clean source tree, if you built previously without +GraphML, it will not update the build. ### Linking to an existing igraph installation The source code of the Python package includes the source code of the matching igraph version that the Python interface should compile against. However, if you want to link the Python interface to a custom installation of the C core -that has already been compiled and installed on your system, you can ask -`setup.py` to use the pre-compiled version. This option requires that your +that has already been compiled and installed on your system, you can ask our +build system to use the pre-compiled version. This option requires that your custom installation of igraph is discoverable with `pkg-config`. First, check whether `pkg-config` can tell you the required compiler and linker flags for igraph: @@ -135,15 +136,14 @@ IGRAPH_USE_PKG_CONFIG=1 pip install igraph ``` Alternatively, if you have already downloaded and extracted the source code -of igraph, you can run `setup.py` directly: +of igraph, you can run `pip install` on the source tree directly: ```bash -IGRAPH_USE_PKG_CONFIG=1 python setup.py build -IGRAPH_USE_PKG_CONFIG=1 python setup.py install +IGRAPH_USE_PKG_CONFIG=1 pip install . ``` (Note that you need the `IGRAPH_USE_PKG_CONFIG=1` environment variable -for both invocations, otherwise the call to `setup.py install` would still +for both invocations, otherwise the call to `pip install` would still build the vendored C core instead of linking to an existing installation). This option is primarily intended for package maintainers in Linux @@ -200,7 +200,6 @@ additional dependencies, read further below for details. For more information about installing directly from `git` using `pip` see https://pip.pypa.io/en/stable/topics/vcs-support/#git. - Alternatively, you can clone this repository locally. This repository contains a matching version of the C core of `igraph` as a git submodule. In order to install the development version from source, you need to instruct git to check @@ -220,17 +219,20 @@ sudo apt install bison flex On macOS you can install these from Homebrew or MacPorts. On Windows you can install `winflexbison3` from Chocolatey. -Then, running the setup script should work if you have a C compiler and the -necessary build dependencies (see also the previous section): +Then you can install the package directly with `pip` (see also the previous section): ```bash -python setup.py build +pip install . ``` -You can install it using +If you would like to create a source distribution or a Python wheel instead of +installing the module directly in your Python environment, use a standard build +frontend like [build](https://pypa-build.readthedocs.io/en/stable/). If you +use [pipx](https://pypa.github.io/pipx/) to isolate command-line Python tools +in their own separate virtualenvs, you can simply run: ```bash -python setup.py install +pipx run build ``` ### Running unit tests @@ -242,6 +244,17 @@ with the built-in `unittest` module: python -m unittest ``` +Note that unit tests have additional dependencies like NumPy, PIL or +`matplotlib`. The unit test suite will try to do its best to skip tests +requiring external dependencies, but if you want to make sure that all the unit +tests are executed, either use `tox` (which will take care of installing the +test dependencies in a virtualenv), or install the module with the `test` +extras: + +```bash +pip install '.[test]' +``` + ## Contributing Contributions to `igraph` are welcome! @@ -252,16 +265,17 @@ that you would like to see included in the main tree, open a PR on this repo. To start developing `igraph`, follow the steps above about installing the development version. Make sure that you do so by cloning the repository locally so that you are able to make changes. -For easier development, you can install `igraph` in development mode so your changes in the Python source -code are picked up automatically by Python: +For easier development, you can install `igraph` in "editable" (i.e. +development) mode so your changes in the Python source code are picked up +automatically by Python: ```bash -python setup.py develop +pip install -e . ``` Changes that you make to the Python code do not need any extra action. However, if you adjust the source code of the C extension, you need to rebuild it by running -`python setup.py develop` again. Compilation of the C core of `igraph` is +`pip install -e .` again. Compilation of the C core of `igraph` is cached in ``vendor/build`` and ``vendor/install`` so subsequent builds are much faster than the first one as the C core does not need to be recompiled. From 39f07de21199eb4a3f6c483417070480d028a5b3 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 7 Jun 2023 16:41:58 +0200 Subject: [PATCH 081/681] doc: stop referring to setup.py in the online docs as well --- doc/source/install.rst | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/doc/source/install.rst b/doc/source/install.rst index 7eef1fa66..5f8fc07ea 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -94,7 +94,11 @@ Compiling step by step ---------------------- This section should be rarely used in practice but explains how to compile and -install |igraph| step by step without ``pip``. +install |igraph| step by step from a local checkout, i.e. _not_ relying on +``pip`` to fetch the sources. (You would still need ``pip`` to install from +source, or a PEP 517-compliant build frontend like +`build `_ to build an installable +Python wheel. First, obtain the bleeding-edge source code from Github:: @@ -122,26 +126,28 @@ Third, if you cloned the source from Github, initialize the ``git`` submodule fo of the C core that is bundled with it (or with the revision that the ``git`` submodule points to). -Fourth, call the standard Python ``setup.py`` script, e.g. for compiling:: +Fourth, call ``pip`` to compile and install the package from source:: - $ python setup.py build + $ pip install . -(press Enter when prompted). That will compile the Python interface in a subfolder called -``build/lib.``, e.g. `build/lib.linux-x86_64-3.8`. You can add -that folder to your ``PYTHONPATH`` if you want to import directly from it, or you can call the ``setup.py`` -script to install it from there:: +Alternatively, you can call ``build`` or another PEP 517-compliant build frontend +to build an installable Python wheel. Here we use `pipx `_ +to invoke ``build`` in a separate virtualenv:: - $ python setup.py install - -.. note:: The ``setup.py`` script takes a number of options to customize the install location. + $ pipx run build Testing your installation ------------------------- -The unit tests are implemented with the standard ``unittest`` module so you can -run them like this from your the source folder:: +Use ``tox`` or another standard test runner tool to run all the unit tests. +Here we use `pipx `_` to invoke ``tox``:: + + $ pipx run tox + +You can also call ``tox`` directly from the root folder of the igraph source +tree if you already installed ``tox`` system-wide:: - $ python -m unittest discover + $ tox Troubleshooting =============== From 6b1e4387a8f5e37a575e0a7c7fdfc52d918f2bd6 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 7 Jun 2023 16:42:56 +0200 Subject: [PATCH 082/681] test: clarify that you need PIL _and_ NumPy _or_ OpenCV to run Cairo tests --- tests/drawing/cairo/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/drawing/cairo/utils.py b/tests/drawing/cairo/utils.py index 443aa1e2d..7a7a297ea 100644 --- a/tests/drawing/cairo/utils.py +++ b/tests/drawing/cairo/utils.py @@ -39,7 +39,7 @@ def fun(filename): except ImportError: pass - raise ImportError('PIL or OpenCV required to run Cairo tests') + raise ImportError('PIL+NumPy or OpenCV required to run Cairo tests') def find_image_comparison(): From 6a258127583819cc39bb9b2a4483dbeb403b9ad7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 14:03:39 +0000 Subject: [PATCH 083/681] build(deps): bump pypa/cibuildwheel from 2.13.0 to 2.13.1 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.13.0 to 2.13.1. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.13.0...v2.13.1) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 93d6d40fa..b95a0091d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.13.0 + uses: pypa/cibuildwheel@v2.13.1 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" @@ -38,7 +38,7 @@ jobs: CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.13.0 + uses: pypa/cibuildwheel@v2.13.1 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -63,7 +63,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.13.0 + uses: pypa/cibuildwheel@v2.13.1 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -88,7 +88,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.13.0 + uses: pypa/cibuildwheel@v2.13.1 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -155,7 +155,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.13.0 + uses: pypa/cibuildwheel@v2.13.1 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -242,7 +242,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.13.0 + uses: pypa/cibuildwheel@v2.13.1 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From 9230e603a1e5252b0fe484eda4f01c6b91117a49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:01:47 +0000 Subject: [PATCH 084/681] build(deps): bump actions/upload-artifact from 2 to 3 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b95a0091d..6025f8863 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -190,7 +190,7 @@ jobs: pip install pyodide-build==0.21.0 pyodide build - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: path: ./dist/*.whl From 6fe6ac94b3714a246e610c8377753f6f974fd1ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:02:06 +0000 Subject: [PATCH 085/681] build(deps): bump actions/setup-python from 2 to 4 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 4. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b95a0091d..d43b38caa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -176,7 +176,7 @@ jobs: submodules: true fetch-depth: 0 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python with: python-version: '3.10.2' From a02aef943ad7c0c9e45aeae231812283d695ada6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:02:32 +0000 Subject: [PATCH 086/681] build(deps): bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b95a0091d..746501758 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -171,7 +171,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: true fetch-depth: 0 From 5204b2e1527c0369a5d3e04ddc8544a6429b1752 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 28 Jun 2023 11:45:04 +0200 Subject: [PATCH 087/681] feat: add Graph.count_automorphisms() --- CHANGELOG.md | 3 ++ src/_igraph/graphobject.c | 72 +++++++++++++++++++++++++++++++++++++-- tests/test_isomorphism.py | 11 ++++++ 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebd5c8967..ca0006b79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ between two vertices using the A-star algorithm and an appropriate heuristic function. +- Added `Graph.count_automorphisms()` to count the number of automorphisms + of a graph. + - The `VertexCover` constructor now allows referring to vertices by names instead of IDs. diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 6e5763f5d..9b68dd958 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -9593,6 +9593,50 @@ PyObject *igraphmodule_Graph_canonical_permutation( return list; } +/** + * \ingroup python_interface_graph + * \brief Calculates the number of automorphisms of a graph using BLISS + * \sa igraph_count_automorphisms + */ +PyObject *igraphmodule_Graph_count_automorphisms( + igraphmodule_GraphObject *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "sh", "color", NULL }; + PyObject *sh_o = Py_None; + PyObject *color_o = Py_None; + PyObject *result; + igraph_bliss_sh_t sh = IGRAPH_BLISS_FL; + igraph_vector_int_t *color = 0; + igraph_error_t retval; + igraph_bliss_info_t info; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &sh_o, &color_o)) + return NULL; + + if (igraphmodule_PyObject_to_bliss_sh_t(sh_o, &sh)) + return NULL; + + if (igraphmodule_attrib_to_vector_int_t(color_o, self, &color, + ATTRIBUTE_TYPE_VERTEX)) return NULL; + + retval = igraph_count_automorphisms(&self->g, color, sh, &info); + + if (color) { igraph_vector_int_destroy(color); free(color); } + + if (retval) { + igraphmodule_handle_igraph_error(); + igraph_free(info.group_size); + return NULL; + } + + result = PyLong_FromString(info.group_size, NULL, 10); + igraph_free(info.group_size); + if (!result) { + return NULL; + } + + return result; +} + /** \ingroup python_interface_graph * \brief Calculates the isomorphism class of a graph or its subgraph * \sa igraph_isoclass, igraph_isoclass_subgraph @@ -16554,12 +16598,36 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " - C{\"fsm\"}: smallest maximally non-trivially connected\n" " non-singleton cell\n\n" "@param color: optional vector storing a coloring of the vertices\n " - "with respect to which the isomorphism is computed." - "If C{None}, all vertices have the same color.\n" + " with respect to which the isomorphism is computed." + " If C{None}, all vertices have the same color.\n" "@return: a permutation vector containing vertex IDs. Vertex 0 in the original\n" " graph will be mapped to an ID contained in the first element of this\n" " vector; vertex 1 will be mapped to the second and so on.\n" }, + {"count_automorphisms", + (PyCFunction) igraphmodule_Graph_count_automorphisms, + METH_VARARGS | METH_KEYWORDS, + "count_automorphisms(sh=\"fl\", color=None)\n--\n\n" + "Calculates the number of automorphisms of a graph using the BLISS isomorphism\n" + "algorithm.\n\n" + "See U{http://www.tcs.hut.fi/Software/bliss/index.html} for more information\n" + "about the BLISS algorithm and canonical permutations.\n\n" + "@param sh: splitting heuristics for graph as a case-insensitive string,\n" + " with the following possible values:\n\n" + " - C{\"f\"}: first non-singleton cell\n\n" + " - C{\"fl\"}: first largest non-singleton cell\n\n" + " - C{\"fs\"}: first smallest non-singleton cell\n\n" + " - C{\"fm\"}: first maximally non-trivially connected non-singleton\n" + " cell\n\n" + " - C{\"flm\"}: largest maximally non-trivially connected\n" + " non-singleton cell\n\n" + " - C{\"fsm\"}: smallest maximally non-trivially connected\n" + " non-singleton cell\n\n" + "@param color: optional vector storing a coloring of the vertices\n " + " with respect to which the isomorphism is computed." + " If C{None}, all vertices have the same color.\n" + "@return: the number of automorphisms of the graph.\n" + }, {"isoclass", (PyCFunction) igraphmodule_Graph_isoclass, METH_VARARGS | METH_KEYWORDS, "isoclass(vertices)\n--\n\n" diff --git a/tests/test_isomorphism.py b/tests/test_isomorphism.py index a0ecb509e..d6825edcf 100644 --- a/tests/test_isomorphism.py +++ b/tests/test_isomorphism.py @@ -406,14 +406,25 @@ def testPermuteVertices(self): self.assertTrue(set(g3.get_edgelist()) == set(g1.get_edgelist())) +class AutomorphismTests(unittest.TestCase): + def testCountAutomorphisms(self): + g = Graph.Famous("petersen") + self.assertEqual(120, g.count_automorphisms()) + + g = Graph.Lattice([16, 16]) + self.assertEqual(2048, g.count_automorphisms()) + + def suite(): isomorphism_suite = unittest.defaultTestLoader.loadTestsFromTestCase(IsomorphismTests) subisomorphism_suite = unittest.defaultTestLoader.loadTestsFromTestCase(SubisomorphismTests) permutation_suite = unittest.defaultTestLoader.loadTestsFromTestCase(PermutationTests) + automorphism_suite = unittest.defaultTestLoader.loadTestsFromTestCase(AutomorphismTests) return unittest.TestSuite([ isomorphism_suite, subisomorphism_suite, permutation_suite, + automorphism_suite, ]) From 9cbc9558f7ad17a8c6d4723182bddccde2cf642f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 28 Jun 2023 12:39:55 +0200 Subject: [PATCH 088/681] feat: add Graph.automorphism_group() --- CHANGELOG.md | 3 +- src/_igraph/graphobject.c | 73 +++++++++++++++++++++++++++++++++++++++ tests/test_isomorphism.py | 13 +++++++ 3 files changed, 88 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca0006b79..adf345ba2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,8 @@ heuristic function. - Added `Graph.count_automorphisms()` to count the number of automorphisms - of a graph. + of a graph and `Graph.automorphism_group()` to calculate the generators of + the automorphism group of a graph. - The `VertexCover` constructor now allows referring to vertices by names instead of IDs. diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 9b68dd958..f27b74149 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -9547,6 +9547,53 @@ PyObject *igraphmodule_Graph_write_leda(igraphmodule_GraphObject * self, * Routines related to graph isomorphism * **********************************************************************/ +/** + * \ingroup python_interface_graph + * \brief Calculates the automorphism group generators of a graph using BLISS + * \sa igraph_automorphism_group + */ +PyObject *igraphmodule_Graph_automorphism_group( + igraphmodule_GraphObject *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "sh", "color", NULL }; + PyObject *sh_o = Py_None; + PyObject *color_o = Py_None; + PyObject *list; + igraph_bliss_sh_t sh = IGRAPH_BLISS_FL; + igraph_vector_int_list_t generators; + igraph_vector_int_t *color = 0; + igraph_error_t retval; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &sh_o, &color_o)) + return NULL; + + if (igraphmodule_PyObject_to_bliss_sh_t(sh_o, &sh)) + return NULL; + + if (igraph_vector_int_list_init(&generators, 0)) { + igraphmodule_handle_igraph_error(); + return NULL; + } + + if (igraphmodule_attrib_to_vector_int_t(color_o, self, &color, + ATTRIBUTE_TYPE_VERTEX)) return NULL; + + retval = igraph_automorphism_group(&self->g, color, &generators, sh, 0); + + if (color) { igraph_vector_int_destroy(color); free(color); } + + if (retval) { + igraphmodule_handle_igraph_error(); + igraph_vector_int_list_destroy(&generators); + return NULL; + } + + list = igraphmodule_vector_int_list_t_to_PyList(&generators); + + igraph_vector_int_list_destroy(&generators); + + return list; +} + /** * \ingroup python_interface_graph * \brief Calculates the canonical permutation of a graph using BLISS @@ -16576,6 +16623,32 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { /* ISOMORPHISM */ /***************/ + {"automorphism_group", + (PyCFunction) igraphmodule_Graph_automorphism_group, + METH_VARARGS | METH_KEYWORDS, + "automorphism_group(sh=\"fl\", color=None)\n--\n\n" + "Calculates the generators of the automorphism group of a graph using the\n" + "BLISS isomorphism algorithm.\n\n" + "The generator set may not be minimal and may depend on the splitting\n" + "heuristics. The generators are permutations represented using zero-based\n" + "indexing.\n\n" + "@param sh: splitting heuristics for graph as a case-insensitive string,\n" + " with the following possible values:\n\n" + " - C{\"f\"}: first non-singleton cell\n\n" + " - C{\"fl\"}: first largest non-singleton cell\n\n" + " - C{\"fs\"}: first smallest non-singleton cell\n\n" + " - C{\"fm\"}: first maximally non-trivially connected non-singleton\n" + " cell\n\n" + " - C{\"flm\"}: largest maximally non-trivially connected\n" + " non-singleton cell\n\n" + " - C{\"fsm\"}: smallest maximally non-trivially connected\n" + " non-singleton cell\n\n" + "@param color: optional vector storing a coloring of the vertices\n " + " with respect to which the isomorphism is computed." + " If C{None}, all vertices have the same color.\n" + "@return: a list of integer vectors, each vector representing an automorphism\n" + " group of the graph.\n" + }, {"canonical_permutation", (PyCFunction) igraphmodule_Graph_canonical_permutation, METH_VARARGS | METH_KEYWORDS, diff --git a/tests/test_isomorphism.py b/tests/test_isomorphism.py index d6825edcf..16d848790 100644 --- a/tests/test_isomorphism.py +++ b/tests/test_isomorphism.py @@ -414,6 +414,19 @@ def testCountAutomorphisms(self): g = Graph.Lattice([16, 16]) self.assertEqual(2048, g.count_automorphisms()) + def testAutomorphismGroup(self): + g = Graph.Famous("petersen") + generators = g.automorphism_group() + generators.sort() + self.assertEqual( + generators, + [ + [0, 1, 2, 7, 5, 4, 6, 3, 9, 8], + [0, 4, 3, 8, 5, 1, 9, 2, 6, 7], + [1, 2, 3, 8, 6, 0, 7, 4, 5, 9] + ] + ) + def suite(): isomorphism_suite = unittest.defaultTestLoader.loadTestsFromTestCase(IsomorphismTests) From 82b3e4f89f1622a0470d28323f26cce388bad674 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 12:45:34 +0200 Subject: [PATCH 089/681] test: remove debug output from tests --- tests/test_basic.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_basic.py b/tests/test_basic.py index 48ce89d1a..6d57c5a17 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -123,7 +123,6 @@ def testAddVertex(self): self.assertRaises(TypeError, g.add_vertex, 3) vertex = g.add_vertex("3") - print(g.vcount(), g.ecount()) self.assertTrue(g.vcount() == 3 and g.ecount() == 0) self.assertEqual(2, vertex.index) self.assertTrue("name" in g.vertex_attributes()) From 951c9a790f7a58d04cbf734b2f0a31dbdd776a5d Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 13:48:09 +0200 Subject: [PATCH 090/681] test: make sure that Cairo tests are executed in tox --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 56f4556a3..7257780d5 100644 --- a/setup.py +++ b/setup.py @@ -960,6 +960,7 @@ def get_tag(self): # Dependencies needed for testing only "test": [ + "cairocffi>=1.2.0", "networkx>=2.5", "pytest>=7.0.1", "pytest-timeout>=2.1.0", From 962af9078cf1c29fb6f4f4ab8b59553c394ddb7d Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 17:57:53 +0200 Subject: [PATCH 091/681] test: fix Cairo plots one more time --- .../baseline_images/clustering_directed.png | Bin 33794 -> 33682 bytes .../cairo/baseline_images/graph_basic.png | Bin 18287 -> 16701 bytes .../cairo/baseline_images/graph_directed.png | Bin 19005 -> 17353 bytes .../graph_mark_groups_directed.png | Bin 19005 -> 17353 bytes .../graph_mark_groups_squares_directed.png | Bin 16548 -> 14924 bytes tests/drawing/cairo/test_graph.py | 10 ++++++++-- 6 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/drawing/cairo/baseline_images/clustering_directed.png b/tests/drawing/cairo/baseline_images/clustering_directed.png index 3971f801c44b9b241ad55579c2d37825480b32bf..14885e28c4e93b66b41f7ec5884d509c27601dc5 100644 GIT binary patch literal 33682 zcmZ_01z43^w>`e;O>aWFOHvw?W`i_>Gzd~6NF&{~X=wpz5s*d{P^3GgQ&Jivr91u$ zzwe%Vzu&$8=Xmry=h?n{y=%=m#+YNyMTGhjd0Z?CEC>XGtEeEW0f8Xv-Tezi2LFc_ z6+a66fo`TOFAKT7`{#W_K_Ub~2T_!j*7C^Mp7WH7eszhl_vg`0rc%B-eWLGut?AIt zi4VRBXXFII#GO3#C-l9X&%eAVl6_;V|E2yUU-g8mZrebs%1Uzm>V}m?dF+vUWad7F?{2#?#1o?d;(kKx34y6`#ym~m0E&t?+#UG8Q z(xr-;_pDn196+q>e$!^oG1Md9$x_pR{lU(v@~1Vq93{+-9i!ynLaaNd_-3knt% zzBM9^h)W9Dw#_S8URAF53aP5{|Fg6|RLwy}y|^1QkZG~!OrMwbl%6Ti-t!2$_0xQm zC9eP_;0s@0zo}jH1Ecr(+Ea0}hO^g9wGgJaRw+VJJ?^8*;1p ztd?%fctLgqV(fKK4-~JnGuq>Z3i9^t&^PXkjG=PsWqiVjxVV5qRwgDXCgf~CD9Ue>)Ovay^eYxH%$Kn=Wf`{TqK>zo8sga4Z2waA z4a;)_uMQ2Hs|!<2uW(}I<42NG#r3^to}&&89kIOSre7>LKSaUC4)ZzY4s;GENEm?| z&kqM<_;c;Hp!8)$R|!o@6epApSIk z1tBM@)f}Jg<2N>59vph>E~O_zIGFQQqeyUnPaWFKpI!+1UE;>l<|>nBh%on~JcC;k z-h;zyR(gnRCj*Am^FAU66tiEPhUGH8c|+zGuFkY6WIO3lRMf_C-6culNDAHEog9{; zJDWaj@Qvz8+&^OL>vvj0RB^pQj6p#(IR+>o80BHa;I|*si_g9yav3jjaJ%=q};l+UIpUv1fDdNhq`!TD8}?G7C2l9Ma4vCZpVcalhH(r`=g4j-gHbD*R! zTZF5mhq`VJeZ>8!693{oVvP7MJ4&~0Wo1o{t!L{oAwCjbM*+borDZm2Y)k!lc{Guc z2ag{U&d$`;oL%I~&p$vwYF%3TQuS(Jngt)8GU8COv~&?@@E5`eH8jf&TP}_#zvBM+ zg%t2r2ptcRNJJrA-t)9xN$n>$Tm1I(>!l^#SFe(;cO`t|5`vDm7MD?EWb_P_PI3@h z!eA*{m9229hXJ^hj!UwCPkaqsSvl3VwRL&FJz=+<1>Hlt_U9V0Kx&OR>Ba_45+} zHLj>=d&kpU@kKiDr4=m1OM9lM=u0a-Uz~rT9|Qy#HV}6=PNQ ztk>(styg;XycFF-O|7v{k-`$_&%-+!MBPdc|r zgpbKGWQc^|QdYQgEB(w7ut9(J?BPSL%i(||9W9O5R~N_r1DU-XoVJB|M+;~BmD;w2 zv}J{b>q}pLr{f;qQ+yKoiThW5U@X3n{aYSHoV66lbhdimsQz>UvhX~n_lBbNpFa!8 zqkK6&I^IGdeX!l+m=oRDSdgEu9frs7x#n_jaa2R&=F^D(l{o}ou)0pv%}Swiw12Md z9UmG9)Os?0OQkFssHPSaGhX49sE>!o)Np`^NX56XN`7}dYi<&(!C$raJa4X+$F%Bb z#Qmx&tTgOxBh<1cRo+zyOU~C5KFv?Jcff=GzJKi}yubfWoYIW9wUx&VQS}N@0hSwA z+}+c1vZGf=^79kQY7Ba5k=xl1h29_2DRC8|56Y9WvPx3*=La&IYS^ZSu}S6nvTx^u zkUxF8VRl3(E6x+J>3bJpZ*SX4dM{+PH|KqTOxRG9WV#AG@9x<@zB^-VP0$MvfBz17 zpC2L}yzsj_(+?7_;Ic8C+kLpsE#a{zlkz~OthDh`r{o5t06o8@P;XCaO7{F^Ww56M zQdCmXARDV~mZbmaRON}dx0jxtk9Y3y4=7gaK<3a;^LOXp(@D~F^csM)x^;bj;mv=< zot-r?Z_CV&C4ck?gWG7DnzVooR`V`(>hyPx)`mH@GNN@M7(@5=aBybZR{7DRhE{l^ zUPf`Ai!|p09gPF0*J;}uZ0b6AlFlzzTY~M5jtd@%x~JTzuzn^}PF^^3A|s=dpy^Lj zq*MqezRSeGFnj{4H*qjPw0~w6jSMGga9Q(hVrk{u+YM{{n~Z;!@2;(Z$1uluogJ(u zVcNGGgdh{2>~@1x?z7`hKh<-Nt3q! zs~0P~H8mr*I#0E(nk0PXrYBjI___Q}@osJul;HD?XY;r33%g&wM`#g%2mex5Y+36E zyE<9`d0z;1KHQX`s3_j8_xOBzbxtH~|E|h@$NJ?ERvZSj4a&uQr!>-qMF`1fOm2-G!%E-{bS`G z$<3e5aq<2A^T&^$u&{t%X~@$3_~uKYxa)uBZ&yBm>=@0+Jg%;0#_`>QB(l&;(mJo3 zwIII=Q&1QOaDJ?(L*lkAWkN?tgcL9sR>U?t`*0lZmWhjNbE)H+^nr_z0F|}Hc!_pN zaprBa*7jUoVolBvvatO|F8YP|7rw{L%l)JwT zy@?xp%57}6EQg9l&xH%o(l#|mv9#1WHk`6%B#Gjd@FDZO@p&bB6-z==_K08nx>h$e zbwD{eyxr`QMtse~gQ~`Z_o^>-D1xZ^T}DlM3WmSGm=~&z4V7qTrvIlnkvCuyo=G@_ z2@A9@v{Y0EM@E)n=(60GygdV=d3ZST;Gn$08-Mdx1N!vh)P=<;i!WCh2-AFJJzZ)M zmyN}?Vwk7&ktk#b zlK#aEp7GqTdn7UXm7O`3YTPz9LJ{}X80dh+aN7xr!UljW0aWN194uqz>*Abf!067N z+Q^7)bo8SUJY$rRFJI)!3|4I{Ep2T3Se$xEY^PE0-OCV*_|-7=g7AQs9g%m!`d7e~ z%i3~6_B?omLW5B_xxPCK&~5q8bPw>VPs-RA z`M}>7s`01I$${d@$)Q6Ei*nRxYwDZ})(x0QjJ?hry-%*H&G9;o!zKw-xSFGgiEv2gCZ z;4506NTerjmuPTKJ?!^;q@%4hsDHZv5A%`J(ougpC5wv5D06CjU<6ToLQqTaXLoM* zlTcw`o5=e5KH)MYuvn`SRx+Sr!D$!kv)6hwwfh#UZ3C{oy=!U7u^CH^hyTbr=;k>LQ4 zePIUru6D!l3C1Oncs(&LP8ChMcgu?{Ec>0fKwo}f;53e5)0}*f;1!ESA74H4Jbce_ zWgR7;QG$xf#0Godh_ar8Q_SG!%wma}wA22X>lWv9_2I^Rw(3$UKM)t?scdnuCku0rumc=N@v zx=!c*az)jPM8(a!80nn*9_+dWqlla}gbYn|HU~Po$R@IUq0vuOn_djlGZ0$pv$v}r zJ3Ko2Z1Zz~nlI0N=Bq8CZW;UqQ&lwqWt7_vc#(@pkl<_~ArBoPltK&b5nnj$rkne5 zg@k5bh54Uc9N%D*ZaRbYDEi#^C@FLo^O{dnknw~QMez7be8}COa}SSN9%%ZYU?&?A zr`7b|`(Y*_+aT zeDc_g!Rx3wmEYtw1w&CvAuPd~k$CCoRjFZwOqhgq*q@*Ht55dg%YIHxg>f7IBBv}V z`?&VXLa^eQu&1?p$rF(7Zk?UzmlxJN`i^gtLL!Lvm(aGi0nWP9aK%lBfVV{N>6!e3 zX7h7tiXWn`h4}txc5e7{ZmGP^TB6$-eR49_#*~4ozTZOg94WU>EOqZo?5vd+XBSKT zlxJrq%W~*}c{iXAoFs^HI#`k4*}Egz7|or%)bHP)l5)#+c4>;%mxgyNeV_T30u4cG z3*Aqx4{Gox)%^JWJtT_Md`$&BAqzY~&*PFr)ZJ`VX|@s9v4Q&67hi8~n=Ln$WLsDS zanf5Ay{5*foSdd$l=Sv9kG?G2&t#^iWV}JDEJeaV0d2hf+U779SuX||8kWAjadZkS zF9+}Nv5MMH*Vgu_Vnl94L{w^O=p9f$j?2uJv>s=7cXn3Oi4J)BRIiZ=3+tf^v^4Eh z@fv7G1*ZEL;9OXtKg*F;rx(jgYbq&UPZ953xLSv;e*{z^VKZ^Hxotc8oj<+(J>B*! zCN6GWFKfm6yb1l+x3;>P=5B=vMh;C*;;aT&j)SZ7yfH1ndWF=D6I1?+@ZS+c=~vfN zeRJ~-z&%Jv0OrZfspL?x$pIHw51IrOE*Uvy4h&-OEi{+W?+htJ-!>sR$#vyN5;ZTc zmw^Eg(ibk9vO9a#W3{>R%e%jfB>lwF?UUaUpItEU6Fq-ES(_xPoPsF~mX@vfkK&X1 z{ydyU{Enrvfxt1)Cl|Em+>$0J0--bSzUz~ie);X2aQd|otypuOV)tOz?03D20BO3S zI*=2u|6AnMJA{3!M6n!r&T1DnPeeN}r9BRCxm+IK0u4EgR;8w{7N6V3TXTS9!=&TN196TJ9%N0&PUqGCrJKLf(ztDVOw9)v=uJpjqkO)gjN z4u3}6&N4rLW`-{=JZ~^mQJu1#P^n=T7xf<79GAqWvKric>Z1VtY9CT7GLZH7bk~+o zaSk3*@tpl1(?)7%5AiHPL$eDFjf+C4FVEEm-N}qMnX7F$cW6|`N9>&dXF_cVmZ`Y& z9~vRM*3RheK2(UHAPyNsSorrAC`~Qyl%>49<;n`EMIN1O=0D!qJ048R%bN$4F29>C zB})^(vJ#Io%L60$AsquivV59^kR0SpYK8|nswOy zd?5V4GO$}GW*eKcsP21u?wxk!%2#~t{A@mZZl_igfMsfQdcgeEzGHLTV;}jy#8{Or z+g5zic^>tzx!H{V{nfmanb&K5Im#(PzP{tBRptMdMlEe9Gv9(06VZ!^3SkpZ0oh4X z;aXXR2ckT36)-W-nP@~H=A4|$j*fr?DWuNw+5O~uNyBvi69s>0KU|69PaI4Gr@C6FvsUM3qo3T<_Atl92(qM0a^j^}QiCqFT`XSJ15IzL~d+OW)4S zb*-DLu&`w%aoiZCzNhD}z`!gW9U2l6Tf(+B0t&2uR8WFJ6qc#oiK1xzzulIHhk3l; z-Y-m6+lZQ($(ntZ8O#E&#B{>PKWcfrNp5dH@4ns5;?#k)J&#XK-QM{@l@ct-?E_p7 z+t*LPq~M98b8tTMJ5E-U#kLqLma=DcX{nz#-mo0c04a1o1i^WFvfG!(_MEA8_Ir5r z=QU(bT~a8t(*zn z>CED(am|pN@%-q>NU;pYG(ogh7^v3U1~V`-AIA45%Q(!NEy>pVU}9iw&va#Sp)0C> zfOp&dx26JQCYvqc=#F8TCE#Zj=AV&f{WG@<2!7Rvl?q8?+9i0@wMTo47nnqor6PV8 z#5XtH1D!QaP%JZ;f;A;OBIC$Y)Ti=gMfK`yQ6FGFOl1@(b$Hj~zv11~yFApLm0*xk!?)!f356j;Sq4iV`kz zWm%8#@$Ab>MBB!b{+9w$R;OQi^N)gx!Q0+h-0rJ(I|DJEh8zee%r}-s37qkZbtBW9 z!Oiht@8g3nUtcEHm}5+o1%F_Op$d$~1xkuio&Ifg29@o6Otp>EwMg@@+u1*UK=$+^ zW$mx{H+-ypsUnVAolQ>Ux6dTK!})(5CdpM?#nudE>lB$J@y z2IVrQ3B&{40=QOQRz3&_POKwyDL$@nxut_WX4}?Z!lLus(3(!?^%FBOjR9|!38Zr?CAm z`u;w!0C?~ED}8o$*k#I?Qbs5sE&LDf6@3mJbt@jBlSvBf0IiN8YRP zx(8Cg!J;GHZo9*5zatEvaWI?PF6?%=^+R=57SLh}$6i@kpg^4dE)#lWKa(t-q4$Pa z88oSIaA35tFZ;<}5I)F(vle-uR=gqtGUg=HuycUB4Vn80*3f;L8-j@dhz@_J}_+0$Kq1f_z2Kdw-F&P%iKsj#dj=mmT}v`LhX9uv9CO7L+47EwX|KWa@pjfYi<)K zw}tJmXU8SVykMfD2DSNA4qWdE5Ix1(HLlnm^Vp!k`PJ~~fKTfGD6H?WrwFlqb@jAF z=X-j(w}HVIMI6kQiL!rtOqr@I@dWG$2vDjHGokK(AiH1N{zOKPYiK(2@;m>YO6y?G11JMuHL-|o* zA&)r*j@Sq_wq||LM;w+rn;IJGc#57eGrxO8l=2|Q*Sozl2ndh(kP8FopLuyJ*1uc_ zv9|s_im|&pdv0m;#P6m>IfdavuAr8-QC}Z$GPDaFB49-wa}9MST`|CA?{{?}YhPV$ znWv4VX_=^2-SOtjC z%~!9kyXG=gmwFPRP)ICj5iTyZvLud$*Xlu)z3E%q;0cBk7LT~ zoBF}Qd8A+Y(&Thk@_470g;$I!CrABhOHbnOxpYwK`MDOtUfwAwV4HN}-kD<)6I7nQ zT!c~P_VY2}5uR@o;9xHtTeh~hhf8#C#T?&@my{9dmNws9gTm03bGphjQL$J*lNIsJ z!Tj0_5y~J;3aP5*b)=)B2A#;eve(t^WU)8Jy|dH0q{!1iA9s5~HH)(Agb@CZ@_y4F zXaV?b;IS>I!B<&BDtDn(3^wDC|C$A$Gk%(mZE8x7N7WpP`_Spbwo0aA*l9MS~5j{k7F08$IrHjE27&JK7^W&I$4GCcohy zp@z>`Yts{BIb8_ol(*-|&{nsdZedthfRpbFbMxpu*=Z;(n;|Fb_L4=!DNXrY9D%nF zzSH1Tf)__@SJ&~G(N4=S;&!??t#ktoXky}L3+##Vj!MhFCcSe_U9P$Oo%IULiP^b z&OWM|T6Tf1&lk3ZRTL)K{KSIWBF&<)_CplnRM_Z)9z%T>(=|ia7KC1 zm0?Nb>1crK0h8%3$4SX!Twk_zpw-si)o7L*8<#|cc!u?p25N)jeSII5NhO4>`RNf6 z-~Rl%(@Ud2egJRof9WMWODxkTcwZgl)nVmEC_k#(p6NTiXwm+x?r}0v26QWMuy(wU z-n)6gH!D(7Q*(7cWo@jTh$n_X|3fGlWGJ%X5x4%I_JLIT|5;`u#yr1eOJ)-jegQpO z{zP*nY;0avc0!`zT#SJXqz1)B!l`?$++W+AH>{e0114Tp`i4R{`S?AQUhw|fKxT-j zJFtg@%wI=3xC#0A0(;2T&S?Q6e{xM1r%La01f>*a5Fq|!{I9-}$qTJf#v&?eilDmSDa()|GNbVg*N-&w9&;Wl*wV4Dq#sZ z$f?7!B+z~w!z-qDjjVy6ENX5JT52r~Uf0QU_TH)E_B^alh zs}^?sEKYMG+mlHDxJ85!6%P>qWrstoCSfS(%~PqOVXwt~uP>TIut6q3i;AmCO95G) zPftxzQ1XWpMSXsO8ABV^C;`TJDqjMwlO?;?8Wi+}dbr#W$y!>pzV7??tmI@MMW96% zz*&4_{Oy6s+1~Rq1Kw~Bwibt`#UJ-vw!`0%@jOC`)XE$S**mcVZ4xmmeSOILBK--x z!4)5665z(4Ff(n(MA_sQtXsd71E>mnWe9BY6Up0BO5t*}L=2-xkM<7RMhkxb#1F#{ z7O8$A9SJ9+i~{QI%n@{mGeuf@Fz5XTK0J>vgh_aZDkfGq&_W6eO`0JOMP3(BOEBJFU&vSfyAu*EU9s8UU2TBd zRjlIH>h)h;xwVDUd2-Z*;zBQa!#WbsvYZozqB^>Vm2e0M6kFPAyRCOb?FnW?96?bMy1xidw&=${wV9@NZSr8NIh}3R7S&V-Mlszy^xHff8bC z%VUa6AynEJul?L!x&>IrZtd-$T@;ojUIchc14Y(szp8>qHP9p`3?sc=CT#Dgaa>AQ zAWB8GMWP~m&Pd4KILGAlQYS7H6;z5bRNUvL@&btyWk&sdDhA(@kHew##|r;#j+>4X z(^5q4ITjW#jj_E;`_jWSukju3v5anOx4(Js&6^6V_&$6Ec6PQ$e%BYEDYkl#L?k^; zB=wyY7U~yjLi#*Eum5S418X|!vkO}cb#NBV($dfev|yD3t|V53utRGn`o;zr1;QqU ze`GEIcIj;hHfR)!b8(f4xV)zxhSGmI78Cc~p00Kd!`Ybo$`xFbK-iZNp`0?*2x=B7 zi~!vxhkLCv--f?&kBpeu$Dm=qa1EFUb2|fS7GT4bmFX}-L=BTZ!)a@((ikqI8%^G} z)}2-_c6LtBhB-0u(CrPQeAR@hF&AQEgNMH@S00R{At9-2m9_-l*+Y#E>jSnVRs?XU z=DPj-^IA)_?)C^-=2-wEfCr{4FJi7AAcj!#}q87yX*7x2XR9_1F`PS+P7jOrLH`-X0|`@(>W_y5-7&?4q!+J}y(9Z}=vUF>|G@h&?QAJxDJ z88XV^dKX=sk0M%#O@us=h*+8ZD6Og*H|D>$uVRNZI=*o7L8%2f3 zke~o78FapFzj87lVEU}=Y^fD~zN9iT{umfS5sQmZ-2AoH%|m^9;wUf&7eg(RE%8qH z)0Hk*+eza6pMNHuw$2Y9U}32uLAV399zQlp6TY1qb^eVn>64$jxKrmoD&)|Z_EziW zLrLmX1f_7PsEebp@Sm~zM|Ihx^oVX1H@}-g?ULF4eh_a{OgGoUcr=Le2TRMtUzpQX z4t`mNI3B)yLluFJ3nS6FaV)JH%)(6*nVt`TpuhDtrMI_WpxLUhd)GQiold z(Dju$fIJmUT;HVB^Pc19WzV=NdEqjTL*@pSW@6CyJ9OUEB9v{AUsZH=jHXnrvc-E=jS+lJ>ImWts&U)X^}D1`)&BN<;)VEOM>1f1NHU848yuYPK!vn z9ZQ+#=UJ66=h#lMX~B$5-onBxR&k~R=dYAFx;eE#7`&#?cl0B+n0P@*h`6$vC9L2> zkVUV_T^qr}LyGl9oFc?W3u;{7T&%rt$opy}ERkLr0gol;zhP&sC^yUy+>@6M?0Q2E zk5^zKxvh4XUz)260pD&vl@g~8Z~B0UtL?5gs>A&H)sIr>#o8KQ_~;n0Hw6S7_vrl2 zL!{}DAaA!^^uOYSgq$s6ycKPuUm42joSM4TP2$J)Cye^`(xOb%abb7s=lZ zP)3H+F#OdhnB`dO2l6J0cf$P-X>VTMLfs!AC*$G{E;HRJ_+I!Lq&>bTlN*@r>dJU? zRatsdR6H^#u3!SEGJ$eyz2#g5&Bch=yDogowL%)3x0H+MP5~wwHl%is@t{__H}Z zp=mo*R=%>QwCfC_t`QVXiPSt^ef9Ife3Jw7{rl1c%SdZJH`QVI`d~r_ZY}Ql=(`1@ z+^pA$?cv6#Enyf=UpR4ME#?oEsDcDUp%rwY3^}F);WhS#D=^N(>pV&CFMfo*tZ~w{I(6V5SLm ztoH8hK~yD~TEVnP_ki5Y*P+qN6&q@Usv6D>k(6F33>lfCFnRC-(Vydo1uWOW`4&0M zgMb=p9?2gXYmaB#JGOx7-R?PU5<`x*&(D9>ezQ(uyzl;LGsiu^$Md|ril37n;nNdf zKPSe?c@-S&{LVJ{rAYv@^83;^V1UkpH@MkL&fd?7_jzNxn&e{T;jM?*^NBk5Fd8w( z@+Fr`U1nxV-JcSjo!gy?U>!=|{xo_gB!6WTa+CUIkCTS&>asWI{?Hk{;7LpO@5H3o zm94WHPa-jz>2J47DgMU?7ugwxhT4SY0Yq3>nho{u-o%3KC@zYLpRTdXly-jQeVQ&{E;E?m_unId$#prIc|H^6P!)Pxa6BSC_Jovy_z5*ZMVc6O*9y zDH*oGxD}8;(T``{(U7T9t=vmo=N;t}mEfe+eyZbSQa!@W#Km8Up5VkA+P`v4T zU7N3NwKrahY7+P5U_0BNMq_sm3l62f7oU=N*{E5tdU<+yeihT7#;YJ8)OomG{!ItUqN)clP-CO;fXfAlvKLYsk{178ZfQZJFUvQO!|nT0VNj7#I5V zbZCUukVh>y6!NEI8+R#u1mG)T44>j+kUuJd^p^%9Xn|J9Pgf1l{RQ~)lucG9Y zmEp5^bL}Q4Cv$o9d3WTo^z)k;VInXpFV&YRitWCOb8>9=F}ICw_t*w>tdDJQs3YxW zq{3*mRO}@JzS^0ZX-rX``7ruk|DqPf6A4Uo!!Eqo^xwYZL2jQp#gF zyzPnTmYxt~q*~Xu2qNHWG7wyxSnzh%M&N^a?}WM1{EsK0Zr>OYFgehMx^UYRc*K+! z&~w-~QO4^)v$9g*NFNkTjymzw2h#l`Vf&@3wl)|b`y?%&*Y5eKw?YVyRdgZt)_V$r`jOvGP!sxj0=QM_f zdn=gfeIl~O^0@}c(l4Lj^)7-N21uw%N*umEH;>$RyOTI@mOR8%G9$CZ<1=tXMPIz+ z>n@c!Q`Z20ok=9(`7@(y+w0+?h%wsIb4iB$sVPQ}G%%lP2dg7Z2k2xJ-1 zQ(c3!LSO-3YegDZn7~l$NTqg3PcViW7T$o#0Zp-~4Cga+LBZ|W2y%Wh)Co+VxAu1T zU(t^dL#-BB=@DAl(sOnAyW=(*jy&mI4qOH%i*Q!fg+WOIvTnMHlSD5$1@U9BKm9%z zr+;j%9)k8?_loDsZ}#taQN(CIsz|?J3T`%dGEJV7oJLWWLXU{s6zcDIEd9iOe|OGy z2^0g?#Ig)Hv@td8)Q!(E6h#@w2%%PT;E=|n2baMFQr6ov3ZJWo>FtYci`#Fmd>%ep zyzv!Etxg;ZiKB@I$rP=wqpr8R<9qfasW6Ikis|CKr4@N&qoNuOAaFHNuzYTnUML`o z(B!n~AH%snX&w>!|Dg$fC_(GI_Fe{qiMgc(>G)WjG`NFrOhOve@*h)U2C^CD2WA?t zZ%TCUFc}7epr9DmL)FxvAvk#tYY;#Xy zY&_>f(3MZm*Q{LaTyQmo2+Wzjw41r1AOW+>t#sweqdKdMSXgHMsn!O6uYD1RL8sIctFKi400_va~X`e2mHLL-atZ&O(?52R-;) znrEFGk*(dekgZAOVSW}(GH2iyJ~$i(Yo?1UA**N1W5mRyM=*kUT6A(sH9X87Zgw-+ z&#zo-16(r+E{8AC12fu9

&@0G3cMqvP35<@KoO6r7#xM)xGrlbH9BRfr%(n(OsJ z$HzAyfE*T~G_k_Ha}BbrhMk*7=iq+J3ut5%xVN+QbLz!w#qZ=fdFkJ*F;QJ0Xh4UB z)o0AoN?yBw%B{aZty1yo-16v8?6&RX)Z)3bP-;dC1{g0WEdEddLqj8!eOpd(FRJ5B z7zi<0jpDyh;?~tc-RP4lO%)rqF=}f2M)#A64aYu_to>5T^(W$)X!aky96x&3m9%8R zYibc0;YKG(NN{}k@IcI?neNGRnx~~;>NJn?sS~E3Wq@~J81dc$tt4&`z#-m3-dsf?! zqyC_%B&T;(2S{moJ@(CEP^avp-LJkiVq;Css{?Gv+2wLG5_%wC$48iTQPES3yB(a; zl9zYAmxLzjR-wP*U>SCMDG3b$M23lpgKQBtY(_q92-3VJ8pQR%fzm*qq5n2nx~zi( zkZ<*3H8l%8L_(=wnr-D2V&%Z{mfsQ+C&yB_Zf}koIXV4rfPRZ+olOVSuB;}Vo}im; zcLb3o5fOQNPp^3ka+Ni(`WCi1r^-3`PWRuaj~Gq-zKe(=E}W|B6mM_t>FO<(L`@%U zZD15o2!c+T-vy?M+eNuP?I5)B3zPCNF|;uDPQXUt^{4ey@~!-=s90BdvTrvD1Hr9| z3x>BkanJ(=w|wcfw7F*NwLUyZ9MR6Lngf75Mv}ZUbLYnU13+H){C@x$egF1ajqN!R zdv{L}EBo5mKtUS-XUXqrsmD8GuavB;q@8$!YwYKE%+UcQr6TLxml_X$9iqM&l6#bP zw<1zW@5{B?+P^gFnP+Jp{4|%2(DclaNB^Ax<76LHx(tx52KN4c5UA6c<3mwKN!lk* zYW%ZRUkaK(V$9QlgAH+ASzWoIdUSBH+;y8F+Ql+Fh)+VIpcYofH8L{!Lg)TVez@JV zMKt){`+A#Z4!mxk2eJ`-TL6Imx;0fizS0tW9}UBj$FtS)Kk>N)qfR>)48haqoluT7 zT!OJ9mM{bueCG?_8bRZ?3>xgJdIhGjq)i0h%LDL+ODv5x`4_D9TOz`+Q*EiH3-JAJ z$jx}=Vmpg8agg=Rr{oo)?!MLj-P+Ozy8GWePVI%9XlNXrWu6ik8aW-Zq^r37xCg&? z56spULOneRQC}4mS*))|SuZv&-#x!&eIGd#Urk9BSHdqtbqRr4@dd6!LPZ^)0NO(Y zH}aAROB;n$*`JE@WM}SJa_)WU`-<6_%e^EHFigmISE|^M0Cy+xe#JM8l!>=KhR}@- z5MFVofIf6$Xc|tskv=*q8l{p~Q-fx6Y0M z1^54r(&VU0ksHNNz2pHMx{_uO8vkBRN=~X?>n0G2Fz+&JhPM%+ zFmp(aoYlbCIb@8enVGu>Q|OdIKJ*Ndj-L$z<3a(~X1;0zS#9u@sVTV7LEgTxX||yO zMV)MmkN+{2TeK2X|(nJ0@t;||5gIK*filIy%9)N45T5>%JETb^Fgl&PfFy9?y!Ed z5^1g$+-E(*z*twPQk*KNb?bOTzOc_@fu+Z#a;?|F507wD8YP7CIls=Mxd$@QV7s8v z*ZZrrAh;82mJ=tP5sfPs9i)I*Y$G7;qT4giz6WP!wz7Jkhf1irO#wv(qg1xj?10a|(9OSY7GxDA1VnKycn=fZOrr10Vs;efm;^ z@u=h8qGDk5&^+^dbcX%YssRUFt|k#c3(_|43e9-vB*YsposmF@j10`QDAL6ZOcrjs z5_35PYT`RA;~AQGzPr<4^|L%3kl^@O`xgsfVYCGQwJ^A1<%(d0a41`WOyx^waWOw! zZ0~^;Vq+8(PCdxu$EC)xO}EJsvA%Z|%ijZzJ17-#IrChQx?M04;?I9z1corre86yh z*|U5c^V^ueRRi=q!J)FhFup*;wC+kxF1Be;)(T@QXK#Lw>y?*Tmn1*HMRhioLK<{5n?%sx)y5X27rn|H+31d5Dgv;ZpK) z!@w{MC8c7Dy?l6KVK_Rjx(0*(t8w+GJsj-preo^>%JOz!jlFM)9L@y`I-Oqb!dVg! zsIVoks&ZU`c1D+M&Ka{KJZ@bCIFy6-_dLXK?80%{Jf9*plHZF|DZQ%;4v>5$x{i)gZYRPL z*S#tEegaA*cd}3`>q}7UYllBFDctf#_1$z}`U(jNl;Hj8WD-|fcKiRrhWl1UMP*dt zUORyM{>)p#?!!!m8LX`6*s*$(eOD>}G6k&M>SONVdUw3@?fLrOI`ZgfFZ(uNu&drv zL8bI}U2#6lx}-#t78EZqOc(24K3~JS-VP1DQ1qUXG_#Iu34W@D7|wm#Qal!kodX2E z#w9BFWCW-qdHSZkz{a~hrwOj%H6N;=CnT(}93*XeE={kc9`KO`0q^-rsjaK?fR&y7 zPN8arP)m-i`#Yyc0@YrNZD zc%T1KNRk20b#@hXj}*>E8iR#8CJhQ@Su-CA|C|(EFgcvYD4*A# zkP;S#0YOFcT?}TgSKZVBKm33W)UmjaJGS^TrM$d<=&~qXI3G(xv+ZERxF7`Vc=jub3HLa@sxy1rJ=!fAiK#}?<`$!c5~Um3hj!8aE^m@C?;C) z_@wc6siS~kt`@0zs&e&{_Oe;(Hx)Nju)A;wq{!hHVrRNKuVSyMqa!G?Nfr0ZL9wUm z&6_|!zwE|`+aqX@rKKOnC7u6LCQ#FEn+eW8vxeC}cCI%VNn*SEkJALVa!cgoK$kTb zqkHhyv1|!mn2RDotFM1=N8`fvuPuVe@#W>+P|NBo`VnJusH8MPD=9%nd;5nO4ULRU zinV>Nj<#Ie5W2dWQ-m201&lPNtrZypNB3?A{vUmFc1}*z!6C;31LJ0lwe@vwY|QiD zo9^>S%?;kGO=V^y;?(&ecf$Fdg74wlE*P6B_RFPqygWaA+t=sMos|65a!|tX%$lCl zh&wS!`#2U|37fu}5S&Q7!FJiR2`nru?WU(l6K{Vz|NQk1Y457%iQXnlYwc?mH5 zEi_G+R=0lkM@BK%ee-nM?>##5_b<&ygRGWoE$2Sv5)}NaD#MR{-6MuFi7)G@vi7mf z4-^z*y}vq0QR;)fN)ZI_!8b1ZOjP^n(=XnM_wF6Ly4+klMU%h{I6)bW2uZ%Uh`3@e zBfHjR$e!0QzMZE%^nm$R3CB2E$^F~hSn^Bh@CmSOZ{=e9x10C{yq z!mzNDJO|+aUt>wu>$Okg<>~yVqKn$$BrGhMi<2a7-4peT^3PvF)PG38wYC3(o2l8? zShb3b*@A*z|8W_U#EjYP;atgD1A});KVy&!cgg7+7y(qaBK+Dyn_{WAN=prUFm>=2 zN=vDD>z;X98Fgf?u`&z zEiJ#_KOIUFM+=NO>|#FI(!Wg!OD2*1@a01PF*0*LVNQkA2#EsNrxl_Szw6^J(>5=5 zHne>Ybj)vy9@o4WE4s~vm=_Af2D)z5@=N3^%Q1iyhFpfmRD8^CnqZ-BG_KNf}{yp zk2RQg-GX5L63R=Y#+BPrf2`$=vftHFEcBv zsZMlut|TtuEg}fH>XqgVwJGyUL|l167738d(D)~QPlq%7Zyq^skp!HmrWdobDU!Jy zvOtb@jcyDC2mc*TBc7R=*UDDEGf6EddyiPZ4dnkYGe?@}Le*6GDynVOH zOORPWpxTf;p&quj0;cs?S(_)mUaf9&A*MGs)r@cby-&$WR;#O#&d5W5NykP~zttm9 ze#85fDQ!|T?Sy%PNOky~xiIge4IN^RcY1`myqFy%&ul-xZ;!+sgJ7|K2v?wecW_M> z^C1AQ()gpqsjJ@#55GyD>>O`+eil^S zOMNNVb*}m|>9Mqo*y+*Y&_zL|UWaKSU~ex`GcOX%siB#U{jKEr$eN4DIM zVQULB(s$Ehi0nk=#!a>cn@I^nH}BsA4iXa0+_cxrIq`R&ud?S0jE#vNJdY53J^uMK z8|})TWsWvB20lf7>1S*&MRuP9eMc2n9mhFm+sF_8{%ndY5wsQdrZ4I|CbUa>&&0bM z0zMFvkxlOo^^{pxK2J3Rb%e}DBH9DM!zmxQZ^iH!Lk2?|wEBB62JB0*)<-b2#qyw)RjvmC|9 z*sJ^8W^25yEmllyZ*Fa~KT0du7e7h)c`ws9)1BFUwZlAA2q`H^*t**4_(&cqWzXfy z&6E;n9%zI*JvunqNv|#Ia13^-sI(nIkdQ3>G1D5&>q}={X;%S7av0|rg305 z(>i|}jKm@szKXElY`5(9Z~DEZnbgO-F5%2_A3g1RqS8g6}T?TEOLO+EvlaxN^K_5*6JfJu9BeYx_9O1 zNMvDyi_EB%P^bKjRtdae)TxP)noso`FMofgT}7=?ARsKe@R7MQ_mj!beSvmCc^f5{$1N_@?*5_w^)<$@sGI2gY{qaKyn|of~Nj=j$-ASz_H5hDV zjQz*uC^}9!%Ar~?P9TwxHX-w%Rww@CgeN=#=3Slb(AOATe<9H}2>Tu7u(~~m-`<|= z?VXu9{4LY))vuol8+WlZNh&M1BYDBRl*uT&gWrGVb1I0asX0U4r-sQ=$&Bx5gB0S$ zw|o9Q350m!JAGZ;{On=|k($$>}}IIB{pHEaL41 z7e+>N2R4S^7RtTDbizK#U(;t6zA!{QpOb}A6_IgCcu6tY<`mi~;^JzV(wQfG58aj% z#eNbJBHvPQNj_(objJ3II0)q)&qJYiIj1kq{h0drz#e+j5gliz0v}2nVYu~AypTaZB0$--P3e=72EbTOcj-0OZL+}UFJ8W76rmd{ZJ4Bc{ydz3P(*S8 zxj2U@Bs4p>&`5jdn4-hzlYGiz+tL(R8MaL1dz}h4LvEZ99tWGN#|5Wno1;{*ZD}o zc%{K}4&9PUBcfs?OD!PojQOYj^MedsZP@S^<%0-T1bEkm&uwk@gkAdg_9z02U_itK zw2eCL>jrFRefX`FlJL+d*uSlJP2lyip4GZJq~s-JGXy$9tM$Vzyy4*aK!z=^cef?+&BczINszqx4CNcxA=K=Ws_#bETd=d*qFUM3q`J zq{?Ne6P=&t-!~P$dV!^vUq*xjgh^my^Y9cJUqyq8y1ERhD_c`8j`Jlsb!wi_kx ztQw-nj(q#?u5vUrM@BZqaMny^$0$V}??Y)C21wrzg_&h?iU_JS-*v-@;P8^oJ)7U3 z5~aIaKQW?-__aL;!!?9mUku+3P|m*pxJy^A6GAq^0qyKxkFA7%QE<41?-X8qH#W{U%br?d+b>DJybVwc1ksvJKPCbx4GiD9% zB0YznG<@3}IO1vuDM@UK-0j=01_q*w6WRz_1w!QGOV4_e!=s`KRcna@LrHDDy!_k7 zGkD{y8=KIp*w-w9P%=TRPdqNOa$30)pnNUWnql^~xw!bC;Y`xwypWKZ(QhPywr39= z)_uJHK|W@Pkco^#z)GY2vY`VIt-5}X&gNKt)D_L8z{M-$>6&zy0j;! zWBgVeWOMbGZU|vnTmSgNh0;^*b(CmB`zMZxs89TkUmoxzS?ebu4iA}Qx5ELWMq$$e$5;| z)YU24*%_b?zF<4vhr5d?SM9OdwNYG&fY8=b%Yu^TBBL}OfrF17l*p5fa#YP;=Wv^$ zm4d>!fULM-2X|5N(CQe!-J()bgIEc5LxWN_6d7LrC$&@Ig$p^d!F5?zR}+k0exy1h z<2hILw03ctQlvi)h%H!GH``eOH<|yk`81~Z#6Ea%!ArBW?A=a8%dCRk4vmr!&}+1& zg#l?Muhs~)dvD2;>JbcR$`zXio#PL}!g$^hkkH=HDT3LOPHVh>S6ESIs?9j;NChSM zOwKRes?mdg85J`NmQ-lt1XOFwMyivOB781vxacGzx^$*LGxTVmGB8=`+13k;gLNVB zz%nmXJ8*JQijWNq zgF*v7?vXcpYre@$ER1Y;whtN`Z^p>MXZ{>qAtCu~rSOx;^X#_EOrpaprOfYA^kSQM z`u~t>{0E2%pY6p!qBn%GheXL$^wVitk5@O;LNMm0bP49;ZsO0R_w@1zp_Wx;8qju169W9v{3> zhYceUom^zYKccQLP$iXpqUoMsVdM^EOx+&a+%)yZhBM8nA9B3kQ_T8~C*CGd-5x%BqePZU z8bl$M((v+266zK#26f6BwUIfXY5jfbE=LlQbC0|<)=vC%O`N4%v!!$ zGuYd_E#@J^BcoW}GIeB4ck@MNDlZ+bLEzx5t@yc39pRTKrm~!**{YJKF z;|BQu5ZjEtQ!`d-shl376e;Zb>gax!YLnxXOk~U!E*Y}0)n~FgJ;A?CNr9CmK|$Va ze?Z+gd3N^ZeKHJ+JILMTa3*8C_kGlu(@TFE(QfJz+3lz)32}Mahr=TcVhAOT>laXc zP@05f?nO9CRS*2CXQB%B?d*u1lyrIn>b99W zI(@F^@^;vj!MBV;9ljkNp5Ds1CPLOla4;YHO%(g@MTE=?mgbM_jXyr$IIW8ZN{FaR ze6~dIDNoNW4v`zv6<=ScV@vxDPIy?e$;>sqygW^as6B;9NQ8U-)BN>y~Y+3GY4bOGXxa@(q{i1JM@qN64If!14NeL%D z{`ViRWJWTw#Vu2QR#picn=s`}&&%lG@I};emA^k&Vilf9@9~+dp&=Bry{EeauOXdC zj5I+ZBHAD7=s1-Vkc7>82);^;jv11>bP0*#)NdKg{WrA#9_VX&?YJ2COHoTO1PZ;f z?U3bN{PmvUu}^Zw0JFFE)3lp+m6H4ABguf$JRKB}l@@2p1(Z#xbj)8{yFEaqs(5O)NC)l~$H3we~DD>QuW*gC`LX&=7X( zm7~}?9wr4B)*I_O-)ZvN`KDoZQYjvvH-{w9dG^H0@oh6?im};YwK3w zNwoj?P9%y^AI|*BE`sSE52KsgXCOogXfGwL?~K>{$8yXV6Egr{Nc-Km&fg_(F>k=g z&p4FGtrcf9DED?2iJmQv=V&HQPfrJ2gZW!Oe=_rPYSIT>!00&FWAU$kz^kyibPfs> z>5~vd0NzJ!^1Z@2pk;HpJHP3LF)`u9l1FE<2+W-4rzX zFIk-*?hI{=AJ$n-_#_*?G#FsRfZ3`E34k-T@9WGXDFHf`5c)|P1T-z%l`%=ArGe@*b0 z=C^@?0zVVtf0gC`53*NBO!}qayFR^Quz&UD6HTP-X$Z}0v?m|%MQ_t$KtFXC$W{?Y z`}_7bBzWJR|C6UL6~S`Q?Fl=zic5)of7YUD~HTlJ_uDRmteTa+;45s-vju()Q zj2nqaCdQ-VY(k$;MSE5u*R`|LVlOX4?pUS7=Aerd;a0C4tTOKVI>uQKD#m2iPasyT z`chJxd5$cvb&EpjCxG?m2Y@;ZU$se=YiuHOQH;rfw85c@@{06_+nq?1t!;rVGsYEc z5I$r`i?8?Q;_T8f+rLJu6{rflpr8dw$)DHJc=u|6ZM+J`b8YR7!80GcKY#zLbAVSa zpEex?80)#8@s_722|K`@NGbhjg`Qc5{!+pbG5RKs-v8K)Y*SMq#V-lN`CpXCqVPcY z$ZY{yJt&{t&w+nj&`;l2Rq%dkNpA(3E%l777#;; z_hQduc+>~+TvRN<{>F;qI6^U+fzjm$P*Db2p`(GE+hlXoV!*MvxHxnmc#M__M4DI= zIXWVueq}c;txjVkCT2)`$@}~N&<9cqyju!}hLJIg*3H@mK>3V7fc4T>gwKa(US2`K zDx?Jj4w{I7Yx@yi=aGabN5c#|bYLL!d|-Vdmzr;N^9RobAV=T%7m%5bgsm%>bV=~u zU&J(s--EfitO{;W1ec)}LqMny>s1ddt=KR;4+m2c7j3}o>1x?^ho}2QF8g`w>zrhW z|AWYxngS6TBxq?G!Nww)+e6^C{vZkAxbdfz{?fA%ZXCVe=DhMRir=Rf^QilX8+LKq z**$jLNFXOOymcULz4c;t?)mUtoIUm2fUmwEz-Ab0IEJg8mHY_1`||+%fk21Ai1Hu` zpaH6P19Vehlf!t0JmxwMSB4-CC&%;g!Kmk-N>rc)qatP5x`>Lx2G9aufd9vT1wN%j zUh@yp?_PdscHMv&tmJN#ZVDPf4Wm4UAyHT3azUfQKl-;Vv4lPUZ!Lgy+Z+zQw+{H+ zL1ZO)lKi_I4mf*rJV;Qf0+yCgt)Ys`Q~HQNt>Ecrh$xuEH?7L zSuaBz93YJWv?gnv12MdJgb3=ljz4?>qqk2AI~t>Ihk^ zg}M{c+FF3O_^)~w!9g-Bn=%{PpMe0gr)7JZs~`G_pM>~Lz%^#sE?F5}90>(Y12_md z^`PsWm<_H1f%+KkHRS=b6B-+zy@aqxt;0tvMH9W$OW{1+j3Kn27|RPKQW}5(a>Dc` z;&FS~3)BYr^N{nQn?)!cNMKbCzyAlwyxAOguBp$CtQqXs1X>Ry_JYl3qum82la@{y#^r z@0)so03sWV5rCgGZIgobjL{|&XQw4K)p`~q%7~6&8kp0;O{JFS^GqyND)v|4hXt!^ zVRJIIb}##WH}&}ukX-$Cp?H{)>AA=RRxc*8X^<=n%PuZ=Ky*=b*N*X4>)%Dx*qAn= zW3oozHQqoLl*$BbC;M5X60q>eX4Jev=JpuQ%}sQ6l@yoc>ep08E|HK>4Td~TU!R*N zq`YzCN9SV`1O|tWM$zO=85u1c_Vf3f-$l=F2zZ`B6j?Jq{$qSRr@A_-%E8nR!SZ)a z$cq+(ky{(27KX7huImqa)i^2f$fyIW9D7RGC!M8|`xi-6m2lYmsB`D%_h5Ef#f-P* z$;sD_Apf?_Xp5=ITX*j!iv5#>u(5&b6ZZCSuKG?hiKr&xC6K74@h+nSQL zA*U6BxGkYrMn-Dpk2p5ADjR5yCDc5|iJCkC$|o?4DcDAH=f5)t$Z*->RZK78(ukK|cZ~iDp)EPD zhiED`KIrysKTbWjIyCt;d)+=gJ==~$5Q*S*!Fy^Ne0i}iFTN_`=~bdot%L;9mlEPC zQ7UG;{B`GNTW>C1a5~0YHgkB(Lofh~G*wcOb@x|geUuNOg9D_}>N@ceAgx&l*td-h z><$d(f>d4;gqF%jxY1HM<SC|ak3_Lt z8vbYj83+>4!fvr#OyxipNKgR{znfm!HT`LZeW}cfLw=0SoEh7}!%yeZJsPWZpNZ_4 zQpp;`h?HHEiwO$4<+#3D1-rbNDcd2oLQ{$o)ekXxh zTOVJsg2ZsWtY=!lt})7;w%RwScjjWarmFaLQ+t_bg{Zq+4-cDO{y^;G=`%7mRYisu z@$>C@PuBQC6bJbdSzp|1zw+Y6Gf{IYVhnCu5*Pxmd$`sQ+}6k2hlepGBr2uilT@;- z#t+u&FBQ&$M3gvaf>!tY>*~^{KR4~Il{=BVUis6>1t7_mi--4oe;wo1>hLwXYd zj_`dOlekev^^};Hc53+)PeT2rhq*4Y+c1Sp4IyjHf-cNLBI{4zv^<52CRLPi{Hr@t$&n3)m-ZfeCUz$7D3Au&I8U_z%2HcFeYr6Wb zS1}wmIQN@BmY0|A?YW%HwPHDqw9L01?jS2jNCMF3STct5YDwP<7a?cT<9!%O!>%qH zNx771hW9%I^`W!S)3f3qUw&@x<)u=ow45V6iRE~q7wwRZ-l#v^ky%>WsQw$SMCO}p z`0A|g9CL$#zclN%kB7%~0pjN7;p&RjAgHy?6O^Zl?tGH_v%QO4F2rA25f&2U?@u7- zTC+P)x4*jzH|ykTL0&vS`PQlGh>>~(>pzdg#Ybia&0L&QSB|HY;%aI__XM6YGJ0!Q zm=6^P)09y@+}}ES4dc3LX#U-HvaB59+Re)_jKM?1%l}EH|6RI8CV`g30)t>AH6$;R`=$MJ@TB^?zeueNe(2mf-B0~A zO&y$eR{!?c);1y2u$m(=spj-;6#Iqu8_zRvlQS7b+CD?-Q zaH&K~*!Xapp<8sS&K=Z4XjPef*q;+nF5u)W6G@Ak*`ezE2xHQnGARk_pcxnrrbG;4 z<@a1d={nC23}lS3mM{5q%(;)1SU7J?ZH!Q5I_p z3+uB?Tl9YZIm6aHJr1_cbuYh=qqRBJYz&ZP)x`QxQS3+zO-++Qf-);uWr7>O(zJ3M0pyZ+Or$O}ZD=W#* z*YApJ^dx00(xVy~vBtvotJzP;pXQ2y*>L8RdhR93OWfRnFwFwvV!HMXS`uolO0i0- zg`W@PV(7RKoBa%u44dI8GjI4OKW2{Uva*#N9mNZcCOfe}?NI6q>?r@gd~2=rGy_?@ zd1!W0Sa@(?ARzc>{K00N>Qm)iU*h@gQPTj_x?pv(b=V$zrZpDAu3vqFIkjNMLI#f9J%82F5wl^^ap1&+> z9xROx?LG+=UGFb4Qe{dVG|8K&&0R}Ocp?kI0e`-_VwHx4UVg%2JqJl_-G{ZYjrm!( z!xkDK0OR#gn$6kL;JrAi3P#QS4hGygtRd?>AkScg*Fo@yX}r2(t}Tpb;parTyLP7X zK(=PFM6vNdf{s>8E9QxRJ600SzHpT8@9)2I;M1TMH)K4Mk#iO0u;`1teGzn~DKxi7 zT<66zAC!)ymT7+jdlSxluz0I&?%)r;{jy>CMsBs6@1KsYPlZEyrj$YJ3JOGm8MVA- z{&Wu%#aR?{)k1X(UpzYA^A@xx#`|VXUwZ~=ty`Rg1KDzsv@-1l@P!LsW;(gxG66*q zu`(;HQ!{trL9sg=Y-XrB5upt6=(YXD#fg_c-OkUBk)B&!olR|FZEf|Hudm-jR<26R zVsZIkq&;amIsDLh&yrftec;y==c*VsFDLKrb}&sXuQ?Xn$}~E(KhhE`v602X*!K#A zxLsfTn7ZS29&!TC6*htEW2I2S0C9&yxO~(-Jcc(FcJ~ah47sb%1Y1IU$;QNjy=YY! zgYMg%9=Qx;*G*NGDMcPQxouv8kyd*gaZ4Uv?t{yqO`nn1vh2Z$)RiYXxA;O|pNnA(qo{e7>F za|v!q8`5h!J%*qQv~bg>DMree>xM5|Q@@%}27#%^;!D_UZ65BV6Vi=qzPegwdabeX zSNXl4U;I*1#79t3cg+~Cz#V9lPXDxqKIUw#e|uesBHF26P7KvEN5lV3;@;jUFTa$O zgHnKeUlFZP@A|~?d~TT!I`bcP3#If%*mbjm9r%xG^DuNvBj0Kk6O&$!!V?jJ@8PO7 zsa3rCCCeV0R|KkYPmf1$d%zdH=e#F;Izi6v5&Q5^e|;VK*0`&&(7IuBag~%b|?0m}vqo64iH*P}&b9cONaG z0bZ(<2xE^97dE$%IyanNr98MBi^O@92_5|4gQ15UBO$?Q4n2A54TeUm;8GZ&nR582 zh^LA9`3_Z2`UGDOi!o;@hqZ=U2LxyeJ@@)m*m8Jy{oZ9NDx9lu-CM7blxkZfUQ#sj zEga%Nask)USylxFlgS%*w3ChG?ps@3I+lB#w3gVCnr8NrLe5d?9~wUU0x*)#rtrF;PPd-lrN6AIGoVzxs8pRSym|`p~|7_ z=V0lqi-i6ZONqIhttNSx>Vv2cn^R9ddBk%!SM>X4My09EG!cwqke1wCnfW78plG1>BbQhN(Elrf?txdiz{7*$;o(F* z;VV~QIl3Quzq=Y7`}NX9S9`_B&nFt#C7LxZYt+11b4#YHtN!vmklMBtp zTIIPR@;>P?2_5Jph5{5SIC2KqB?Mr&bWo@>Nrdlu`{uLq>D`Qb_n=wd%BtKR_w|Zw zBrR2lFGXYPVz1a$oHwDNsN(ydA-2RH$`@TsJaTd_+1tJPch_=dVPR&@2ws-Ja3$c{ z@1C9&7KLvlRK2PQXz1_lB_{O>xR%-(LeMIR_uO=8>EPJfL5W@|OGUk}_nTj0!pQ=? zcEx8}l_D%C@A2#YLeK4B0fy^y+1K}Z9}C=O_wjn$9I25MmXW(}!F>m%PDGja=r@IU zFq?|)EAB-%znpIer3ZDk{)2@hAtT#ZwSml)w7)NC{{g|veSd}1C-gb?E^3s}>?D{5 zsKrnHy0b*@(UzgI(z3F`;#<8_ps#epjRBU+Dm@Ji0oQD{7)6e7f+*!;XsM|2pJRTb zRk1`pd>u&J-%H#76c^W)hQ>juU7kE!1=xY-aJnKt{l>3XN+H;ec3o~8hD}}>&l&lIPAEKZCViUT zI6_6qSwEzn+}~!Rfs>j72BFHn^1x3C5MNFvpvGYhc+1&pVmRv5X1V`e-Ix}tYFx8@ZJq_>kTwrZ8K+dS3EYGQ(dbU|UEsajc{L*a0;hr5u2QYN0;;YvPd zNJs=W;YHa=PfC*V@6G4cn_gh`VTHuhI`D(fPRm{Qf6EPyiq%BK=T5vig2My+t*W>f zwpH#G%RQUHZqaiQ%eY?^#MD<=6kB3>u8YzE{fCXE!cQtJ^ghZ66wK&a9^B2=>>C~l z(}YTwo9(W>+| zErX($udB`Nkb@Sy-d~66b&GL-{zc_`+GC7e=dsv6|R>4p}(DFQT45$E?fDhLsS%j&?PQ zu>hm&7H-;VW5%*kAUl)g(00Uy8A^#%Tuh1t2JRDW z{Qvxmx^uiuI!a3z^eaTi+Sv66q?nj6X9faI@GZR>I5HY=I8)__JgstR`#~S?wt1FT-LzJ?08t=JzDMD{(E|`U#zR`XRV4J zc8P9^q@G$aNf}#?sMDsjj?Uu277~B`#0{q22|2cm6mJ_iu#I7Kevmn!;P( zi(F4k5O|xM?8l{PgQnf8Ld6=eQNsmE-tqB;*Y2C1YZj*&d1IwiIZ_6Oe|Tdvb2H-i zcieAQkexTA)4*vT-rjySFMmj@^77?(3M{k0+SqW`F<|lqiGV(4u5gkOwL={j-XJ@#);~y+E1YM&*a$iHAK&$_k zzGUfu!ApsrY>xG3CQDJk3?xF@#t#hs{%CCE;qWnhr^5EVHRcB4nFh8hr_@BH8rt_f z2?pQueIT1+N=!9-ASLDw&0yx!DTg(m%crOOX^MWIXrO;!q7o>9@jKrSKlHVz6%q`w zOTGb?Ln6)on?K=l%VR%6y>jBcNmryD3m&FqFj9+}f~!S}9(_2dD3C=QmG(*{so?K{ z(5XNHk?+b7y}goqb+y*<5!TUB>F&C?=?vFS>F<_7RWPts8IaKuM_@MfDIU9)z58qs`QpzTw z4JM=ofBl0LpF#8L|I1?p1*wIqwk7@z;3E#E;c_g{*{-oNGKp8NwsC-=slEWdW{J&v z))EZNb0J^f^OuBd*jRl#Q(9`ge`sA)Y^F-4nUf2j^>9IMU7b7&I|nD7i04^) z(>r149QcblR>~l7T|@-NGWz+6YerPOU|`B_g&&YAlmU1Ltqm^rO6qGPPvP<;>nexJ zjhCp*0dvPyjiTp|TWVZ&XSYY2n@i1JSJs@~j$N(Q5y`UFUoaaWlb!R__tc#x!iIb> z@Y4wI%~u4pY-E8Pm+={TQijFu%oGxu8Gx3fYcaF1ptgm%o_|Nbjw9hY4wgzin& zt4a5ebF#{ZqOGGWM?$g z%~IGDV90pEeOuRsGK}8qR}_sS{kh|Nr-*DqO*i!Vyf0z!)BOJ$T?9^0-^s}K_; zhwXW8BzoplTwdN-lTN-e|A%|0xZ4Hl{1i4OOYrR$l8v8yZ*F)<6rGaQG_&iU6&^}- zv@dmj_9&Kcd7=u2C}I;`jvf>f{uF6wZN9R;y1G6)J3srEizsy2$_mmL0}~S^=bP}) zI6Asg+e5hAmQX-IfSht=>kchGzQOsSR66owgm=MRxQEl2{A&?ZjuA9BW5x@m*u9kh zqNjkp+kgABAf^Tq`?X1Hi1lJ=>W;Cbq-Fem+rzX{*{D}5(F)eO6{L{2+>)r?dgn1E z5gqLNq3!ytE!0m_+=0`M@oHzjDaBIZbA1$hxozrfyz#Kuz$uwhtbAI}J{|Mb#6H&U z_@+EvXgfDSh_72PcEZ*hUN#$&TpMMk?f-n^hG5FyX zX(id}ihX4QsqJ$jA|i^;5y-bNJ*;OsLh;wv01tg}iclyxmH#N~Yqub)fF){sB{LI_ zMsX8QccMg4`0fiM)@Avon$I`t5)(g3NT`-*8uu_-Oa#8c_$=`JlBabdTO+)Qh_W&r zMf1)=lCrQ{rqzUBQ1j7lR|fX5`^f=r3>Q(>YswD#ILC3ywM8YnkjU9kbQFrj%1q|B1*t9Z?^DHPs-e?n0tZ7eM#(HS+ivTz8X-W zk`oia>fLDV zin8N`hXKwzuNDZ$$2WJnuive|iyL7CE1oPRlpz&zlYQm4T+3o2OKNI-wcFwRM3rn* zR$7dD(7UVJP=C%|M)%SfZd3I8h!mIn6Qlp(6aLGWa6^6OQ-&BC9%gPu^k>CEOBnaoD)l~k7FeeTU8G`n5cMIn z|6YO%_e~>_)1cH^vj#OmDp#=cCtQC9d(x8vmr@u8PBqQ^HfUyfl4TYsDoi_83e)gr zXEC6}=3q~|`ouQMjZ*U}Yc}79%D#w{sO_PQ7D*J~1 zOy<_eYXQ$0m>6%PVZJqxk}JATY=D#E^+saW0OX`CI9|MXwZ{=Dive!o0|S(i%t2A= zlCSRv|F3(A-Y&B^FJ63z+23Tg#2%QUze>~Cifv_eF~TV@5Cog|1crvwqr6Nke>$T4 z=)aXnlv!ODxshMAzwC~FsOFaAeWc>yu{cUTQI(=d@8qhk8ECi$ zyWRFCPxrAr0f`fxlja$MxI2iDsjD&)C9`c#j{|6^zM4kWu literal 33794 zcmZsD1z45cw)Lhr-KjLv0wSd#u>k=|5d@^WOS-$ILHWANW6TYYcb`2yiQFNr)4oiQurZV?KzhfhODfK$rr7-H_-_p z1+1ArXqix@q$Fhn#1yZTDX_`;+gjoF_BgneTjm3zm|q7(MNK`ShEuOV-f%rg*isGN6Xx4M8zMu|$ct^6mRcVXa zP}xKrN^A%`oa=dD25p_a?u{QEoJlhjDVMIeq%k&SyFEx;Ql2VV?_Dl(inrm8C zR$|8hZn97v(y}hf=nvk?2}S#CXra5e_u2VA!;c@tVPfH@CsUOsx^q=eBfDA75fTz6 zYVm`xMCf1{uP177+1NPm?O_DLXw=l)-KX2&f9f5n8Bic6r@F={C@5TJbat7lG?Si3 zne#)*Or)fZv0pGk!;tW#@Fz3v0-a9x?Whq1|vivz^$PtRp2wKRzxLBH}TW(USBgUbRJ8c5r>W*o)-V)jQk6!+2h7cC9oAbB!8r zqrnwzYU(jR@Z>YJc#A!_7Bj)+#&3`A(=DgldQo|J3Md2w<>acqaWOISI@usKy&&Dl z&92g08(8GwNxfwKpr8$WvnjC!5Hr#!Rgo4lbtg`HRvNR_Yf-h?!YQsZR#& zRF&biT>*nE84>0Faj#oznHBu)*r?U+)R>s|{k!?N7(deIHur*cj^e5$6_um~v43M1 z2P^80?HMbNg|G>u7!AZ^vaEvq4*!v|fde1SQe2j_{_!zOW%r4M57l&+QTxth>Sfc8 zg-l}L5BX;{R1xGEi?jaMIXHOV6^ga>=LIh=7xy$FIM9)DhMiqqvrzd8ww~@k)6>U8 z$-1#ON-sw~h_7Bo(~_ln2wX2AH8ey;`~1u(wKE>O6^H8j%B50?iRkH6VsxA zj21_V_$@5?24d!)bQ`U&iobHNX+EMXz_urb4s~_C{GjHsrk=>v8cG;1NM7&MK0$&` z+*hFp%R>dBo~Po-bGFkOh*{%F4!LlTPiUQ^`140WF)uLHYk%@NzK?Kzj%48QSxE=G5g?u`mrf#&jlJ0Yoq~$W$k_AUkkXv1I#HX)V0Qb{v3(D z;8VrU4$fP_8ElB9GRaVK#+vQPZkzsI=q0{T6{e6TRQH_gsQWw7=~g(0;Rlk&urnS>E`<@ zwQ>Uu5!aX5a^hypuRpcy%^oF@h(p!E7DbC1(Vy*ge&eq3cmy_E^+VfW;hX72mhH*@ zxFB|ItniR$JRCNJXx9#V1s&_>DFTzbKQlH7DM}p?NOFoi&Bu$njszy$j}U)n15_$E z((Oc>w1et~f;{77G7XxqM6a!FNpy5JHg<_XHjt)?)d~rl#;5S)rEZ;@nJJWr%r@-u z7j!vnGy9dCI%n<(gh1ZQU&o;jkmUNu&aQEGzcxHcprGeY)i8?~{Dk@q8NJYg+HT%qL z?Qd+VXvrc0R{}h8^5X;Ddp6C$^BvQh+V{6LnVE~_#^%{S*!za}k6T+Cu)VdFl_Qy% zEK~T;N5=Bosw}&wC)_Kt-%p+Gg6nQ=@i}3=a^-;1iD7}Izod((Z1+-nuQgXXF|lx9 zV~L4LoIdhrR7q1j%QrPvl8%2kNv+buP0`iW+R(6lNzX?$>3bd-x&bp&IOR+GH5Khm z6EljC5VZ;?>##sfFPo2BlSSly;>8~V+Jk>*jkreC*c}sf{kbzsn}R{qsjtz4G&mEz>t|1{&R@OigJ@Yf4kJ zg5DR_kv?iprhP|;H_5K{IXVWRrA{;`VQ5HJ$b)0iSc)!Qh%!3bWR@&Cdd8*t%@!3{ z&4z7D{+m|6dm%EL1D%QK46Rq<>_tjex{JBy<7X0L1R-J(L_}<`bjPvktzsctnuD3z z&-Vq)IG=XL%-g)-QiVQm;vXF?Y=;G5>+1R(ucxQC8m0Ry;emvjlavxsz~QlMTkaN4 z$bhRI#nN^~cU}$*2noqom}nf3RabUPh+QqQ&&@G-j|EAKj);g$o>g$UyOxpue`w`})d=TQ&WWU8wA zR`!ai(FOmxQCba&*DaE^wu_3C?o+w3bg}&wA}{aB783ogEo-KcQA&-g!+vKNva4%GLE*LIR^~t!uW`4&zSms& zdSlp2GBPjO_!04;uYC(T7E_4a+(|F|v>I1JX)-x;a6Z>9wjv-Rx6M;-Znh+5z|GE3 zNi@T$?^m`*R#bhxEmT*=3+asL|C(iF)YSN^!1H!2hQ88d#9QR*8#feHYmW_!c;zIg2;zx!)BITM)ypBzT=heSDui>4hzgcoPe)98Eih7Gou z{qDz`yNPs{;~8JyGIgodrPY8qc3cW9b#*au+jS}K+}VwYs8Pk?RQ+zO0`;KJ#2=WM zv+#e`aCNL$^1BzG?RKB+&Hfot_{owNrSjs1XdEjOUdWZ>R)xVpdRqedi;Qiz(+t&#QlA1g{w8i`-Ssgd# zW;=f=)@Pr7W}hgRkk-6Kk&qBf#n#!bwPPsOJU&0l>&`3|dX7IgCn?i0lFnxz%wKFR zWhoA>NmQ(*d+k`D6@KBICc`ff7lEv#!!Mxz0txAZnVDhnjq8Dq`LWm1?)OssH+2p*F8B*3 z{5QYj*dsNX2BIA=^4_az2pImRPY>x`5%HU#d;MDP&RsHVq6$;nYmh!B3j5)AN4)Mq z{X;~iVL);IjkUiKOfO5&Sf&U9qh4K&bYqjr_3hZAgH_S`H|`9#bI0m3y%^^e=-m}M zJX{22w>O*xC#nnJ;fi(yL`yxU^ zS^w=9mi8-MmNFGt)dS0obxnddOt{RusA8f(tm9$fhuPi<+}zmg zOz`g>ARsTyJ`F?rl9KFk(idC3d*Enfq+u0Q%%khHR{%vlJU`NVPE(l!eQvby=c)bP zrvsaf4UQhV6-)q?F`r`q0R1WME;oLVK`bma^%?pS;>A1nMM9pB-4B;mQLvHicektz z4S!YSepl&uO8xVvTU$FqL*wLQvZPofYil|>fa(l#!r}oS9wFfFtS(E)o7A39Oxl)^ z3-SqQpw*xS$Pp2JO#Y>ne@Xtz^?I`0A%-EJ!zCm!34@)z!4*kf9uW}~CqxJ#tc~#B ztkipY_kh>>Lxt%wGre<9=gfkME$nEmLu)P~ygE zRwDWHb6(S_(eYNWU0KpV2jHQ?!!Inh(#MQif(!ZrkR7J5nDE{n_uzCDgTk<0RBnF{+h7P;Am7*}T>6JvahRdP%~C!@JJPl!b1Qlt z$_BAH&;Mf5es6%@wx4KcF5LALhbWM}*&s%0iy6RvoqGlOTq~R(vaK3jSX;j zpB*nellfU}jXtQ$62~R&RJt4&FLyZ@ek3VV3MFI#D)t+XxB=aVDubwhF0=K@)&HqF z4oPqvyASW~0UH|!r{YQ9n^?=BYHn`wvHEK2m_6R3qWGGc%X%m4Z=6|AVu)L4aE*pv zTd=;gZ|Mxnc_g|cshkFr%o~{23Xa10lB6@#=y*|4P@rF0>Lu}d%gn3}8X!72pp;AA z#GDM^ez`YB-NXGPA*ne!F39vZ4rQdEhs_p2PGmrjKgbk#b}gN09L{)!Pw^4UP- z*Jrw8%o_E`Hb4s6zUlMH$yqKfC8DPzf6wf2k;79j-KQ zCKYgI%#Z695dkPkMh0jhj5<+95d|P+to^-Ul~w20r#(Fo$kV47WQa~qSXJ#pQnHm` z_kZTA(7vn;%BT2|>0YkezVtH#6nK&jsjQ1#-XuPsKulaxRDFHqgiI{(e9YN7&>(F6 zW1}Sg^P!*K2q+(ohp)=x*s-;nWOfg@`^PRW)TXP869p0mU%aQmT^kaY!T1!8OWK

OH9Qh)~+=xe9%^+}N1@mpJtyPbtu)y+r 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 G=l=)LhSQS( diff --git a/tests/drawing/cairo/baseline_images/graph_basic.png b/tests/drawing/cairo/baseline_images/graph_basic.png index 6f17b1502f8f29f4b37438958e8e53c019bcbdc1..2eee93d865310740adc91b867062b5b2ec6a5205 100644 GIT binary patch literal 16701 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 literal 18287 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 diff --git a/tests/drawing/cairo/test_graph.py b/tests/drawing/cairo/test_graph.py index 4b0b92eed..14dca8f8b 100644 --- a/tests/drawing/cairo/test_graph.py +++ b/tests/drawing/cairo/test_graph.py @@ -80,8 +80,10 @@ def setUp(self) -> None: def test_clustering_directed_small(self): g = Graph.Ring(5, directed=True) clu = VertexClustering(g, [0] * 5) + lo = g.layout("auto") plot( clu, + layout=lo, backend="cairo", target=result_image_folder / "clustering_directed.png", mark_groups=True, From fa33d32cddc2cd88bc7d76b513e4ace0cecb1ed1 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 18:31:38 +0200 Subject: [PATCH 095/681] test: clean up after ourselves when writing graph_basic.png --- tests/drawing/matplotlib/test_graph.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index f40bcdb78..09614cc7a 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -1,3 +1,4 @@ +import os import random import unittest @@ -102,6 +103,7 @@ def test_gh_587(self): g = Graph.Ring(5) with overridden_configuration("plotting.backend", "matplotlib"): plot(g, target="graph_basic.png", layout=self.layout_small_ring) + os.unlink("graph_basic.png") class ClusteringTestRunner(unittest.TestCase): From 354512c2612643b0fcfcdea09af7e6ca5bab8c79 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 20:23:48 +0200 Subject: [PATCH 096/681] test: skip Cairo tests if neither PIL+NumPy nor OpenCV are installed --- tests/drawing/cairo/test_graph.py | 18 ++++++++---------- tests/drawing/cairo/utils.py | 12 ++++++++++++ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/tests/drawing/cairo/test_graph.py b/tests/drawing/cairo/test_graph.py index 14dca8f8b..d0e6e124a 100644 --- a/tests/drawing/cairo/test_graph.py +++ b/tests/drawing/cairo/test_graph.py @@ -2,27 +2,24 @@ import unittest from igraph import Graph, plot, VertexClustering -from igraph.drawing import find_cairo # FIXME: find a better way to do this that works for both direct call and module # import e.g. tox try: - from .utils import find_image_comparison, result_image_folder + from .utils import are_tests_supported, find_image_comparison, result_image_folder except ImportError: - from utils import find_image_comparison, result_image_folder + from utils import are_tests_supported, find_image_comparison, result_image_folder -cairo = find_cairo() -has_cairo = hasattr(cairo, "version") - image_comparison = find_image_comparison() class GraphTestRunner(unittest.TestCase): @classmethod def setUpClass(cls): - if not has_cairo: - raise unittest.SkipTest("cairo not found, skipping tests") + supported, msg = are_tests_supported() + if not supported: + raise unittest.SkipTest(f"{msg}, skipping tests") result_image_folder.mkdir(parents=True, exist_ok=True) def setUp(self) -> None: @@ -69,8 +66,9 @@ def test_mark_groups_squares(self): class ClusteringTestRunner(unittest.TestCase): @classmethod def setUpClass(cls): - if not has_cairo: - raise unittest.SkipTest("cairo not found, skipping tests") + supported, msg = are_tests_supported() + if not supported: + raise unittest.SkipTest(f"{msg}, skipping tests") result_image_folder.mkdir(parents=True, exist_ok=True) def setUp(self) -> None: diff --git a/tests/drawing/cairo/utils.py b/tests/drawing/cairo/utils.py index 7a7a297ea..68091ea10 100644 --- a/tests/drawing/cairo/utils.py +++ b/tests/drawing/cairo/utils.py @@ -51,6 +51,18 @@ def dummy_comparison(*args, **kwargs): return image_comparison +def are_tests_supported(): + if cairo is None: + return False, "cairo not found" + + try: + find_open_image_png_function() + except ImportError: + return False, "PIL+NumPy or OpenCV not found" + + return True, "" + + def _load_image(filename, fmt): if fmt == 'png': return find_open_image_png_function()(filename) From 8e1f8da4bfd3baaeb56314efcbdfd8c77b99ddb0 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 20:43:50 +0200 Subject: [PATCH 097/681] ci: install Cairo in CI for Windows from vcpkg --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d29e8cdd4..49c6d579c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -238,7 +238,7 @@ jobs: - name: Install VCPKG libraries run: | %VCPKG_INSTALLATION_ROOT%\vcpkg.exe integrate install - %VCPKG_INSTALLATION_ROOT%\vcpkg.exe install libxml2:${{ matrix.vcpkg_arch }}-windows-static-md + %VCPKG_INSTALLATION_ROOT%\vcpkg.exe install libxml2:${{ matrix.vcpkg_arch }}-windows-static-md cairo:${{ matrix.vcpkg_arch }}-windows-static-md shell: cmd - name: Build wheels From 28647e748cecc57754c9c8236357994b5eb89369 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 21:30:16 +0200 Subject: [PATCH 098/681] ci: Cairo in Windows needs a dynamic library --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 49c6d579c..82a6ca8c8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -238,7 +238,7 @@ jobs: - name: Install VCPKG libraries run: | %VCPKG_INSTALLATION_ROOT%\vcpkg.exe integrate install - %VCPKG_INSTALLATION_ROOT%\vcpkg.exe install libxml2:${{ matrix.vcpkg_arch }}-windows-static-md cairo:${{ matrix.vcpkg_arch }}-windows-static-md + %VCPKG_INSTALLATION_ROOT%\vcpkg.exe install libxml2:${{ matrix.vcpkg_arch }}-windows-static-md cairo:${{ matrix.vcpkg_arch }}-windows shell: cmd - name: Build wheels From 242953a0e157e63f4c55d63506ce84e9b3bcb31c Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 11:14:41 +0200 Subject: [PATCH 099/681] ci: give up on testing Cairo on Windows for a while --- .github/workflows/build.yml | 2 +- src/igraph/drawing/cairo/utils.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 82a6ca8c8..d29e8cdd4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -238,7 +238,7 @@ jobs: - name: Install VCPKG libraries run: | %VCPKG_INSTALLATION_ROOT%\vcpkg.exe integrate install - %VCPKG_INSTALLATION_ROOT%\vcpkg.exe install libxml2:${{ matrix.vcpkg_arch }}-windows-static-md cairo:${{ matrix.vcpkg_arch }}-windows + %VCPKG_INSTALLATION_ROOT%\vcpkg.exe install libxml2:${{ matrix.vcpkg_arch }}-windows-static-md shell: cmd - name: Build wheels diff --git a/src/igraph/drawing/cairo/utils.py b/src/igraph/drawing/cairo/utils.py index 068daa1d2..ad183b229 100644 --- a/src/igraph/drawing/cairo/utils.py +++ b/src/igraph/drawing/cairo/utils.py @@ -18,4 +18,8 @@ def find_cairo() -> Any: break except ImportError: pass + except OSError: + # cairocffi throws an OSError if it is installed but libcairo-2 is + # not present on the system + pass return module From 3245e49d638d74ba819f864ee064e959d833180f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 14:32:13 +0200 Subject: [PATCH 100/681] fix: fix plotting of curved directed edges in Cairo, closes #684 --- src/igraph/drawing/cairo/edge.py | 20 ++++++------- src/igraph/drawing/utils.py | 16 +++++------ .../graph_with_curved_edges.png | Bin 0 -> 58459 bytes tests/drawing/cairo/test_graph.py | 27 ++++++++++++++++-- 4 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 tests/drawing/cairo/baseline_images/graph_with_curved_edges.png diff --git a/src/igraph/drawing/cairo/edge.py b/src/igraph/drawing/cairo/edge.py index bf07ed316..7785622dc 100644 --- a/src/igraph/drawing/cairo/edge.py +++ b/src/igraph/drawing/cairo/edge.py @@ -105,8 +105,8 @@ def draw_undirected_edge(self, edge, src_vertex, dest_vertex): if edge.curved: (x1, y1), (x2, y2) = src_vertex.position, dest_vertex.position aux1, aux2 = get_bezier_control_points_for_curved_edge( - x1, y1, x2, y2, edge.curved, - ) + x1, y1, x2, y2, edge.curved, + ) ctx.curve_to(aux1[0], aux1[1], aux2[0], aux2[1], *dest_vertex.position) else: ctx.line_to(*dest_vertex.position) @@ -134,7 +134,9 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): if edge.curved: # Calculate the curve - aux1, aux2 = get_bezier_control_points_for_curved_edge(x1, x2, y1, y2, edge.curved) + aux1, aux2 = get_bezier_control_points_for_curved_edge( + x1, y1, x2, y2, edge.curved + ) # Coordinates of the control points of the Bezier curve xc1, yc1 = aux1 @@ -172,15 +174,8 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): ), (aux_points[0][1] - aux_points[1][1]) # Recalculate the curve such that it lands on the base of the arrow triangle - aux1 = (2 * x_src + x_arrow_mid) / 3.0 - edge.curved * 0.5 * ( - y_arrow_mid - y_src - ), (2 * y_src + y_arrow_mid) / 3.0 + edge.curved * 0.5 * ( - x_arrow_mid - x_src - ) - aux2 = (x_src + 2 * x_arrow_mid) / 3.0 - edge.curved * 0.5 * ( - y_arrow_mid - y_src - ), (y_src + 2 * y_arrow_mid) / 3.0 + edge.curved * 0.5 * ( - x_arrow_mid - x_src + aux1, aux2 = get_bezier_control_points_for_curved_edge( + x1, y1, x_arrow_mid, y_arrow_mid, edge.curved ) # Offset the second control point (aux2) such that it falls precisely @@ -228,6 +223,7 @@ def draw_directed_edge(self, edge, src_vertex, dest_vertex): x_arrow_mid, y_arrow_mid = (aux_points[0][0] + aux_points[1][0]) / 2.0, ( aux_points[0][1] + aux_points[1][1] ) / 2.0 + # Draw the line ctx.line_to(x_arrow_mid, y_arrow_mid) diff --git a/src/igraph/drawing/utils.py b/src/igraph/drawing/utils.py index d49c86dcd..7519917f4 100644 --- a/src/igraph/drawing/utils.py +++ b/src/igraph/drawing/utils.py @@ -581,14 +581,14 @@ def get_bezier_control_points_for_curved_edge(x1, y1, x2, y2, curvature): """Helper function that calculates the Bezier control points for a curved edge that goes from (x1, y1) to (x2, y2). """ - aux1 = (2 * x1 + x2) / 3.0 - curvature * 0.5 * (y2 - y1), ( - 2 * y1 + y2 - ) / 3.0 + curvature * 0.5 * (x2 - x1) - - aux2 = (x1 + 2 * x2) / 3.0 - curvature * 0.5 * (y2 - y1), ( - y1 + 2 * y2 - ) / 3.0 + curvature * 0.5 * (x2 - x1) - + aux1 = ( + (2 * x1 + x2) / 3.0 - curvature * 0.5 * (y2 - y1), + (2 * y1 + y2) / 3.0 + curvature * 0.5 * (x2 - x1) + ) + aux2 = ( + (x1 + 2 * x2) / 3.0 - curvature * 0.5 * (y2 - y1), + (y1 + 2 * y2) / 3.0 + curvature * 0.5 * (x2 - x1) + ) return aux1, aux2 diff --git a/tests/drawing/cairo/baseline_images/graph_with_curved_edges.png b/tests/drawing/cairo/baseline_images/graph_with_curved_edges.png new file mode 100644 index 0000000000000000000000000000000000000000..68846cc94129eddb9bf2f60aed2f88bf9309057a GIT binary patch literal 58459 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

f} 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 SH}t6RJ None: def test_basic(self): g = Graph.Ring(5) lo = g.layout("auto") - plot(g, layout=lo, target=result_image_folder / "graph_basic.png", backend="cairo") + plot( + g, + layout=lo, + target=result_image_folder / "graph_basic.png", + backend="cairo", + ) @image_comparison(baseline_images=["graph_directed"]) def test_directed(self): g = Graph.Ring(5, directed=True) lo = g.layout("auto") - plot(g, layout=lo, target=result_image_folder / "graph_directed.png", backend="cairo") + plot( + g, + layout=lo, + target=result_image_folder / "graph_directed.png", + backend="cairo", + ) @image_comparison(baseline_images=["graph_mark_groups_directed"]) def test_mark_groups(self): @@ -62,6 +72,19 @@ def test_mark_groups_squares(self): vertex_shape="square", ) + @image_comparison(baseline_images=["graph_with_curved_edges"]) + def test_graph_with_curved_edges(self): + g = Graph.Ring(24, directed=True, mutual=True) + lo = g.layout("circle") + plot( + g, + layout=lo, + target=result_image_folder / "graph_with_curved_edges.png", + bbox=(800, 800), + edge_curved=0.25, + backend="cairo", + ) + class ClusteringTestRunner(unittest.TestCase): @classmethod From 00c3011cbe71c1798e73b578502b3acfc0804adf Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 14:37:58 +0200 Subject: [PATCH 101/681] chore: updated changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index adf345ba2..b13119595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,13 @@ - `Graph.layout_reingold_tilford()` now accepts vertex names in the `roots=...` keyword argument. +- The plotting of curved directed edges with the Cairo backend is now fixed; + arrowheads were placed at the wrong position before this fix. + +### Changed + +- The C core of igraph was updated to version 0.10.5. + ### Removed - Removed defunct `Graph.community_leading_eigenvector_naive()` method. Not a From edd902a45add3f9d10317dc8e0bdfa4570842766 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 14:44:38 +0200 Subject: [PATCH 102/681] chore: updated vendored C core --- vendor/source/igraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/source/igraph b/vendor/source/igraph index 47c76b691..f2c7e65dc 160000 --- a/vendor/source/igraph +++ b/vendor/source/igraph @@ -1 +1 @@ -Subproject commit 47c76b691c8158daea48648f3d47129e682d4651 +Subproject commit f2c7e65dc2d8aa274de9346864aa8edadf86a15a From cd5aaa42b8a455e5b5b07730778698cbba831afc Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 14:56:22 +0200 Subject: [PATCH 103/681] chore: bump version --- CHANGELOG.md | 7 ++++--- src/igraph/version.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b13119595..06f7f8230 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # igraph Python interface changelog -## [Unreleased] +## [0.10.5] - 2023-06-30 ### Added @@ -55,7 +55,7 @@ ago so the function in the Python interface did not do anything useful either. -## [0.10.4] - 2022-01-27 +## [0.10.4] - 2023-01-27 ### Added @@ -513,7 +513,8 @@ Please refer to the commit logs at https://github.com/igraph/python-igraph for a list of changes affecting versions up to 0.8.3. Notable changes after 0.8.3 are documented above. -[Unreleased]: https://github.com/igraph/python-igraph/compare/0.10.4...main +[Unreleased]: https://github.com/igraph/python-igraph/compare/0.10.5...main +[0.10.5]: https://github.com/igraph/python-igraph/compare/0.10.4...0.10.5 [0.10.4]: https://github.com/igraph/python-igraph/compare/0.10.3...0.10.4 [0.10.3]: https://github.com/igraph/python-igraph/compare/0.10.2...0.10.3 [0.10.2]: https://github.com/igraph/python-igraph/compare/0.10.1...0.10.2 diff --git a/src/igraph/version.py b/src/igraph/version.py index b93074332..2b40ae92e 100644 --- a/src/igraph/version.py +++ b/src/igraph/version.py @@ -1,2 +1,2 @@ -__version_info__ = (0, 10, 4) +__version_info__ = (0, 10, 5) __version__ = ".".join("{0}".format(x) for x in __version_info__) From 4245a6c5076ed0de9e48d5f2bc156cdbf791cbe8 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 15:05:40 +0200 Subject: [PATCH 104/681] fix: remove quotes around igraph from API docs, closes #686 --- doc/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 212b0a831..895599cbd 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -253,7 +253,7 @@ def get_pydoctor_html_outputdir(pydoctor_url_path): pydoctor_url_path = 'api/' pydoctor_args = [ - '--project-name="igraph"', + '--project-name=igraph', '--project-version=' + version, '--project-url=https://igraph.readthedocs.io', '--introspect-c-modules', From e5899eda5498c6ec828604711f8389200573fa68 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 30 Jun 2023 15:25:59 +0200 Subject: [PATCH 105/681] fix: fix auto-curving of edges with the Matplotlib backend, closes #685 --- src/igraph/drawing/matplotlib/graph.py | 2 +- .../test_graph/graph_with_curved_edges.png | Bin 0 -> 48561 bytes tests/drawing/matplotlib/test_graph.py | 9 +++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 tests/drawing/matplotlib/baseline_images/test_graph/graph_with_curved_edges.png diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 46839f154..841335f1d 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -165,7 +165,7 @@ def __init__( def _kwds_post_update(self): self.kwds["layout"] = self.ensure_layout(self.kwds["layout"], self.graph) - self.edge_curved = self._set_edge_curve(**self.kwds) + self.kwds["edge_curved"] = self._set_edge_curve(**self.kwds) self._clear_state() self.stale = True diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_with_curved_edges.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_with_curved_edges.png new file mode 100644 index 0000000000000000000000000000000000000000..08f10b08cdae3a8a079d5906b3ee20d24f16b245 GIT binary patch literal 48561 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 Date: Mon, 3 Jul 2023 11:56:43 +0200 Subject: [PATCH 106/681] fix: fix default size of vertices with the Plotly backend, closes #690 --- CHANGELOG.md | 7 +++++++ src/igraph/drawing/plotly/vertex.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06f7f8230..18e3bd273 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # igraph Python interface changelog +## [Unreleased] + +### Fixed + +- The default vertex size of the Plotly backend was fixed so the vertices are + now visible by default without specifying an explicit size for them. + ## [0.10.5] - 2023-06-30 ### Added diff --git a/src/igraph/drawing/plotly/vertex.py b/src/igraph/drawing/plotly/vertex.py index fe39c3a56..f813d696c 100644 --- a/src/igraph/drawing/plotly/vertex.py +++ b/src/igraph/drawing/plotly/vertex.py @@ -36,7 +36,7 @@ class VisualVertexBuilder(AttributeCollectorBase): # FIXME? mpl.rcParams["font.size"]) position = dict(func=self.layout.__getitem__) shape = "circle" - size = 0.2 + size = 20.0 width = None height = None zorder = 2 From 4c5746f2ebbcd7e00d3f48878bea916d976cf2d9 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 3 Jul 2023 12:17:03 +0200 Subject: [PATCH 107/681] test: update baseline images for Plotly --- .../baseline_images/clustering_directed.json | 65 +++-- .../clustering_directed_large.json | 251 +++++++++--------- 2 files changed, 157 insertions(+), 159 deletions(-) diff --git a/tests/drawing/plotly/baseline_images/clustering_directed.json b/tests/drawing/plotly/baseline_images/clustering_directed.json index db9b712ef..5ea324abe 100644 --- a/tests/drawing/plotly/baseline_images/clustering_directed.json +++ b/tests/drawing/plotly/baseline_images/clustering_directed.json @@ -6,7 +6,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -24,7 +24,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -42,7 +42,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -60,7 +60,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -78,7 +78,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -183,13 +183,13 @@ "line": { "color": "rgba(255,0,0,255)" }, - "path": "M 1.1197388996537003,-0.16719602520017673L 0.5279328528097523,-0.9934550030368812C 0.45514612062341064,-1.0950773018577296 0.26321850173201045,-1.1588783220760186 0.14407761502695185,-1.1210570434734595L -0.8246194958406551,-0.8135441121460627C -0.9437603825457136,-0.7757228335435037 -1.0637476544979572,-0.6129044204457357 -1.0645940397451423,-0.4879072859505267L -1.0714757322212005,0.5284051354266215C -1.0723221174683857,0.6534022699218305 -0.9545507108608489,0.8178306034288613 -0.8359329190061271,0.8572618024406833L 0.12851107201115136,1.1778644907130693C 0.2471288638658731,1.2172956897248912 0.4399028680044583,1.1560995754479715 0.5140590802883218,1.0554722621592298L 1.1169999394586567,0.23730319901900315C 1.1911561517425202,0.13667588573026146 1.1925256318400421,-0.06557372637932848 1.1197388996537003,-0.16719602520017673 Z", + "path": "M 17.102240893427787,-12.23969476826467L 17.102240893427783,-12.239694768264666C 12.645988843102797,-18.461358578089076 0.8955252694779539,-22.367474687721593 -6.398686253821905,-20.051926987529704L -6.398686253821911,-20.0519269875297C -13.69289777712177,-17.73637928733781 -21.038927892627104,-7.768080596031269 -21.09074648483258,-0.11532960491661903L -21.09074648483258,-0.11532960491661903C -21.142565077038054,7.537421386198031 -13.932197797175824,17.60428489706909 -6.670011925108119,20.018397416825497L -6.670011925108115,20.018397416825497C 0.5921739469595897,22.432509936581905 12.394456112789907,18.685875055099775 16.93455240655252,12.525127653861238L 16.934552406552527,12.525127653861228C 21.47464870031514,6.36438025262269 21.558492943752768,-6.018030958440259 17.102240893427787,-12.23969476826467 Z", "type": "path" }, { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.015318095035966,0.03435580194714975 L 0.1950972580065446,1.0184451153265959", "type": "path" @@ -197,7 +197,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.29010409851547664,1.0184451153265959 L -0.9649307455828062,0.6328259400443561", "type": "path" @@ -205,7 +205,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.8699239050738742,0.6328259400443561 L -0.9566534831822209,-0.5895891303732176", "type": "path" @@ -213,7 +213,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.8616466426732888,-0.5895891303732176 L 0.2084901499044931,-0.9594640169691344", "type": "path" @@ -221,7 +221,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.30349699041342515,-0.9594640169691343 L 0.9203112545270339,0.03435580194714975", "type": "path" @@ -303,7 +303,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -339,7 +339,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -363,7 +363,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -399,7 +399,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -414,7 +414,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -450,7 +450,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -477,7 +477,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -513,7 +513,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -528,7 +528,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -564,7 +564,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -599,11 +599,10 @@ ], "scatter": [ { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 }, "type": "scatter" } @@ -710,7 +709,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -746,7 +745,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -837,7 +836,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -873,13 +872,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -915,7 +914,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -1053,4 +1052,4 @@ "visible": false } } -} +} \ No newline at end of file diff --git a/tests/drawing/plotly/baseline_images/clustering_directed_large.json b/tests/drawing/plotly/baseline_images/clustering_directed_large.json index 8f525f7de..5c355cb84 100644 --- a/tests/drawing/plotly/baseline_images/clustering_directed_large.json +++ b/tests/drawing/plotly/baseline_images/clustering_directed_large.json @@ -6,7 +6,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -15,7 +15,7 @@ 2.5 ], "y": [ - 0 + 0.0 ] }, { @@ -24,7 +24,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -42,7 +42,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -60,7 +60,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -78,7 +78,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -96,7 +96,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -114,7 +114,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -132,7 +132,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -150,7 +150,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -168,7 +168,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -186,7 +186,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -204,7 +204,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -222,7 +222,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -240,7 +240,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -258,7 +258,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -276,7 +276,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -294,7 +294,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -312,7 +312,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -330,7 +330,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -348,7 +348,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -366,7 +366,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -384,7 +384,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -402,7 +402,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -420,7 +420,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -438,7 +438,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -456,7 +456,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -474,7 +474,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -492,7 +492,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -510,7 +510,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -528,7 +528,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -546,7 +546,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -564,7 +564,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -582,7 +582,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -600,7 +600,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -618,7 +618,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -636,7 +636,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -654,7 +654,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -672,7 +672,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -690,7 +690,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -708,7 +708,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -726,7 +726,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -744,7 +744,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -762,7 +762,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -780,7 +780,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -798,7 +798,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -816,7 +816,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -834,7 +834,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -852,7 +852,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -870,7 +870,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -888,7 +888,7 @@ "line": { "color": "rgba(0,0,0,255)" }, - "size": 0.2, + "size": 20.0, "symbol": "circle" }, "mode": "markers", @@ -1744,10 +1744,10 @@ 2.5 ], "y": [ - 0, + 0.0, 0.044706825614332625, -0.044706825614332625, - 0 + 0.0 ] } ], @@ -1758,13 +1758,13 @@ "line": { "color": "rgba(0,0,255,255)" }, - "path": "M 0.08467188267459153,-2.7297732924988862L 0.08155152177765243,-2.7299214387141904C -0.009367696129893549,-2.7342380349273507 -0.1909500767190293,-2.7304844316164045 -0.28161323940061905,-2.722414232092298L -0.2847409075439839,-2.722135828987712C -0.3769679042972561,-2.7139264279113124 -0.5593295859951877,-2.684528544914581 -0.6494642709398472,-2.6633400629942487L -0.6518360308590739,-2.6627825196667407C -0.7431565957633468,-2.641315266082655 -0.921699356285265,-2.5853143022647096 -1.0089215519029104,-2.55078059203085L -1.0106573132672392,-2.550093355490123C -1.0978795088848847,-2.5155596452562636 -1.266366877669369,-2.4341616609851098 -1.347632050836208,-2.3872973869478153L -1.3497426540803754,-2.386080237153332C -1.4299525256251309,-2.339824538013279 -1.5830127061525752,-2.236419510991894 -1.6558630151352642,-2.1792701831105616L -1.6583335671282884,-2.1773320940637357C -1.729948600114465,-2.1211518107058165 -1.8648859771397523,-1.999586376639347 -1.9282083211788628,-1.9342012259307966L -1.9303815533160236,-1.9319571979661154C -1.9926172812865535,-1.8676940612399058 -2.1081776870619855,-1.731601158295806 -2.161502364866888,-1.659771392077916L -2.1631196779521384,-1.6575928281259733C -2.215635699214415,-1.5868523438840547 -2.311295509855163,-1.4392954418783066 -2.3544392992336345,-1.3624790241144775L -2.3555105624439965,-1.3605716672622477C -2.398118720217287,-1.2847089279245334 -2.473583896959723,-1.1282792807827042 -2.506440915928869,-1.047712372978589L -2.5070810151735397,-1.0461428204613852C -2.5396179845203504,-0.9663606889158721 -2.5946343855076077,-0.8034009279178234 -2.6171138171480544,-0.7202232984652875L -2.61744961335299,-0.7189807967529462C -2.6397611468909687,-0.6364244181565811 -2.674109931734575,-0.46920125293896836 -2.686147183040202,-0.3845344663177207L -2.6862833838572926,-0.3835764664201169C -2.698252534754375,-0.2993886797476711 -2.711810564600415,-0.1301813690722769 -2.7133994435493722,-0.045161845069328466L -2.713412967029626,-0.04443821545942635C -2.7149950842384567,0.04021949373857103 -2.7078003322721127,0.20909357538870527 -2.699023463096938,0.29330994784084213L -2.698967550250878,0.2938464463318956C -2.690218637498733,0.3777945695385057 -2.662520663182241,0.5439908777104231 -2.643571601617894,0.6262390626757304L -2.643481710215066,0.6266292352814542C -2.6245775943521323,0.7086823339438996 -2.5768702239744856,0.8698584325875697 -2.548066969459773,0.9489814325687944L -2.5479658817830115,0.94925912203067C -2.519213171106679,1.0282432772809569 -2.452251751203909,1.1820960487271361 -2.414043041977471,1.2569646649230286L -2.413944710679318,1.2571573416286943C -2.3757851671019568,1.331929619471754 -2.2905915065957196,1.4762348833329115 -2.2435573896668433,1.5457678693510093L -2.2435573896668433,1.5457678693510093C -2.196523272737967,1.615300855369107 -2.0714375110137118,1.6539310090799837 -1.993385866218333,1.6230281767727623L 2.564155000068931,-0.18142990343059492C 2.6422066448643093,-0.2123327357378162 2.70694608097404,-0.3261200020467362 2.693633872288393,-0.40900443604843495L 2.693633872288393,-0.40900443604843495C 2.680321663602745,-0.4918888700501337 2.6436414186205517,-0.655401953919702 2.620273382324006,-0.7360306037875716L 2.6202131664742097,-0.7362383714668104C 2.5968150222527657,-0.8169709051742993 2.540308327176887,-0.9749629950037181 2.507199776322452,-1.052222551125648L 2.5070833745499557,-1.0524941773080927C 2.4739166228092726,-1.1298895465212448 2.398361167239949,-1.2800398082461453 2.355972463411309,-1.3527947007578938L 2.355770899895785,-1.353140659246398C 2.313281414309383,-1.4260685310023984 2.219703166854112,-1.5661809938114277 2.168614404985243,-1.6333655848644568L 2.168287905206504,-1.6337949504100493C 2.1170358934482656,-1.7011942242358744 2.0066783780538446,-1.8292232783798599 1.947572874417662,-1.88985305869802L 1.9470676576696004,-1.8903713045222426C 1.887709545659387,-1.951260207752514 1.7619957924271628,-2.0653259186720234 1.695640151205152,-2.1185027263612617L 1.6948850690250796,-2.1191078423565233C 1.628151886713033,-2.172587208043392 1.488640566378044,-2.270974288008281 1.4158624283551022,-2.3158820022863016L 1.414767092505202,-2.3165578787338457C 1.34144128655731,-2.361803531235638 1.189782423469918,-2.442934766460868 1.111449366330418,-2.4788203491843053L 1.1099083214293617,-2.479526325642991C 1.0308047418393333,-2.5157648965957717 0.8687095332988997,-2.578137733423335 0.7857179043484942,-2.6042719992981183L 0.783631311463264,-2.6049290724743495C 0.6995963860702434,-2.631391874937248 0.5288537349802286,-2.673472580731123 0.44214600928323433,-2.6890904840620995L 0.43947570913498357,-2.6895714618440083C 0.351432833363864,-2.705429854065939 0.17403092013366794,-2.725530769393378 0.08467188267459153,-2.7297732924988862 Z", + "path": "M 8.413141377617196,-25.896264101676145L 8.155152177765178,-25.9805285854218C 6.833557178763122,-26.41218820673784 4.128701954952482,-26.983613777141827 2.745441730143898,-27.12337972622978L 2.4846737173375413,-27.149727978097353C 0.9710294861257793,-27.302668053119092 -2.0505946108051303,-27.254346482977223 -3.5585744765242784,-27.053084837813618L -3.7543123520242156,-27.02696079747362C -5.360161155493332,-26.81263713214002 -8.472329653542033,-26.001919309518726 -9.97864934812162,-25.405525152231043L -10.117156398738466,-25.35068633147587C -11.623476093318052,-24.754292174188183 -14.447123830844985,-23.214854094068826 -15.764451873792332,-22.27181017123716L -15.925021780439813,-22.156861980872392C -17.16206487006342,-21.271292153223108 -19.397812431581155,-19.238073031125833 -20.396516903475288,-18.090423736677845L -20.568571984283913,-17.892708699193616C -21.48124891577373,-16.84391692348774 -23.06183579517491,-14.575764794341183 -23.729745743086276,-13.356404440900498L -23.860128767511288,-13.118372515724491C -24.462847203210146,-12.018028124871812 -25.445040714149187,-9.721846805970955 -25.824515789389366,-8.526009877922782L -25.899262810803666,-8.290460155948939C -26.241364375336698,-7.212398088887686 -26.734295576952675,-5.013398145996662 -26.885125214035625,-3.8924602701668927L -26.913102784791924,-3.6845361556429297C -27.04994363649672,-2.667560337075141 -27.16404214849462,-0.6246956257750191 -27.141299808787714,0.4011932669573146L -27.137495282725656,0.5728124178221539C -27.11665520604978,1.5128917351220679 -26.94259526292006,3.380714068636491 -26.789375396466216,4.308457084851L -26.76688888882022,4.444612407985373C -26.62491227618937,5.304277762632695 -26.230646745122016,6.997928837870707 -25.978357826685507,7.831914558461397L -25.94644875166113,7.937395659623136C -25.71011437073681,8.718640829632957 -25.144765028541553,10.246844573146316 -24.815750067270613,10.993803146649851L -24.780296766639943,11.074292334019272C -24.46900845568434,11.781006313838098 -23.767936083377943,13.154363712079272 -23.378152022027148,13.821007130501622L -23.342631483495033,13.88175751918912C -22.970607691410294,14.51802574326772 -22.15969179189009,15.746419522342974 -21.72079968445462,16.338545077339628L -21.687138017026985,16.38395927634213C -21.265076743305336,16.953377731837534 -20.363853048610867,18.04507625641636 -19.88469062763805,18.56735632549978L -19.85386256512327,18.60095846522359C -19.390114175407845,19.106437464445104 -18.413939099670152,20.067976195576676 -17.901512413647882,20.52403592748673L -17.873928924555894,20.548585231774698C -17.37529398307962,20.992370311540768 -16.33679664947991,21.82875009256347 -15.796934257356478,22.22134479382011L -15.796934257356478,22.221344793820105C -15.257071865233044,22.613939495076743 -14.096565733835174,22.760803956469676 -13.47592199456074,22.51507371660598L 25.236152912086663,7.187878982388844C 25.856796651361094,6.942148742525145 26.60223357107002,6.040668044025645 26.727026751504514,5.384917585389842L 26.727026751504514,5.384917585389842C 26.851819931939005,4.72916712675404 27.03631054923762,3.4085721615485616 27.09600798610174,2.7437276549788856L 27.099310329081725,2.7069497846985935C 27.16065893743584,2.023716342988772 27.21404138688488,0.6545469509673095 27.206075227979806,-0.03138899934433126L 27.20554567089632,-0.07698716599310718C 27.197314733449506,-0.7857221996291359 27.10695946762353,-2.1984662466468032 27.02483513924437,-2.9024752600284422L 27.01828528025058,-2.958623783359041C 26.932886022374525,-3.690707058405979 26.683124866195204,-5.141277717639568 26.518762967891934,-5.85976510182622L 26.503069823350884,-5.928365711136275C 26.33086135277709,-6.681153399977953 25.90179328536861,-8.162204921041777 25.644933688533918,-8.89046875326392L 25.615679392159933,-8.973412300045215C 25.34419264713825,-9.743147905658006 24.710187131240467,-11.244168747025656 24.347668360364366,-11.975453982780515L 24.298722292456734,-12.07418966127408C 23.91173048762682,-12.854842736275721 23.039753748641374,-14.359354564182366 22.55476881448584,-15.08321331708737L 22.477956040691623,-15.19785934984027C 21.95456471963898,-15.979041119121725 20.80283658467503,-17.459777232178354 20.174499770763724,-18.159331575953534L 20.059791757858704,-18.28704093010392C 19.37410093749489,-19.050449950954288 17.892489575888607,-20.461528429379452 17.09656903464614,-21.10919788695424L 16.933840412443192,-21.241616078234436C 16.056555560099252,-21.955494631449323 14.191905131800675,-23.221061974030174 13.20453955584604,-23.77275076339614L 12.9888064417623,-23.89329126372697C 11.893574308765796,-24.50525030325835 9.605741776693243,-25.506736722232937 8.413141377617196,-25.896264101676145 Z", "type": "path" }, { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.5,0.0 L 2.385279912777263,0.31333308391076065", "type": "path" @@ -1772,7 +1772,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.4802867532861947,0.31333308391076065 L 2.3264510623126458,0.621724717912137", "type": "path" @@ -1780,7 +1780,7 @@ { "line": { "color": "rgb(204,204,204)", - "width": 2 + "width": 2.0 }, "path": "M 2.4214579028215777,0.621724717912137 L 2.229434374211696,0.9203113817116949", "type": "path" @@ -1788,7 +1788,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.324441214720628,0.9203113817116949 L 2.095759859600727,1.2043841852542883", "type": "path" @@ -1796,7 +1796,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.190766700109659,1.2043841852542883 L 1.9275356454284365,1.469463130731183", "type": "path" @@ -1804,7 +1804,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.0225424859373686,1.469463130731183 L 1.7274147280445968,1.7113677648217218", "type": "path" @@ -1812,7 +1812,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.822421568553529,1.7113677648217218 L 1.498553133862792,1.926283106939473", "type": "path" @@ -1820,7 +1820,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.5935599743717241,1.926283106939473 L 1.2445601469385592,2.110819813755038", "type": "path" @@ -1828,7 +1828,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.3395669874474914,2.110819813755038 L 0.9694413884037497,2.262067631165049", "type": "path" @@ -1836,7 +1836,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.0644482289126818,2.262067631165049 L 0.6775356454284366,2.3776412907378837", "type": "path" @@ -1844,7 +1844,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.7725424859373686,2.3776412907378837 L 0.37344644595537924,2.4557181268217216", "type": "path" @@ -1852,7 +1852,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.4684532864643113,2.4557181268217216 L 0.0619694583143512,2.495066821070679", "type": "path" @@ -1860,7 +1860,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.15697629882328326,2.495066821070679 L -0.25198313933221556,2.495066821070679", "type": "path" @@ -1868,7 +1868,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.1569762988232835,2.495066821070679 L -0.5634601269732441,2.4557181268217216", "type": "path" @@ -1876,7 +1876,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.46845328646431206,2.4557181268217216 L -0.8675493264463009,2.3776412907378837", "type": "path" @@ -1884,7 +1884,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.7725424859373689,2.3776412907378837 L -1.159455069421614,2.2620676311650487", "type": "path" @@ -1892,7 +1892,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.0644482289126818,2.2620676311650487 L -1.4345738279564244,2.1108198137550374", "type": "path" @@ -1900,7 +1900,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.3395669874474923,2.1108198137550374 L -1.6885668148806565,1.926283106939473", "type": "path" @@ -1908,7 +1908,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.5935599743717244,1.926283106939473 L -1.9174284090624614,1.7113677648217211", "type": "path" @@ -1916,7 +1916,7 @@ { "line": { "color": "rgb(204,204,204)", - "width": 2 + "width": 2.0 }, "path": "M -1.8224215685535292,1.7113677648217211 L -2.1175493264463,1.4694631307311832", "type": "path" @@ -1924,7 +1924,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.022542485937368,1.4694631307311832 L -2.285773540618591,1.204384185254288", "type": "path" @@ -1932,7 +1932,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.190766700109659,1.204384185254288 L -2.4194480552295605,0.9203113817116944", "type": "path" @@ -1940,7 +1940,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.3244412147206286,0.9203113817116944 L -2.5164647433305096,0.621724717912137", "type": "path" @@ -1948,7 +1948,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.4214579028215777,0.621724717912137 L -2.5752935937951267,0.3133330839107602", "type": "path" @@ -1956,7 +1956,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.4802867532861947,0.3133330839107602 L -2.595006840508932,-8.049116928532385e-16", "type": "path" @@ -1964,7 +1964,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.5,-8.040613248383183e-16 L -2.5752935937951267,-0.3133330839107607", "type": "path" @@ -1972,7 +1972,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.4802867532861947,-0.3133330839107607 L -2.5164647433305096,-0.6217247179121376", "type": "path" @@ -1980,7 +1980,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.4214579028215777,-0.6217247179121376 L -2.41944805522956,-0.9203113817116958", "type": "path" @@ -1988,7 +1988,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.324441214720628,-0.9203113817116958 L -2.2857735406185906,-1.2043841852542885", "type": "path" @@ -1996,7 +1996,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.1907667001096587,-1.2043841852542885 L -2.1175493264463,-1.4694631307311834", "type": "path" @@ -2004,7 +2004,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -2.022542485937368,-1.4694631307311834 L -1.9174284090624611,-1.7113677648217218", "type": "path" @@ -2012,7 +2012,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.822421568553529,-1.7113677648217218 L -1.6885668148806559,-1.9262831069394735", "type": "path" @@ -2020,7 +2020,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.5935599743717237,-1.9262831069394735 L -1.434573827956423,-2.1108198137550382", "type": "path" @@ -2028,7 +2028,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.339566987447491,-2.1108198137550382 L -1.1594550694216126,-2.2620676311650496", "type": "path" @@ -2036,7 +2036,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -1.0644482289126804,-2.2620676311650496 L -0.8675493264463009,-2.3776412907378837", "type": "path" @@ -2044,7 +2044,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.7725424859373689,-2.3776412907378837 L -0.5634601269732437,-2.4557181268217216", "type": "path" @@ -2052,7 +2052,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.46845328646431156,-2.4557181268217216 L -0.25198313933221506,-2.495066821070679", "type": "path" @@ -2060,7 +2060,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M -0.156976298823283,-2.495066821070679 L 0.06196945831435223,-2.495066821070679", "type": "path" @@ -2068,7 +2068,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.1569762988232843,-2.495066821070679 L 0.3734464459553808,-2.4557181268217216", "type": "path" @@ -2076,7 +2076,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.46845328646431283,-2.4557181268217216 L 0.677535645428436,-2.377641290737884", "type": "path" @@ -2084,7 +2084,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 0.7725424859373681,-2.377641290737884 L 0.9694413884037495,-2.262067631165049", "type": "path" @@ -2092,7 +2092,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.0644482289126815,-2.262067631165049 L 1.2445601469385597,-2.1108198137550374", "type": "path" @@ -2100,7 +2100,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.3395669874474918,-2.1108198137550374 L 1.4985531338627929,-1.9262831069394726", "type": "path" @@ -2108,7 +2108,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.593559974371725,-1.9262831069394726 L 1.7274147280445975,-1.7113677648217207", "type": "path" @@ -2116,7 +2116,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 1.8224215685535297,-1.7113677648217207 L 1.9275356454284374,-1.4694631307311814", "type": "path" @@ -2124,7 +2124,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.0225424859373695,-1.4694631307311814 L 2.095759859600727,-1.2043841852542883", "type": "path" @@ -2132,7 +2132,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.190766700109659,-1.2043841852542883 L 2.2294343742116967,-0.9203113817116947", "type": "path" @@ -2140,7 +2140,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.3244412147206286,-0.9203113817116947 L 2.326451062312646,-0.6217247179121362", "type": "path" @@ -2148,7 +2148,7 @@ { "line": { "color": "rgb(51,51,51)", - "width": 2 + "width": 2.0 }, "path": "M 2.421457902821578,-0.6217247179121362 L 2.385279912777263,-0.3133330839107595", "type": "path" @@ -2156,7 +2156,7 @@ { "line": { "color": "rgb(204,204,204)", - "width": 2 + "width": 2.0 }, "path": "M 2.4802867532861947,-0.3133330839107595 L 2.404993159491068,0.0", "type": "path" @@ -2238,7 +2238,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2274,7 +2274,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2298,7 +2298,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2334,7 +2334,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2349,7 +2349,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2385,7 +2385,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2412,7 +2412,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2448,7 +2448,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2463,7 +2463,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2499,7 +2499,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2534,11 +2534,10 @@ ], "scatter": [ { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 }, "type": "scatter" } @@ -2645,7 +2644,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2681,7 +2680,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2772,7 +2771,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2808,13 +2807,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2850,7 +2849,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -2988,4 +2987,4 @@ "visible": false } } -} +} \ No newline at end of file From f49fe96375ef541cb9624fd43522c0ffb68132dc Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 3 Jul 2023 13:05:34 +0200 Subject: [PATCH 108/681] refactor: rename Graph.Incidence() to Graph.Biadjacency() and Graph.get_incidence() to Graph.get_biadjacency() --- CHANGELOG.md | 6 ++++ doc/source/analysis.rst | 2 +- doc/source/generation.rst | 4 +-- src/_igraph/graphobject.c | 60 ++++++++++++++++++++------------------ src/igraph/__init__.py | 27 +++++++++++++---- src/igraph/adjacency.py | 19 ++++++------ src/igraph/io/bipartite.py | 16 +++++----- tests/test_bipartite.py | 40 ++++++++++++------------- 8 files changed, 100 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18e3bd273..20eb8cd50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +### Changed + +- `Graph.Incidence()` is now deprecated in favour of `Graph.Biadjacency()` as it constructs a bipartite graph from a _bipartite adjacency_ matrix. (The previous name was a mistake). Future versions might re-introduce `Graph.Incidence()` to construct a graph from its incidence matrix. + +- `Graph.get_incidence()` is now deprecated in favour of `Graph.get_biadjacency()` as it returns the _bipartite adjacency_ matrix of a graph and not its incidence matrix. (The previous name was a mistake). Future versions might re-introduce `Graph.get_incidence()` to return the incidence matrix of a graph. + ### Fixed - The default vertex size of the Plotly backend was fixed so the vertices are diff --git a/doc/source/analysis.rst b/doc/source/analysis.rst index aef415fcf..943f719cc 100644 --- a/doc/source/analysis.rst +++ b/doc/source/analysis.rst @@ -75,7 +75,7 @@ The :meth:`Graph.incident` function fulfills the same purpose with a slightly di >>> edges = g.incident(0) -To get the full adjacency/incidence list representation of the graph, use :meth:`Graph.get_adjlist`, :meth:`Graph.g.get_inclist()` or, for a bipartite graph, :meth:`Graph.get_incidence`. +To get the full adjacency/incidence list representation of the graph, use :meth:`Graph.get_adjlist`, :meth:`Graph.g.get_inclist()` or, for a bipartite graph, :meth:`Graph.get_biadjacency`. Neighborhood ++++++++++++ diff --git a/doc/source/generation.rst b/doc/source/generation.rst index 674d971c3..b5a828da6 100644 --- a/doc/source/generation.rst +++ b/doc/source/generation.rst @@ -66,9 +66,9 @@ To create a graph from an adjacency matrix, use :meth:`Graph.Adjacency` or, for This graph is directed and has edges `[0, 1]`, `[0, 2]` and `[2, 2]` (a self-loop). -To create a bipartite graph from an incidence matrix, use :meth:`Graph.Incidence`:: +To create a bipartite graph from a bipartite adjacency matrix, use :meth:`Graph.Biadjacency`:: - >>> g = Graph.Incidence([[0, 1, 1], [1, 1, 0]]) + >>> g = Graph.Biadjacency([[0, 1, 1], [1, 1, 0]]) From files ++++++++++ diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index f27b74149..162d37e75 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -2206,8 +2206,8 @@ PyObject *igraphmodule_Graph_Erdos_Renyi(PyTypeObject * type, igraph_t g; Py_ssize_t n, m = -1; double p = -1.0; - igraph_erdos_renyi_t t; PyObject *loops = Py_False, *directed = Py_False; + int retval; static char *kwlist[] = { "n", "p", "m", "directed", "loops", NULL }; @@ -2231,11 +2231,15 @@ PyObject *igraphmodule_Graph_Erdos_Renyi(PyTypeObject * type, return NULL; } - t = (m == -1) ? IGRAPH_ERDOS_RENYI_GNP : IGRAPH_ERDOS_RENYI_GNM; + if (m == -1) { + /* GNP model */ + retval = igraph_erdos_renyi_game_gnp(&g, n, p, PyObject_IsTrue(directed), PyObject_IsTrue(loops)); + } else { + /* GNM model */ + retval = igraph_erdos_renyi_game_gnm(&g, n, m, PyObject_IsTrue(directed), PyObject_IsTrue(loops)); + } - if (igraph_erdos_renyi_game(&g, t, n, (m == -1 ? p : m), - PyObject_IsTrue(directed), - PyObject_IsTrue(loops))) { + if (retval) { igraphmodule_handle_igraph_error(); return NULL; } @@ -2625,12 +2629,12 @@ PyObject *igraphmodule_Graph_Hexagonal_Lattice(PyTypeObject * type, } /** \ingroup python_interface_graph - * \brief Generates a bipartite graph from an incidence matrix + * \brief Generates a bipartite graph from a bipartite adjacency matrix * \return a reference to the newly generated Python igraph object - * \sa igraph_incidence + * \sa igraph_biadjacency */ -PyObject *igraphmodule_Graph_Incidence(PyTypeObject * type, - PyObject * args, PyObject * kwds) { +PyObject *igraphmodule_Graph_Biadjacency(PyTypeObject * type, + PyObject * args, PyObject * kwds) { igraphmodule_GraphObject *self; igraph_matrix_t matrix; igraph_vector_bool_t vertex_types; @@ -2657,7 +2661,7 @@ PyObject *igraphmodule_Graph_Incidence(PyTypeObject * type, return NULL; } - if (igraph_incidence(&g, &vertex_types, &matrix, + if (igraph_biadjacency(&g, &vertex_types, &matrix, PyObject_IsTrue(directed), mode, PyObject_IsTrue(multiple))) { igraphmodule_handle_igraph_error(); igraph_matrix_destroy(&matrix); @@ -8625,12 +8629,12 @@ PyObject *igraphmodule_Graph_get_adjacency(igraphmodule_GraphObject * self, } /** \ingroup python_interface_graph - * \brief Returns the incidence matrix of a bipartite graph. - * \return the incidence matrix as a Python list of lists - * \sa igraph_get_incidence + * \brief Returns the bipartite adjacency matrix of a bipartite graph. + * \return the bipartite adjacency matrix as a Python list of lists + * \sa igraph_get_biadjacency */ -PyObject *igraphmodule_Graph_get_incidence(igraphmodule_GraphObject * self, - PyObject * args, PyObject * kwds) +PyObject *igraphmodule_Graph_get_biadjacency(igraphmodule_GraphObject * self, + PyObject * args, PyObject * kwds) { static char *kwlist[] = { "types", NULL }; igraph_matrix_t matrix; @@ -8663,7 +8667,7 @@ PyObject *igraphmodule_Graph_get_incidence(igraphmodule_GraphObject * self, return NULL; } - if (igraph_get_incidence(&self->g, types, &matrix, &row_ids, &col_ids)) { + if (igraph_get_biadjacency(&self->g, types, &matrix, &row_ids, &col_ids)) { igraphmodule_handle_igraph_error(); igraph_vector_int_destroy(&row_ids); igraph_vector_int_destroy(&col_ids); @@ -13848,12 +13852,12 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "@param mutual: whether to create all connections as mutual\n" " in case of a directed graph.\n"}, - /* interface to igraph_incidence */ - {"_Incidence", (PyCFunction) igraphmodule_Graph_Incidence, + /* interface to igraph_biadjacency */ + {"_Biadjacency", (PyCFunction) igraphmodule_Graph_Biadjacency, METH_VARARGS | METH_CLASS | METH_KEYWORDS, - "_Incidence(matrix, directed=False, mode=\"all\", multiple=False)\n--\n\n" + "_Biadjacency(matrix, directed=False, mode=\"all\", multiple=False)\n--\n\n" "Internal function, undocumented.\n\n" - "@see: Graph.Incidence()\n\n"}, + "@see: Graph.Biadjacency()\n\n"}, /* interface to igraph_kautz */ {"Kautz", (PyCFunction) igraphmodule_Graph_Kautz, @@ -16322,18 +16326,18 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " the I{endpoints} of the loop edges, not the edges themselves).\n" "@return: the adjacency matrix.\n"}, - // interface to igraph_get_edgelist + /* interface to igraph_get_biadjacency */ + {"get_biadjacency", (PyCFunction) igraphmodule_Graph_get_biadjacency, + METH_VARARGS | METH_KEYWORDS, + "get_biadjacency(types)\n--\n\n" + "Internal function, undocumented.\n\n" + "@see: Graph.get_biadjacency()\n\n"}, + + /* interface to igraph_get_edgelist */ {"get_edgelist", (PyCFunction) igraphmodule_Graph_get_edgelist, METH_NOARGS, "get_edgelist()\n--\n\n" "Returns the edge list of a graph."}, - /* interface to igraph_get_incidence */ - {"get_incidence", (PyCFunction) igraphmodule_Graph_get_incidence, - METH_VARARGS | METH_KEYWORDS, - "get_incidence(types)\n--\n\n" - "Internal function, undocumented.\n\n" - "@see: Graph.get_incidence()\n\n"}, - /* interface to igraph_to_directed */ {"to_directed", (PyCFunction) igraphmodule_Graph_to_directed, METH_VARARGS | METH_KEYWORDS, diff --git a/src/igraph/__init__.py b/src/igraph/__init__.py index 4e0136ba5..674e20d51 100644 --- a/src/igraph/__init__.py +++ b/src/igraph/__init__.py @@ -78,7 +78,7 @@ _get_adjacency, _get_adjacency_sparse, _get_adjlist, - _get_incidence, + _get_biadjacency, _get_inclist, ) from igraph.automorphisms import ( @@ -217,7 +217,7 @@ ) from igraph.io.bipartite import ( _construct_bipartite_graph, - _construct_incidence_bipartite_graph, + _construct_bipartite_graph_from_adjacency, _construct_full_bipartite_graph, _construct_random_bipartite_graph, ) @@ -512,7 +512,7 @@ def __init__(self, *args, **kwds): # Bipartite graphs Bipartite = classmethod(_construct_bipartite_graph) - Incidence = classmethod(_construct_incidence_bipartite_graph) + Biadjacency = classmethod(_construct_bipartite_graph_from_adjacency) Full_Bipartite = classmethod(_construct_full_bipartite_graph) Random_Bipartite = classmethod(_construct_random_bipartite_graph) @@ -620,7 +620,7 @@ def es(self): get_adjacency = _get_adjacency get_adjacency_sparse = _get_adjacency_sparse get_adjlist = _get_adjlist - get_incidence = _get_incidence + get_biadjacency = _get_biadjacency get_inclist = _get_inclist ############################################# @@ -937,6 +937,23 @@ def __reduce__(self): __iter__ = None # needed for PyPy __hash__ = None # needed for PyPy + ########################### + # Deprecated functions + + @classmethod + def Incidence(cls, *args, **kwds): + """Deprecated alias to L{Graph.Biadjacency()}.""" + deprecated("Graph.Incidence() is deprecated; use Graph.Biadjacency() instead") + return cls.Biadjacency(*args, **kwds) + + def get_incidence(self, *args, **kwds): + """Deprecated alias to L{Graph.get_biadjacency()}.""" + deprecated( + "Graph.get_incidence() is deprecated; use Graph.get_biadjacency() " + "instead" + ) + return self.get_biadjacency(*args, **kwds) + ############################################################## # I/O format mapping @@ -1056,7 +1073,7 @@ def write(graph, filename, *args, **kwds): _construct_graph_from_dataframe, _construct_random_geometric_graph, _construct_bipartite_graph, - _construct_incidence_bipartite_graph, + _construct_bipartite_graph_from_adjacency, _construct_full_bipartite_graph, _construct_random_bipartite_graph, _construct_graph_from_networkx, diff --git a/src/igraph/adjacency.py b/src/igraph/adjacency.py index 48d35fe38..c7b377d3f 100644 --- a/src/igraph/adjacency.py +++ b/src/igraph/adjacency.py @@ -11,7 +11,7 @@ "_get_adjacency", "_get_adjacency_sparse", "_get_adjlist", - "_get_incidence", + "_get_biadjacency", "_get_inclist", ) @@ -133,23 +133,22 @@ def _get_adjlist(self, mode="out"): return [self.neighbors(idx, mode) for idx in range(self.vcount())] -def _get_incidence(graph, types="type", *args, **kwds): - """Returns the incidence matrix of a bipartite graph. The incidence matrix - is an M{n} times M{m} matrix, where M{n} and M{m} are the number of - vertices in the two vertex classes. +def _get_biadjacency(graph, types="type", *args, **kwds): + """Returns the bipartite adjacency matrix of a bipartite graph. The + bipartite adjacency matrix is an M{n} times M{m} matrix, where M{n} and + M{m} are the number of vertices in the two vertex classes. @param types: an igraph vector containing the vertex types, or an attribute name. Anything that evalulates to C{False} corresponds to vertices of the first kind, everything else to the second kind. - @return: the incidence matrix and two lists in a triplet. The first - list defines the mapping between row indices of the matrix and the - original vertex IDs. The second list is the same for the column - indices. + @return: the bipartite adjacency matrix and two lists in a triplet. The + first list defines the mapping between row indices of the matrix and the + original vertex IDs. The second list is the same for the column indices. """ # Deferred import to avoid cycles from igraph import Graph - return super(Graph, graph).get_incidence(types, *args, **kwds) + return super(Graph, graph).get_biadjacency(types, *args, **kwds) def _get_inclist(graph, mode="out"): diff --git a/src/igraph/io/bipartite.py b/src/igraph/io/bipartite.py index aa359b8f1..70fac3750 100644 --- a/src/igraph/io/bipartite.py +++ b/src/igraph/io/bipartite.py @@ -1,4 +1,4 @@ -def _construct_incidence_bipartite_graph( +def _construct_bipartite_graph_from_adjacency( cls, matrix, directed=False, @@ -8,13 +8,13 @@ def _construct_incidence_bipartite_graph( *args, **kwds ): - """Creates a bipartite graph from an incidence matrix. + """Creates a bipartite graph from a bipartite adjacency matrix. Example: - >>> g = Graph.Incidence([[0, 1, 1], [1, 1, 0]]) + >>> g = Graph.Biadjacency([[0, 1, 1], [1, 1, 0]]) - @param matrix: the incidence matrix. + @param matrix: the bipartite adjacency matrix. @param directed: whether to create a directed graph. @param mode: defines the direction of edges in the graph. If C{"out"}, then edges go from vertices of the first kind @@ -28,12 +28,12 @@ def _construct_incidence_bipartite_graph( the nearest integer and this will be the number of multiple edges created. @param weighted: defines whether to create a weighted graph from the - incidence matrix. If it is c{None} then an unweighted graph is created + adjacency matrix. If it is c{None} then an unweighted graph is created and the multiple argument is used to determine the edges of the graph. If it is a string then for every non-zero matrix entry, an edge is created and the value of the entry is added as an edge attribute named by the weighted argument. If it is C{True} then a weighted graph is created and - the name of the edge attribute will be ‘weight’. + the name of the edge attribute will be C{"weight"}. @raise ValueError: if the weighted and multiple are passed together. @@ -43,11 +43,11 @@ def _construct_incidence_bipartite_graph( is_weighted = True if weighted or weighted == "" else False if is_weighted and multiple: raise ValueError("arguments weighted and multiple can not co-exist") - result, types = cls._Incidence(matrix, directed, mode, multiple, *args, **kwds) + result, types = cls._Biadjacency(matrix, directed, mode, multiple, *args, **kwds) result.vs["type"] = types if is_weighted: weight_attr = "weight" if weighted is True else weighted - _, rows, _ = result.get_incidence() + _, rows, _ = result.get_biadjacency() num_vertices_of_first_kind = len(rows) for edge in result.es: source, target = edge.tuple diff --git a/tests/test_bipartite.py b/tests/test_bipartite.py index 23ec6554f..45cca2fc2 100644 --- a/tests/test_bipartite.py +++ b/tests/test_bipartite.py @@ -45,31 +45,31 @@ def testFullBipartite(self): self.assertTrue(sorted(g.get_edgelist()) == expected) self.assertTrue(g.vs["type"] == [False] * 10 + [True] * 5) - def testIncidence(self): - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]]) + def testBiadjacency(self): + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]]) self.assertTrue(all((g.vcount() == 5, g.ecount() == 4, not g.is_directed()))) self.assertListEqual(g.vs["type"], [False] * 2 + [True] * 3) self.assertListEqual(sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3)]) - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], multiple=True) + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], multiple=True) self.assertTrue(all((g.vcount() == 5, g.ecount() == 5, not g.is_directed()))) self.assertListEqual(g.vs["type"], [False] * 2 + [True] * 3) self.assertListEqual( sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3), (1, 3)] ) - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], directed=True) + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], directed=True) self.assertTrue(all((g.vcount() == 5, g.ecount() == 4, g.is_directed()))) self.assertListEqual(g.vs["type"], [False] * 2 + [True] * 3) self.assertListEqual(sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3)]) - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], directed=True, mode="in") + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], directed=True, mode="in") self.assertTrue(all((g.vcount() == 5, g.ecount() == 4, g.is_directed()))) self.assertListEqual(g.vs["type"], [False] * 2 + [True] * 3) self.assertListEqual(sorted(g.get_edgelist()), [(2, 1), (3, 0), (3, 1), (4, 0)]) # Create a weighted Graph - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], weighted=True) + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], weighted=True) self.assertTrue( all( (g.vcount() == 5, g.ecount() == 4, not g.is_directed(), g.is_weighted()) @@ -80,7 +80,7 @@ def testIncidence(self): self.assertListEqual(sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3)]) # Graph is not weighted when weighted=`str` - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], weighted="some_attr_name") + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], weighted="some_attr_name") self.assertTrue( all( ( @@ -96,7 +96,7 @@ def testIncidence(self): self.assertListEqual(sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3)]) # Graph is not weighted when weighted="" - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], weighted="") + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], weighted="") self.assertTrue( all( ( @@ -112,7 +112,7 @@ def testIncidence(self): self.assertListEqual(sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3)]) # Should work when directed=True and mode=out with weighted - g = Graph.Incidence([[0, 1, 1], [1, 2, 0]], directed=True, weighted=True) + g = Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], directed=True, weighted=True) self.assertTrue( all((g.vcount() == 5, g.ecount() == 4, g.is_directed(), g.is_weighted())) ) @@ -121,7 +121,7 @@ def testIncidence(self): self.assertListEqual(sorted(g.get_edgelist()), [(0, 3), (0, 4), (1, 2), (1, 3)]) # Should work when directed=True and mode=in with weighted - g = Graph.Incidence( + g = Graph.Biadjacency( [[0, 1, 1], [1, 2, 0]], directed=True, mode="in", weighted=True ) self.assertTrue( @@ -132,7 +132,7 @@ def testIncidence(self): self.assertListEqual(sorted(g.get_edgelist()), [(2, 1), (3, 0), (3, 1), (4, 0)]) # Should work when directed=True and mode=all with weighted - g = Graph.Incidence( + g = Graph.Biadjacency( [[0, 1, 1], [1, 2, 0]], directed=True, mode="all", weighted=True ) self.assertTrue( @@ -145,28 +145,28 @@ def testIncidence(self): [(0, 3), (0, 4), (1, 2), (1, 3), (2, 1), (3, 0), (3, 1), (4, 0)], ) - def testIncidenceError(self): + def testBiadjacencyError(self): msg = "arguments weighted and multiple can not co-exist" with self.assertRaises(ValueError) as e: - Graph.Incidence([[0, 1, 1], [1, 2, 0]], multiple=True, weighted=True) + Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], multiple=True, weighted=True) self.assertIn(msg, e.exception.args) with self.assertRaises(ValueError) as e: - Graph.Incidence([[0, 1, 1], [1, 2, 0]], multiple=True, weighted="string") + Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], multiple=True, weighted="string") self.assertIn(msg, e.exception.args) with self.assertRaises(ValueError) as e: - Graph.Incidence([[0, 1, 1], [1, 2, 0]], multiple=True, weighted="") + Graph.Biadjacency([[0, 1, 1], [1, 2, 0]], multiple=True, weighted="") self.assertIn(msg, e.exception.args) - def testGetIncidence(self): + def testGetBiadjacency(self): mat = [[0, 1, 1], [1, 1, 0]] v1, v2 = [0, 1], [2, 3, 4] - g = Graph.Incidence(mat) - self.assertTrue(g.get_incidence() == (mat, v1, v2)) + g = Graph.Biadjacency(mat) + self.assertTrue(g.get_biadjacency() == (mat, v1, v2)) g.vs["type2"] = g.vs["type"] - self.assertTrue(g.get_incidence("type2") == (mat, v1, v2)) - self.assertTrue(g.get_incidence(g.vs["type2"]) == (mat, v1, v2)) + self.assertTrue(g.get_biadjacency("type2") == (mat, v1, v2)) + self.assertTrue(g.get_biadjacency(g.vs["type2"]) == (mat, v1, v2)) def testBipartiteProjection(self): g = Graph.Full_Bipartite(10, 5) From fb4723d57b669648565e672af1cbb277d1291d7a Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 3 Jul 2023 13:07:02 +0200 Subject: [PATCH 109/681] fix: fix two deprecation warnings --- src/_igraph/graphobject.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 162d37e75..aaf301838 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -3881,7 +3881,7 @@ PyObject *igraphmodule_Graph_authority_score( ATTRIBUTE_TYPE_EDGE)) return NULL; arpack_options = (igraphmodule_ARPACKOptionsObject*)arpack_options_o; - if (igraph_authority_score(&self->g, &res, &value, PyObject_IsTrue(scale_o), + if (igraph_hub_and_authority_scores(&self->g, NULL, &res, &value, PyObject_IsTrue(scale_o), weights, igraphmodule_ARPACKOptions_get(arpack_options))) { igraphmodule_handle_igraph_error(); if (weights) { igraph_vector_destroy(weights); free(weights); } @@ -5669,7 +5669,7 @@ PyObject *igraphmodule_Graph_hub_score( ATTRIBUTE_TYPE_EDGE)) return NULL; arpack_options = (igraphmodule_ARPACKOptionsObject*)arpack_options_o; - if (igraph_hub_score(&self->g, &res, &value, PyObject_IsTrue(scale_o), + if (igraph_hub_and_authority_scores(&self->g, &res, NULL, &value, PyObject_IsTrue(scale_o), weights, igraphmodule_ARPACKOptions_get(arpack_options))) { igraphmodule_handle_igraph_error(); if (weights) { igraph_vector_destroy(weights); free(weights); } From 458d04780e08270d87332dfc887572986fd439b9 Mon Sep 17 00:00:00 2001 From: Vincent Traag Date: Wed, 5 Jul 2023 12:22:15 +0200 Subject: [PATCH 110/681] fix: Correct shlex on Windows. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 36002acd3..88e351802 100644 --- a/setup.py +++ b/setup.py @@ -282,7 +282,7 @@ def _compile_in( # Add any extra CMake args from environment variables if "IGRAPH_CMAKE_EXTRA_ARGS" in os.environ: - args.extend(shlex.split(os.environ["IGRAPH_CMAKE_EXTRA_ARGS"])) + args.extend(shlex.split(os.environ["IGRAPH_CMAKE_EXTRA_ARGS"], posix=not building_on_windows_msvc())) # Finally, add the source folder path args.append(str(build_to_source_folder)) From 72240a9e0dffff19dfc0c89bb49ad4f6d0596d05 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Sat, 8 Jul 2023 18:45:51 +0200 Subject: [PATCH 111/681] fix: fix a memory management issue in PyUnicode_CopyAsString(); closes #679 --- src/_igraph/pyhelpers.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/_igraph/pyhelpers.c b/src/_igraph/pyhelpers.c index 05bdcef53..65954fddb 100644 --- a/src/_igraph/pyhelpers.c +++ b/src/_igraph/pyhelpers.c @@ -117,21 +117,21 @@ PyObject* igraphmodule_PyList_Zeroes(Py_ssize_t len) { * It is the responsibility of the caller to release the C string. */ char* igraphmodule_PyObject_ConvertToCString(PyObject* string) { - char* result; - - if (string == 0) - return 0; + char* result = NULL; - if (!PyBaseString_Check(string)) { - string = PyObject_Str(string); - if (string == 0) - return 0; + if (string == NULL) { + /* Nothing to do */ + } else if (PyBaseString_Check(string)) { + result = PyUnicode_CopyAsString(string); } else { - Py_INCREF(string); - } + string = PyObject_Str(string); + if (string == NULL) { + return NULL; + } - result = PyUnicode_CopyAsString(string); - Py_DECREF(string); + result = PyUnicode_CopyAsString(string); + Py_DECREF(string); + } return result; } @@ -177,19 +177,19 @@ char* PyUnicode_CopyAsString(PyObject* string) { bytes = PyUnicode_AsUTF8String(string); } - if (bytes == 0) { - return 0; + if (bytes == NULL) { + return NULL; } result = PyBytes_AsString(bytes); - if (result == 0) { + if (result == NULL) { Py_DECREF(bytes); - return 0; + return NULL; } - Py_DECREF(bytes); result = strdup(result); - if (result == 0) { + Py_DECREF(bytes); + if (result == NULL) { PyErr_NoMemory(); } From 9252cf267aa154595bff84151c1a4410fd6cef01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Nepusz?= Date: Sun, 9 Jul 2023 20:45:51 +0200 Subject: [PATCH 112/681] fix: fix typo in visualize_cliques.py --- doc/examples_sphinx-gallery/visualize_cliques.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/examples_sphinx-gallery/visualize_cliques.py b/doc/examples_sphinx-gallery/visualize_cliques.py index 3fee6fb06..f223a5b4e 100644 --- a/doc/examples_sphinx-gallery/visualize_cliques.py +++ b/doc/examples_sphinx-gallery/visualize_cliques.py @@ -28,7 +28,7 @@ ig.plot( ig.VertexCover(g, [clique]), mark_groups=True, palette=ig.RainbowPalette(), - vetex_size=5, + vertex_size=5, edge_width=0.5, target=ax, ) @@ -60,7 +60,7 @@ ig.VertexCover(g, [clique]), mark_groups=True, palette=ig.RainbowPalette(), - vetex_size=5, + vertex_size=5, target=ax, ) plt.axis('off') From 8a44fe8e5ae02faca5cf2a2423d09b259349d4c1 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 10 Jul 2023 19:52:50 +1000 Subject: [PATCH 113/681] Update one mpl reference image, fix bug in edge_curved --- src/igraph/drawing/matplotlib/edge.py | 3 +++ src/igraph/drawing/matplotlib/graph.py | 9 +++++---- .../test_graph/graph_with_curved_edges.png | Bin 48561 -> 40137 bytes tests/drawing/matplotlib/test_graph.py | 8 +++++++- vendor/source/igraph | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index bb77b8ef6..1fc3d2f6c 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -163,6 +163,9 @@ def _compute_paths(self, transform=None): def _compute_path_loop(self, coordt, size, trans_inv): import numpy as np + # TODO: check out non-loop edges for this vertex and try + # fit the loops in the largest wedge. + # Make arc (class method) path = mpl.path.Path.arc(-90, 180) vertices = path.vertices.copy() diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index f4206cadb..29d08ffa3 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -167,7 +167,7 @@ def __init__( def _kwds_post_update(self): self.kwds["layout"] = self.ensure_layout(self.kwds["layout"], self.graph) - self.kwds["edge_curved"] = self._set_edge_curve(**self.kwds) + self._set_edge_curve() self._clear_state() self.stale = True @@ -192,8 +192,9 @@ def get_children(self): artists.extend(self._vertex_labels) return tuple(artists) - def _set_edge_curve(self, **kwds): + def _set_edge_curve(self): graph = self.graph + kwds = self.kwds # Decide whether we need to calculate the curvature of edges # automatically -- and calculate them if needed. @@ -210,12 +211,11 @@ def _set_edge_curve(self, **kwds): if default is True: default = 0.5 default = float(default) - return autocurve( + self.kwds["edge_curved"] = autocurve( graph, attribute=None, default=default, ) - return None def get_vertices(self): """Get VertexCollection artist.""" @@ -557,6 +557,7 @@ def _draw_edges(self): arrow_widths = [] curved = [] for edge, visual_edge in edge_coord_iter: + print(visual_edge) edge_vertices = [vertex_builder[v] for v in edge.tuple] art = edge_drawer.build_patch(visual_edge, *edge_vertices) edgepatches.append(art) diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_with_curved_edges.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_with_curved_edges.png index 08f10b08cdae3a8a079d5906b3ee20d24f16b245..3241471116b8be625204740e06f59b4884ff7713 100644 GIT binary patch literal 40137 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 ZJMmBTKOVc>v&j3UsUB9z+JEB8{{hh8-O&I5 literal 48561 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 Date: Mon, 10 Jul 2023 19:57:28 +1000 Subject: [PATCH 114/681] Matplotlib: use gca and return container artist --- src/igraph/drawing/__init__.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/igraph/drawing/__init__.py b/src/igraph/drawing/__init__.py index 06bcda90a..8a2ea2a3c 100644 --- a/src/igraph/drawing/__init__.py +++ b/src/igraph/drawing/__init__.py @@ -252,8 +252,8 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): if target is None: if backend == "matplotlib": - # Create a new axes if needed - _, target = plt.subplots() + # Use get current axes, customary in these cases + target = plt.gca() elif backend == "plotly": # Create a new figure if needed target = plotly.graph_objects.Figure() @@ -271,9 +271,6 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): *args, **kwds, ) - # NOTE: for matplotlib, result is the container Artist. It would be - # good to return this instead of target, like we do for Cairo. - # However, that breaks API so let's wait for a major release if save_path is not None: if backend == "matplotlib": @@ -281,6 +278,12 @@ def plot(obj, target=None, bbox=(0, 0, 600, 600), *args, **kwds): elif backend == "plotly": target.write_image(save_path) + # For matplotlib, return the container artist, which makes it easier + # to manipulate post-facto. The user can always get the artist with + # plt.gca() - as we do, in fact. + if backend == "matplotlib": + return result + return target # Cairo backend From 005b7081770aaaac96ed2aca862d5d93f2638cf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jul 2023 13:05:41 +0000 Subject: [PATCH 115/681] build(deps): bump pypa/cibuildwheel from 2.13.1 to 2.14.0 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.13.1 to 2.14.0. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.13.1...v2.14.0) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d29e8cdd4..d1f5a12f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.13.1 + uses: pypa/cibuildwheel@v2.14.0 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" @@ -38,7 +38,7 @@ jobs: CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.13.1 + uses: pypa/cibuildwheel@v2.14.0 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -63,7 +63,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.13.1 + uses: pypa/cibuildwheel@v2.14.0 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -88,7 +88,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.13.1 + uses: pypa/cibuildwheel@v2.14.0 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -155,7 +155,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.13.1 + uses: pypa/cibuildwheel@v2.14.0 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -242,7 +242,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.13.1 + uses: pypa/cibuildwheel@v2.14.0 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From 8e2e4d67a180fb505ccf01d6fe6052627b6bec95 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 15:36:09 +0200 Subject: [PATCH 116/681] feat: added support for building igraph with sanitizers --- etc/lsan-suppr.txt | 12 ++++++++++++ setup.py | 41 +++++++++++++++++++++++++++++++---------- test.sh | 33 +++++++++++++++++++++++++++++---- 3 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 etc/lsan-suppr.txt diff --git a/etc/lsan-suppr.txt b/etc/lsan-suppr.txt new file mode 100644 index 000000000..719c01d39 --- /dev/null +++ b/etc/lsan-suppr.txt @@ -0,0 +1,12 @@ +leak:_PyObject_Malloc +leak:_PyObject_Realloc +leak:newlockobject +leak:initumath +leak:uint_arrtype_new +leak:ufunc_generic_fastcall +leak:ffi_call_int +leak:array_empty +leak:array_copy +leak:array_cumsum + + diff --git a/setup.py b/setup.py index 88e351802..48e4e975c 100644 --- a/setup.py +++ b/setup.py @@ -54,6 +54,14 @@ T = TypeVar("T") +def is_envvar_on(name: str) -> bool: + """Returns whether the given environment variable is set to a truthy value + such as '1', 'on' or 'true'. + """ + value = os.environ.get(name, "") + return value and str(value).lower() in ("1", "on", "true") + + def building_on_windows_msvc() -> bool: """Returns True when using the non-MinGW CPython interpreter on Windows""" return platform.system() == "Windows" and sysconfig.get_platform() != "mingw" @@ -64,6 +72,15 @@ def building_with_emscripten() -> bool: return (sysconfig.get_config_var("HOST_GNU_TYPE") or "").endswith("emscripten") +def building_with_sanitizers() -> bool: + """Returns True when the IGRAPH_USE_SANITIZERS envvar is set, indicating that + we want to build the Python interface with AddressSanitizer and LeakSanitizer + enabled. Currently works on Linux only and the primary use-case is to be able + to test igraph with sanitizers in CI. + """ + return platform.system() == "Linux" and is_envvar_on("IGRAPH_USE_SANITIZERS") + + def exclude_from_list(items: Iterable[T], items_to_exclude: Iterable[T]) -> List[T]: """Excludes certain items from a list, keeping the original order of the remaining items.""" @@ -280,6 +297,10 @@ def _compile_in( # to avoid having the architecture name in the LIBPATH (e.g. lib/x86_64-linux-gnu) args.append("-DCMAKE_INSTALL_PREFIX=" + str(install_folder)) + # Compile the C core with sanitizers if needed + if building_with_sanitizers(): + args.append("-DUSE_SANITIZER=Address;Undefined") + # Add any extra CMake args from environment variables if "IGRAPH_CMAKE_EXTRA_ARGS" in os.environ: args.extend(shlex.split(os.environ["IGRAPH_CMAKE_EXTRA_ARGS"], posix=not building_on_windows_msvc())) @@ -365,6 +386,7 @@ def __init__(self): self.extra_objects = [] self.static_extension = False self.use_pkgconfig = False + self.use_sanitizers = False self.c_core_built = False self.allow_educated_guess = True self._has_pkgconfig = None @@ -463,16 +485,9 @@ def run(self): extra_libraries = os.environ["IGRAPH_EXTRA_LIBRARIES"].split(",") buildcfg.libraries.extend(extra_libraries) - # Override static specification based on environment variable - if "IGRAPH_STATIC_EXTENSION" in os.environ: - if os.environ["IGRAPH_STATIC_EXTENSION"].lower() in [ - "true", - "1", - "on", - ]: - buildcfg.static_extension = True - else: - buildcfg.static_extension = False + # Override build configuration based on environment variables + buildcfg.static_extension = is_envvar_on("IGRAPH_STATIC_EXTENSION") + buildcfg.use_sanitizers = building_with_sanitizers() # Replaces library names with full paths to static libraries # where possible. libm.a is excluded because it caused problems @@ -484,6 +499,11 @@ def run(self): else: buildcfg.replace_static_libraries(exclusions=["m"]) + # Add sanitizer flags + if buildcfg.use_sanitizers: + buildcfg.extra_link_args += ["-fsanitize=address", "-fsanitize=undefined"] + buildcfg.extra_compile_args += ["-fno-omit-frame-pointer"] + # Add extra libraries that may have been specified if "IGRAPH_EXTRA_DYNAMIC_LIBRARIES" in os.environ: extra_libraries = os.environ[ @@ -768,6 +788,7 @@ def process_envvar(name, attr, value): process_envvar("no_pkg_config", "use_pkgconfig", False) process_envvar("no_wait", "wait", False) process_envvar("use_pkg_config", "use_pkgconfig", True) + process_envvar("use_sanitizers", "use_sanitizers", False) def replace_static_libraries(self, only=None, exclusions=None): """Replaces references to libraries with full paths to their static diff --git a/test.sh b/test.sh index 0e55c78e8..7c74a89c8 100755 --- a/test.sh +++ b/test.sh @@ -9,7 +9,7 @@ set -e CLEAN=0 VENV_DIR=.venv -while getopts ":ce:k:" OPTION; do +while getopts ":ce:k:s" OPTION; do case $OPTION in c) CLEAN=1 @@ -20,14 +20,29 @@ while getopts ":ce:k:" OPTION; do k) PYTEST_ARGS="${PYTEST_ARGS} -k $OPTARG" ;; + s) + USE_SANITIZERS=1 + ;; \?) - echo "Usage: $0 [-c] [-e VIRTUALENV]" + echo "Usage: $0 [-c] [-e VIRTUALENV] [-s]" + echo "" + echo "Options:" + echo " -c: clean igraph's already-built C core before running tests" + echo " -e VIRTUALENV: use the given virtualenv instead of .venv" + echo " -s: compile the C core and the Python module with sanitizers enabled" exit 1 ;; esac done shift $((OPTIND -1)) +if [ "x$USE_SANITIZERS" = x1 ]; then + if [ "`python3 -c 'import platform; print(platform.system())'`" != "Linux" ]; then + echo "Compiling igraph with sanitizers is currently supported on Linux only." + exit 1 + fi +fi + if [ ! -d $VENV_DIR ]; then $PYTHON -m venv $VENV_DIR $VENV_DIR/bin/pip install -U pip wheel @@ -41,6 +56,16 @@ fi export MACOSX_DEPLOYMENT_TARGET=12.0 # pip install is called in verbose mode so we can see the compiler warnings -$VENV_DIR/bin/pip install -v .[plotting,test] -$VENV_DIR/bin/pytest tests ${PYTEST_ARGS} +if [ "x$USE_SANITIZERS" = x1 ]; then + # Do not run plotting tests -- they tend to have lots of false positives in + # the sanitizer output + IGRAPH_USE_SANITIZERS=1 $VENV_DIR/bin/pip install -v .[test] + LD_PRELOAD=$(gcc -print-file-name=libasan.so) \ + LSAN_OPTIONS=suppressions=etc/lsan-suppr.txt \ + ASAN_OPTIONS=detect_stack_use_after_return=1 \ + $VENV_DIR/bin/pytest tests ${PYTEST_ARGS} +else + $VENV_DIR/bin/pip install -v .[plotting,test] + $VENV_DIR/bin/pytest tests ${PYTEST_ARGS} +fi From 2d42876f9f2d7ea95ef8497a51c67686abf10327 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 16:14:25 +0200 Subject: [PATCH 117/681] fix: fix a memory leak in Graph.decompose() --- CHANGELOG.md | 2 ++ src/_igraph/convert.c | 8 +++----- src/_igraph/graphobject.c | 9 +++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20eb8cd50..61c3f463e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ ### Fixed +- Fixed a minor memory leak in `Graph.decompose()`. + - The default vertex size of the Plotly backend was fixed so the vertices are now visible by default without specifying an explicit size for them. diff --git a/src/_igraph/convert.c b/src/_igraph/convert.c index a8a46ab5b..a3a7f28e0 100644 --- a/src/_igraph/convert.c +++ b/src/_igraph/convert.c @@ -2516,11 +2516,9 @@ PyObject* igraphmodule_vector_int_list_t_to_PyList_of_tuples(const igraph_vector * \ingroup python_interface_conversion * \brief Converts an \c igraph_graph_list_t into a Python list of graphs * - * This function transfers ownership of the graphs to Python and frees the pointers - * to them. If it fails, you can call \c igraph_graph_list_destroy if you have to. - * If successful, do nothing and especially do *not* destroy the list, because that - * will destroy each graph inside, which in turns destroys the vertices and edges - * data structures that are now supposedly managed by Python. + * This function transfers ownership of the graphs to Python and empties the + * graph list in parallel. You can (and should) call \c igraph_graph_list_destroy + * regularly after the conversion is done. * * \param v the \c igraph_graph_list_t containing the list to be converted; the * list will become empty after executing this function diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index aaf301838..5f977cd50 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -4831,16 +4831,17 @@ PyObject *igraphmodule_Graph_decompose(igraphmodule_GraphObject * self, return NULL; } - /* We have to create a Python igraph object for every graph returned */ - /* Pointers to each graph are freed, but the graphs themselves are not - * destroyed because the Python class takes over ownership of them, - * in particular of edges and vertices */ + /* We have to create a Python igraph object for every graph returned. During + * the conversion, the graph list will be emptied as the Python list we return + * from the conversion function takes ownership of all the graphs */ list = igraphmodule_graph_list_t_to_PyList(&components, Py_TYPE(self)); if (!list) { igraph_graph_list_destroy(&components); return 0; } + igraph_graph_list_destroy(&components); + return list; } From f7b74eecbcbfa7194cf9000d15d2ebc793057762 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 16:25:17 +0200 Subject: [PATCH 118/681] chore: removed some unused imports --- tests/drawing/cairo/utils.py | 2 +- tests/drawing/matplotlib/test_graph.py | 2 +- tests/drawing/matplotlib/utils.py | 3 --- tests/drawing/plotly/test_graph.py | 5 ++--- tests/drawing/plotly/utils.py | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/tests/drawing/cairo/utils.py b/tests/drawing/cairo/utils.py index 68091ea10..df34e47f6 100644 --- a/tests/drawing/cairo/utils.py +++ b/tests/drawing/cairo/utils.py @@ -1,7 +1,7 @@ # Functions adapted from matplotlib.testing. Credit for the original functions # goes to the amazing folks over at matplotlib. from pathlib import Path -import os + import sys import inspect import functools diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index 43bb999a0..c657cb4b4 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -3,7 +3,7 @@ import unittest -from igraph import Graph, InternalError, plot, VertexClustering, config, Layout +from igraph import Graph, plot, VertexClustering, Layout from ...utils import overridden_configuration diff --git a/tests/drawing/matplotlib/utils.py b/tests/drawing/matplotlib/utils.py index f9f195940..9bf78966a 100644 --- a/tests/drawing/matplotlib/utils.py +++ b/tests/drawing/matplotlib/utils.py @@ -1,6 +1,5 @@ # Functions adapted from matplotlib.testing. Credit for the original functions # goes to the amazing folks over at matplotlib. -from pathlib import Path import sys import inspect import functools @@ -8,8 +7,6 @@ try: import matplotlib from matplotlib.testing.decorators import _collect_new_figures, _ImageComparisonBase - from matplotlib.testing.compare import comparable_formats - import matplotlib.pyplot as plt except ImportError: matplotlib = None diff --git a/tests/drawing/plotly/test_graph.py b/tests/drawing/plotly/test_graph.py index 22ca84b9b..791e6729c 100644 --- a/tests/drawing/plotly/test_graph.py +++ b/tests/drawing/plotly/test_graph.py @@ -1,8 +1,7 @@ -import random import unittest -from igraph import Graph, InternalError, plot, VertexClustering +from igraph import Graph, plot, VertexClustering # FIXME: find a better way to do this that works for both direct call and module # import e.g. tox @@ -75,7 +74,7 @@ def test_mark_groups_squares(self): return fig @image_comparison(baseline_images=["graph_edit_children"]) - def test_mark_groups_squares(self): + def test_graph_edit_children(self): g = Graph.Ring(5) fig = go.Figure() plot(g, target=fig, vertex_shape="circle", diff --git a/tests/drawing/plotly/utils.py b/tests/drawing/plotly/utils.py index 76d96e346..1c6f51b54 100644 --- a/tests/drawing/plotly/utils.py +++ b/tests/drawing/plotly/utils.py @@ -1,7 +1,7 @@ # Functions adapted from matplotlib.testing. Credit for the original functions # goes to the amazing folks over at matplotlib. from pathlib import Path -import os + import sys import inspect import functools From 40cb48e4a1b63acb0ecd29e235889d4ca6ff02d0 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 16:27:28 +0200 Subject: [PATCH 119/681] test: added missing Plotly baseline image --- .../graph_mark_groups_squares_directed.json | 1047 +++++++++++++++++ 1 file changed, 1047 insertions(+) create mode 100644 tests/drawing/plotly/baseline_images/graph_mark_groups_squares_directed.json diff --git a/tests/drawing/plotly/baseline_images/graph_mark_groups_squares_directed.json b/tests/drawing/plotly/baseline_images/graph_mark_groups_squares_directed.json new file mode 100644 index 000000000..48afb5b8b --- /dev/null +++ b/tests/drawing/plotly/baseline_images/graph_mark_groups_squares_directed.json @@ -0,0 +1,1047 @@ +{ + "data": [ + { + "marker": { + "color": "rgba(255,0,0,255)", + "line": { + "color": "rgba(0,0,0,255)" + }, + "size": 20.0, + "symbol": "square" + }, + "mode": "markers", + "type": "scatter", + "x": [ + 1.015318095035966 + ], + "y": [ + 0.03435580194714975 + ] + }, + { + "marker": { + "color": "rgba(255,0,0,255)", + "line": { + "color": "rgba(0,0,0,255)" + }, + "size": 20.0, + "symbol": "square" + }, + "mode": "markers", + "type": "scatter", + "x": [ + 0.29010409851547664 + ], + "y": [ + 1.0184451153265959 + ] + }, + { + "marker": { + "color": "rgba(255,0,0,255)", + "line": { + "color": "rgba(0,0,0,255)" + }, + "size": 20.0, + "symbol": "square" + }, + "mode": "markers", + "type": "scatter", + "x": [ + -0.8699239050738742 + ], + "y": [ + 0.6328259400443561 + ] + }, + { + "marker": { + "color": "rgba(255,0,0,255)", + "line": { + "color": "rgba(0,0,0,255)" + }, + "size": 20.0, + "symbol": "square" + }, + "mode": "markers", + "type": "scatter", + "x": [ + -0.8616466426732888 + ], + "y": [ + -0.5895891303732176 + ] + }, + { + "marker": { + "color": "rgba(255,0,0,255)", + "line": { + "color": "rgba(0,0,0,255)" + }, + "size": 20.0, + "symbol": "square" + }, + "mode": "markers", + "type": "scatter", + "x": [ + 0.30349699041342515 + ], + "y": [ + -0.9594640169691343 + ] + }, + { + "fillcolor": "#444", + "mode": "lines", + "type": "scatter", + "x": [ + 0.29010409851547664, + 0.1950972580065446, + 0.1950972580065446, + 0.29010409851547664 + ], + "y": [ + 1.0184451153265959, + 1.0631519409409285, + 0.9737382897122633, + 1.0184451153265959 + ] + }, + { + "fillcolor": "#444", + "mode": "lines", + "type": "scatter", + "x": [ + -0.8699239050738742, + -0.9649307455828062, + -0.9649307455828062, + -0.8699239050738742 + ], + "y": [ + 0.6328259400443561, + 0.6775327656586887, + 0.5881191144300235, + 0.6328259400443561 + ] + }, + { + "fillcolor": "#444", + "mode": "lines", + "type": "scatter", + "x": [ + -0.8616466426732888, + -0.9566534831822209, + -0.9566534831822209, + -0.8616466426732888 + ], + "y": [ + -0.5895891303732176, + -0.544882304758885, + -0.6342959559875502, + -0.5895891303732176 + ] + }, + { + "fillcolor": "#444", + "mode": "lines", + "type": "scatter", + "x": [ + 0.30349699041342515, + 0.2084901499044931, + 0.2084901499044931, + 0.30349699041342515 + ], + "y": [ + -0.9594640169691343, + -0.9147571913548017, + -1.004170842583467, + -0.9594640169691343 + ] + }, + { + "fillcolor": "#444", + "mode": "lines", + "type": "scatter", + "x": [ + 1.015318095035966, + 0.9203112545270339, + 0.9203112545270339, + 1.015318095035966 + ], + "y": [ + 0.03435580194714975, + 0.07906262756148238, + -0.010351023667182872, + 0.03435580194714975 + ] + } + ], + "layout": { + "shapes": [ + { + "line": { + "color": "#444", + "width": 2.0 + }, + "path": "M 1.015318095035966,0.03435580194714975 L 0.1950972580065446,1.0184451153265959", + "type": "path" + }, + { + "line": { + "color": "#444", + "width": 2.0 + }, + "path": "M 0.29010409851547664,1.0184451153265959 L -0.9649307455828062,0.6328259400443561", + "type": "path" + }, + { + "line": { + "color": "#444", + "width": 2.0 + }, + "path": "M -0.8699239050738742,0.6328259400443561 L -0.9566534831822209,-0.5895891303732176", + "type": "path" + }, + { + "line": { + "color": "#444", + "width": 2.0 + }, + "path": "M -0.8616466426732888,-0.5895891303732176 L 0.2084901499044931,-0.9594640169691344", + "type": "path" + }, + { + "line": { + "color": "#444", + "width": 2.0 + }, + "path": "M 0.30349699041342515,-0.9594640169691343 L 0.9203112545270339,0.03435580194714975", + "type": "path" + } + ], + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "showticklabels": false, + "visible": false + }, + "yaxis": { + "showticklabels": false, + "visible": false + } + } +} \ No newline at end of file From 485435cf1077041509357fb80664863051261c2f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 16:30:01 +0200 Subject: [PATCH 120/681] fix: do not show suppression stats in sanitizer output --- test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.sh b/test.sh index 7c74a89c8..3b3f7b190 100755 --- a/test.sh +++ b/test.sh @@ -61,7 +61,7 @@ if [ "x$USE_SANITIZERS" = x1 ]; then # the sanitizer output IGRAPH_USE_SANITIZERS=1 $VENV_DIR/bin/pip install -v .[test] LD_PRELOAD=$(gcc -print-file-name=libasan.so) \ - LSAN_OPTIONS=suppressions=etc/lsan-suppr.txt \ + LSAN_OPTIONS=suppressions=etc/lsan-suppr.txt:print_suppressions=false \ ASAN_OPTIONS=detect_stack_use_after_return=1 \ $VENV_DIR/bin/pytest tests ${PYTEST_ARGS} else From 830cd41aed623fc64913b7ee323facce47b5913a Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 16:35:54 +0200 Subject: [PATCH 121/681] ci: use sanitizer when building the Python module itself --- .github/workflows/build.yml | 17 +++++++---------- setup.py | 7 +++++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d1f5a12f4..7ddcc1592 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -304,19 +304,11 @@ jobs: # When updating 'runs-on', the ASan/UBSan library paths/versions must also be updated for LD_PRELOAD # for the "Test" step below. - # - # The C core is temporarily compiled with -DCMAKE_C_FLAGS="-DNDEBUG" because the Python test suite - # triggers a bug/assertion in RNG_INTEGER(): https://github.com/igraph/igraph/issues/2031 - # When this bug is fixed, remove NDEBUG and increment the cache version to v1. build_with_sanitizer: name: Build with sanitizers for debugging purposes runs-on: ubuntu-20.04 env: - CC: "gcc -fsanitize=address -fsanitize=undefined" - CXX: "g++ -fsanitize=address -fsanitize=undefined" - CFLAGS: "-g -Og -fno-omit-frame-pointer -fdiagnostics-color" - CXXFLAGS: "-g -Og -fno-omit-frame-pointer -fdiagnostics-color" - IGRAPH_CMAKE_EXTRA_ARGS: -DUSE_SANITIZER="Address;Undefined" -DCMAKE_BUILD_TYPE=Debug -DFLEX_KEEP_LINE_NUMBERS=ON -DFORCE_COLORED_OUTPUT=ON -DCMAKE_C_FLAGS="-DNDEBUG" + IGRAPH_CMAKE_EXTRA_ARGS: -DFORCE_COLORED_OUTPUT=ON steps: - uses: actions/checkout@v3 with: @@ -343,10 +335,14 @@ jobs: python-version: '3.11' - name: Build C core + env: + IGRAPH_USE_SANITIZERS: 1 run: | python setup.py build_c_core - name: Build and install Python extension + env: + IGRAPH_USE_SANITIZERS: 1 run: | # NOTE: install calls "build" first python setup.py install @@ -361,6 +357,7 @@ jobs: - name: Test env: LD_PRELOAD: "/lib/x86_64-linux-gnu/libasan.so.5:/lib/x86_64-linux-gnu/libubsan.so.1" - ASAN_OPTIONS: "detect_leaks=0" + ASAN_OPTIONS: "detect_stack_use_after_return=1" + LSAN_OPTIONS: "suppressions=etc/lsan-suppr.txt:print_suppressions=false" run: | python -m pytest --capture=sys tests diff --git a/setup.py b/setup.py index 48e4e975c..9535eecb6 100644 --- a/setup.py +++ b/setup.py @@ -264,6 +264,7 @@ def _compile_in( print("Configuring build...") args = [cmake] + cmake_build_mode = "Release" # Build to wasm requires invocation of the Emscripten SDK if building_with_emscripten(): @@ -300,6 +301,8 @@ def _compile_in( # Compile the C core with sanitizers if needed if building_with_sanitizers(): args.append("-DUSE_SANITIZER=Address;Undefined") + args.append("-DFLEX_KEEP_LINE_NUMBERS=ON") + cmake_build_mode = "Debug" # Add any extra CMake args from environment variables if "IGRAPH_CMAKE_EXTRA_ARGS" in os.environ: @@ -314,7 +317,7 @@ def _compile_in( print("Running build...") # We are _not_ using a parallel build; this is intentional, see igraph/igraph#1755 - retcode = subprocess.call([cmake, "--build", ".", "--config", "Release"]) + retcode = subprocess.call([cmake, "--build", ".", "--config", cmake_build_mode]) if retcode: return False @@ -502,7 +505,7 @@ def run(self): # Add sanitizer flags if buildcfg.use_sanitizers: buildcfg.extra_link_args += ["-fsanitize=address", "-fsanitize=undefined"] - buildcfg.extra_compile_args += ["-fno-omit-frame-pointer"] + buildcfg.extra_compile_args += ["-g", "-Og", "-fno-omit-frame-pointer", "-fdiagnostics-color"] # Add extra libraries that may have been specified if "IGRAPH_EXTRA_DYNAMIC_LIBRARIES" in os.environ: From 6141ee71a9f773ed385129415af331af1f77e795 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 16:44:36 +0200 Subject: [PATCH 122/681] ci: adjust config so we don't run the sanitizer on /bin/bash --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7ddcc1592..94450505e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -353,11 +353,11 @@ jobs: # Only pytest, and nothing else should be run in this section due to the presence of LD_PRELOAD. # The ASan/UBSan library versions need to be updated when switching to a newer Ubuntu/GCC. - # Leak detection is disabled because of many false (?) positives in Python itself. + # LD_PRELOAD needs to be specified in the "run" section to ensure that we + # do not pick up memory leaks in the wrapper shell (e.g., /bin/bash) - name: Test env: - LD_PRELOAD: "/lib/x86_64-linux-gnu/libasan.so.5:/lib/x86_64-linux-gnu/libubsan.so.1" ASAN_OPTIONS: "detect_stack_use_after_return=1" LSAN_OPTIONS: "suppressions=etc/lsan-suppr.txt:print_suppressions=false" run: | - python -m pytest --capture=sys tests + LD_PRELOAD=/lib/x86_64-linux-gnu/libasan.so.5:/lib/x86_64-linux-gnu/libubsan.so.1 python -m pytest --capture=sys tests From a2c3b28459d139471dd97bc759e3e9ccd66dcebe Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 17:08:30 +0200 Subject: [PATCH 123/681] ci: cache busting for sanitizer job --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 94450505e..2337f7896 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -322,7 +322,7 @@ jobs: path: | vendor/build vendor/install - key: C-core-build-sanitizer-v0-${{ runner.os }}-${{ hashFiles('.git/modules/vendor/source/igraph/HEAD') }} + key: C-core-build-sanitizer-v1-${{ runner.os }}-${{ hashFiles('.git/modules/vendor/source/igraph/HEAD') }} - name: Install OS dependencies if: steps.cache-c-core.outputs.cache-hit != 'true' # Only needed when building the C core From 47ec0248c00aa211afc38d8abd67fdb29f9183c4 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 17:40:32 +0200 Subject: [PATCH 124/681] fix: fix build on macOS --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9535eecb6..b8d2e7da5 100644 --- a/setup.py +++ b/setup.py @@ -489,7 +489,8 @@ def run(self): buildcfg.libraries.extend(extra_libraries) # Override build configuration based on environment variables - buildcfg.static_extension = is_envvar_on("IGRAPH_STATIC_EXTENSION") + if "IGRAPH_STATIC_EXTENSION" in os.environ: + buildcfg.static_extension = is_envvar_on("IGRAPH_STATIC_EXTENSION") buildcfg.use_sanitizers = building_with_sanitizers() # Replaces library names with full paths to static libraries From 35a4ba43b591b33628c31db92e3b678950752102 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 10 Jul 2023 19:20:28 +0200 Subject: [PATCH 125/681] fix: fix edge label plotting in Plotly --- src/igraph/drawing/plotly/graph.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/igraph/drawing/plotly/graph.py b/src/igraph/drawing/plotly/graph.py index e24cc1102..956d954af 100644 --- a/src/igraph/drawing/plotly/graph.py +++ b/src/igraph/drawing/plotly/graph.py @@ -250,7 +250,7 @@ def draw(self, graph, *args, **kwds): "text": [], "x": [], "y": [], - "color": [], + # "textfont_color": [], # FIXME: horizontal/vertical alignment, offset, etc? } for label, visual_edge, edge in edge_label_iter: @@ -258,7 +258,7 @@ def draw(self, graph, *args, **kwds): src, dest = edge.tuple src_vertex, dest_vertex = vertex_builder[src], vertex_builder[dest] (x, y), (halign, valign) = edge_drawer.get_label_position( - edge, + visual_edge, src_vertex, dest_vertex, ) @@ -268,7 +268,9 @@ def draw(self, graph, *args, **kwds): lab_args["text"].append(label) lab_args["x"].append(x) lab_args["y"].append(y) - lab_args["color"].append(visual_edge.label_color) + # FIXME: colors do not work yet; apparently we need to convert + # visual_edge.label_color to Plotly's format + # lab_args["textfont_color"].append(visual_edge.label_color) stroke = plotly.graph_objects.Scatter( mode="text", **lab_args, From 69a90260621121163c437b168cfb79743378dc2b Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 11 Jul 2023 09:51:20 +0200 Subject: [PATCH 126/681] ci: cache emscripten in wasm build --- .github/workflows/build.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2337f7896..9d51dc2e2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -179,15 +179,16 @@ jobs: - uses: actions/setup-python@v4 name: Install Python with: - python-version: '3.10.2' + python-version: '3.11.2' - uses: mymindstorm/setup-emsdk@v12 with: - version: '3.1.14' + version: '3.1.32' + actions-cache-folder: 'emsdk-cache' - name: Build wheel run: | - pip install pyodide-build==0.21.0 + pip install pyodide-build==0.23.4 pyodide build - uses: actions/upload-artifact@v3 From b8ded445da7a53002a86c0592170e0fd2ccbf924 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 11 Jul 2023 13:01:59 +0200 Subject: [PATCH 127/681] fix: wasm32 size_t is 32-bit so we need to fix the definition of RNG_MAX --- src/_igraph/random.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/_igraph/random.c b/src/_igraph/random.c index b059042d7..61b67b04e 100644 --- a/src/_igraph/random.c +++ b/src/_igraph/random.c @@ -44,7 +44,12 @@ typedef struct { } igraph_i_rng_Python_state_t; #define RNG_BITS 32 -#define RNG_MAX ((((size_t) 1) << RNG_BITS) - 1) +#ifdef __wasm32__ + /* size_t is 32-bit on wasm32 so we cannot use the shift trick */ + #define RNG_MAX 0xFFFFFFFF +#else + #define RNG_MAX ((((size_t) 1) << RNG_BITS) - 1) +#endif static igraph_i_rng_Python_state_t igraph_rng_Python_state = {0}; static igraph_rng_t igraph_rng_Python = { From c7ca7b65c7066c6d70c1067bb019347ce937a2b3 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 11 Jul 2023 13:05:04 +0200 Subject: [PATCH 128/681] fix: explicitly turn off libxml2 in wasm builds --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index b8d2e7da5..ffb0a5913 100644 --- a/setup.py +++ b/setup.py @@ -277,6 +277,7 @@ def _compile_in( return False args.insert(0, emcmake) args.append("-DIGRAPH_WARNINGS_AS_ERRORS:BOOL=OFF") + args.append("-DIGRAPH_GRAPHML_SUPPORT:BOOL=OFF") # Build the Python interface with vendored libraries for deps in "ARPACK BLAS GLPK GMP LAPACK".split(): From 97f120c61281bc9a0c5d434f44aa2dba7995f9aa Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 12 Jul 2023 06:46:20 +1000 Subject: [PATCH 129/681] Loops into largest wedge, with a bit of logic --- src/igraph/drawing/matplotlib/edge.py | 198 ++++++++++++++++++++----- src/igraph/drawing/matplotlib/graph.py | 1 - 2 files changed, 160 insertions(+), 39 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 1fc3d2f6c..71cec9691 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -101,6 +101,36 @@ def _get_edge_vertex_sizes(edge_vertices): sizes.append(max(visual_vertex.width, visual_vertex.height)) return sizes + @staticmethod + def _compute_edge_angles(path, trans, directed, curved): + """Compute edge angles for both starting and ending vertices. + + NOTE: The domain of atan2 is (-pi, pi]. + """ + positions = trans(path.vertices) + + # first angle + if (not directed): + x1, y1 = positions[0] + x2, y2 = positions[1] + elif not curved: + x1, y1 = positions[1] + x2, y2 = positions[0] + else: + x1, y1 = positions[3] + x2, y2 = positions[2] + angle1 = atan2(y2 - y1, x2 - x1) + + # second angle + if not directed: + x1, y1 = positions[-1] + x2, y2 = positions[-2] + else: + x1, y1 = positions[-3] + x2, y2 = positions[-1] + angle2 = atan2(y2 - y1, x2 - x1) + return (angle1, angle2) + def _compute_paths(self, transform=None): import numpy as np @@ -110,9 +140,31 @@ def _compute_paths(self, transform=None): trans = transform.transform trans_inv = transform.inverted().transform + # Loops split the largest wedge left open by other + # edges of that vertex. The algo is: + # (i) Find what vertices each loop belongs to + # (ii) While going through the edges, record the angles + # for vertices with loops + # (iii) Plot each loop based on the recorded angles + loop_vertex_dict = { + } + for i, edge_vertices in enumerate(visual_vertices): + if edge_vertices[0] == edge_vertices[1]: + if edge_vertices[0] not in loop_vertex_dict: + loop_vertex_dict[edge_vertices[0]] = { + 'loops': [], + 'angles': [], + } + loop_vertex_dict[edge_vertices[0]]['loops'].append(i) + # Get actual coordinates of the vertex border (rough) paths = [] for i, edge_vertices in enumerate(visual_vertices): + # Loops are positioned post-facto in the space left by the othter edges + if edge_vertices[0] == edge_vertices[1]: + paths.append(None) + continue + coords = np.vstack( [ edge_vertices[0].position, @@ -126,15 +178,7 @@ def _compute_paths(self, transform=None): else: curved = False - # Loops require special attention, discard any previous calculations - if edge_vertices[0] == edge_vertices[1]: - path = self._compute_path_loop( - coordst[0], - sizes[0], - trans_inv, - ) - - elif self._directed: + if self._directed: if (self._arrow_sizes is None) or (self._arrow_widths is None): arrow_size = 0 arrow_width = 0 @@ -157,36 +201,106 @@ def _compute_paths(self, transform=None): curved, ) + # Collect angles for this vertex, to be used for loops plotting below + angles = self._compute_edge_angles(path, trans, self._directed, curved) + if edge_vertices[0] in loop_vertex_dict: + loop_vertex_dict[edge_vertices[0]]['angles'].append(angles[0]) + if edge_vertices[1] in loop_vertex_dict: + loop_vertex_dict[edge_vertices[1]]['angles'].append(angles[1]) + + # Add the path for this non-loop edge paths.append(path) + + # Deal with loops at the end + for visual_vertex, loops_angles in loop_vertex_dict.items(): + coords = np.vstack([visual_vertex.position] * 2) + coordst = trans(coords) + sizes = self._get_edge_vertex_sizes(edge_vertices) + + edge_angles = loops_angles['angles'] + if edge_angles: + edge_angles.sort() + # Circle around + edge_angles.append(edge_angles[0] + 2 * pi) + wedges = [(a2 - a1) for a1, a2 in zip(edge_angles[:-1], edge_angles[1:])] + # Argsort + imax = max(range(len(wedges)), key=lambda i: wedges[i]) + angle1, angle2 = edge_angles[imax], edge_angles[imax + 1] + else: + angle1, angle2 = -pi, pi + + nloops = len(loops_angles['loops']) + for ii, ipath in enumerate(loops_angles['loops']): + angle1i = angle1 + (angle2 - angle1) * ii / nloops + angle2i = angle1 + (angle2 - angle1) * (ii + 1) / nloops + path = self._compute_path_loop( + coordst[0], + sizes[0], + angle1i, angle2i, + trans_inv, + angle_padding_fraction=0.1, + ) + paths[ipath] = path + + return paths - def _compute_path_loop(self, coordt, size, trans_inv): + def _compute_path_loop(self, coordt, size, angle1, angle2, trans_inv, + angle_padding_fraction=0.1): import numpy as np - # TODO: check out non-loop edges for this vertex and try - # fit the loops in the largest wedge. - - # Make arc (class method) - path = mpl.path.Path.arc(-90, 180) - vertices = path.vertices.copy() - codes = path.codes - - # Rescale to be as large as the vertex - vertices *= size / 2 - # Center top right - vertices += size / 2 - # Offset to place and transform to data coordinates - vertices = trans_inv(coordt + vertices) - - # Hack used for any curved lines to deal with facecolor - vertices = np.vstack([ - vertices, - vertices[:-1][::-1], - ]) - codes = np.concatenate([ - codes, - codes[1:], - ]) + # Pad angles to make a little space for tight arrowheads + angle1, angle2 = ( + angle1 * (1 - angle_padding_fraction) + angle2 * angle_padding_fraction, + angle1 * angle_padding_fraction + angle2 * (1 - angle_padding_fraction), + ) + + # Too large wedges, just use a quarter + if angle2 - angle1 > pi / 2: + angle1 = (angle2 + angle1) * 0.5 - pi / 4 + angle1_deg = 180 * angle1 / pi + + # Make arc (class method) + path = mpl.path.Path.arc(angle1_deg - 90, angle1_deg + 180) + vertices = path.vertices.copy() + codes = path.codes + + # Rescale to be as large as the vertex + vertices *= size / 2 + # Center top right for 0 angle_deg, otherwise in the right place (sqrt2 away from center) + angle_center = pi / 4 + angle1 + xcenter = size / 2 / sqrt(2) * cos(angle_center) + ycenter = size / 2 / sqrt(2) * sin(angle_center) + vertices += [xcenter, ycenter] + # Offset to place and transform to data coordinates + vertices = trans_inv(coordt + vertices) + + # Hack used for any curved lines to deal with facecolor + vertices = np.vstack([ + vertices, + vertices[:-1][::-1], + ]) + codes = np.concatenate([ + codes, + codes[1:], + ]) + + # Smaller than 90 deg wedges, make a Bezier + else: + start = size / 2 * np.array([cos(angle1), sin(angle1)]) + end = size / 2 * np.array([cos(angle2), sin(angle2)]) + amix = 0.2 + aux1 = 1.2 * size * np.array([cos(angle1 * (1 - amix) + angle2 * amix), sin(angle1 * (1 - amix) + angle2 * amix)]) + aux2 = 1.2 * size * np.array([cos(angle1 * amix + angle2 * (1 - amix)), sin(angle1 * amix + angle2 * (1 - amix))]) + vertices = np.vstack([ + start, aux1, aux2, end, + aux2, aux1, start, + ]) + # Offset to place and transform to data coordinates + vertices = trans_inv(coordt + vertices) + + codes = ["MOVETO"] + ["CURVE4"] * 6 + codes=[getattr(mpl.path.Path, x) for x in codes] path = mpl.path.Path( vertices, codes=codes, @@ -249,14 +363,14 @@ def _compute_path_directed( path = {"vertices": [], "codes": []} path["codes"].append("MOVETO") if not curved: - path["codes"].extend(["LINETO"] * 5) + path["codes"].extend(["LINETO"] * 6) # Start theta = atan2(*((coordst[1] - coordst[0])[::-1])) voff = 0 * coordst[0] voff[:] = [cos(theta), sin(theta)] voff *= sizes[0] / 2 - path["vertices"].append(coordst[0] + voff) + start = coordst[0] + voff # End with arrow (base-left-top-right-base) theta = atan2(*((coordst[1] - coordst[0])[::-1])) @@ -269,8 +383,12 @@ def _compute_path_directed( headbase = tip - arrow_size * voff_unity headleft = headbase + 0.5 * arrow_width * voff_unity_90 headright = headbase - 0.5 * arrow_width * voff_unity_90 + # This is a dirty trick to make the facecolor work + # without making a separate Patch, which would be a little messy path["vertices"].extend( [ + headbase, + start, headbase, headleft, tip, @@ -308,8 +426,12 @@ def _compute_path_directed( # without making a separate Patch, which would be a little messy path["codes"].extend(["CURVE4"] * 6 + ["LINETO"] * 4) path["vertices"].extend([ - headbase, aux2, aux1, - start, aux1, aux2, + headbase, + aux2, + aux1, + start, + aux1, + aux2, headbase, headleft, tip, diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 29d08ffa3..003a5b281 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -557,7 +557,6 @@ def _draw_edges(self): arrow_widths = [] curved = [] for edge, visual_edge in edge_coord_iter: - print(visual_edge) edge_vertices = [vertex_builder[v] for v in edge.tuple] art = edge_drawer.build_patch(visual_edge, *edge_vertices) edgepatches.append(art) From 031d071dac823ac530afab2d68012a39b090e043 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 12 Jul 2023 09:05:49 +1000 Subject: [PATCH 130/681] All loops Bezier, add parameter loop_size (undocumented) --- src/igraph/drawing/matplotlib/edge.py | 91 ++++++++++---------------- src/igraph/drawing/matplotlib/graph.py | 3 + 2 files changed, 39 insertions(+), 55 deletions(-) diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index 71cec9691..af5e69727 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -58,6 +58,7 @@ class VisualEdgeBuilder(AttributeCollectorBase): background = None align_label = False zorder = 1 + loop_size = 30 return VisualEdgeBuilder @@ -88,6 +89,7 @@ def __init__(self, *args, **kwargs): self._directed = kwargs.pop("directed", False) self._arrow_sizes = kwargs.pop("arrow_sizes", None) self._arrow_widths = kwargs.pop("arrow_widths", None) + self._loop_sizes = kwargs.pop("loop_sizes", None) self._curved = kwargs.pop("curved", None) super().__init__(*args, **kwargs) @@ -152,10 +154,11 @@ def _compute_paths(self, transform=None): if edge_vertices[0] == edge_vertices[1]: if edge_vertices[0] not in loop_vertex_dict: loop_vertex_dict[edge_vertices[0]] = { - 'loops': [], - 'angles': [], + 'indices': [], + 'sizes': [], + 'edge_angles': [], } - loop_vertex_dict[edge_vertices[0]]['loops'].append(i) + loop_vertex_dict[edge_vertices[0]]['indices'].append(i) # Get actual coordinates of the vertex border (rough) paths = [] @@ -163,6 +166,9 @@ def _compute_paths(self, transform=None): # Loops are positioned post-facto in the space left by the othter edges if edge_vertices[0] == edge_vertices[1]: paths.append(None) + loop_vertex_dict[edge_vertices[0]]['sizes'].append( + self._loop_sizes[i], + ) continue coords = np.vstack( @@ -204,20 +210,20 @@ def _compute_paths(self, transform=None): # Collect angles for this vertex, to be used for loops plotting below angles = self._compute_edge_angles(path, trans, self._directed, curved) if edge_vertices[0] in loop_vertex_dict: - loop_vertex_dict[edge_vertices[0]]['angles'].append(angles[0]) + loop_vertex_dict[edge_vertices[0]]['edge_angles'].append(angles[0]) if edge_vertices[1] in loop_vertex_dict: - loop_vertex_dict[edge_vertices[1]]['angles'].append(angles[1]) + loop_vertex_dict[edge_vertices[1]]['edge_angles'].append(angles[1]) # Add the path for this non-loop edge paths.append(path) # Deal with loops at the end - for visual_vertex, loops_angles in loop_vertex_dict.items(): + for visual_vertex, ldict in loop_vertex_dict.items(): coords = np.vstack([visual_vertex.position] * 2) coordst = trans(coords) - sizes = self._get_edge_vertex_sizes(edge_vertices) + vertex_size = self._get_edge_vertex_sizes([visual_vertex])[0] - edge_angles = loops_angles['angles'] + edge_angles = ldict['edge_angles'] if edge_angles: edge_angles.sort() # Circle around @@ -227,15 +233,17 @@ def _compute_paths(self, transform=None): imax = max(range(len(wedges)), key=lambda i: wedges[i]) angle1, angle2 = edge_angles[imax], edge_angles[imax + 1] else: + # Isolated vertices with loops angle1, angle2 = -pi, pi - nloops = len(loops_angles['loops']) - for ii, ipath in enumerate(loops_angles['loops']): + nloops = len(ldict['indices']) + for ii, (ipath, loop_size) in enumerate(zip(ldict['indices'], ldict['sizes'])): angle1i = angle1 + (angle2 - angle1) * ii / nloops angle2i = angle1 + (angle2 - angle1) * (ii + 1) / nloops path = self._compute_path_loop( coordst[0], - sizes[0], + vertex_size, + loop_size, angle1i, angle2i, trans_inv, angle_padding_fraction=0.1, @@ -245,7 +253,7 @@ def _compute_paths(self, transform=None): return paths - def _compute_path_loop(self, coordt, size, angle1, angle2, trans_inv, + def _compute_path_loop(self, coordt, vertex_size, loop_size, angle1, angle2, trans_inv, angle_padding_fraction=0.1): import numpy as np @@ -258,49 +266,22 @@ def _compute_path_loop(self, coordt, size, angle1, angle2, trans_inv, # Too large wedges, just use a quarter if angle2 - angle1 > pi / 2: angle1 = (angle2 + angle1) * 0.5 - pi / 4 - angle1_deg = 180 * angle1 / pi - - # Make arc (class method) - path = mpl.path.Path.arc(angle1_deg - 90, angle1_deg + 180) - vertices = path.vertices.copy() - codes = path.codes - - # Rescale to be as large as the vertex - vertices *= size / 2 - # Center top right for 0 angle_deg, otherwise in the right place (sqrt2 away from center) - angle_center = pi / 4 + angle1 - xcenter = size / 2 / sqrt(2) * cos(angle_center) - ycenter = size / 2 / sqrt(2) * sin(angle_center) - vertices += [xcenter, ycenter] - # Offset to place and transform to data coordinates - vertices = trans_inv(coordt + vertices) - - # Hack used for any curved lines to deal with facecolor - vertices = np.vstack([ - vertices, - vertices[:-1][::-1], - ]) - codes = np.concatenate([ - codes, - codes[1:], - ]) - - # Smaller than 90 deg wedges, make a Bezier - else: - start = size / 2 * np.array([cos(angle1), sin(angle1)]) - end = size / 2 * np.array([cos(angle2), sin(angle2)]) - amix = 0.2 - aux1 = 1.2 * size * np.array([cos(angle1 * (1 - amix) + angle2 * amix), sin(angle1 * (1 - amix) + angle2 * amix)]) - aux2 = 1.2 * size * np.array([cos(angle1 * amix + angle2 * (1 - amix)), sin(angle1 * amix + angle2 * (1 - amix))]) - vertices = np.vstack([ - start, aux1, aux2, end, - aux2, aux1, start, - ]) - # Offset to place and transform to data coordinates - vertices = trans_inv(coordt + vertices) - - codes = ["MOVETO"] + ["CURVE4"] * 6 - codes=[getattr(mpl.path.Path, x) for x in codes] + angle2 = angle1 + pi / 2 + + start = vertex_size / 2 * np.array([cos(angle1), sin(angle1)]) + end = vertex_size / 2 * np.array([cos(angle2), sin(angle2)]) + amix = 0.15 + aux1 = loop_size * np.array([cos(angle1 * (1 - amix) + angle2 * amix), sin(angle1 * (1 - amix) + angle2 * amix)]) + aux2 = loop_size * np.array([cos(angle1 * amix + angle2 * (1 - amix)), sin(angle1 * amix + angle2 * (1 - amix))]) + vertices = np.vstack([ + start, aux1, aux2, end, + aux2, aux1, start, + ]) + # Offset to place and transform to data coordinates + vertices = trans_inv(coordt + vertices) + + codes = ["MOVETO"] + ["CURVE4"] * 6 + codes=[getattr(mpl.path.Path, x) for x in codes] path = mpl.path.Path( vertices, codes=codes, diff --git a/src/igraph/drawing/matplotlib/graph.py b/src/igraph/drawing/matplotlib/graph.py index 003a5b281..3a67acbd4 100644 --- a/src/igraph/drawing/matplotlib/graph.py +++ b/src/igraph/drawing/matplotlib/graph.py @@ -555,6 +555,7 @@ def _draw_edges(self): edgepatches = [] arrow_sizes = [] arrow_widths = [] + loop_sizes = [] curved = [] for edge, visual_edge in edge_coord_iter: edge_vertices = [vertex_builder[v] for v in edge.tuple] @@ -563,6 +564,7 @@ def _draw_edges(self): visual_vertices.append(edge_vertices) arrow_sizes.append(visual_edge.arrow_size) arrow_widths.append(visual_edge.arrow_width) + loop_sizes.append(visual_edge.loop_size) curved.append(visual_edge.curved) art = EdgeCollection( @@ -571,6 +573,7 @@ def _draw_edges(self): directed=directed, arrow_sizes=arrow_sizes, arrow_widths=arrow_widths, + loop_sizes=loop_sizes, curved=curved, transform=self.axes.transData, ) From 5b46a90c44044863987447eb337abf6993c0c810 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Wed, 12 Jul 2023 09:35:47 +1000 Subject: [PATCH 131/681] Test images (tiny pixel diffs), better test for loop size and docs EN/ES --- doc/examples_sphinx-gallery/visual_style.py | 20 ++++++++++++++++++ doc/source/tutorial.es.rst | 19 +++++++++++------ doc/source/tutorial.rst | 7 +++++- .../test_graph/clustering_directed.png | Bin 36628 -> 34962 bytes .../test_graph/clustering_directed_large.png | Bin 62446 -> 61379 bytes .../test_graph/graph_directed.png | Bin 23948 -> 21974 bytes .../graph_directed_curved_loops.png | Bin 23632 -> 23404 bytes .../test_graph/graph_mark_groups_directed.png | Bin 23948 -> 21974 bytes .../graph_mark_groups_squares_directed.png | Bin 19476 -> 17394 bytes tests/drawing/matplotlib/test_graph.py | 3 +++ 10 files changed, 41 insertions(+), 8 deletions(-) diff --git a/doc/examples_sphinx-gallery/visual_style.py b/doc/examples_sphinx-gallery/visual_style.py index 803ed115d..4ac7d05da 100644 --- a/doc/examples_sphinx-gallery/visual_style.py +++ b/doc/examples_sphinx-gallery/visual_style.py @@ -68,3 +68,23 @@ # The :meth:`igraph.drawing.matplotlib.graph.GraphArtist.set` method can # be used to change multiple properties at once and is generally more # efficient than multiple calls to specific ``artist.set_...`` methods. + +# %% +# In the matplotlib backend, you can also specify the size of self-loops, +# either as a number or a sequence of numbers, e.g.: +g = ig.Graph(n=5) +g.add_edge(2, 3) +g.add_edge(0, 0) +g.add_edge(1, 1) +fig, ax = plt.subplots() +ig.plot( + g, + target=ax, + vertex_size=20, + edge_loop_size=[ + 0, # ignored, the first edge is not a loop + 30, # loop for vertex 0 + 80, # loop for vertex 1 + ], +) +plt.show() diff --git a/doc/source/tutorial.es.rst b/doc/source/tutorial.es.rst index ea5727155..1d2a5af7f 100644 --- a/doc/source/tutorial.es.rst +++ b/doc/source/tutorial.es.rst @@ -628,17 +628,17 @@ Atributos de las aristas que controlan los gráficos =============== ====================== ========================================== Attribute name Keyword argument Purpose =============== ====================== ========================================== -``color`` ``edge_color`` Color de la arista +``color`` ``edge_color`` Color de la arista. --------------- ---------------------- ------------------------------------------ -``curved`` ``edge_curved`` la curvatura de la arista. Valores positivos - corresponden a aristas curvadas en sentido +``curved`` ``edge_curved`` La curvatura de la arista. Valores positivos + corresponden a aristas curvadas en sentido contrario a las manecillas del reloj, valores negativos lo contrario. Una curvatura cero representa aristas rectas. ``True`` significa una curvatura de 0.5, ``False`` es una curvatura de cero. --------------- ---------------------- ------------------------------------------ -``font`` ``edge_font`` Familia tipográfica del arista +``font`` ``edge_font`` Familia tipográfica del arista. --------------- ---------------------- ------------------------------------------ ``arrow_size`` ``edge_arrow_size`` Tamaño (longitud) de la punta de flecha del arista si el grafo es dirigido, relativo a @@ -647,13 +647,18 @@ Attribute name Keyword argument Purpose ``arrow_width`` ``edge_arrow_width`` El ancho de las flechas. Relativo a 10 pixels. --------------- ---------------------- ------------------------------------------ -``width`` ``edge_width`` Anchura del borde en píxeles +``loop_size`` ``edge_loop_size`` Tamaño de los bucles. Este atributo no + es utilizado para otras aristas. Este + atributo sólo existe en el backend + matplotlib. +--------------- ---------------------- ------------------------------------------ +``width`` ``edge_width`` Anchura del borde en píxeles. --------------- ---------------------- ------------------------------------------ ``label`` ``edge_label`` Si se especifica, añade una etiqueta al borde. --------------- ---------------------- ------------------------------------------ ``background`` ``edge_background`` Si se especifica, añade una caja rectangular - alrededor de la etiqueta de borde (solo en ) - matplotlib) + alrededor de la etiqueta de borde (solo en + matplotlib). --------------- ---------------------- ------------------------------------------ ``align_label`` ``edge_align_label`` Si es verdadero, gira la etiqueta de la arista de forma que se alinee con la diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index bb0c6b0b6..50b84deb1 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -824,7 +824,12 @@ Attribute name Keyword argument Purpose ``arrow_width`` ``edge_arrow_width`` Width of the arrowhead on the edge if the graph is directed, relative to 10 pixels. --------------- ---------------------- ------------------------------------------ -``width`` ``edge_width`` Width of the edge in pixels +``loop_size`` ``edge_loop_size`` Size of self-loops. This attribute is + ignored by edges that are not loops. + This argument is available only in the + matplotlib backend. +--------------- ---------------------- ------------------------------------------ +``width`` ``edge_width`` Width of the edge in pixels. --------------- ---------------------- ------------------------------------------ ``label`` ``edge_label`` If specified, it adds a label to the edge. --------------- ---------------------- ------------------------------------------ diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed.png index a50e0e8a68c1981445081258be4b2f0ed4cf2c28..3d87f09802a43b9b661765ca73438141b501f876 100644 GIT binary patch literal 34962 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 xi9&^2$K#?A|U_( diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png b/tests/drawing/matplotlib/baseline_images/test_graph/clustering_directed_large.png index 9a8da6e28a8e55f9b23179f4f2258cddc8e0e972..db95896afff154f1f27febf4faee942ce5321317 100644 GIT binary patch literal 61379 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%0Dwr)yb9Osb_cU1e+oCsv%uMbC= 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 ~;;^^d5Y(AL_0mUy-C_ODGT*U4|u<*yahse*v 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 literal 23948 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 ZKC#W>Ugg4^C}0X<@O1TaS?83{1OQ@QUZem3 diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png index 9d505b466397c96afaa26cbb855622172a7e6a42..9108a760ce7b860295020295e347aa16ac2a5595 100644 GIT binary patch literal 23404 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%0Df| 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 Lu6{1-oD!M<#+|^X diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_directed.png index e4800a3e0da0987575ca8c577748348b3c179417..6235d7c166d186084b59df6c5a620bda25f02c89 100644 GIT binary patch literal 21974 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 literal 23948 zcmeEu_dk|z`1eIBS~N6NB)0~IWTlL#bd!;tj22~N6cXXCloF}Ckgbpvk|bM8Lz0!1 zBvDBAUeEhfeZJ54UwB^651&`BPuufmVqU)6Zx~KHE7u((q+Dct4N{enVve$e~$upU|LCEL9>a@di@~W3?+Hj~Vr6VOf z#k^BwsqQXa?Y2BMb#|{~?@huC};HvGY`WM4!6cb_uFf985 zf84qJ{~!H-a+!)Oov_`NGkN`0tgBP1-USE;1O&w9=I*Gqk-Bv0(neWXqlwW0ogfjD zW0`%me2l_9FpsD?pB@~Dj*D(|z^An|4Vx+eACCIQH79(~?JCva8<_+j)+ceT~+`*=!VJPPc2G>(|M#440lG za)NEYh2&F%W2AFU!#7+08XxI(*`cbTk>Yxn(t44`HWxp4>3zH2X=-Aq;{g4PZeKcI zQ2&jXWoGC0NAK}VY>k_tSfWH0aMemF8!a2h$9uS!oVXcT^i;3BV5OAqr}iqViu-<% zdswKBG<=-m%Qa2?J=|ed^}L0tuxzi~x`drO&;QQq5K*|!N_{#yi~J;iYSL}~axuj& zdUko~(Fv1sKc;@NQEW|(p@RP`>eHd=A1xI%ius@sCnA0L!Cj`&ws50I$F6cjvoIv@ zuwXRvygB*wuUV8x)VFBgqaW1>db~zL*KMfF;KYe|dNeEJ?4MsLO!VKHVJ*HBZJa+F(ozwhm9fbl4n}GX?eBC z+vXlaF>z{`Z~AX5?LI1=b?$2vI^F3kdE#SXzXMC*Jn||HW@u=Vd2!%I1qHJe&N=UQ zq<-1FvAB7EX@uPLFqH#%gJyK+9257k zK}pM9l-RQHk1Ui^NOecm_0`*N-@JJj(OGV7}{tPNhhe7QkNO8?fneOk{R znU8+)s(6^oJQA+qlrw%RukUw`2OlT(pl}{L6{XSRvZL;i`L!)MHzOiaX3So2`)poC zo9?k=F-MLb5`{yJ|->&o*}L&mSA#v4}GCUcp5v zCbv50WH>bMIqEDRAfTL;m1S4 z^H^tp;9B|*nN>nQzLlxL!H*8wk1nO|oS%N3wytiBQ^%)`a&jhZZEf$~y(=$^Rw>Sv zmypmcD=YK4dUgN4eZFf21h`kNGH&V#(};`k95J82LVVX;K{?$4zNXtu!Q@`offvH5 zT=G<<<$D;2)#K*Z{?-HSRYmhuG&HWynKS2IuKcD=`^fwJ{Pgg?Z0AlP?-%=9WO-e_ zvdHC}xG6v6BJuE@rf}zJdQh!RcE=aDf$z68_4_JVqAZBbS=~PR`uav;;o_QtG>Z}* zZf@>?v+m7Betr+ja?aQ}{rvb$bSwMo>#Hkbmzl(vvcN(4D5h0#x_a!$g?eLCu z>-L5&S3zEWC$U!=U}odnCq z{JdH7d19VjoSmc-r*VHGjQXkxduAjo;N21b{{6nAoUiYzhkox!j>n?!skwsnC=T4b zd1Ci?P1;eOv5(5Gqru1fkLQ?Nlj9wbDLH;@FHfia&+Yyy(hZKcoIC6Eem_vJe{#}K ztUOk2*>iS=(KQ6~?j+dkio*ifL;PFcS$FRRt9=U>E?yjMQ4$iY+txNR-dE~0mYiwT z@gY3B(6;)7zsj<`b3~g*m6`GZk85nJ4S4;t9e+kGGjrF2X;%74fBD%L|MgaeZ9|>m z{i@`H(&ST@@TqtyIP9D=T~g2Y?Addf45)QLDpcJh+i{D9^u6fls;3S|`{tzFyKsRu zZ{X8Gqg?yD`DSTK%*xFh_PYD{RQ~j=UUj?QTI+_?xE){d*Yh)+y5L_!tW&mVG#foW zaq~;^vF2xp5M-lXT%NCUYn^)H@M0Fm6p0oAh&mZqH*NK)!OnVv)`11y$~SM`-1GHk zRZI7M_6=$ z>g`Wdn}^z~)coZJ4Fe)rD2pggoYv<%c>SeL*6Aj;HQrVBhWT#TuvgBtUrfqx=vS@I z-Me>Nxoz(KZpcY;8~V+&?bLV6#+BUMu~_Yqd3G&5Rr?lFR*L|-qW0Nl9_;v(ywyTl zeCt-H?{993r*d*|?AO)3o#stWYg|>os8(&KGnsBzZl6Z%Z#x8yMT-_CW(iTKvWgV`KB6F4L~`W~#@L%zDXVZ@9o0_lb#V)&cd2PvA2;YVvwoqoDqbv(eL`0(`RC?(2 zZc1wcXHU!fS7SkAjaUTSEB<~gH{T@3IW}Z6<3!o>FeL}ohMY47I3F3uOCwIDx+4@< zJvgwHV1aeIv#2U>7-U9Ggq)kI@9mwYD_5`HbugKKG`&^=Bb{jG zo04f65?H&I{9oQkYbbL%ki(V*_V|jW@1x?$c2zFIUu<{&CH8!et84b)?}me|0|*EW z*-qF%7&kXBukDdn@xD0Sk>ZS9yLN5Zyjgwo!6&+ghIb;|es80ftBK~(Qmd0f?ec4X zX|qIWlPM~n-NAdZ_E9W0?LW6a^t-{Y*3UH0HNj(Ibe+C$JJ*U81Q>OG$*Ui(yV|78 zyv)fb5?XTqc%-{Nv%j}kw76rSJ@BAyT8srHvl<>Hp8vCLCe~TYic`hZ)HJxdI>|s& z&TUXa%6I5znKHcZ*0dwT%5TLVFwONh8$H&tvPxViuWIZ$G4QC?##jL@}oseWRc86fG2QEwgBvChnaN*&D=sVct9?;fc|Y(}ed&-Q7X6xBbrd?9)*p6NN!VP=%;lGZa?w9>B9Y--eC z(v&5BKiN0>Y))PY3uyqO49kjjBctmx)I+6knj&)(md7vX${$Nvy4mPhZhq6{m5%i% zGZ!jRmCMP-M3EDv%XuAcgEBK=IWYf#IjhzWn#%+?*cxD6eASz`Y}sN}8GrLC_l(%Qp)YQ(->$Crt*$on z%=`Vcd4Uo;RSe&#`0D&oI2x=^XMJYs`;OHMyb-kh)SD4>tv*Jb$HOgdI6oQoO-juJ zPSqxH+q-gaaj_O^JDsg7?yDF5+GAmHe*rePbpSivUYj157L$mxH)sBQ$<#wp zO!?ujGvp?Rn~ORQzqs6%lJk457xi!+3!9>%eU`CNrfoRTO>l66fXemTXWjSiz2Z91 zZq9Zceo|OQrsk#3`S!jhZ@%`l*SuRzIq{VkxC$~ZQ&Y=g=dX-C`^s`^Sbx%Zyv}%KH>H|%Nvt$#3Y=aryYHL z`_`?aznb2>ecMyppX$(DgzY->tLCOib9|rt=uZK;(Vx*p4rSHGr~UT$^QyD691>zh zU<1f3fPrLKSHJ6Y4mvxr;&|BM{zkZv{XmE#v2$74n*9|%3Ha|g;&me_HQxxEAUY*C zooy>7+Yfg)As|WFe*OuU2Uq92;`*07H{rEwFPJ@KOpO4?JU;Y{Rlv*GsY;J$tHr!2 zKT2#S*39p*=ak1EAllbjBA;qkof5v~#lqFAlVMkPbT(+IxsSHRsj8`MReBR(V45)2 zRS=1}c44)wyx18998B68l%a~ldgn+Hn+4o!;@LWX$w@L`$t-Oh9X~-o z17n9vzYC^3U}*&i58d1SUq{2~-JY`w2V_&-vzHDbI7fujQ*p@v(y4D*M- z&5ezTSl$=MF`7maogOO;sOYYw#&W_j`PO=K*;E$mO{XEaB!hUv;%UT7?tN zru3x`%ej%3Af#hbN^i`AOzzL-J9h)VpbnOYF6Ok z4v$w{^P&t`W#-J8!G>EHI@`8+8N0T{y8gWD&CX9HaVMp=(> zm*8seOP5v@Cjf<40U(A{F>-42_x2AC zr0)?4N_yWBDs|F|?fRWN%K<{qo0&3eRds=4{mOaj z^yz@$U`sr1R`BI`MM2=^gFJ_cA3It1_-+uTRUE!bNhJH{TDkG=7w=73O4KRPuzVQ$)GFM|l(K|q?si9<(TQC1g`+F62l*uy?jY&Ll>CWZ!YT>(DAYFlP~ zGUf_2i}VI5q)6ZB*RO{Le$@h=m!%)qyyWF|2OqC%&*{pqz%KaebWe`|P_X{|)WM63 ziUUTi6c-6nBcN;0?wEyz5YG1d4rL`JjNqEDudcoQL-@jYHH`)QKf=#MAbgQEJIuxv zby;}RrporJB)`I&|9POAhj$V8{R+$AfjqWQTFE3sFA3WQ&pAEQ`KN!?Y-#!aeYu;A zeyVBmy?giIwmv^iOA8Z1?hr2Pbnn1&s$dL8AaS~NUvpy|po8^uFOE~P;p9Nx$AMhB z{nYm>W#&7uRb93CPZ0>JKFySQW!ixeh@qwi}*YW$gAVJU&kz_YNqbEb{??qk|= zGQfYf+Od?@Hevk-A0Jy*_;Q{4o%O@2Jcdrzau>ytcoW_N01G}1*>C6Ptn~LCC#6DV z&-}J|Z@WuHC5e7(9oz*~)%=}H-2ST~+z%a*V|s2lFnV8M2;heVY+~Z#Ix-tQg!^1` z8dBc8c>|C6{Q2{J50+EoKjI=i%JFfas10-;u|te?ni2aj=s7HGGV{Un9DHI^mZ+EH zYp(a7zZv*h_5v8s$448i2DX!trJrJ)kf0OC!~b2=bM)5zeZfj_?rRv7{L=>8WV3>N zoS@v?-2Xw}p3w+v5)(7H>^&w&j;jZYzhdYA5qA1Io_t>5P0$j40MZZ^ zRs&ey+&2pMwo-kHge3SG`IZ?JxAzTvwjE%G2_NI3LhamGpJ`X^uP_-OAZ#Fn2S?7H z1>l-vUAZ?cEsZ1~2abow!o%x!JVkO~m)mn$TwL4{wwOpryV3DSOF)B>ag%5JdwKJZSsjnR-|*6G}NChJ&cZNDc1id$EX=8s5EkANK8A3uH& zKVp=2BwH*y1rFKRyN1xywW__S8k|*mV040BNHXeLxf7f;J*I7^u+wH$HzyZJw!N>QW zbth?etzS(|jg^_vENVj_XdGDo3jP?fUR#dN;%8%5WV=B*et)yj#OW2c(O`*mNJr1l zo%Dc)SN6u``{;cqrRMX=8;ch7s$P;hJT+7>r3X-6_OSifna>X10Q{!EPb2BD_VPny zgrhI{F#r!D{(KJ@lMtzsM!%O+jCK;WuP$EC!%tGFtrqXK5Ii@f%p>@n<$hF@VvyOX ztNQ20lI87lB%g*vj0MJo+DMsrHv74@R2dY9arA%!?aZj|e7xSv%Ng_TAH^2VntI^Q`|&43zet|Y`9J%EFOrK&Kw==ObXt5 zd=WNViQ*9BlnYf_4-2g$o~r7yCIP%GtZ4_GlPFi>|V@5jW_A?A1m@*0Xi$~sW@e^hQW5j zE`MZ?^5uDDtf>Y^CnSmt>6$ZVcU1Q~67(@ViacEc+h~6LxIw+)vuDrtR1_fFg{QbE zElR};K6>;>!r|Ml=<4#|;}HoMdT*Bu7llQ;7azZO|IM3LStmpDPvr>b{fOS7A~@hI zTQ&MCeV{6{QI+|`ruN?3TkFS+Mf4UT^+$*ZO7lcE#4Nc+Xt2QnpuMC`jo8GdwtWiz0}(Mvw29$nfB1qBN$bE;+i&I^bLMClcuc^zf{!Tg z=cL;2=v=yip$SPyRDOF$4bNqvDTaA|IV(HanK}BYb8yVimL3jrai#dK1>P@?H_kVE z{^A9aaJw?^8C3hzu&`CI`7iAJKy`?%>FoT9t9PsYpdOwC4LDL|kp0@Lo1dGn%`LMy zHZ_0z(fgy$!fU0a4Gw17Cg(q=C`oNln*m{AHmg=WvZ@k-FMnGTvmnZrpTWjxDGmZc z0OLECmX&L|dfTZO)l#~qW@^L*JZI$3E2nzt2CP|F@{SorP6 zjYz;$O9{2`_2-wo9OkWCRSyp<(+i|U9=w-Vq9m8G(5PeP7DAs|#GODXH(b0R;nIDm zBz!x`&Oc(m&ep9D1z~&Tq$=x{|h^4VfegH^*$EGG@dbn#qpzRbL zI`OtbbIf50r5M#wlNMcGUhW%w1G{KR45FkY>5>_x8q+qv>sC9xjt> z>7r_`j!jA#C+k0P3Q$yc4!%X`Ae@?;yVzN*<^~>`xg1zF)HZkjlxxT4iH44?6 zub4%9U5A^z0|Ep044p!$mUx$!FLwdvYiajfJ%C*+O3S0HmRcyX`o3uTn3S4#-#Rr% z;{{DnRaXDfkJZe618#4B6?pvat2K<{9Om%OZ6w&)kvw*Ozf` zd}E=b8K=|4>z~V9P}gZ>qD%9SxqSC7&q#HFRsYX2pX=A3WMhb`Na-AZ)$AvWWZ^`8 zTFZ#K4VH?eIpBLMQJcGqfU}di1gQ>=!bXHh@E>y)3>vIoNKuKlNax8SVV*R=ln^iK zg7`%D3r+&1XqJ`n`+2q;@p{G0LTNdG1=NB8kz-DO6Q1_QOjo+W?GfqyF{}j431R746$V_Z01KemQqnEsB8tmCMzGA ztI^95F>l|wvzMJ^lOkTRYJqo;XF3X%TJ_;VUNjnQ`Fe8}vDxI&S!|S6HO}D)yxHf< zl^gwTrCdtvhj>}p-@W8T5y^zS4|MSg{$ofCy|@Z@v2oqL3I|3xk#a-^_=*gxDphR< z_N)H>(yo`OZazHf_-)aq%=(ju1u06m00h>R4(5stdoVImVytum z>G%R5+0M8IhW$vKsf1{bC#p z64syg!AarM{_JZuEJnSN>x!y{QeB4idU{>@asO}4&B(7r$V0QpLyI=S2go-2ZpCgP zf(r5TpXXxLo$>E|HvkfKEiEmrP~wUC#FgO+g=J9+Gf^2 zSEZuGp{%o!pMNJZip(csQA=U&`-s(a=P-kBfbXH>kOmNI0wqM<{)E!Y zH05#(M-Izc4RZl9jF%&`SHs>8M;H066qc0KBUq0HYgFXm;DEEgKz`t^h-!Ss9zULN zaW9*O>?#;)h(FFp87Z7Uy5#Lm9z>bvX1^PIE$W!B0$3zh!q)DgTtelOe-{+oP1s8s z@nl!8Ud6i4CTq9O5ryGpyu2yjzaJyf5k^JdyO)$|lQ++czx!`+@po=1zX67Wfs?I2 zfOYNT!ny_?BF7P|6v!a`W5;5!^vv70;bAq1$rxUkNfowj6)!Ym;~Lgor1Ds2I5lkj> zLG}~)$#;7h+Ljrtl%hESy{CVCm{4Xv0GgD1XAPq;j=6%1*iBR~>=In5And|-rSx^K z3yfXVc}>BUWgKLT>VO!MfD*e^RMbY@*B$Gu%RqvC2bI4_RaSPgv+*#zMT-{;&}G3T zV2*Jp7#SL`AP4>&@gr1~FzUIdTi^40tvR$%@$0lX#Cr(x)4)A3Z%0O^f`Lgk&8q|I zoDyIZt|zPhl@DMyM9%FAfW>CItZRQfc{4yJPRuy@IGH_T>b4h&jeCU_@T2N$;OzV) z;}VMp8UChctW;rvl9Cb*;seALfMhQ&A`}=VM~xa!rFr#(k|^)m$`58AGtyPSaD_P5 z;2eCzIf$<(&w@4)@LGjZ)?(Dyk%3_8s>sKQk15;%>{0PPcq{j^W$UkUUC6$Qf2i?V zKryla(&JWawTMS<#*9HSNQ59OR;(ajK~?SCk;SqU)hf(E(#9Y-5R%t`;K0lhum78w zZ9V0GGm{nM|NbET1Cu;W2#cM`d;a~C5z-GNY#}5$rx%oZ zk#wDWc>xQXJW-ZV9W!UowniOJ7L)^x{@S0f`u0Yh{=QO$gT^cDN7>hOUqx-6vbqfB z3)I9Vt_w!~WM;&YO7@E{7C%%-(X|gBz6-YE9%u&QgdF~@t5qNfS@nn=2S~9Ag99;~ z80j(k76;mgA2zo*=nzU3RQw8X>=KscF$!KcxP|p$En4zq`43zW+%gy6QP&ncHM^u!>Y1!}) z8HanbKoY~QQGGQj4id%T`C5qyw!NgD6DzP<7gv$Mv3T8yH#hj1KFV)=S8VNn!Kr}Z zbgSS^j^B8>ATOcfvs9Jdoc$5LzHNxBcVejV;KAkgsM!56?hJ3>Brq_3T;EP*5rc6b zYB&SO8pim$m5QC(ik6U?7iAO-aa^} zWd>&M<__lU2+YGIoKa57boQ*_Z`TC53sOtNw+C^tR*-{CR5aNyY%>YZ{7Ep#cr6y_ zkz<>-^;~5|?DqOmGKb8XPG?lQ^@B`Z6UZ>ZZM%bBC&S!{VUm!dHH6>D^?y{({`IJs z#$E7w{rdHbl@86p8c%z8r&|rS)fYMC!L`? z1;j}+nfFQ+rapgrrxo;{$En9IqLi_b>>{WKIQe!IVE*i)Q)G!n1-3SIYOG-DmTqo4 zKLQR6H{n&lU6HkacZ+=<5)$lgWJ-3s5d9TD4HzKuT<=xA3iAM!`cbV7Yb ze%f(=O{=xxk#l{Vk~e5XFYvxG1+E$EmQ75HL|wLZD7~NxrK0S;Kr(+2kGI2oA3qeT zMBpFZ#Rm&u4Z_44&NPzbY=xQIue8_w&t~%(8gg50Cvyi@V-#AX*E&|4oM{{FNR`eX z1WnL^mB_?fEdIUa5PtD`^_kmq_z9X)38*Z6>2H+6;vt%=J0FEkHma&A2R9iQA#Erjesg@JuI2XOnNeQ zUt8LST4>NEy}MFmS;=}aZehLrcqCOx#XSEBBy@RwAGR;mzf_0P#`Icz)rHc+Hg7<` z;ap!yQ8kLOO6)tc{tYo|6C5Tg*jw_S9DBPcZ(^_>&xVj=G!108!nsiz=8#B0PZ85I znh+OJj#{7QTwx`3a+an?$n8+PITK4zx}$F%KN|?@e}C_Uzdr#0U(^AzU=N6*`%W|O zqH_Fq=oMRzyu6~#|2^wRLl zOq$85vfbH3`D2c?=0O3nVzV3;WCJf1M z*5%sT+R=_TH%A>>R0kYo2jX8x7t@@abIiB*KrNZe>;Hs4YFw^^6lrR#UuWQFot`Ml z|C9Z33c=&I?h27@BDg6^=zl2>plBe)VWjLKQszFgYNPwgM??(TJ~}K4jTvOx-f|4B zPv#SpduVxU)`C^>p!*Ery!L~W9G_^8;^Bga3WbVJQP1RmbO+yiTqF*Uy8y+gU1eJA zos;l#YbmooxjtEirhc}6zxe~B*fU?;4G>r2Kh^D@Kvp16#6OBoPk(235Te{lUE})T z?=Q*HG{K}(P0?OD+RPaL9lV>zdeuza2C7I^FQanq6fsZ+Pj>g^1yGY_7gkSTh>{P3jSss7E)QxjcpOe=T%JGWYT#C*!_ z^2=C*)FwZ#{e7c9ran1irF1*IX?OG9c;aHG;YfU<;I(B*c@+u5`<4r9ly6($y;Pyc zizE83_-==w%p(CM|4@mw8c6;Azzf~o(BNEOt&lQT zeO3Cg2YjC6WiMf`|Jxf_MZ>w$HA2<|(n$DM>ND)HN!n*vtHo_XK#110#jMAF^(Ho+;xFGdMz7^@#1 zt#S6KO1?U*^9K!5dJC5>y?=43*NuzQk}UDR53IW0$oYO+0UMTrs#o$xq4NEUU-zqy zRyApX?YbI$@818I=eKX)zTfOmx_Z<$=y7$6Hl&^Z``?KOO-w>J5(L+Jp-HX*U^MZ+ zvr6MwO=bmN#5R9GU#`P3@r_qcE_3O&RoUa^YS54hFW&RAjd+b|yGbOD-#N?J^|e=8 z{;mF``eam0O1;XoR$wKkgK|6(RGGMz?N+syb*k}iUZTp=Y`;NDNEJ*(8lQ@i9ytIA z(Uh)tT!g#6_r;6cU9Y#as=n)Y9r%`%8aTRomgHPd@xLce_OV@~X?p92sy=4K;ETS- zTN3pa6))+xDl_fOh~a&k_E^)7Q12!%JE@_zmB&IP5LuaW@}S?Bd=n}98NG_-Q-O|o z4Jk>f*{TqAB;AjDZbp_*{U=3zb>v2MX{5Jhw99iU35KzM_wIs7Pwv{h99rA&&iV|c za#ng%z-pCpM|y%(XiDCwRo-A`LBMGD5=l(tuX*i41)db#V%37C%djA$G|q;XSm+!Z z`kno~Ty3DpI<@WAy|tU|vmE_|Ca)!^lpkmEI?HBgls{OpRl@eO%yX5^1bIw*UvtDK zRZY!mRNV(kq#HMYELI}183j+}#p^XH8_s;b+fgvAbTUk%q2*MYHa(5m9`2}lGscE) zw%7GtTcvD}+VNLK?LUId^c@`?GbW9@MgM^cnOczT{UbjjJ33MeKAoR2TVrfe#3XyU zI;+CS_~{AYa-yDQLiSiOXU_M>wM$wY6R*A&2#qlgRX@P%f8A}zoKv!d#m^J7@P&sn zY(K+Yxquv`ZwsBLM^DfP2%5xxU%2DU%8sq2J9H49e3yzClZ+zSI7^%8YD-E2syp;D zFVB~JWFY$L)vE-}NO`N8hlc}-yfgmU_Sap6iSOO2v0#lLQXj`p2adPFdJ}t>$7lVV z@h9J+G#n=es*_NI3CJ%1`_caKuJQo4ml1?c({PkpPe@t97-4f%8$5yFAK3{M5(MT3 zCtCQHN75?h_U$Fe#5*5%ZMGiaX8q4?gsHl?Jk{3Lt^}nvr?CPo4gAPxno#Ae|D0JM zNvgq&#_I1Ie%>p*7uohjlB#G0UYyNo1-_koa`pKZgB!@NXHS1GVU_$jLokY4ueY2; zT^t%Alhy%0=w-nrzZc?^Tn?jhn1c*e=76nj3P~`L{L_WL)TcqHB-i(TD=MbjTjXZU znzte2@yhf6(oRZ)B&{TG0Po3+L0M7=XffF+LmQ!oqyXXWgSDPd{aXw+{AXu^s?T48 z{1K%8C1NnzqsEJ&okr2p@@wJwqG|;6ROGUEOhl|U{Ij4NF<5I$R3+cNeGBeG^ajf4 zQ%!Y$bF3iaQ&-7WbtGpBZP@VU7jwVzwqy}XawW;i6(R5^85(q^bZtlkN!1%!gtgU&tWa(0?(f+nk7`GsISIZp*&wK?ETJ`xIgoB)`O1fz z8T0X@7OAR$EI}St>5Sb=`u^T_8Z+e>~0CQz5 z$l^szrCkIBz6$TzU1sNckSH8=#E##G3X&uPXjFRlill|@Quq-vN@J1$#C)5G)VaT} z3>m{oOz#>Q(lqOl1DFOLGKPS1rcdM0di9VPmKn2^RY%%ey7Go1V!jQH zLxc#z1`>tK*}l|;Q`4Ou*{`9lB;XLDIDv%W3HdEs_IpnDMIzC2TFt`NG7ZwRf3yUd zeNve0;cOlN#(ywZ@xdm-lllRMEDIaN7VH1|+${*MSZN7R}Q z8gQ{L!WfWvA0|{zMm3Z#Nr1UUF78MOPW=3Mcd5RYB51&@Kgs0abZ!d#@RoGZGT71f_L?!A4DP08)-b)oyjZM^6=re9Q??-Ld+5JLu8#2Q6>|l6J-rZ1PnI~!>zu` z;$===wkkL{IAq7!N7wljMEe}M8H_%R|N6QqOIt%BfX$*NU0pv*_6Kc_N8K<>j&aIg{puq{7+s4;Q8qd{VE z$!l2?BbufwRzQ{>17#y>s+!Yv4pJ|s(OwdI2h^ppjnZtY&=s1Q{o2~h1$^?G=-_Y4 zq0-{!;jwZsFKqj_l!Zp1l?}*`P$Z+bqb}R}Av_5cM{p}z9K;~VVj3O?^d~hF#7-I= zN@#?IzRIYbGq9LK-ha;zWsUc%5DqodE|Qi2o-+jA2>KpEKZ7)S_lhtWt@Sx)QVCO! z{u{bBS`==Fg+1u*wkM?9W%4G1IZp%2YLYkQxnH85s2v>|S^k-0aetdm) z5jCoEw4*`eaxhb0Rn-TC8|J4tK)ew#mBLl{1fm%eH269?svtxG4Kx4`sW?Cufv_{< zq9A|q`ikk!p}#U|^dTHRd00`BEGO}`g$2F6y#%!&g6(HkLV+H8|Gv=Lwa>BU?NIzo z+d-jcZ(pC};pc2n8<{dIA(_XI5)o!WCJiIRwoGIENr(QQ`;m3*2bFY_Mv9v#Wm(lf zNd~nzsr>I4450dShv;e`0HSOE4a%r1V5LC3{`FbyD5yq3dn5#b3KPNLKH=A)eg8w@ z{yi?E|Dpthf`W9UR3FDj`bguF_1qczK%oCIVOR1ioJFIoQ?WFnNJkAO0`g(FKQT@+ zbi(oL{Q$Xk{KG0DVqnHVol_FLRRxM2kbZ?&%iGt8b5ATnviSRR*68n?E*hP%v&8aN zuZG`d5Ig_lD0d)~fK%^)O#UW~P@%2wgWFM^|3iyM8NVm4a2tF8$}L8Sf3%Hgzo>}Q zG=OXkhVYQ<-?I3{yY48Jt z93@&W^0|L|9QBRF5>e9!oC@Qp!;bxg$W9W1HY~XnsSZtBFgJ9K1N{}69bj_;bjNvR zVH4=wsHuC-;6W{M+JYIqXY)+urpEh-m>p!DXVL4|9ipBi(*={cWZ=Y!x40n;^tXoE z@uZSgBoKdZp8GIDuKqhvji#OxPI-fM)nAMrUVc<0l}}XrP|_-Q#XYDENjo1$Y}+BgpSHz%*?6GD9@ympJyr z-HS7dN#0J7!FemBI7DUx&V<%>@0v(Cl5NBGyoH5rO$EHuPK2TO_*9E3$uUsTo@Rdu zg}Uw>rT5Zv=ij%qLS$c6nV_Smt4pKvh#$Lx8cU144Do7cUYWKoh9VQR&_&tMt5;s)y$~Y?OPZSAZ8hhpa-Pc6DIb{IY&uZdGmuskX;mi`0y!)eoI$N zYYm-L0>H-8wuO(sW7Az08f5b7Mn4X12h=ZRHw9F_54ft$^krtG=GWLr&0i_C4;vQ5 zQH5663DUod^37^=NH8l4JU!LHw4(q4zf-w+)3Xb-HZ%=XK*LE8Gmw2EL}Jj%aL?h> z?rAebwYTpySf%0D@cfbpJObxPQ3iRVz&Xl8kvcyu2h{T@irRTG@$MpudQX}U1qB7$ zkoz-ZpeMG5<480}jlgMg!u~O1l2Wo&f$&rMC&>9nev*{B2EFJH&-Pj1xj%6WB6on& zjep`+Hc&mCC^?A)u5B#!>9;v3EX42#lll?7_kA)uq!G+Y=zrmLyp{DR1yrf*afT8B z-s9ZOpe;c+f~Wvt-Kp4dI6%%MgYIDp{^hrQMjP0uY>dg&#{x@^(pXi3BWGg`Cr-`^)1_Q zj4kR&NL##k07_^&lSo$Jgi#Ac8HY;-79uDkV+gu5zI$MqiQ`Sgm8RD|KuNsNA?T2r z`L9|5I;kg<%m58qa5k)P5uWzo^w2+W?{f#t#rA2_ti?irK30QWjj2E~gg9eXJ~??1 z#a?^HoI@co6ouz!fDtuMuYDlGNinoB`TKxmM5n}zL54{R z)mX!H$O;8*OjE0^ofgI)KqplcbjU_#Naw{LrR#k^HPIAOboek4?0)P>tp+ji;Ne5D zxk59kuV>I;5F%m8L}!p79r8$`0D)`^ZlUlh?CXJHnv%|X%}=i*JrdU~@J>0EQ>CdL z79+*HKwEw5@t$%`W`25Y|J9gT(6^xf2e^etg@={e!FGPo5~K5OnRHkE^2H0h+a+xu#DQ=&FmVd-oI8v9 z%7#-;s*oO|ZR_dUH~;}C$w0~v<7DVS)Atlk%;<+N4DYZ%;W;)qD!Ek$lE9&gy-=@w>v6dq7Y9F&mHiW`)K!)KX+C-sEpTg5bWM5}h6MIL%HJXUc)+k&oAUbkOc1kT9- zg`lw8%~C1;p22npMfKggcemLwZ6yxpcGyUnpXs>&zAC9LYylN70ravy!bPd8U@D*X z);7}`Tm(c3H*g|lOvuB6YJu^WDiZFl^E-o|{>rfSb3$)?m4BEE&hgk#Ow zvuBNREN{Ix-e`Sm$q#4i79Z|)xDgWqy|x}l+4N0yulE7-}%i0;6I$;=?)q$WVAyJxCSbpo3sq+v!4fDd;bFH#;X7Rh=4+=tR##=4iR#|dH2TbS{s+ZP?H?XE*vLX?G zKg(43BuyJn6>lbo1wgMGlVh}1$N6Wc8pT$t^Q3BNpUyEU+3utbKcjJ09j;bwCKHbB zU6cJCU4E+2itr?0{d9YU-_Do*993_dqYe=ZPUr9pY&#?pDyQ#jR4wpVQQx<`tBYxS zyZ_rY(RRde((wiWRkQ!&O*q1}z${)_p7-%stTVYlVpA7*9TAdQWeL+`ZG;^l8o!=Rm zRqarkZc!`8B0x=5>DA6cP4-tAm{}raDDu`u%{${a;Oz6+TCcHZAJwJ5#HTj8svQss z;u&!WE2Wvx+LANBlmk-~=Y9ZTg&|@5+K`1n-tCCHARo;wBe`obov~wOiMteQUsyLreK_>u#PGuQ0W7I^lb`ff} z;X_lH;u>hy<4ON6foflFI;u-5)C;%i)2HUl*R#;L?l5kr_r0}MX#4j1JAwd1ex*g1 z(K_Sf>$@q#1_3SiofGmY3-ETtiTBtIUs`4wkMRF|HkTq~>+ir=jUIl{Kbh0j?v8eT z{p!<#uhd+1%K^7jLT$4XLL!XO%y;)w@<9WuT78hKrEW;i&DtL)LvpyKij!JLs6)xK zy~hO3jkkz;f-hLKo{yE~GQ2s+judM&I!1bqCPehQNT_P-d8}4g+a^y`uecON5)4fH zhIA#Iec&^Fp&Ni)FMh~@Sl!6IH`}poZCr(=_A83ZklbE^*xN?>V`6q*oCR1%_u^bb zVRwx&xZhc0wt2(lYT3_it1Ec@jSRkRn+k9Ytw_kjJrf>-2S_2g%B0Qe%Be&{x zXtbw$z!8~ZthZCTJ0Wmdx9`rOaW}WY+T%pSvuX(|n;0wmyx9v@eY}P1ZQ_<~F8`3{ zRwcJ#?}U%flJyCGF>C0rX~{SHZ7}JXG{hfGw0l6P%W|E%ps+zms2oj^QD~`95)Klr zPHk%w+OSC?zcH7-_|-sH>eI;yNicNbXIq1p>L1J_>dg1o(GG_@Y1Fyf>r5A^{;XR- zz50}DMxW~!RnJ*X7Z;ZV^MiP;mVr%UzDZ9{PtokHxORb%7Tfl7DMG#x z6;hV5T5(NX*6BE+-?VF#r)y{0Hb5?U56l@jH%17qw;DcRp8ezun9<5do3o$Hh=1$c z^(A?D*rl2F43rU+i~*cFR2W!Qu>xTj(F-i5EAi-|p0|YZd5~ z(n*cC0hbaDB2EmAj%6#u?;VR)90!zT5FJD%tDs4}rtuR!)9OL6+PCMB1=cbl7l*uj zxvROd;Ga|&catFa$Ir+5ZPp7&>4e0Y(09O7=%-UOxdA*5KS4HzNp!xO4Ie6E8^F_0 z8PK)F3#ev433|`ejj?va%K5s}@ce`NSzmSjNEaV_Ot{ju5n=wSfCsB(WevJ?Ic5^+GA?RTf4-2gVMxP&B4rPtk=w3N4?^uE4f_2Iw6iJ(PY;Y(J=Oz7x$ely=qb)jY~HcE`0WAGaI>9W4erkYaU|0b#DPx zF)>o=`2Dd4b>3Jt~5476&5D7|nm`UQn6 zGxCmIrlC6yr~tQ5M7a{K&J~(EziLkT;iwc)7;}YLxvrq(!WvlL`3Y&UpCS`@2zNu2 z{E!3Dyn%Z!KxW~i&6RUJr^Xrwa6`|^)YrZ%qR~EHmwka^+k|ZjJJj_huZWik6oun_ zHKj9t;0t<5otlIRQdOIzr86sg3b;FoGx%9|JrT`x6nf06L*%0IoV6y0-sgxn}J5O99+oJ3zFM`nMW{pTV4dg~j~qn3bvrLjaYX zKqcvVc;wR(>>BgIt}bnwp_ojrz*{aFl6b4Ymp&<-0Dh!&A(Hid5ky*#j3PVHc8(54QmP>Tpnn|qMBEgB z!q4hl(TaBW)?h;Gz*SYE@lrgJ++g?$EIr~gGX{8Hc-yvMYIc-9mX}Hl!0Cm&K(&N< zyE-Ee#6>LY)q*zU1NwyElc_VL%MjHp6weZk*Hea2w4>c4 zZPQl*HhPIPpYCHaV>^^!VeT1$aO~9cKs(-%bqhdpl8>2RAn*W8EqH{jTsW$ z>@4%Ryi>oi#xSqH&KkG5m4OH*QezZu_D&O)j~`2DteT;nx+q> zUR&KH^5Qm>eJ5X3r)IVCG(cP(Cpq@WbIPN^>Gf*Y9}Q=m@=ESYq#BruCXNcE#+WmI zJIFl#WTB&Ue(%6U(Q&W?OhlCn=Fa zYN)YlC71g366l5mxe9|7PpvKR zESSZ)Jn97mdZ&Zb^q?FXsmq3vw4$qlE_V5)J-vQ~x9GPpkZx8CU6$)9?3 z0YN#GV@Sa~X{3!hv>Dz%NyNd`b+q)ELy>2W5K7IF(F$I;hTN!3aE zRmNR!RRfQZG`}IoU`R=ndPsZ+ml)}6-2VG%boo#wn#qduM^z^>PgXRlyNqqRQTd^* z^2(N@{WVAZN8EQ%Viz0QA;c9c#-b%UPJukgaOlu)I9Y!D3_sHr8B@EO=!nf{b}9qV z2(Lz0Z<6B_njN`mmWKvz>+pL9I)3dwi~=o`jx2?q#MvpdA0_P4*j5TR_r7?nng0Lk-p9TtWA+!=;g@jb_hJN+C}=h?_1+ zR|}q6wZo;G(`+s-e?yZsE)>B{H@M2=_Q347s)a(Kj!*DBP&ba(BapB6nnjs9}_X$&3)pK;HWQM2@6c08%K-FjGpBCUxOqrx7y4T>Y{g+pkFTH$g zPMrsE9py#7_G{a6R{Gojo$`TkfnPFc&(T!{VCDY(PUZ4_aoc=y=lb1!SoG4yGu?~J z{^hN?TJH+}?OSsFZJFq;oL#_H+tf+3R(<#|c|BXhF3{PF4yK?Ho2@CpmG>XF@7Mf) z!|pfK}kBQ=1qeXGH%w@U%!1XgBCw zMBtWQ;J^m(1kQ!PE-h#!A}}=s1Dnh#peYkk1|L^oJc5pm1}*y^Jyd%10By{3#?Ss| ZKC#W>Ugg4^C}0X<@O1TaS?83{1OQ@QUZem3 diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_mark_groups_squares_directed.png index 4655ce1c18d701edc6f0e9554ad003658186b9eb..73278122736faa76651885cc91e95929fb149415 100644 GIT binary patch literal 17394 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 L+E2G0yYxQ*mC`Kp literal 19476 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 diff --git a/tests/drawing/matplotlib/test_graph.py b/tests/drawing/matplotlib/test_graph.py index 67256cbe6..84d9dd2a7 100644 --- a/tests/drawing/matplotlib/test_graph.py +++ b/tests/drawing/matplotlib/test_graph.py @@ -69,10 +69,13 @@ def test_directed_curved_loops(self): plt.close("all") g = Graph.Ring(5, directed=True) g.add_edge(0, 0) + g.add_edge(0, 0) + g.add_edge(2, 2) fig, ax = plt.subplots() plot( g, target=ax, layout=self.layout_small_ring, edge_curved=[0] * 4 + [0.3], + edge_loop_size=[0] * 5 + [30, 50, 40], ) @image_comparison(baseline_images=["graph_mark_groups_directed"], remove_text=True) From 7131d2ebf6f3c025fcff7722e9f4975c01a7ecb9 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Thu, 13 Jul 2023 09:34:00 +1000 Subject: [PATCH 132/681] Add arrows to directed loops --- doc/source/tutorial.es.rst | 4 +- doc/source/tutorial.rst | 8 +- src/igraph/drawing/matplotlib/edge.py | 107 ++++++++++++++++++-------- 3 files changed, 85 insertions(+), 34 deletions(-) diff --git a/doc/source/tutorial.es.rst b/doc/source/tutorial.es.rst index 1d2a5af7f..62c74664c 100644 --- a/doc/source/tutorial.es.rst +++ b/doc/source/tutorial.es.rst @@ -647,7 +647,9 @@ Attribute name Keyword argument Purpose ``arrow_width`` ``edge_arrow_width`` El ancho de las flechas. Relativo a 10 pixels. --------------- ---------------------- ------------------------------------------ -``loop_size`` ``edge_loop_size`` Tamaño de los bucles. Este atributo no +``loop_size`` ``edge_loop_size`` Tamaño de los bucles. Puede ser negativo + para escalar con el tamaño del vertice + correspondiente. Este atributo no es utilizado para otras aristas. Este atributo sólo existe en el backend matplotlib. diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index 50b84deb1..015e80b91 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -824,9 +824,13 @@ Attribute name Keyword argument Purpose ``arrow_width`` ``edge_arrow_width`` Width of the arrowhead on the edge if the graph is directed, relative to 10 pixels. --------------- ---------------------- ------------------------------------------ -``loop_size`` ``edge_loop_size`` Size of self-loops. This attribute is +``loop_size`` ``edge_loop_size`` Size of self-loops. It can be set as a + negative number, in which case it scales + with the size of the corresponding vertex + (e.g. -1.0 means the loop has the same size + as the vertex). This attribute is ignored by edges that are not loops. - This argument is available only in the + This attribute is available only in the matplotlib backend. --------------- ---------------------- ------------------------------------------ ``width`` ``edge_width`` Width of the edge in pixels. diff --git a/src/igraph/drawing/matplotlib/edge.py b/src/igraph/drawing/matplotlib/edge.py index af5e69727..9f73eb923 100644 --- a/src/igraph/drawing/matplotlib/edge.py +++ b/src/igraph/drawing/matplotlib/edge.py @@ -158,17 +158,35 @@ def _compute_paths(self, transform=None): 'sizes': [], 'edge_angles': [], } + if self._directed: + loop_vertex_dict[edge_vertices[0]]['arrow_sizes'] = [] + loop_vertex_dict[edge_vertices[0]]['arrow_widths'] = [] loop_vertex_dict[edge_vertices[0]]['indices'].append(i) # Get actual coordinates of the vertex border (rough) paths = [] for i, edge_vertices in enumerate(visual_vertices): + if self._directed: + if (self._arrow_sizes is None) or (self._arrow_widths is None): + arrow_size = 0 + arrow_width = 0 + else: + arrow_size = self._arrow_sizes[i] + arrow_width = self._arrow_widths[i] + # Loops are positioned post-facto in the space left by the othter edges if edge_vertices[0] == edge_vertices[1]: paths.append(None) loop_vertex_dict[edge_vertices[0]]['sizes'].append( self._loop_sizes[i], ) + if self._directed: + loop_vertex_dict[edge_vertices[0]]['arrow_sizes'].append( + arrow_size, + ) + loop_vertex_dict[edge_vertices[0]]['arrow_widths'].append( + arrow_width, + ) continue coords = np.vstack( @@ -185,12 +203,6 @@ def _compute_paths(self, transform=None): curved = False if self._directed: - if (self._arrow_sizes is None) or (self._arrow_widths is None): - arrow_size = 0 - arrow_width = 0 - else: - arrow_size = self._arrow_sizes[i] - arrow_width = self._arrow_widths[i] path = self._compute_path_directed( coordst, sizes, @@ -237,26 +249,41 @@ def _compute_paths(self, transform=None): angle1, angle2 = -pi, pi nloops = len(ldict['indices']) - for ii, (ipath, loop_size) in enumerate(zip(ldict['indices'], ldict['sizes'])): - angle1i = angle1 + (angle2 - angle1) * ii / nloops - angle2i = angle1 + (angle2 - angle1) * (ii + 1) / nloops + for i in range(nloops): + angle1i = angle1 + (angle2 - angle1) * i / nloops + angle2i = angle1 + (angle2 - angle1) * (i + 1) / nloops + if self._directed: + loop_kwargs = { + 'arrow_size': ldict['arrow_sizes'][i], + 'arrow_width': ldict['arrow_widths'][i], + } + else: + loop_kwargs = {} path = self._compute_path_loop( coordst[0], vertex_size, - loop_size, + ldict['sizes'][i], angle1i, angle2i, trans_inv, angle_padding_fraction=0.1, + **loop_kwargs, ) - paths[ipath] = path + paths[ldict['indices'][i]] = path return paths - def _compute_path_loop(self, coordt, vertex_size, loop_size, angle1, angle2, trans_inv, - angle_padding_fraction=0.1): + def _compute_path_loop( + self, coordt, vertex_size, loop_size, angle1, angle2, trans_inv, + angle_padding_fraction=0.1, + arrow_size=None, arrow_width=None, + ): import numpy as np + # Special argument for loop size to scale with vertices + if loop_size < 0: + loop_size = -loop_size * vertex_size + # Pad angles to make a little space for tight arrowheads angle1, angle2 = ( angle1 * (1 - angle_padding_fraction) + angle2 * angle_padding_fraction, @@ -264,25 +291,46 @@ def _compute_path_loop(self, coordt, vertex_size, loop_size, angle1, angle2, tra ) # Too large wedges, just use a quarter - if angle2 - angle1 > pi / 2: - angle1 = (angle2 + angle1) * 0.5 - pi / 4 - angle2 = angle1 + pi / 2 + if angle2 - angle1 > pi / 3: + angle_mid = (angle2 + angle1) * 0.5 + angle1 = angle_mid - pi / 6 + angle2 = angle_mid + pi / 6 start = vertex_size / 2 * np.array([cos(angle1), sin(angle1)]) end = vertex_size / 2 * np.array([cos(angle2), sin(angle2)]) - amix = 0.15 + amix = 0.05 aux1 = loop_size * np.array([cos(angle1 * (1 - amix) + angle2 * amix), sin(angle1 * (1 - amix) + angle2 * amix)]) aux2 = loop_size * np.array([cos(angle1 * amix + angle2 * (1 - amix)), sin(angle1 * amix + angle2 * (1 - amix))]) - vertices = np.vstack([ - start, aux1, aux2, end, - aux2, aux1, start, - ]) + + if not self._directed: + vertices = np.vstack([ + start, aux1, aux2, end, + aux2, aux1, start, + ]) + codes = ["MOVETO"] + ["CURVE4"] * 6 + else: + # Tweak the bezier points + aux1 *= (loop_size + arrow_size) / loop_size + aux2 *= (loop_size + arrow_size) / loop_size + # Angle between end/tip and vertex centre + theta = angle2 + voff_unity = np.array([cos(theta), sin(theta)]) + voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] + headbase = end + arrow_size * voff_unity + headleft = headbase + 0.5 * arrow_width * voff_unity_90 + headright = headbase - 0.5 * arrow_width * voff_unity_90 + vertices = np.vstack([ + start, + aux1, aux2, headbase, + headleft, end, headright, headbase, + aux2, aux1, start, + ]) + codes = ["MOVETO"] + ["CURVE4"] * 3 + ["LINETO"] * 4 + ["CURVE4"] * 3 + + # Offset to place and transform to data coordinates vertices = trans_inv(coordt + vertices) - - codes = ["MOVETO"] + ["CURVE4"] * 6 codes=[getattr(mpl.path.Path, x) for x in codes] - path = mpl.path.Path( vertices, codes=codes, ) @@ -386,19 +434,16 @@ def _compute_path_directed( # Start theta = atan2(*((aux1 - coordst[0])[::-1])) - voff = 0 * coordst[0] - voff[:] = [cos(theta), sin(theta)] - voff *= sizes[0] / 2 - start = coordst[0] + voff + voff_unity = 0 * coordst[0] + voff_unity[:] = [cos(theta), sin(theta)] + start = coordst[0] + voff_unity * sizes[0] / 2 # End with arrow (base-left-top-right-base) theta = atan2(*((coordst[1] - aux2)[::-1])) voff_unity = 0 * coordst[0] voff_unity[:] = [cos(theta), sin(theta)] - voff = voff_unity * sizes[1] / 2 - tip = coordst[1] - voff - voff_unity_90 = voff_unity @ [[0, 1], [-1, 0]] + tip = coordst[1] - voff_unity * sizes[1] / 2 headbase = tip - arrow_size * voff_unity headleft = headbase + 0.5 * arrow_width * voff_unity_90 headright = headbase - 0.5 * arrow_width * voff_unity_90 From 66470fbf1b83cc922908f6daec6c358c6bd62545 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 13 Jul 2023 12:44:52 +0200 Subject: [PATCH 133/681] fix: revert the commit that prevented the addition of vertices with integer names, refs #693 --- CHANGELOG.md | 2 ++ src/igraph/basic.py | 10 +++++++++- tests/test_basic.py | 5 +++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61c3f463e..53d1f74a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - `Graph.get_incidence()` is now deprecated in favour of `Graph.get_biadjacency()` as it returns the _bipartite adjacency_ matrix of a graph and not its incidence matrix. (The previous name was a mistake). Future versions might re-introduce `Graph.get_incidence()` to return the incidence matrix of a graph. +- Reverted the change in 0.10.5 that prevented adding vertices with integers as vertex names. Now we show a deprecation warning instead, and the addition of vertices with integer names will be prevented from version 0.11.0 only. + ### Fixed - Fixed a minor memory leak in `Graph.decompose()`. diff --git a/src/igraph/basic.py b/src/igraph/basic.py index e672ef7d9..2944d3f2d 100644 --- a/src/igraph/basic.py +++ b/src/igraph/basic.py @@ -1,5 +1,6 @@ from igraph._igraph import GraphBase from igraph.seq import EdgeSeq +from igraph.utils import deprecated def _add_edge(graph, source, target, **kwds): @@ -58,7 +59,14 @@ def _add_vertex(graph, name=None, **kwds): to avoid the overhead of creating t. """ if isinstance(name, int): - raise TypeError("cannot use integers as vertex names; use strings instead") + # raise TypeError("cannot use integers as vertex names; use strings instead") + deprecated( + "You are using integers as vertex names. This is discouraged because " + "most igraph functions interpret integers as vertex _IDs_ and strings " + "as vertex names. For sake of consistency, convert your vertex " + "names to strings before assigning them. Future versions from igraph " + "0.11.0 will disallow integers as vertex names." + ) vid = graph.vcount() graph.add_vertices(1) diff --git a/tests/test_basic.py b/tests/test_basic.py index 6d57c5a17..cec091474 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -120,8 +120,6 @@ def testAddVertex(self): self.assertTrue("name" in g.vertex_attributes()) self.assertEqual(g.vs["name"], [None, "foo"]) - self.assertRaises(TypeError, g.add_vertex, 3) - vertex = g.add_vertex("3") self.assertTrue(g.vcount() == 3 and g.ecount() == 0) self.assertEqual(2, vertex.index) @@ -141,6 +139,9 @@ def testAddVertex(self): self.assertEqual(g.vs["spam"], [None] * 4 + ["cheese"]) self.assertEqual(g.vs["ham"], [None] * 4 + [42]) + with self.assertWarns(DeprecationWarning, msg="integers as vertex names"): + g.add_vertex(42) + def testAddVertices(self): g = Graph() g.add_vertices(2) From 3a2af150a57429a8dcaf6910c39a92c82457bdbb Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 13 Jul 2023 13:05:17 +0200 Subject: [PATCH 134/681] chore: updated vendored C core --- vendor/source/igraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/source/igraph b/vendor/source/igraph index f2c7e65dc..7686bc9a3 160000 --- a/vendor/source/igraph +++ b/vendor/source/igraph @@ -1 +1 @@ -Subproject commit f2c7e65dc2d8aa274de9346864aa8edadf86a15a +Subproject commit 7686bc9a3bc9d751f6aca8b0445dae15097fd6d7 From 58fd2e78b6cdf4a72a741d918c8269463b8b14f6 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 13 Jul 2023 13:05:42 +0200 Subject: [PATCH 135/681] chore: updated changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53d1f74a0..d1398225b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Changed +- The C core of igraph was updated to version 0.10.6. + - `Graph.Incidence()` is now deprecated in favour of `Graph.Biadjacency()` as it constructs a bipartite graph from a _bipartite adjacency_ matrix. (The previous name was a mistake). Future versions might re-introduce `Graph.Incidence()` to construct a graph from its incidence matrix. - `Graph.get_incidence()` is now deprecated in favour of `Graph.get_biadjacency()` as it returns the _bipartite adjacency_ matrix of a graph and not its incidence matrix. (The previous name was a mistake). Future versions might re-introduce `Graph.get_incidence()` to return the incidence matrix of a graph. From 786eaf29d27fe75baa33f79989cc477d0c71028f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 13 Jul 2023 13:48:45 +0200 Subject: [PATCH 136/681] chore: bumped version to 0.10.6 --- CHANGELOG.md | 2 +- src/igraph/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1398225b..5f764565a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # igraph Python interface changelog -## [Unreleased] +## [0.10.6] - 2023-07-13 ### Changed diff --git a/src/igraph/version.py b/src/igraph/version.py index 2b40ae92e..a9750c7c7 100644 --- a/src/igraph/version.py +++ b/src/igraph/version.py @@ -1,2 +1,2 @@ -__version_info__ = (0, 10, 5) +__version_info__ = (0, 10, 6) __version__ = ".".join("{0}".format(x) for x in __version_info__) From 5e60acd119788969cab6476c295599774c64dfd1 Mon Sep 17 00:00:00 2001 From: Vincent Traag Date: Thu, 13 Jul 2023 15:38:19 +0200 Subject: [PATCH 137/681] README: Add citation and clean up section hierarchy. --- README.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 8ae55c896..49cbf9065 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,7 @@ [![PyPI wheels](https://img.shields.io/pypi/wheel/igraph.svg)](https://pypi.python.org/pypi/igraph) [![Documentation Status](https://readthedocs.org/projects/igraph/badge/?version=latest)](https://igraph.readthedocs.io/) -Python interface for the igraph library ---------------------------------------- +# Python interface for the igraph library igraph is a library for creating and manipulating graphs. It is intended to be as powerful (ie. fast) as possible to enable the @@ -21,7 +20,13 @@ on [our old website](https://igraph.org/python/versions/0.10.1/). igraph is a collaborative work of many people from all around the world — see the [list of contributors here](./CONTRIBUTORS.md). -## Installation from PyPI +## Citation + +If use use igraph in your research, please cite + +> Csardi, G., & Nepusz, T. (2006). The igraph software package for complex network research. InterJournal, Complex Systems, 1695. + +# Installation We aim to provide wheels on PyPI for most of the stock Python versions; typically at least the three most recent minor releases from Python 3.x. @@ -34,7 +39,7 @@ pip install igraph See details in [Installing Python Modules](https://docs.python.org/3/installing/). -### Installation from source with pip on Debian / Ubuntu and derivatives +## Installation from source with pip on Debian / Ubuntu and derivatives If you need to compile igraph from source for some reason, you need to install some dependencies first: @@ -52,7 +57,7 @@ pip install igraph This should compile the C core of igraph as well as the Python extension automatically. -### Installation from source on Windows +## Installation from source on Windows It is now also possible to compile `igraph` from source under Windows for Python 3.7 and later. Make sure that you have Microsoft Visual Studio 2015 or @@ -73,7 +78,7 @@ Also, when building in MSYS2, you need to set the `SETUPTOOLS_USE_DISTUTILS` environment variable to `stdlib`; this is because MSYS2 uses a patched version of `distutils` that conflicts with `setuptools >= 60.0`. -#### Enabling GraphML +### Enabling GraphML By default, GraphML is disabled, because `libxml2` is not available on Windows in the standard installation. You can install `libxml2` on Windows using @@ -110,7 +115,7 @@ You can now build and install `igraph` again by simply running `pip install .`. Please make sure to use a clean source tree, if you built previously without GraphML, it will not update the build. -### Linking to an existing igraph installation +## Linking to an existing igraph installation The source code of the Python package includes the source code of the matching igraph version that the Python interface should compile against. However, if @@ -255,7 +260,7 @@ extras: pip install '.[test]' ``` -## Contributing +# Contributing Contributions to `igraph` are welcome! @@ -279,9 +284,9 @@ if you adjust the source code of the C extension, you need to rebuild it by runn cached in ``vendor/build`` and ``vendor/install`` so subsequent builds are much faster than the first one as the C core does not need to be recompiled. -## Notes +# Notes -### Supported Python versions +## Supported Python versions We aim to keep up with the development cycle of Python and support all official Python versions that have not reached their end of life yet. Currently this @@ -293,7 +298,7 @@ of the non-EOL Python versions. Continuous integration tests are regularly executed on all non-EOL Python branches. -### PyPy +## PyPy This version of igraph is compatible with [PyPy](http://pypy.org/) and is regularly tested on [PyPy](http://pypy.org/) with ``tox``. However, the From 3ced0af39dc6b2ea4892dec8045890d258945395 Mon Sep 17 00:00:00 2001 From: Vincent Traag Date: Thu, 13 Jul 2023 15:40:47 +0200 Subject: [PATCH 138/681] Add CITATION.cff --- CITATION.cff | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 000000000..e803bfa79 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,53 @@ +# This CITATION.cff file was generated with cffinit. +# Visit https://bit.ly/cffinit to generate yours today! + +cff-version: 1.2.0 +title: igraph +message: >- + If you use igraph, please cite it using the + metadata from this file. +type: software +authors: + - given-names: Gábor + family-names: Csárdi + orcid: 'https://orcid.org/0000-0001-7098-9676' + - given-names: Tamás + family-names: Nepusz + orcid: 'https://orcid.org/0000-0002-1451-338X' + - given-names: Szabolcs + family-names: Horvát + orcid: 'https://orcid.org/0000-0002-3100-523X' + - given-names: Vincent Antonio + family-names: Traag + orcid: 'https://orcid.org/0000-0003-3170-3879' + - given-names: Fabio + family-names: Zanini + orcid: 'https://orcid.org/0000-0001-7097-8539' + - given-names: Daniel + family-names: Noom +repository-code: 'https://github.com/igraph/python-igraph' +url: 'https://igraph.org' +abstract: >- + igraph is a C library for complex network analysis and + graph theory, with emphasis on efficiency, portability and + ease of use. +keywords: + - network analysis + - graph theory +license: GPL-2.0-or-later +version: 0.10.5 +date-released: '2023-07-01' +preferred-citation: + type: article + authors: + - given-names: Gábor + family-names: Csárdi + orcid: 'https://orcid.org/0000-0001-7098-9676' + - given-names: Tamás + family-names: Nepusz + orcid: 'https://orcid.org/0000-0002-1451-338X' + journal: "InterJournal, Complex Systems" + start: 1695 # First page number + title: "The igraph software package for complex network research" + year: 2006 + type: article From da47a719661e798bb94fd9a9dce17682661902d5 Mon Sep 17 00:00:00 2001 From: Vincent Traag Date: Thu, 13 Jul 2023 15:44:08 +0200 Subject: [PATCH 139/681] Add citation to documentation --- doc/source/index.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/source/index.rst b/doc/source/index.rst index aca648dfb..94f55b1da 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -125,3 +125,10 @@ Indices and tables .. _Cairo: https://www.cairographics.org .. _matplotlib: https://matplotlib.org .. _plotly: https://plotly.com/python/ + +Citation +======== + +If you use igraph in your research, please cite + + Csardi, G., & Nepusz, T. (2006). The igraph software package for complex network research. InterJournal, Complex Systems, 1695. From 731304708c1be60cac747e49cdccfe11273834ca Mon Sep 17 00:00:00 2001 From: Vincent Traag Date: Thu, 13 Jul 2023 15:44:27 +0200 Subject: [PATCH 140/681] fix: Correct typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49cbf9065..7e8c39df3 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ see the [list of contributors here](./CONTRIBUTORS.md). ## Citation -If use use igraph in your research, please cite +If you use igraph in your research, please cite > Csardi, G., & Nepusz, T. (2006). The igraph software package for complex network research. InterJournal, Complex Systems, 1695. From 22de5a24f5fd0330eb32605a9fe235fc6cbd301d Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 17 Jul 2023 11:26:40 +0200 Subject: [PATCH 141/681] fix: use Dijkstra's algorithm when there are zero weights but no negative weights --- CHANGELOG.md | 6 ++++++ src/_igraph/graphobject.c | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f764565a..e6c3bbb62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # igraph Python interface changelog +## [master] + +### Changed + +- `Graph.distances()` now uses Dijkstra's algorithm when there are zero weights but no negative weights. Earlier versions switched to Bellman-Ford or Johnson in the presence of zero weights unnecessarily. + ## [0.10.6] - 2023-07-13 ### Changed diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 5f977cd50..4509fa703 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -6221,7 +6221,7 @@ PyObject *igraphmodule_Graph_distances( /* Select the most suitable algorithm */ if (weights && igraph_vector_size(weights) > 0) { - if (igraph_vector_min(weights) > 0) { + if (igraph_vector_min(weights) >= 0) { /* Only positive weights, use Dijkstra's algorithm */ e = igraph_distances_dijkstra(&self->g, &res, from_vs, to_vs, weights, mode); } else { @@ -15330,8 +15330,8 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "Calculates shortest path lengths for given vertices in a graph.\n\n" "The algorithm used for the calculations is selected automatically:\n" "a simple BFS is used for unweighted graphs, Dijkstra's algorithm is\n" - "used when all the weights are positive. Otherwise, the Bellman-Ford\n" - "algorithm is used if the number of requested source vertices is larger\n" + "used when all the weights are non-negative. Otherwise, the Bellman-Ford\n" + "algorithm is used if the number of requested source vertices is smaller\n" "than 100 and Johnson's algorithm is used otherwise.\n\n" "@param source: a list containing the source vertex IDs which should be\n" " included in the result. If C{None}, all vertices will be considered.\n" From 6b986676aa0d313f615f44477cf9681da6635bf1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 13:35:02 +0000 Subject: [PATCH 142/681] build(deps): bump pypa/cibuildwheel from 2.14.0 to 2.14.1 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.14.0 to 2.14.1. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.14.0...v2.14.1) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d51dc2e2..c6a4d5aa8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.14.0 + uses: pypa/cibuildwheel@v2.14.1 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" @@ -38,7 +38,7 @@ jobs: CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.14.0 + uses: pypa/cibuildwheel@v2.14.1 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -63,7 +63,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.14.0 + uses: pypa/cibuildwheel@v2.14.1 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -88,7 +88,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.14.0 + uses: pypa/cibuildwheel@v2.14.1 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -155,7 +155,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.14.0 + uses: pypa/cibuildwheel@v2.14.1 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -243,7 +243,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.14.0 + uses: pypa/cibuildwheel@v2.14.1 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From 1ce6e3ad4aa7145347f1b250da5d6924baa527c8 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 17 Jul 2023 15:41:13 +0200 Subject: [PATCH 143/681] refactor: rename header guards so we don't abuse the PYTHON_ namespace --- cairo_layout.pickle | Bin 0 -> 126 bytes docker/emscripten/Dockerfile | 28 ++++++++++++++++++++++++++++ src/_igraph/arpackobject.h | 4 ++-- src/_igraph/bfsiter.h | 4 ++-- src/_igraph/common.h | 4 ++-- src/_igraph/convert.h | 4 ++-- src/_igraph/dfsiter.h | 4 ++-- src/_igraph/edgeobject.h | 4 ++-- src/_igraph/edgeseqobject.h | 4 ++-- src/_igraph/error.h | 4 ++-- src/_igraph/filehandle.h | 4 ++-- src/_igraph/graphobject.h | 4 ++-- src/_igraph/indexing.h | 4 ++-- src/_igraph/operators.h | 4 ++-- src/_igraph/platform.h | 4 ++-- src/_igraph/preamble.h | 4 ++-- src/_igraph/pyhelpers.h | 4 ++-- src/_igraph/random.h | 4 ++-- src/_igraph/vertexobject.h | 4 ++-- src/_igraph/vertexseqobject.h | 4 ++-- 20 files changed, 64 insertions(+), 36 deletions(-) create mode 100644 cairo_layout.pickle create mode 100644 docker/emscripten/Dockerfile diff --git a/cairo_layout.pickle b/cairo_layout.pickle new file mode 100644 index 0000000000000000000000000000000000000000..c827b64ec9f4d9e5a5ff4a4352161a3ea2e42787 GIT binary patch literal 126 zcmZo*nOe*M0kKmwfXLnc!<$7%zAx}|w?88?wPfD{=~S@j^~?zE7Udjw`_GHKj!D1f z1dHx}c`oDrGMDe}_HT6R#nbQkK}28OxE?jRPS$<@)jK(7Kg?=}m~e$#Jyx{-mizt} NjH2GsvCmUe^#CNnH?sf$ literal 0 HcmV?d00001 diff --git a/docker/emscripten/Dockerfile b/docker/emscripten/Dockerfile new file mode 100644 index 000000000..b52c94838 --- /dev/null +++ b/docker/emscripten/Dockerfile @@ -0,0 +1,28 @@ +FROM python:3.10.6-bullseye + +SHELL ["/bin/bash", "-c"] + +COPY setup.py.diff.txt /setup.py.diff + +RUN set -ex \ + && echo "Installing flex and bison" \ + && apt-get update \ + && apt-get -y install flex bison \ + && echo "Installing Emscripten" \ + && git clone https://github.com/emscripten-core/emsdk.git \ + && cd emsdk \ + && ./emsdk install latest \ + && ./emsdk activate latest \ + && source "/emsdk/emsdk_env.sh" \ + && cd .. \ + && echo "Cloning igraph repositories" \ + && git clone https://github.com/igraph/python-igraph.git \ + && cd python-igraph/vendor/source \ + && git clone https://github.com/igraph/igraph.git \ + && cd ../.. \ + && echo "Applying patch to setup.py" \ + && git apply < /setup.py.diff \ + && echo "Installing pyodide-build" \ + && pip install pyodide-build \ + && echo "Building igraph wheel" \ + && pyodide build diff --git a/src/_igraph/arpackobject.h b/src/_igraph/arpackobject.h index 18ab29d4c..3bfe80991 100644 --- a/src/_igraph/arpackobject.h +++ b/src/_igraph/arpackobject.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_ARPACKOBJECT_H -#define PYTHON_ARPACKOBJECT_H +#ifndef IGRAPHMODULE_ARPACKOBJECT_H +#define IGRAPHMODULE_ARPACKOBJECT_H #include "preamble.h" diff --git a/src/_igraph/bfsiter.h b/src/_igraph/bfsiter.h index 60469c011..93a5dacdb 100644 --- a/src/_igraph/bfsiter.h +++ b/src/_igraph/bfsiter.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_BFSITER_H -#define PYTHON_BFSITER_H +#ifndef IGRAPHMODULE_BFSITER_H +#define IGRAPHMODULE_BFSITER_H #include "preamble.h" diff --git a/src/_igraph/common.h b/src/_igraph/common.h index 388591035..ac950ae64 100644 --- a/src/_igraph/common.h +++ b/src/_igraph/common.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_COMMON_H -#define PYTHON_COMMON_H +#ifndef IGRAPHMODULE_COMMON_H +#define IGRAPHMODULE_COMMON_H #include diff --git a/src/_igraph/convert.h b/src/_igraph/convert.h index d318ce585..cf474a929 100644 --- a/src/_igraph/convert.h +++ b/src/_igraph/convert.h @@ -25,8 +25,8 @@ /** \defgroup python_interface_conversion Converting between Python and igraph data types * \ingroup python_interface */ -#ifndef PYTHON_CONVERT_H -#define PYTHON_CONVERT_H +#ifndef IGRAPHMODULE_CONVERT_H +#define IGRAPHMODULE_CONVERT_H #include "preamble.h" diff --git a/src/_igraph/dfsiter.h b/src/_igraph/dfsiter.h index 1b21c7139..226df7b64 100644 --- a/src/_igraph/dfsiter.h +++ b/src/_igraph/dfsiter.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_DFSITER_H -#define PYTHON_DFSITER_H +#ifndef IGRAPHMODULE_DFSITER_H +#define IGRAPHMODULE_DFSITER_H #include "preamble.h" diff --git a/src/_igraph/edgeobject.h b/src/_igraph/edgeobject.h index 7432d22a3..b506acce4 100644 --- a/src/_igraph/edgeobject.h +++ b/src/_igraph/edgeobject.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_EDGEOBJECT_H -#define PYTHON_EDGEOBJECT_H +#ifndef IGRAPHMODULE_EDGEOBJECT_H +#define IGRAPHMODULE_EDGEOBJECT_H #include "preamble.h" diff --git a/src/_igraph/edgeseqobject.h b/src/_igraph/edgeseqobject.h index 982368d69..c1a7449ee 100644 --- a/src/_igraph/edgeseqobject.h +++ b/src/_igraph/edgeseqobject.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_EDGESEQOBJECT_H -#define PYTHON_EDGESEQOBJECT_H +#ifndef IGRAPHMODULE_EDGESEQOBJECT_H +#define IGRAPHMODULE_EDGESEQOBJECT_H #include "preamble.h" diff --git a/src/_igraph/error.h b/src/_igraph/error.h index 282136f98..9cbb4eefc 100644 --- a/src/_igraph/error.h +++ b/src/_igraph/error.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_ERROR_H -#define PYTHON_ERROR_H +#ifndef IGRAPHMODULE_ERROR_H +#define IGRAPHMODULE_ERROR_H #include "preamble.h" diff --git a/src/_igraph/filehandle.h b/src/_igraph/filehandle.h index 6f3c5acf7..2ebcddc3e 100644 --- a/src/_igraph/filehandle.h +++ b/src/_igraph/filehandle.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_FILEHANDLE_H -#define PYTHON_FILEHANDLE_H +#ifndef IGRAPHMODULE_FILEHANDLE_H +#define IGRAPHMODULE_FILEHANDLE_H #include "preamble.h" diff --git a/src/_igraph/graphobject.h b/src/_igraph/graphobject.h index 29e022239..02ed0cad8 100644 --- a/src/_igraph/graphobject.h +++ b/src/_igraph/graphobject.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_GRAPHOBJECT_H -#define PYTHON_GRAPHOBJECT_H +#ifndef IGRAPHMODULE_GRAPHOBJECT_H +#define IGRAPHMODULE_GRAPHOBJECT_H #include "preamble.h" diff --git a/src/_igraph/indexing.h b/src/_igraph/indexing.h index 6b34ff09c..785e7969d 100644 --- a/src/_igraph/indexing.h +++ b/src/_igraph/indexing.h @@ -21,8 +21,8 @@ */ -#ifndef PYTHON_INDEXING_H -#define PYTHON_INDEXING_H +#ifndef IGRAPHMODULE_INDEXING_H +#define IGRAPHMODULE_INDEXING_H #include "preamble.h" diff --git a/src/_igraph/operators.h b/src/_igraph/operators.h index e90dd88e1..af4c5703e 100644 --- a/src/_igraph/operators.h +++ b/src/_igraph/operators.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_OPERATORS_H -#define PYTHON_OPERATORS_H +#ifndef IGRAPHMODULE_OPERATORS_H +#define IGRAPHMODULE_OPERATORS_H #include "preamble.h" diff --git a/src/_igraph/platform.h b/src/_igraph/platform.h index c1ff8cf6a..7277e6c05 100644 --- a/src/_igraph/platform.h +++ b/src/_igraph/platform.h @@ -22,8 +22,8 @@ */ -#ifndef PYTHON_PLATFORM_H -#define PYTHON_PLATFORM_H +#ifndef IGRAPHMODULE_PLATFORM_H +#define IGRAPHMODULE_PLATFORM_H #ifdef _MSC_VER # define INLINE __forceinline diff --git a/src/_igraph/preamble.h b/src/_igraph/preamble.h index b1c9596b9..e70f91c0a 100644 --- a/src/_igraph/preamble.h +++ b/src/_igraph/preamble.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_IGRAPH_PREAMBLE_H -#define PYTHON_IGRAPH_PREAMBLE_H +#ifndef IGRAPHMODULE_IGRAPH_PREAMBLE_H +#define IGRAPHMODULE_IGRAPH_PREAMBLE_H #ifndef PY_IGRAPH_ALLOW_ENTIRE_PYTHON_API # ifndef Py_LIMITED_API diff --git a/src/_igraph/pyhelpers.h b/src/_igraph/pyhelpers.h index 563765059..c700f1c0d 100644 --- a/src/_igraph/pyhelpers.h +++ b/src/_igraph/pyhelpers.h @@ -21,8 +21,8 @@ */ -#ifndef PYTHON_HELPERS_H -#define PYTHON_HELPERS_H +#ifndef IGRAPHMODULE_HELPERS_H +#define IGRAPHMODULE_HELPERS_H #include "preamble.h" diff --git a/src/_igraph/random.h b/src/_igraph/random.h index 4902e8697..2a83999db 100644 --- a/src/_igraph/random.h +++ b/src/_igraph/random.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_RANDOM_H -#define PYTHON_RANDOM_H +#ifndef IGRAPHMODULE_RANDOM_H +#define IGRAPHMODULE_RANDOM_H #include "preamble.h" diff --git a/src/_igraph/vertexobject.h b/src/_igraph/vertexobject.h index e16e8c37c..85180e375 100644 --- a/src/_igraph/vertexobject.h +++ b/src/_igraph/vertexobject.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_VERTEXOBJECT_H -#define PYTHON_VERTEXOBJECT_H +#ifndef IGRAPHMODULE_VERTEXOBJECT_H +#define IGRAPHMODULE_VERTEXOBJECT_H #include "preamble.h" diff --git a/src/_igraph/vertexseqobject.h b/src/_igraph/vertexseqobject.h index e27c47f08..449308ab8 100644 --- a/src/_igraph/vertexseqobject.h +++ b/src/_igraph/vertexseqobject.h @@ -20,8 +20,8 @@ */ -#ifndef PYTHON_VERTEXSEQOBJECT_H -#define PYTHON_VERTEXSEQOBJECT_H +#ifndef IGRAPHMODULE_VERTEXSEQOBJECT_H +#define IGRAPHMODULE_VERTEXSEQOBJECT_H #include "preamble.h" From b8b073159446d0d902634804bbcc87cf564647b8 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 17 Jul 2023 15:41:39 +0200 Subject: [PATCH 144/681] chore: updated copyright info in header --- src/_igraph/arpackobject.c | 2 +- src/_igraph/arpackobject.h | 2 +- src/_igraph/attributes.c | 2 +- src/_igraph/attributes.h | 2 +- src/_igraph/bfsiter.c | 2 +- src/_igraph/bfsiter.h | 2 +- src/_igraph/common.c | 2 +- src/_igraph/common.h | 2 +- src/_igraph/convert.c | 2 +- src/_igraph/convert.h | 2 +- src/_igraph/edgeobject.c | 2 +- src/_igraph/edgeobject.h | 2 +- src/_igraph/edgeseqobject.c | 2 +- src/_igraph/edgeseqobject.h | 2 +- src/_igraph/error.c | 2 +- src/_igraph/error.h | 2 +- src/_igraph/filehandle.c | 2 +- src/_igraph/filehandle.h | 2 +- src/_igraph/graphobject.c | 2 +- src/_igraph/graphobject.h | 2 +- src/_igraph/igraphmodule.c | 2 +- src/_igraph/igraphmodule_api.h | 2 +- src/_igraph/operators.c | 2 +- src/_igraph/operators.h | 2 +- src/_igraph/platform.h | 2 +- src/_igraph/random.c | 2 +- src/_igraph/random.h | 2 +- src/_igraph/vertexobject.c | 2 +- src/_igraph/vertexobject.h | 2 +- src/_igraph/vertexseqobject.c | 2 +- src/_igraph/vertexseqobject.h | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/_igraph/arpackobject.c b/src/_igraph/arpackobject.c index 047dbba01..293afce4f 100644 --- a/src/_igraph/arpackobject.c +++ b/src/_igraph/arpackobject.c @@ -1,7 +1,7 @@ /* vim:set ts=4 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2007-2012 Tamas Nepusz + Copyright (C) 2007-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/arpackobject.h b/src/_igraph/arpackobject.h index 3bfe80991..b5a487404 100644 --- a/src/_igraph/arpackobject.h +++ b/src/_igraph/arpackobject.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/attributes.c b/src/_igraph/attributes.c index 26bc5ee77..081d4897a 100644 --- a/src/_igraph/attributes.c +++ b/src/_igraph/attributes.c @@ -1,7 +1,7 @@ /* vim:set ts=2 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/attributes.h b/src/_igraph/attributes.h index 010ca4b63..094826d18 100644 --- a/src/_igraph/attributes.h +++ b/src/_igraph/attributes.h @@ -1,7 +1,7 @@ /* vim:set ts=2 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/bfsiter.c b/src/_igraph/bfsiter.c index f4b384bdf..f015d7a6a 100644 --- a/src/_igraph/bfsiter.c +++ b/src/_igraph/bfsiter.c @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/bfsiter.h b/src/_igraph/bfsiter.h index 93a5dacdb..d46cbcb24 100644 --- a/src/_igraph/bfsiter.h +++ b/src/_igraph/bfsiter.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/common.c b/src/_igraph/common.c index 751af257c..9a9fc5039 100644 --- a/src/_igraph/common.c +++ b/src/_igraph/common.c @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/common.h b/src/_igraph/common.h index ac950ae64..c474b7d7b 100644 --- a/src/_igraph/common.h +++ b/src/_igraph/common.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/convert.c b/src/_igraph/convert.c index a3a7f28e0..029c31c4f 100644 --- a/src/_igraph/convert.c +++ b/src/_igraph/convert.c @@ -1,7 +1,7 @@ /* vim:set ts=2 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/convert.h b/src/_igraph/convert.h index cf474a929..cb65374bf 100644 --- a/src/_igraph/convert.h +++ b/src/_igraph/convert.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/edgeobject.c b/src/_igraph/edgeobject.c index 82b8ae9e4..4780d943d 100644 --- a/src/_igraph/edgeobject.c +++ b/src/_igraph/edgeobject.c @@ -3,7 +3,7 @@ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/edgeobject.h b/src/_igraph/edgeobject.h index b506acce4..7aa4d2dc7 100644 --- a/src/_igraph/edgeobject.h +++ b/src/_igraph/edgeobject.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/edgeseqobject.c b/src/_igraph/edgeseqobject.c index 2ea925fe5..780de0606 100644 --- a/src/_igraph/edgeseqobject.c +++ b/src/_igraph/edgeseqobject.c @@ -3,7 +3,7 @@ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/edgeseqobject.h b/src/_igraph/edgeseqobject.h index c1a7449ee..a0120348a 100644 --- a/src/_igraph/edgeseqobject.h +++ b/src/_igraph/edgeseqobject.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/error.c b/src/_igraph/error.c index 4502cd34e..ffe448fad 100644 --- a/src/_igraph/error.c +++ b/src/_igraph/error.c @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/error.h b/src/_igraph/error.h index 9cbb4eefc..ce94c484a 100644 --- a/src/_igraph/error.h +++ b/src/_igraph/error.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/filehandle.c b/src/_igraph/filehandle.c index 1e0a9f3b2..e25c0236a 100644 --- a/src/_igraph/filehandle.c +++ b/src/_igraph/filehandle.c @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2010-2012 Tamas Nepusz + Copyright (C) 2010-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/filehandle.h b/src/_igraph/filehandle.h index 2ebcddc3e..19543f4e7 100644 --- a/src/_igraph/filehandle.h +++ b/src/_igraph/filehandle.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2010-2012 Tamas Nepusz + Copyright (C) 2010-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 4509fa703..2dd4bda16 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -1,7 +1,7 @@ /* vim:set ts=4 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/graphobject.h b/src/_igraph/graphobject.h index 02ed0cad8..f6c775c88 100644 --- a/src/_igraph/graphobject.h +++ b/src/_igraph/graphobject.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/igraphmodule.c b/src/_igraph/igraphmodule.c index a7edd9315..3d22f5415 100644 --- a/src/_igraph/igraphmodule.c +++ b/src/_igraph/igraphmodule.c @@ -1,7 +1,7 @@ /* vim:set ts=2 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/igraphmodule_api.h b/src/_igraph/igraphmodule_api.h index 1551ca5c8..793e1f382 100644 --- a/src/_igraph/igraphmodule_api.h +++ b/src/_igraph/igraphmodule_api.h @@ -2,7 +2,7 @@ /* vim:set ts=2 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/operators.c b/src/_igraph/operators.c index 5aaca69b5..09f5139db 100644 --- a/src/_igraph/operators.c +++ b/src/_igraph/operators.c @@ -1,7 +1,7 @@ /* vim:set ts=4 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/operators.h b/src/_igraph/operators.h index af4c5703e..0ed19d895 100644 --- a/src/_igraph/operators.h +++ b/src/_igraph/operators.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/platform.h b/src/_igraph/platform.h index 7277e6c05..a2d1d0f4b 100644 --- a/src/_igraph/platform.h +++ b/src/_igraph/platform.h @@ -3,7 +3,7 @@ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/random.c b/src/_igraph/random.c index 61b67b04e..6daa68d0f 100644 --- a/src/_igraph/random.c +++ b/src/_igraph/random.c @@ -2,7 +2,7 @@ /* vim:set ts=2 sw=2 sts=2 et: */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/random.h b/src/_igraph/random.h index 2a83999db..13c10e9e5 100644 --- a/src/_igraph/random.h +++ b/src/_igraph/random.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/vertexobject.c b/src/_igraph/vertexobject.c index f2894a36c..69e084816 100644 --- a/src/_igraph/vertexobject.c +++ b/src/_igraph/vertexobject.c @@ -3,7 +3,7 @@ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/vertexobject.h b/src/_igraph/vertexobject.h index 85180e375..f92550d17 100644 --- a/src/_igraph/vertexobject.h +++ b/src/_igraph/vertexobject.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/vertexseqobject.c b/src/_igraph/vertexseqobject.c index 5183510c6..d751ae76f 100644 --- a/src/_igraph/vertexseqobject.c +++ b/src/_igraph/vertexseqobject.c @@ -3,7 +3,7 @@ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/_igraph/vertexseqobject.h b/src/_igraph/vertexseqobject.h index 449308ab8..b80935311 100644 --- a/src/_igraph/vertexseqobject.h +++ b/src/_igraph/vertexseqobject.h @@ -1,7 +1,7 @@ /* -*- mode: C -*- */ /* IGraph library. - Copyright (C) 2006-2012 Tamas Nepusz + Copyright (C) 2006-2023 Tamas Nepusz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 402949392f20194b1924a5b4685a2959d99f40a1 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 17 Jul 2023 16:25:09 +0200 Subject: [PATCH 145/681] feat: Graph.distances(), Graph.get_shortest_paths() and Graph.get_shortest_path() now allows the user to select the algorithm explicitly --- CHANGELOG.md | 4 + src/_igraph/convert.c | 16 +++- src/_igraph/convert.h | 10 ++- src/_igraph/graphobject.c | 178 ++++++++++++++++++++++++++++---------- src/_igraph/utils.c | 70 +++++++++++++++ src/_igraph/utils.h | 40 +++++++++ tests/test_structural.py | 20 +++++ 7 files changed, 291 insertions(+), 47 deletions(-) create mode 100644 src/_igraph/utils.c create mode 100644 src/_igraph/utils.h diff --git a/CHANGELOG.md b/CHANGELOG.md index e6c3bbb62..157ffdb34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [master] +### Added + +- `Graph.distances()`, `Graph.get_shortest_path()` and `Graph.get_shortest_paths()` now allow the user to select the algorithm to be used explicitly. + ### Changed - `Graph.distances()` now uses Dijkstra's algorithm when there are zero weights but no negative weights. Earlier versions switched to Bellman-Ford or Johnson in the presence of zero weights unnecessarily. diff --git a/src/_igraph/convert.c b/src/_igraph/convert.c index 029c31c4f..b3294e067 100644 --- a/src/_igraph/convert.c +++ b/src/_igraph/convert.c @@ -20,7 +20,7 @@ */ -/************************ Miscellaneous functions *************************/ +/************************ Conversion functions *************************/ #include #include "attributes.h" @@ -715,6 +715,20 @@ int igraphmodule_PyObject_to_rewiring_t(PyObject *o, igraph_rewiring_t *result) TRANSLATE_ENUM_WITH(rewiring_tt); } +/** + * \brief Converts a Python object to an igraph \c igraphmodule_shortest_path_algorithm_t + */ +int igraphmodule_PyObject_to_shortest_path_algorithm_t(PyObject *o, igraphmodule_shortest_path_algorithm_t *result) { + static igraphmodule_enum_translation_table_entry_t shortest_path_algorithm_tt[] = { + {"auto", IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO}, + {"dijkstra", IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA}, + {"bellman_ford", IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD}, + {"johnson", IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_JOHNSON}, + {0,0} + }; + TRANSLATE_ENUM_WITH(shortest_path_algorithm_tt); +} + /** * \brief Converts a Python object to an igraph \c igraph_spinglass_implementation_t */ diff --git a/src/_igraph/convert.h b/src/_igraph/convert.h index cb65374bf..173366eb3 100644 --- a/src/_igraph/convert.h +++ b/src/_igraph/convert.h @@ -20,7 +20,7 @@ */ -/************************ Miscellaneous functions *************************/ +/************************ Conversion functions *************************/ /** \defgroup python_interface_conversion Converting between Python and igraph data types * \ingroup python_interface */ @@ -45,6 +45,13 @@ typedef struct { int value; } igraphmodule_enum_translation_table_entry_t; +typedef enum { + IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO = 0, + IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA = 1, + IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD = 2, + IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_JOHNSON = 3, +} igraphmodule_shortest_path_algorithm_t; + /* Conversion from PyObject to enum types */ int igraphmodule_PyObject_to_enum(PyObject *o, @@ -76,6 +83,7 @@ int igraphmodule_PyObject_to_random_tree_t(PyObject *o, igraph_random_tree_t *re int igraphmodule_PyObject_to_random_walk_stuck_t(PyObject *o, igraph_random_walk_stuck_t *result); int igraphmodule_PyObject_to_reciprocity_t(PyObject *o, igraph_reciprocity_t *result); int igraphmodule_PyObject_to_rewiring_t(PyObject *o, igraph_rewiring_t *result); +int igraphmodule_PyObject_to_shortest_path_algorithm_t(PyObject *o, igraphmodule_shortest_path_algorithm_t *result); int igraphmodule_PyObject_to_spinglass_implementation_t(PyObject *o, igraph_spinglass_implementation_t *result); int igraphmodule_PyObject_to_spincomm_update_t(PyObject *o, igraph_spincomm_update_t *result); int igraphmodule_PyObject_to_star_mode_t(PyObject *o, igraph_star_mode_t *result); diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 2dd4bda16..15fb67686 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -33,6 +33,7 @@ #include "indexing.h" #include "memory.h" #include "pyhelpers.h" +#include "utils.h" #include "vertexseqobject.h" #include @@ -5213,17 +5214,20 @@ PyObject *igraphmodule_Graph_feedback_arc_set( PyObject *igraphmodule_Graph_get_shortest_path( igraphmodule_GraphObject *self, PyObject *args, PyObject * kwds ) { - static char *kwlist[] = { "v", "to", "weights", "mode", "output", NULL }; + static char *kwlist[] = { "v", "to", "weights", "mode", "output", "algorithm", NULL }; igraph_vector_t *weights=0; igraph_neimode_t mode = IGRAPH_OUT; igraph_integer_t from, to; PyObject *list, *mode_o=Py_None, *weights_o=Py_None, - *output_o=Py_None, *from_o = Py_None, *to_o=Py_None; + *output_o=Py_None, *from_o = Py_None, *to_o=Py_None, + *algorithm_o=Py_None; igraph_vector_int_t vec; igraph_bool_t use_edges = false; + igraph_error_t retval; + igraphmodule_shortest_path_algorithm_t algorithm = IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|OOO!", kwlist, &from_o, - &to_o, &weights_o, &mode_o, &PyUnicode_Type, &output_o)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|OOO!O", kwlist, &from_o, + &to_o, &weights_o, &mode_o, &PyUnicode_Type, &output_o, &algorithm_o)) return NULL; if (igraphmodule_PyObject_to_vpath_or_epath(output_o, &use_edges)) @@ -5238,6 +5242,9 @@ PyObject *igraphmodule_Graph_get_shortest_path( if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) return NULL; + if (igraphmodule_PyObject_to_shortest_path_algorithm_t(algorithm_o, &algorithm)) + return NULL; + if (igraphmodule_attrib_to_vector_t(weights_o, self, &weights, ATTRIBUTE_TYPE_EDGE)) return NULL; @@ -5246,9 +5253,32 @@ PyObject *igraphmodule_Graph_get_shortest_path( return NULL; } + if (algorithm == IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO) { + algorithm = igraphmodule_select_shortest_path_algorithm( + &self->g, weights, NULL, mode, /* allow_johnson = */ false + ); + } + /* Call the C function */ - if (igraph_get_shortest_path_dijkstra(&self->g, use_edges ? 0 : &vec, - use_edges ? &vec : 0, from, to, weights, mode)) { + switch (algorithm) { + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA: + retval = igraph_get_shortest_path_dijkstra( + &self->g, use_edges ? NULL : &vec, use_edges ? &vec : NULL, from, to, weights, mode + ); + break; + + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD: + retval = igraph_get_shortest_path_bellman_ford( + &self->g, use_edges ? NULL : &vec, use_edges ? &vec : NULL, from, to, weights, mode + ); + break; + + default: + retval = IGRAPH_UNIMPLEMENTED; + PyErr_SetString(PyExc_ValueError, "Algorithm not supported"); + } + + if (retval) { igraph_vector_int_destroy(&vec); if (weights) { igraph_vector_destroy(weights); free(weights); } igraphmodule_handle_igraph_error(); @@ -5387,18 +5417,21 @@ PyObject *igraphmodule_Graph_get_shortest_paths(igraphmodule_GraphObject * self, PyObject * args, PyObject * kwds) { - static char *kwlist[] = { "v", "to", "weights", "mode", "output", NULL }; - igraph_vector_t *weights=0; + static char *kwlist[] = { "v", "to", "weights", "mode", "output", "algorithm", NULL }; + igraph_vector_t *weights = NULL; igraph_neimode_t mode = IGRAPH_OUT; + igraphmodule_shortest_path_algorithm_t algorithm = IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO; igraph_integer_t from, no_of_target_nodes; igraph_vs_t to; PyObject *list, *mode_o=Py_None, *weights_o=Py_None, - *output_o=Py_None, *from_o = Py_None, *to_o=Py_None; + *output_o=Py_None, *from_o = Py_None, *to_o=Py_None, + *algorithm_o=Py_None; igraph_vector_int_list_t veclist; igraph_bool_t use_edges = false; + igraph_error_t retval; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOOO!", kwlist, &from_o, - &to_o, &weights_o, &mode_o, &PyUnicode_Type, &output_o)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOOO!O", kwlist, &from_o, + &to_o, &weights_o, &mode_o, &PyUnicode_Type, &output_o, &algorithm_o)) return NULL; if (igraphmodule_PyObject_to_vpath_or_epath(output_o, &use_edges)) @@ -5410,6 +5443,9 @@ PyObject *igraphmodule_Graph_get_shortest_paths(igraphmodule_GraphObject * if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) return NULL; + if (igraphmodule_PyObject_to_shortest_path_algorithm_t(algorithm_o, &algorithm)) + return NULL; + if (igraphmodule_attrib_to_vector_t(weights_o, self, &weights, ATTRIBUTE_TYPE_EDGE)) return NULL; @@ -5436,9 +5472,34 @@ PyObject *igraphmodule_Graph_get_shortest_paths(igraphmodule_GraphObject * return NULL; } + if (algorithm == IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO) { + algorithm = igraphmodule_select_shortest_path_algorithm( + &self->g, weights, NULL, mode, /* allow_johnson = */ false + ); + } + /* Call the C function */ - if (igraph_get_shortest_paths_dijkstra(&self->g, use_edges ? 0 : &veclist, - use_edges ? &veclist : 0, from, to, weights, mode, 0, 0)) { + switch (algorithm) { + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA: + retval = igraph_get_shortest_paths_dijkstra( + &self->g, use_edges ? NULL : &veclist, use_edges ? &veclist : NULL, + from, to, weights, mode, NULL, NULL + ); + break; + + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD: + retval = igraph_get_shortest_paths_bellman_ford( + &self->g, use_edges ? NULL : &veclist, use_edges ? &veclist : NULL, + from, to, weights, mode, NULL, NULL + ); + break; + + default: + retval = IGRAPH_UNIMPLEMENTED; + PyErr_SetString(PyExc_ValueError, "Algorithm not supported"); + } + + if (retval) { igraph_vector_int_list_destroy(&veclist); if (weights) { igraph_vector_destroy(weights); free(weights); } igraph_vs_destroy(&to); @@ -6181,21 +6242,28 @@ PyObject *igraphmodule_Graph_distances( igraphmodule_GraphObject * self, PyObject * args, PyObject * kwds ) { - static char *kwlist[] = { "source", "target", "weights", "mode", NULL }; + static char *kwlist[] = { "source", "target", "weights", "mode", "algorithm", NULL }; PyObject *from_o = NULL, *to_o = NULL, *mode_o = NULL, *weights_o = Py_None; + PyObject *algorithm_o = NULL; PyObject *list = NULL; igraph_matrix_t res; - igraph_vector_t *weights=0; + igraph_vector_t *weights = NULL; igraph_neimode_t mode = IGRAPH_OUT; - igraph_bool_t return_single_from = false, return_single_to = 0; - igraph_error_t e = 0; + igraphmodule_shortest_path_algorithm_t algorithm = IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO; + igraph_bool_t return_single_from = false, return_single_to = false; + igraph_error_t retval = IGRAPH_SUCCESS; igraph_vs_t from_vs, to_vs; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO", kwlist, - &from_o, &to_o, &weights_o, &mode_o)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOOO", kwlist, + &from_o, &to_o, &weights_o, &mode_o, &algorithm_o)) + return NULL; + + if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) + return NULL; + + if (igraphmodule_PyObject_to_shortest_path_algorithm_t(algorithm_o, &algorithm)) return NULL; - if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) return 0; if (igraphmodule_PyObject_to_vs_t(from_o, &from_vs, &self->g, &return_single_from, 0)) { igraphmodule_handle_igraph_error(); return NULL; @@ -6219,30 +6287,37 @@ PyObject *igraphmodule_Graph_distances( return igraphmodule_handle_igraph_error(); } - /* Select the most suitable algorithm */ - if (weights && igraph_vector_size(weights) > 0) { - if (igraph_vector_min(weights) >= 0) { - /* Only positive weights, use Dijkstra's algorithm */ - e = igraph_distances_dijkstra(&self->g, &res, from_vs, to_vs, weights, mode); - } else { - /* There are negative weights. For a small number of sources, use Bellman-Ford. - * Otherwise, use Johnson's algorithm */ - igraph_integer_t vs_size; - e = igraph_vs_size(&self->g, &from_vs, &vs_size); - if (!e) { - if (vs_size <= 100 || mode != IGRAPH_OUT) { - e = igraph_distances_bellman_ford(&self->g, &res, from_vs, to_vs, weights, mode); - } else { - e = igraph_distances_johnson(&self->g, &res, from_vs, to_vs, weights); - } - } - } - } else { - /* No weights or empty weight vector, use a simple BFS */ - e = igraph_distances(&self->g, &res, from_vs, to_vs, mode); + if (algorithm == IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_AUTO) { + algorithm = igraphmodule_select_shortest_path_algorithm( + &self->g, weights, &from_vs, mode, /* allow_johnson = */ true + ); + } + + if (algorithm == IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_JOHNSON && mode != IGRAPH_OUT) { + PyErr_SetString(PyExc_ValueError, "Johnson's algorithm is supported for mode=\"out\" only"); + return NULL; } - if (e) { + /* Call the C function */ + switch (algorithm) { + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA: + retval = igraph_distances_dijkstra(&self->g, &res, from_vs, to_vs, weights, mode); + break; + + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD: + retval = igraph_distances_bellman_ford(&self->g, &res, from_vs, to_vs, weights, mode); + break; + + case IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_JOHNSON: + retval = igraph_distances_johnson(&self->g, &res, from_vs, to_vs, weights); + break; + + default: + retval = IGRAPH_UNIMPLEMENTED; + PyErr_SetString(PyExc_ValueError, "Algorithm not supported"); + } + + if (retval) { if (weights) igraph_vector_destroy(weights); igraph_matrix_destroy(&res); igraph_vs_destroy(&from_vs); @@ -14827,7 +14902,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { /* interface to igraph_get_shortest_path */ {"get_shortest_path", (PyCFunction) igraphmodule_Graph_get_shortest_path, METH_VARARGS | METH_KEYWORDS, - "get_shortest_path(v, to, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" + "get_shortest_path(v, to, weights=None, mode=\"out\", output=\"vpath\", algorithm=\"auto\")\n--\n\n" "Calculates the shortest path from a source vertex to a target vertex in a graph.\n\n" "@param v: the source vertex of the path\n" "@param to: the target vertex of the path\n" @@ -14842,12 +14917,16 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { "@param output: determines what should be returned. If this is\n" " C{\"vpath\"}, a list of vertex IDs will be returned. If this is\n" " C{\"epath\"}, edge IDs are returned instead of vertex IDs.\n" + "@param algorithm: the shortest path algorithm to use. C{\"auto\"} selects an\n" + " algorithm automatically based on whether the graph has negative weights\n" + " or not. C{\"dijkstra\"} uses Dijkstra's algorithm. C{\"bellman_ford\"}\n" + " uses the Bellman-Ford algorithm. Ignored for unweighted graphs.\n" "@return: see the documentation of the C{output} parameter.\n"}, /* interface to igraph_get_shortest_paths */ {"get_shortest_paths", (PyCFunction) igraphmodule_Graph_get_shortest_paths, METH_VARARGS | METH_KEYWORDS, - "get_shortest_paths(v, to=None, weights=None, mode=\"out\", output=\"vpath\")\n--\n\n" + "get_shortest_paths(v, to=None, weights=None, mode=\"out\", output=\"vpath\", algorithm=\"auto\")\n--\n\n" "Calculates the shortest paths from/to a given node in a graph.\n\n" "@param v: the source/destination for the calculated paths\n" "@param to: a vertex selector describing the destination/source for\n" @@ -14866,6 +14945,10 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " elements may be empty. Note that in case of mode=C{\"in\"}, the vertices\n" " in a path are returned in reversed order. If C{output=\"epath\"},\n" " edge IDs are returned instead of vertex IDs.\n" + "@param algorithm: the shortest path algorithm to use. C{\"auto\"} selects an\n" + " algorithm automatically based on whether the graph has negative weights\n" + " or not. C{\"dijkstra\"} uses Dijkstra's algorithm. C{\"bellman_ford\"}\n" + " uses the Bellman-Ford algorithm. Ignored for unweighted graphs.\n" "@return: see the documentation of the C{output} parameter.\n"}, /* interface to igraph_get_all_shortest_paths */ @@ -15326,7 +15409,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { /* interface to igraph_distances */ {"distances", (PyCFunction) igraphmodule_Graph_distances, METH_VARARGS | METH_KEYWORDS, - "distances(source=None, target=None, weights=None, mode=\"out\")\n--\n\n" + "distances(source=None, target=None, weights=None, mode=\"out\", algorithm=\"auto\")\n--\n\n" "Calculates shortest path lengths for given vertices in a graph.\n\n" "The algorithm used for the calculations is selected automatically:\n" "a simple BFS is used for unweighted graphs, Dijkstra's algorithm is\n" @@ -15344,6 +15427,11 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " calculation in directed graphs. C{\"out\"} means only outgoing,\n" " C{\"in\"} means only incoming paths. C{\"all\"} means to consider\n" " the directed graph as an undirected one.\n" + "@param algorithm: the shortest path algorithm to use. C{\"auto\"} selects an\n" + " algorithm automatically based on whether the graph has negative weights\n" + " or not. C{\"dijkstra\"} uses Dijkstra's algorithm. C{\"bellman_ford\"}\n" + " uses the Bellman-Ford algorithm. C{\"johnson\"} uses Johnson's\n" + " algorithm. Ignored for unweighted graphs.\n" "@return: the shortest path lengths for given vertices in a matrix\n"}, /* interface to igraph_simplify */ diff --git a/src/_igraph/utils.c b/src/_igraph/utils.c new file mode 100644 index 000000000..2fd58420c --- /dev/null +++ b/src/_igraph/utils.c @@ -0,0 +1,70 @@ +/* + IGraph library. + Copyright (C) 2006-2023 Tamas Nepusz + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA + +*/ + +#include "utils.h" + +/************************ Miscellaneous functions *************************/ + +/** + * Helper function that automatically selects a shortest path algorithm based on + * a graph, its weight vector and the source vertex set (if any). + */ +igraphmodule_shortest_path_algorithm_t igraphmodule_select_shortest_path_algorithm( + const igraph_t* graph, const igraph_vector_t* weights, const igraph_vs_t* from_vs, + igraph_neimode_t mode, igraph_bool_t allow_johnson +) { + igraph_error_t retval; + igraph_integer_t vs_size; + + /* Select the most suitable algorithm */ + if (weights && igraph_vector_size(weights) > 0) { + if (igraph_vector_min(weights) >= 0) { + /* Only positive weights, use Dijkstra's algorithm */ + return IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA; + } else if (allow_johnson) { + /* There are negative weights. For a small number of sources, use Bellman-Ford. + * Otherwise, use Johnson's algorithm */ + if (from_vs) { + retval = igraph_vs_size(graph, from_vs, &vs_size); + } else { + retval = IGRAPH_SUCCESS; + vs_size = IGRAPH_INTEGER_MAX; + } + if (retval == IGRAPH_SUCCESS) { + if (vs_size <= 100 || mode != IGRAPH_OUT) { + return IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD; + } else { + return IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_JOHNSON; + } + } else { + /* Error while calling igraph_vs_size(). Use Bellman-Ford. */ + return IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD; + } + } else { + /* Johnson's algorithm is disallowed, use Bellman-Ford */ + return IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_BELLMAN_FORD; + } + } else { + /* No weights or empty weight vector, use Dijstra, which should fall back to + * an unweighted algorithm */ + return IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_DIJKSTRA; + } +} diff --git a/src/_igraph/utils.h b/src/_igraph/utils.h new file mode 100644 index 000000000..bc39b84b9 --- /dev/null +++ b/src/_igraph/utils.h @@ -0,0 +1,40 @@ +/* -*- mode: C -*- */ +/* + IGraph library. + Copyright (C) 2006-2023 Tamas Nepusz + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA + +*/ + +#ifndef IGRAPHMODULE_UTILS_H +#define IGRAPHMODULE_UTILS_H + +#include "preamble.h" + +#include +#include +#include "convert.h" +#include "graphobject.h" + +/************************ Miscellaneous functions *************************/ + +igraphmodule_shortest_path_algorithm_t igraphmodule_select_shortest_path_algorithm( + const igraph_t* graph, const igraph_vector_t* weights, const igraph_vs_t* from_vs, + igraph_neimode_t mode, igraph_bool_t allow_johnson +); + +#endif diff --git a/tests/test_structural.py b/tests/test_structural.py index afe6413da..319a6deaa 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -786,6 +786,18 @@ def testDistances(self): g.distances(weights="weight", target=[2, 3]) == [row[2:4] for row in expected] ) + self.assertTrue( + g.distances(weights="weight", target=[2, 3], algorithm="bellman_ford") + == [row[2:4] for row in expected] + ) + self.assertTrue( + g.distances(weights="weight", target=[2, 3], algorithm="johnson") + == [row[2:4] for row in expected] + ) + self.assertRaises( + ValueError, g.distances, + weights="weight", target=[2, 3], algorithm="johnson", mode="in" + ) def testGetShortestPath(self): g = Graph(4, [(0, 1), (0, 2), (1, 3), (3, 2), (2, 1)], directed=True) @@ -795,6 +807,14 @@ def testGetShortestPath(self): self.assertRaises(ValueError, g.get_shortest_path, 0, 3, output="x") self.assertRaises(TypeError, g.get_shortest_path, 0) + def testGetShortestPathManualAlgorithmSelection(self): + g = Graph(4, [(0, 1), (0, 2), (1, 3), (3, 2), (2, 1)], directed=True) + g.es["weight"] = [1] * g.ecount() + + self.assertEqual([0, 1, 3], g.get_shortest_path(0, 3, algorithm="bellman_ford")) + self.assertRaises(ValueError, g.get_shortest_path, 0, 3, algorithm="johnson") + self.assertRaises(ValueError, g.get_shortest_path, 0, 3, algorithm="johnson", mode="in") + def testGetShortestPaths(self): g = Graph(4, [(0, 1), (0, 2), (1, 3), (3, 2), (2, 1)], directed=True) sps = g.get_shortest_paths(0) From c0ae44c489c75066790e43242c056319360c608f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Wed, 19 Jul 2023 17:18:02 +0200 Subject: [PATCH 146/681] chore: configure 'git archive' to provide a JSON file with metadata --- .git_archival.json | 7 +++++++ .gitattributes | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .git_archival.json diff --git a/.git_archival.json b/.git_archival.json new file mode 100644 index 000000000..9869b5923 --- /dev/null +++ b/.git_archival.json @@ -0,0 +1,7 @@ +{ + "hash-full": "$Format:%H$", + "hash-short": "$Format:%h$", + "timestamp": "$Format:%cI$", + "refs": "$Format:%D$", + "describe": "$Format:%(describe:tags=true,match=[0-9]*)$" +} diff --git a/.gitattributes b/.gitattributes index c7158f857..56669188e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -*.c linguist-language=Python +.git_archival.json export-subst From 20892ec7ccc53d0a5916005d40df424f5f145d7b Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 31 Jul 2023 08:44:00 +1000 Subject: [PATCH 147/681] Fix last expected image --- .../graph_directed_curved_loops.png | Bin 23404 -> 25013 bytes tests/drawing/matplotlib/test_graph.py | 2 ++ 2 files changed, 2 insertions(+) diff --git a/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png b/tests/drawing/matplotlib/baseline_images/test_graph/graph_directed_curved_loops.png index 9108a760ce7b860295020295e347aa16ac2a5595..9062bfb103f501fc2eac20d04350d87baeb6d53c 100644 GIT binary patch literal 25013 zcmeFZi8q#O8$Ns^kwOD06)Ge`lVsK)Q^`!mN)gJCdDb9%Qz<27uE@A($PF*}p9XsXhaNgeey!B~5*RvO$tnKag zh)Ig=-obay+1bHKT3r0X|Gpq*f6+>OyXg-<{Kzr~l@m@B#eRzXpDsxu(VC)8ZBadZ zK-WELu+7a~S8u*zwE9fwt(DA51&WkbkWlS`!`lUyY*`t9XW0_26G~5C38y{!>-iVA za<$vk-{V^(mT+<&zLl^{n}d-tK_!q9eDI)ycmCsUK}Ep_`I39aeC0wyq^yRddMm{a z%I8mgwQ!V<)}X_a_|skfD26{N#ZEqd^5@PKbW8Au|0!lZ@}DaXQRHhU*U>YR|9rht zk^Hgl8byyk%62YUN&fTNW`FX>|9|QKmzPQK%P-gjv#x8QX@}2LwCi9?!dP#0<>_Za zyLW5ne!UoM(~u$%Tz=a1Z>rOg*v$&((Qiss(J}__brNmro*es-=e)goKrMVnvVLwy zMroU0X@Tot%B@=~uZS>G!%z1|Ya})+QB>!!m}x=$Xm`cHpkzn=`#n}1n>gYNH?c{C zIj6>Jhem~JsI>@MXT@{sr#7|@rkIoz9l6P!5XkFmsGr(UWWI!Qr-+4%x8^xMUMe8i zk54`yVhg;cmJ(h4tX1IH-SJEDYpWuxTduE9G0x3svSFm`E!Id=l-YQ@*KpsYemci! zcSy@Oho3G#6uecm52@<#r{8hDIG`_K^F=e5OMLQ3GIf%f_>0+Y$8U$_Xq{I)-}TiS zxE9)py)nsEZ@CwpE_UKXfAizOwL1(ulXugVY06$^r2M&dm=zhe6}mO82{pU@J$dRx zvq1BXwW3drCdylKY?_}Z1X?boEQkk=JngOsNu56?**962nDef0+>l1oxfd^!rXQWG zb;#K5m!`XWUZ4R*4R@{DK~b{jX-`i*kCjWEDq1Pezx{CS-a^wqQ^QU7cUcrYrKjB4 z-NJm#WR;uF)ue^*JOXTxpn9zbehkzjyhVq2!xBU48v~%S0Ib|NQg!hNIsK&b=z&x^kIg?OMxM zAE-`wvUxn6&eEJ_MR~3#ZhWQNBE>)GvfueNtK_-@F^c2vdbc1tYGiqb_t=flJ9ly{ zD%ezOGfU@Fh6i1v@95UXahKe2ZnrbIBX}&sLzLoRB=-K>x}(HLO+%yc?Trm%v$F6C z4OMg1pj}B%#1|GiZfua;cTR~C+DPtg;PCVF=7jk8pLdSSzi*mYwQ7~{rd1DVP=`&g}T;GxQG#|6Eqk?q8aXz6KbI}#ESwo6H!u&R!!n#yC_B>m1ZD;Y6_ z(Wt4tlNwb}*Xu5uzZI-ps#pi)mOw{lb=lwL5cTd#VrnBr)ifQ2s<^HFJJ0kX3T(h%pH>oL|dvg4jtKRQ-AN`74bBoI# zb^gUHVcTvJ$hJw?L6e@^dcDLNGzG3vBitoVmGIG+$u$L&*2AczC3-%m3n9L zSM%dZxAx?3i5k|ft}i0iUMvX_n8-1_yMFDH)`)$2&rX-~tGWy{Ho%F}3x^8S6V$`S z&Now?daw}x{c+{}Pp_q7ci+}sfZ(y0w8mQ@jbLxscomG?xQ=vgQZ0o*|G z_GEX6g3Zi$pHZo=Pf3MtnxU4es;W&>Ms%8fDpzV{ESCM){hbH8WBkm{3be&Wr*95T zF}3*W7TSLM?)e;H8UDkWMe_w8?rwjatdnTwRQ0Vqc;FKZ5v$}pke(|nB$PB#x{?~9 zV8wANQr@(umY<@M8&VB=y^bC}d^I#Qv_9XdS9W*>2dCH6P{W(Q*GO2j?2RsUIN);d zU_HNxI;+6k^udlhp)b^0Hm-ieoAq2b!`XUnaM-Wu5W8GFw!g3Q<&}crl0RRKa=oX2 z+jNu^OFRFJi;%GOq!}<$Lj;K&b@}~WwJJhF9l`k1)VkpENAdCe%pzU3Y_~MJ$FaqYf68(y;v_rce}Wr zrC4I!gJH#;9>32Z)8%Ro$W489vS}-DdDuhwU+$DBqNq&VCG?({Y0CHSXUD{gR0sJXSdgopok_1ACC(m5Vu zmc$eAy3;%cFew26fn=@6N6ga19I|a1KBQBtSFe6#73-rfYLq>4T90zLfb}Yq7;G;# ze*gY`%k#79B^8I2l&s-E1>HAg+*?Dr_FC5--n@D92mI4CAznh;(#5WLn}q)F7dy-7 zs_ySPWZRTcHFf{uj}P0oZ&!8e@Nv7nf3~_KATTi1vHNXHo})!cMz5|jrNo%o#Yp}9 zS@T#;RaMK#$f%^^YCwSX=ePqw!NJ{;#&^;TpB=O>8a+~y>9;U9rI)HNDz3kTYC1yE z`BTpQ_1mi+>``96c87!QSARMN=i%Zh;VoNUsfWGXv`r&Q6V5+2n|8kWIrr`}e+eGF z-&w2RGvln6tX=-sZ;J0YUXz(xzka<@p2I`SkN3M8^LXSula9yA3+p_&9xi<76f3X1 ziPz*W$G%j2SzW>KX`I1 z@(Ciw4=3O(=XRT`FWZJc5Z+++C9zF^yJtE0YO0$GR)H0+Q-ML6$a-242Qq& z(uCpdJ@x9U?66__iL4_49d3Ppem)M-Epm5!tj0*Gl4n!ZNYoiOz>EQ!&)YORiviI`eYr`ncCV~cbDCZ#Yo&=Gl+6` zamlgBeYga#PqN;=3oSxILho?*@MAHuC!Bgex%3(5*l?CwQR^Bb!==>?unbn z4DW)Ca_>EN>)#L|t{8sX^R7Z_bN@`g#DCE}oC{xmMID9uXmbO!H;%Eh3+|90#{(kni4gZr$u5;e<-4g3AR&$&M}v!s@6K1>(U z3oAf2zwKhBD6C1SsOX>yUVz8*=jJ=Y^qnENodf6p#Z5Pn=a7p@Vkq)(GP7ohwa9Jd z+^}JwHXN@>$FTIi?kdU;MW}z}uh!h-b&1ETCv0j{lTGrU;~M8CQ#Z$my|V}L;&?fe znQLsDQij?JBgsVvDY})PeW!nLRYghZ#Crc$MXWh;L>Sxr?AbGxWy?lSyZC#EnH41g zA{C6!b@MK0Iy+~pa?*`(!K~?iz&DUq?%msQB6N7yfddB?x7%gl$;gNUT#iGu_fvFT z@l^XjEkb&AGLpKW-jXt2z;jy8{|kt!RS%;p>H7ZuPJdluhnJgmL+#qWQuUbDt@Mo=Rvsla6*f?SDs)miua z`SZK??mZzJ|M9^dT>0=2Q}g+Kdg(?D*uMGh#8}^2Bu-p;EFvCnwRoixuGHDc7AU_k z>qLSFAbh z>pK7}6LV7?yyhgYeUSi@8HGdA!~krW`F4IS59SJs zh)CfS(f|21-$`l?tJ~jET3X;X{ON56H8q&qA&fO>eQ^P=h0Zf<6xrO0E9GqZO@q+=1T#K;*3 zuNA#$Yoe_kigm~UvhqsaO$Cs3LL3M$$jCqv8KQA%y z}o77k6A?u0Ej@ zzf`a=|3^++M7A3tsHrwVorLWUzXiFDZfUonw5wN_=p|{A*s=2!vGWjx`7a6La&plX zR&?JFQkRqw+tmP-T>CaiU5r0{`ZSAd@B2I38WNB5hL-^B|4dGd5gv&WiuwoT*aEXk z14NZnS5T0}r`LnNFxsr47hZ;hfCI?nttEQ$#Y%tu+Qx%1k z*mx0gaZm`d*Ve1+Dgb+cz(^(b@(RWY z7bNG?78a&6B#wjo2+8C;=Q`Y;4iiA7E6`z)Vvv~uIGbbF7E$$tGI9R(MT;$PYvN#f zDHlcKp=Xvo4TJ+otf|o&J+|qq%daoH1o-*CXCFFvF#B{lOJ;g+rteJOHsZ|Y-lIw- z6?a9A_2IbM&dz%?zbtXk(@5OYG++Aj=Q$D)cf#3~l%6&-mQ4Yh7F-S47VBM`I)JS` zaD|Dz@$PmVe$^8vPDCj9&FfWfyyQIoQwwFQkf^9=hsCQ`ulAn%%m=9KxJ8c2HQce5 zm>EchkA23)o;h2#Zk;G&V83s;p2~7$S`x6&x|Sa`zj)$cRUvQqpMh&r9%DU@zHiQI z#LA~5iJqIEowmE7e)Onr2#*}cs#RSHAE+gvMLf~R)YLBK-(lr@x>8Z|9L!1^g%^MF z*~)v|l6Fy>2j*RLJi&$_jGunjqNH`?$hEa%CQ0k}SmsG&D2MQnP>gz}oBUcqk=d5r z=fCVkEU$_WqVE5#{8aOt-!=BWkUO7ltmfuU>5cKysFs_G;_ridVv%p9=%=T^LVc#% z+@u}9U45RF#mU2y(UN1EYLb7^EY%9M*37qH@%nUQ$%YKmR@;Hu?R)m`MDPS0)E{(H4RJ;M1K5r&gXhy3F{ zi}`T~i;7l_RK54h@B@W5_q$S@&|EKk#%_r9IBs#9_z>2ReO7&9s7@JdlEJxi=N>k> zNk?OoN)Z0}RZ~z{wgdAXto{R1%9Ph{_Suu;u^An{e?&XFhw{4FSl8`TL>wJ=KSp)l zL@rCgI*IuJ)#;#`JeI=jzn+;-D7%v3FReccVv<&$HnRHt+`LJ_@!)O!RO!}1n=Q$I z$A1V-3l&po5d{mFB!Gp@gNFhmp-qF27`vDrw$>loZL&# z%rf|!3XO^JEob^ZISQ|8NuLl$8s;+h*4iLx_i>^*N$YWaiH}!q&z<X z`!TtmCy{oD!J!fRE_~?nqr6{{3~{oI3NIlqCE4bD2T)??YPux>t{&6_lr@~Z6YF7- zCA4qL!^F+aj?0c-jo53g-6`P*jN%e>voS`_Ydozk*-u6Ioz_(^e%9wkIW=9M0YfIf z-#Okh5J_9JP2=YStC$)@+}Pe;n0hTBmv5Cv$)6z^B=Ev0K0i?;@nVwVfPfunyi{zC z--0je`rU65>|y0WK|#CW(ML8DGh*jUPz(DomXitmJ~}!o7MW0pdiT$8X~$sUW)$?b z(V$^}y$;OTA!D4ow#ZpE)U?(q)a=%Hwcossc+to!y-Wp%PXGDoYQO$3&nygzo*-Fx zl-%h5{P0l3E{ki8X(#Rs&mh^PWA_k;v|hd}lBD-v_)_eZ%i~Ks6_dJ znU!iz4L#ByBAF#S{`ruHS(eLy{*6sC`iS>UQT9C_A3QfoS37pB0lzqAs;r{&7g-x* zO`#n-c64-8Wn3hxHqpIs>iMYE{QN92?p&mgReo|D4yYx>LYM}dvy@*4vR6B$m7mrE zSa$)tZ90}c79`%Ah7@W8P$+#R!XT2`TN0`+JpkiVif_kyE_y4C^ID_#T|xE6;Wu$sCWF>P}`Jt z;xTA$bC;WNSex(fZX0-e)d39=Ydm&$@5ilry{-ppFT8vy+?4mMF~eLuwLv(sF8S_V zj$C$HVFZolJ^_RMZ2y6t^1B@qlVM=yQJ!G`K2(6m!+M$jqX3FN#AANCH^+6*D7*y5 zn~K8vzdF+P(<%;*`1WEikzKoLe(VB^k!*Q`d;9qcHlHqscag@KrFWeJ<3Z&J%gdXQ zBKo1ZxHp1erDawh65^D~4XQJQ#97qmO$qkpL7Xhhw!gDILUDlTa<9L&`B1js!o0~G zDEV~daGUz1hkmo&yaaO!sG9rDXn*#>$*#NG!kF^!}tP$ zq&WB0+EqJ(jg*~wLs1!n3E^hixTjM~xR|N->C=z?MwPSVrrx!tP4eD(n%zhSZmOX* z#`%x=qosX}mMvQrI`6)w>GoD-gwdENzmkP{ud`>*n!3bXXnoOlZG+v;xYN{#0_bgR za6c{}OH^y|<#E8Jfhx(4z4^N-M%Z%`=U#u5T>W4O>&eG6>f-NDkGLjisy=9Lmbw69 z?n9VJDxwBqAo;h8h^UhufVz+rGHa!56N?b#pBgFSmQi^rx6p04aZk1EV^BN~3_1NT zZ}Bf1__~Y_dBgzR0|LE_giXE5%a<<+THPJ3A$8{0o-3v5!mc;msspcHP11;#PSHu! z_+)JSDMl_8z|#f}DV12nK(TC-lQTu(FEz-zVc*Z3CbPOV$7N4}tYSg=o>{0*ZP!n` z5AG!y{8|bii5SyLwGST48`wkb#`SM|(9EkHy^0)TuiH84UkM~+av~d>=+Q0=;w{>3bRjpivDEye)^=pi@hm4 zTs4#@+i<*levTxUlS-7o48b)6Z^mmLEB6-hFHx+4B^)O~zrQInlU-n9?6;AI>J2y{ z=Z4gfdtwv6Z9s)egC+5t{MA=G^=i3z64+TJ1wMuSf31`!M5c{jlc{Hojoy>+CZjFZ zUal{$v2E!25k^q~TA*2B*p&&xeTlJ+H#f-~O<`8_h1bek{FxlIX^H>)Nb{g)ySi=E zU1ukUrx7l{l5o$k^3$WWY7}*R`bW4q5c>DpDX>T>D0_N1mUO1%G0?}>09eS)ecZ!s z|Lj~bSC5;DXW8kRgb{~gN$b^J3}C7d-7^XMk}&*|iMJk=1ae1N1G%#R40%(_i-w!v zmXq5uj_^b@ZSFgzI*e|Eqg8vx=k2mUWV^~vjc82_G&PmZPl$(?pw0pg_^@~>MIWn! zE$jZYmxYm9N2(sro(EPYGoDjJ z>DRBX0E!whShA894^vGy%u$1L*A{&%cd>AIdPIF@JFmrH=smT5WCgZRo9y$+n>u_` zedmhiE}K*StA>ikH00)K-C{lf5`@nN^vT=krPw*Q&%QuN3Mu13~pM#>LKuL63F}hw!&OwO3TwZ6t(qemWy$I$P4Q84y$TC8&(Btx%+%J^d9+EN zTwSu^N{2A|fI*xhg!&1%c5Ssh#iuCu``uP_t#7ECA3b_qwSnrC*^S=x)Z6Rp9~;{j zHzZ^l=h_MCF)Z0f`gzREnZ=V41b5e!ICNbG203$DN%7ap;gg_$#)thDTBA<;Q;Ql6x{A}! z&JoDsgYu$@iP!t2w$eYM4u5|RY#XSXf^oQtI>=Co{%G01xKTe+AI()%?+5jnBY&u(1&tmv=5m{F=#CkzL0nSBOogVT+egEXTk zRW!8pL6WL>fOww(kprfwGnO=3sfEmg0W3hv5$YX}L*!GiCB)(v79T#35VsTX!GdwQ zkunBST49^!fl<&3=E|{cYTRI7)Kx2qdU6iv8^M9bP8L>?2drEizZM{nX<(k}hq zYnz@~C`(0aU@g5DcdU#R>_?tm>6~kL$^HB5u#@EP>8`{=fg^kN*OzAn(>;-sx6O_Eut3z#%zXPijJ}|_*@*OiD^Ex7I*m=;<@IGioMA;VGOl#mR>>r2d zl9fwVU=PcLfPg=P1~i>{dvjB&sPPL>zM9VDVZSiYQ#-ZMH?rCfpxjq7mQ}q zu<(*4G}aYQfHzX<^QM$Y@a3~j=Fip%}qa?rIB<- zAXix2JWY-p8>O^i^lp6vU!FZiP--Wp&74Oex_kyRXm zr35|4tEyuuKU&AidT6uDj`;u0N!LzpOAINf07XT>)vMpL{b*fGaufABg8EC`d5BrS z(MA{%aNMlz+lx+sOWm2wT{cE`{uk-v(*xs?a8*K>*5RVDoAAyUCGt=Zfs`456GE3i zf1K1oF!8Zdu zdDoNd_*pLW0&Tlq1&H~Gm(D&1mtc=b*!91QNf}lZBiEWR+-w!wfH?4RJF^g3|7)+i zb`~PSvivF-$f&!%eviovAu9l^uy>l!x-D5TiPi8n1s^YQ_5(+F33ze94qw#NWj-%0 zxhQuXO-;>D(d;}g=_%Tkq$Hu@iAH1Yedi4|I>5dY{upiH_isMPB8vFTbOrK`SBjVZ zM7@k4qhIJcSYO~`iv$y4%ER&w{ncnoE;@I0M5En%_BfUJj@Kwxi6ZE+H@~-yw3o|hD_nK`fc5MY_87whxwi=GuzI?e*_`YJRAw~IJY`u_c zji@8$<1;f}gBtE=N|FOX#o+u1RVd@FQajT1nsd{pbOc^7`J~?Pt+L7K@jeF2rbV{e zmzplnDilm+hKi@mOpDxW;)7T$Q3&+cJg(5o+;03LEr?6px4b&mZ{9;mS$P1(Sd17u z&s(0AGzsGI9r#O;ty>SlGhH>z;nF$Y(-&jEY#T*D?gQoZp+VvF8)i@jqe0!E>JyR7 zb{hDhbQ%8_rSYV%iFv(gB`v3tfjROs9W_tNP==)|9EdxK{8sQr@-@vE*#++eVLy}7 zbtn{(BOR@AThv6tC!WVwTCvO1;$T?6`Yv{D2JDd_TT8Em+UQ$%x9JQxSUuei$uqgF zPJ^cqfr46c?S~s>(Qk?-Wo;mj=evXjq_;*ik628%$%at$rEjsk{))dpA7W2NCKvNT zQK7W^>WWR$^$Eo%U(zcnDRH`&&}cLht9V(UhXSPcOTAa!Rw{Nj!K(cg$Le*CC#&8O z6!UR(bQILPlM50#uc+^XWflZD&p(eHQBr~+rg;%s1jKN`k1m;$j748_b=exCP5Pdl zg+9=&TPIH|Wn5$D9jfI4tzFRr!OFk{tvjS}yed|q!(#052s7V^ZTK+VDMUHGTSZgt zUSff(c|gqm7s1 zs7(99!F`$OYe4AM5(_VWvGyz2_J3Y1y8QHe&V%|0;`}`7GXrKTk0ZHE6-g_wK!92b zd!nd#NE;So2;R+{z`Tbp=UcMhCzuv{x@2a!O&{_8dzdkZg`Rnqo2cAqR~l>x8Du&` zTIm2Q-1@IU*RmRmh@&09%f)AQGp!|@D)~oIb@ke{eqfc0QX9Ha*6KpR(z@-I`QM=V zQQU+*c(A>&ZRmG3kmkjV<;$1X8JPPdfDM+~cr(ft^maqM>YDJxb+V*zviTf$siHT) zYjNcly3l%~6bY(?0+94-zK_ohm@jDK24Ft4lJYmP1;%*xZ@&ib)QS&QNj-JS}%pWHLfEEx& z4|`msqj{zU7vPHlG2O?(YOAIg<)l>fC_!)6+2p=tIptpjjHrPYt6SfOU8k?2=>J1s zZJlF;>bme?11B&f*a|M2nRgfUY-G$*j+o7TRL|P9JAue#VqhWc%nBjD*tPVxBT3`ItIqLe_Iw_g8nks&vab`Pc7i%F&`gPO1hBD<}pfZYT%fWVwL?lSbXc`$JqD#(ZEQJRevMB0~}ARxuq z$-D~k!~R-dh_Gb$NwSb|X`)JKif@mI*#_numAo+9&gKf6Pb6eCK97ehpQ?TNZOvwv0=E zyyrx}#~C|!HYAuEa(ooU(T+CmBQXBov%$jOAJ~Rc>Z(D5Su-&-b5KKy`M^E3(5GRM-BuJl{He2vAXk4Y$g>KwfgLkJ%F8vm z5Wzse!&_iFJKSU^ISA3SF zN@N5v9|(N9>c_U+{5RK7?)S=1*PyCIft+EIyj|ysN+|f6af0;J%7eHkKOZVMHD#Be z)*{lE{rVwqw1!WwbN{wNQ!9b=JA3!-(TU{Rp$WROp4Mob11MwL=m;hcLb<~6^0#ko zKHlHOGwt$fF=Q>StvKi<1bFAZ$URm!iDoJ1e2Z?i{MhwtCPhgM8i{MAqx;4C1b@uG z-E&aeR(0W4_BI*gzR-iN!}Aw?7I90S2}@VHjm`A*tUuX-)JN|7IV`{W!Fj+3usKqtQOr*H7H;r1}Ko+(Q`#%1d!NaD21Pw4;b)F_g8Pt$L+{Ooy1V3Vx({-(`;ji7j-Ns!{9(}OMWka>o2qS(^*8|QW; zUvzj16_?eQh!M8`9;o^cu&(pIt%r`SFw6bBEu$)O-})k9*&F{eho}3jtWv`+xhzQXAKoQuv@UN;5m<*( zsBtL1T!<=uqD_(4FM*Vl|LT3Lx$@z|LMb+SKAxTa*VgNfZC33#d$zByr;62RRXgMm zi*V;wq#Q33v!$hFKiC+ec8G~JK6ohSaBXI2iu;Qq*<<%~x5%0xChR#W;l2j!8i7^R z_q71(adEGFHW((TaWXP8T89SO6hs_Vy@PhZ{kw$DW6-}UN&Mi;RW?e|4jD!_RX?D$ zcoit-B%_>hBh6cE?oZN0BKZ35zkYb?^>xqACMTp4JidK{iLBe`if;I12J4a>cozF^!7h_K&7D3x>XgTvlRczfVVPCU_vzt0t`jX){MNxEbq38fLYV`EvrB)04)36v^tYSQl zKqnfEI{84{2lOGcm(JR;uT0Vq93~RU9@{kq^3D7r`W6#I+WLAUpGB3TV zxRBfS1fwDQo3?%eC4zS6Wx?YyY0X_-HY+!#{RnOSb5KK_dvkJ5ypDic(tLVue}jQ} z1Nz!Pg?+BYLJ>PO66=h;uK91-EG;eFJAl$7lE8o-8j6O!(8r;j!s&jK2%5oAg{a-z z;n6U_wsC(PP0Tdgr&psP$4H{y&Olr>EW^R)MSS{9cT`Ay9AER5%ev`DSW!ykFNp>t zX;bD;hkh%A_=8bLg3PHAor(}%10an0QojY+*UC_|5hV$r7MeFOh2oJ{%bQm4hUz{( z!Wx!ps0DRQV=}5;ivtHzcJ$43o^;7E9QThu6*_dM{)3I)8O>V}>PA}69>sVLNe#{q z$uy*$*wbWs@3C@7f0%(;4Qb?|e>l3wxucx86{XCF`t|IvJ1PrkYus}tMXb`#(qPar%465q*Z^39s#Ne8YhozCcj8q~?UDOpDuJuM>K z8k18-t1)Ap;(WH-u$kQS_d95{+(s2Dzc1y_N>b)iBaXnU+W0QCOR=)AE0&8F#bLM2 zN3~Mp;^Jh@-$z2o2t`w#UL`3MN^V}?@ul!7WIQp$wz(K)LFaWKzc;213R#wHp6lhr z8Yy0vnQ`kmlu=C(MUBmR3VDd-*hUmLm#QN zTVRU*T`c5o>OPQ1z&5Us83LHf+H)7&c}WRGc^`#BhIHW3uoS5t*@Zl{C~HHNO!_}) zDX99%hDw}%^Ownnmu+XyP`BszcbvhO!DQTro?ItRs?+BmYugMA(|~9-Hv5Z^DVyBB zYIWwL@sf%bdlKaK0c@cW21MnW+ zE8@bmVx4B34|ho%fTbPNEkrKc@t-wN=|s2%T~;QHHx48x8invjzgZcrZ0S zGku9-b7*)Hi8-qDAGZy@asSBNjEM*z#)w47k5FE^XUqdMn~qAn83AL8m%np;gQNzO zTb~*hfa1@g_90}*GCfWWNTk&Npc8SouFu(vC%8Ox;DSDxMT3@d`K+fo2kUGp6Xrml zqHYk8mNtTREI{24C@l=i0`xQP>prkL`e1i?!d&MS_O<6?6xj84m=_a zkTHf`iGh$c)Cy2r6Th;miE#MCL^Bj8nRvTB;Fkk@}5&3$>TA2$I@lIen>-i z)n#O4j6uiDAXJRW1wzPyc?L{-JwZkj#@mSKr#a*c3JSj6I`L}%TB`#*9~itP-PNFvqtNa5fxav0 zaX|+V0}us0F4&g|lQ{&-+!zR>*9Z%9BN`@v z)%l5rLIetGNbG;hy?{7}Tfx^mqv`i6Noe$ZhkwiPso&f2e!}-6Ak^7^9XDehrH7EP z@Q15GK_zIi_o2wCL&t>-Q4pmQAr-Yss9a^jC_q0n%8;{6+ zvOr~8t#UCF{_ek06l7k}MB z!lL4413HN&GlXq&`T6Km;)4c_D!Pik$SWX(vRKj)hA^oqVK~NX zs3uCv>C1UG_f;V$H^;#&C_dGH_phgR3X!BABe$ek>G0ncK$`gvca1QZjd>_Bv`6Td zlifuzaOna}C}O|kBlQl1mK5mFLENu&Cr^xSgnyX?QQi>d-yUc&4dhdF#`qjSqPPsV zo1$nCn56A6i!+Iz62>!1Z3?Oe-hxw0`S>&2Mg$3aw)U<9V5J`O!4yvK(;O zQ&O5b^ag|wXhqw4uffxi-K_{d5ZS{0-pu^j1~eBn-W5%Q{Pr^s)W2*1&nHh z9ZCTmPtO8%-Y$m4!n7ETfsm7Q{`NDVnkAqt4lhBGyb3=>Vrch9Tyufk9406gUP4+) zzeX84WoY7Dh;gNH?#tIww0p1zTQq0Hd_Z<-BR|4ggwVm8<$-gRNuuwe1sT6npI2|R z8yVJuL3A$rH@wqGnGeRSV4R2%CEMK}eZKPA zKOdb%^CNmI0|7v1+<~%cl$TRt9alfWk%Xkp zyapx06~dv}%0Sx}oknUaF%ZHr2gRVL1o^UPqAA*NfClw2(RE}a(UB(=#vRydE|!VfvS0jYH-U8zjIEtp2{l zb<`6+^0dBq|C2GL@~#b~etr_?zkG&(?!Exw_?0@)_Rk=qFC&&%V`0a>PQ7{V&pML z*lL3sohOZ%dJ1kQTGnHCB4C_7nZ?6OFMgdhvP!?RkPjE=K@b}#LhoNjdf&xRA&B{) z*Henlv5*=JasvUmn9cagV*vX`KdxpuC!Jy^$oE)vFPMv<9(`OAA=mlAPH&XG&x=%~ zkH{A;jGr7syS^aX9AjpS*2C)mi1ci?hi;u6=(7`g$ov7zml`!TeW-hiS5Q zf-@BQ>omz1(E!cQMsl^)7NCN5!}+v90cUtvp?c+EVP}_2+Cq)kLsac-9kOoMLEyGs za1EvPpq7$Rj`p|Y3~(xlpLqUVPl1X0-hq|LM5OqhovNGss+Ez>WEH-c3hZa#J)nk0 z80V^0ryP`^;D4$LfOz650{SL!;tENP}=%|G|VPRndoP`Wb zYG zZ8^-boRWuAiR|0gm|&0Mj)Yn+ghcrZ5Nh>vY)Fmt`*RF>$T`!Y0CrVj0qdyv%xI0X zgYD^!I4A(&Jw|*jHCqOn!=xq3m5pdOX=#ATWLQ*{El_{|M&Vyx2HfgK_PGNumUD4z z*p$97KUEqdw1%2}3r>^t!g{mUtX{o;aHD@K0-(G#Ky$%hqjAF?8RI=s8XCz?-FS`ykKStJN|HMX>yzg@OF5MQToJnykaZ~Jcf=w-DT^HBS7AWYkAE%BiQ^j9J zOS>N38sq-zbryray(gNdrY)ocDiuJDc;G>!+}b^qH%ML}$9ByuP;zMsX3D)R~Mj}|7qmezb9i(oKZT;s#CU)WSN?R!bi4|;(tkE*I z=+S$4NKir%nA1RPFqv^5XHh)0sCz_}^M{?MekViYa~1B0=yU<~@P6nXmcqrAs!{No zw(PO|xHEY*H4kZR>~4!0XNhd1hF5VDtN8<%7`J15K8}+v?k5e-ZPLyR9!?pBKEW_F z26|@i4^0D2saM*>f)5OY-K~GsSKqWjk~@0~G6PJ*mALS$cr}W)248)Psyt`m^Ja-% z?rnl>f&11dQcLc`0}HZ|^nLCK({7DZrRjoDU+?Qcm-$(bD+Ws`r!Rx9 zBos;wVmTJ^xc-u|Sj3_|kR9@?9^qY1>-F@@V5jDXFr#+S+Hd3~69QowFH+#19rqMm zeb>#kpQ~6{kP-T8!Gxlf0%KbPvPca=b%U{kk42X$+NP4nm#hD}KHF{fX4#b{x#@)k zF>uW7Ne(V=cuAFK-PC zUDMV7fPIu83w!;}=PsT84)@0`L#>H!I9nwkK2})2UNrY>=s*@Za01$Hf_yJ=()sr~ zev_geFNrk8luzq$fx0yl+q>J*7v2pPTHt(;f``t1vI>M;BPVF|W@CIh0n|`KvQCA6 zKUL;r=JA6we3AgblqLS9po+ae0C3l*=!vA?s(RxZ#8cIl*C{9S{I~!8>OdJ~U0G8*6Y=0cH#x}K29|{kBO%5}gPybUGA9?vo z!%NFLrn)Ej-mVyEBZmg@`i$Q;cG`FDvmzoQSjWd2<8R%P1r!>W24iV=RH9>&ZX4DN*YDh zWV&YqIX6LSaF@l~Bt%i5;j#{Fv=fZq(|I_ z1qPb*k;t{x)Pjt=A3b_>Cabv~bM^rLxlN3e8x$~w+0E{3WvwtoRpg_FDwlzj_IxL! zv$?5xOuh2_eK$K#hNT-E-ymtPucD&zu=nG;cc0O{Cj+7X9034s;4FR>vtjhhs1ReY z-zW%*qg)}s6xL0G2!x`iqgx_BK<2aC23u1-ET7y%!0Njs#jX;>#-?u>z+#kp>I&d@ z&!rPi82$+*R57GpXn=`zbbq)fDuUs0=ud?)V7)$a;z z#&754?FTsUcy^GQx5Ri-#2zaR4KEap!jRnm%}K}1f$b~8VILZ*fB)SwGSS2>Xni%l z-|qUtk=m@a!E0rr``c2(+kJaCK{oJ7ro874=71qbNx^+^9!e$#;JLYlaUUc%a(F{9 zC;iA-#5FR5Xq|h$SsNp5B$Hmc3S@E;N5x?Ke@b)%w?iWrj#n4OWBYx9)-|dC* z#i9FDA}n)kqT4c%0)Hylm!`+a6;GR`U(Nzz%(aWgESNJ+sK|XQ$j|>18=-gROuSnV zL#Gqzl!jOJzzcruVIU`j&3-^8zl&{jYxmZXaUH(LAI8e2?-H!EStC*G#EzMoF3oFg zVyZT+Pj2vd(oT_S#I2E4H^_k-r(Q25#{z+1ak4!R`lB9TA#A(OTlEGyp%37A8j|Z4 zZeAQj%bdsS*Dj!_mFEcfP`kzI7dFJVvOu>EG?{4|n-LvILn5Rz*i6@(>fh+0Rbg|a#ve& zCMkN3y{h$qDps~%pVJ}Odl^z{%BOrV2E4r_3-{R)lLEv{iJMe8J^kjJ#z-3r0p3(jC!S2*sB%zyfj2_k@0G zwhvJqie^m>FR(^rD42MGGwMPfN2DiFP(UE1pD!#N2$|MG^B3wD%tPP1bDvK9FEj>z z_%%39G59xws{$M@4<;vu5VM39(mNzo^Wo+5`yz)*{@BGr3M3RXKhuLYg^wP<<6bxc zpFg#8@c;=(35cJ{`$%_mgB28j{}3gZ;j`22A}dD@kpcmYs$1lx{2%#K^kp2F0G@%q zEG#ti5#lcn070>gTamLd77t5croH(1@hAp?e`G6PU-u9ZB?7^I7X8vVm8Y$Pgq0=N zB8~TWMK#!jVNIaOK`)}KoQ1CAH$Jun9UygK$QOA7FBim*>KZc;A}~A!i2sertOrRZ zNoW+bZ)X$w_766>*aG9N0Rq7cH#HxKN8JXV1|0@ftYQl$Qj9GiCo{vIsUwz-X}c)a z>;@+S5Br{7S63$$$fS51U8K&e7xo<_b`jY}x+9Kz2qEWjpr_)QxU=jGCe5YH{})ZT zDbxUTostAtVXngmbfevk;F~w~A?qdmdU3s_>v|!DAez04E&ozQ*kykau)?M25XfUz ze^K~xqYwoo)O?GF8zt{9^AaolqeXa~SoyX$HWZ&EJu`*}K(kmw?KFdG3$BFh3#Aa5 zc7iL7T!+9?9|seh)9@Plnoo|Nfd?w`UHntpfsi!@1pQQJthPrKtRI*MEMub!Xdz7 zUQ(nFaqqq%NoE+L_PHrg9A^o&atmqG8l#A6s;Wfx`dcmoRUYn!j_=l9i8w{E4sT!7 zjz4cJ^Xz)YP34hOU))tKEuWwpL+lfkB4+v_^Fc1>;NnWe(NN<0%zjTX9~EBq^5qpO zh+MIbAH9ZH-t_8SzNo zUobaHP)cUW%!hPGe8B*=&&kR8BjH0QK?`+|ie4n|US>du&X8XnrRF3Xz|Y&b-6}S@ z31I{XG|{B?*%5y9QNDcn5;aM5VXbzBRY1>Wq?a{fK}M8uPSV|&n4!izG`Qa*T0>(7 z!w=Yn1_(f+WMWktJ5_@0PSIh0b}R73&Hra`e{Q(LEQM{_1@8@)wMK#??@i7TQ>4g& zdPtjzMA|Bmfkh>z*_gKe(wmdy_(W8N7hA}j1jZYP2YbP>{5Rsrj~bxjy>PDFwoFQ9WlmPtqy}enV3$rK?7Rd2<7I-22(Ei^!5C;! zTz{RrnBT0;fBB$+T0FPV-@6cp1d(II5M;s)%FNUQSU6#q&fu6t`1#)ibI#=Au!@5~ zIF;5UDTtGqB9 zY^jm^I2O)lcC>;x4tn>$<-~BJAYRL~z*!5So=arh6lS$JLy4ABxRWtOLlc53vxQa5 z|M|6tKo%snX&$Q_BfJ?0FK^~*0X6q$2RoiY_&xWhW8vTRAT7>yM9qODO>Tx^!_LMp zP>GTJE{uMnTad^%tOk*`6Q2L?2I`;VBA=jW05G{jkc-!pUG7_ggu#l1W5BdGp?|&? zz?mEXKu&5S4R_4$|Nc3P-U{h{WCIpmXf8UTj6*0-02-k$*q>uV4l*NXfDEuhV@wXn zA(PGLSgDiXajCd>1T2;K6p~x|{Bg~F`?kD18M^)yP=XZ$YU=8BI73QMl?5!h&T+W} zcsJMoY3FKVnmWViZ5$FB!8s5UornntD!MttKw+?=5Q~DiQ9h-X9~vmIz}A(*Kol0M zOf-TMR<#0FkU{|kCLey_hQkR`sC-Bfs912cPCBH5McSQLUAFz$|NXE@e>J(ex9@x3 z^E~G{=cEn+LB`J}5AD*l|InB?p6eeeGA2)y%`>M#74T<604~O!}f!Lncj${u(SJk$BGWIOq-RZ zpMDar&*NoDuI_6)HI)Mf=2r%z(S96HJB9ozo$Ut73qXk+MnEb_yTW}x?ydhv=Qt3D z0$2Saqza>~IGk_9KsLP_!`XW(iNjv8m#pu1e!s(LMlFx6(B`tM!-zKaLc3Uof~s-D zJgR_5t97y7b5nVEX)nMS(jrTO>xcARkcw2M4nlDUS%ct~d>Ir(XuQnH=8Pqj$ zGK*Z;PN#;*2Ax6N=doA-ssTx8z}!N{JiJ51jEF^V8q;GqsDN**6vwpM5D)s1`{3e< z_iAcfeN!f$IbU4B>|!uBhrOnIFknqdKBd1J&(<-_oPuF# z0N*?$cx0J_%cYOz_;!g#+<4~p6=lu&*&BUb;!=^sD)Eaz+ zpHMfe4|V*evc(f*5Zx*yIKILwqOrTJoc8)1tk29a%??LgPfI!2Dn!yA`Z%RSS=r+| zjm57#!nLMm8mo#8Z6U2WT`aILr>OnoXu?-_&jjqrkPW!lZuv>*pwAEXblyg2ECz__ zSsba9nz$1;3v`^KG4~8ZZLwuqXW_RJ7~ZcB)pu39(g-UDYhE>$#V1D&Cyn2}5|QAd z_$7BFF=iv}olh6p#`B>&u<-@ekgPSpy$FHMPGX{k)}sQIy%vqdy>)$dnq616rH<;N zG1_!Szo_b=sYqlVrH%%8ht6GvTx(PGd4PTq!c}}?G)D-vo24AD;h6PH~ zHCO~H#TiFqM;}xV#B?5bA3U$P?QzPbFr)j#gWo~}HXBXD`NEa2Sax!C(pJIKgQg66 zJnm|o-?Be4=AX3AJ({-ism0u){iubbRZ@t#&k$kp5|V-e-d8lj(|FD6OW&ptDeLOA zvlEuP7gLkRXKSDvWuQ(8o<6j!wqNzN8;%*p2>+ zT`M6P*o4mPH_5l`kMLhFzugfcVrTuq4mX_1E!ob+q$e!+q*vsXKu`+LcN9@7QaVx#6sW8dl$U*3 zr`fCiS6~OIhyfRAVN~~|q91sm85KNqIh&{V0Iq+;| zX7}*JpwF3Zcl4!M;kkT&rG2cZM;gFyDz3c2wnj1qHqD0fX_Pa;7iv`loWlF$Vi{ox zP9qM&!8bxCU1}qFcP{D2R$5ck4UhNfboysJp;c(tmQ%_LzGpF_kBgwNZI_d`Uu@ix!?{}%gi YG8bk&nzV^2cuH1>=^MDU(ub4zC!*_FSpWb4 literal 23404 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%0Df| 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 HoD!M Date: Mon, 31 Jul 2023 08:49:22 +1000 Subject: [PATCH 148/681] Update igraph submodule and test --- vendor/source/igraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/source/igraph b/vendor/source/igraph index 7686bc9a3..a20205be9 160000 --- a/vendor/source/igraph +++ b/vendor/source/igraph @@ -1 +1 @@ -Subproject commit 7686bc9a3bc9d751f6aca8b0445dae15097fd6d7 +Subproject commit a20205be93f523547578800f315d19367e49fe61 From a2e10ce21dab2c4239699d75768f77b908499ce7 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 31 Jul 2023 10:48:31 +0200 Subject: [PATCH 149/681] fix: fix memory leak in Graph.distances() when attempting to use the Johnson algorithm with mode != out --- src/_igraph/graphobject.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 15fb67686..046b47db6 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -6295,7 +6295,7 @@ PyObject *igraphmodule_Graph_distances( if (algorithm == IGRAPHMODULE_SHORTEST_PATH_ALGORITHM_JOHNSON && mode != IGRAPH_OUT) { PyErr_SetString(PyExc_ValueError, "Johnson's algorithm is supported for mode=\"out\" only"); - return NULL; + goto cleanup; } /* Call the C function */ @@ -6318,21 +6318,17 @@ PyObject *igraphmodule_Graph_distances( } if (retval) { - if (weights) igraph_vector_destroy(weights); - igraph_matrix_destroy(&res); - igraph_vs_destroy(&from_vs); - igraph_vs_destroy(&to_vs); igraphmodule_handle_igraph_error(); - return NULL; + goto cleanup; } if (weights) { - igraph_vector_destroy(weights); list = igraphmodule_matrix_t_to_PyList(&res, IGRAPHMODULE_TYPE_FLOAT); } else { list = igraphmodule_matrix_t_to_PyList(&res, IGRAPHMODULE_TYPE_INT); } +cleanup: if (weights) { igraph_vector_destroy(weights); free(weights); } igraph_matrix_destroy(&res); From 16500f1e5892e5fd49d5297c9216b3758ffd96bf Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Mon, 31 Jul 2023 19:43:02 +1000 Subject: [PATCH 150/681] CHANGELOG for matplotlib revamp --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 157ffdb34..b31c046e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ ### Changed +- The `matplotlib` plotting infrastructure underwent major surgery and is now able to show consistent vertex and edge drawings at any level of zoom, including with animations, and for any aspect ratio. +- As a consequence of the restructuring at the previous point, vertex sizes are now specified in figure points and are not affected by axis limits or zoom. With the current conventions, `vertex_size=25` is a reasonable size for `igraph.plot`. +- As another consequence of the above, vertex labels now support offsets from the vertex center, in figure point units. +- As another consequence of the above, self loops are now looking better and their size can be controlled using the `edge_loop_size` argument in `igraph.plot`. +- As another consequence of the above, if using the `matplotlib` backend when plotting a graph, `igraph.plot` now does not return the `Axes` anymore. Instead, it returns a container artist called `GraphArtist`, which contains as children the elements of the graph plot: a `VertexCollection` for the vertices, and `EdgeCollection` for the edges, and so on. These objects can be used to modify the plot after the initial rendering, e.g. inside a Jupyter notebook, to fine tune the appearance of the plot. While documentation on specific graphic elements is still scant, more descriptive examples will follow in the future. - `Graph.distances()` now uses Dijkstra's algorithm when there are zero weights but no negative weights. Earlier versions switched to Bellman-Ford or Johnson in the presence of zero weights unnecessarily. ## [0.10.6] - 2023-07-13 From ada854a19625075883c7353c2ffd2b0779a60e55 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 18 Aug 2023 13:49:20 +0200 Subject: [PATCH 151/681] doc: extend docs of Graph.Watts_Strogatz(), closes #702 --- src/_igraph/graphobject.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 046b47db6..28abc2987 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -14288,6 +14288,18 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { {"Watts_Strogatz", (PyCFunction) igraphmodule_Graph_Watts_Strogatz, METH_VARARGS | METH_CLASS | METH_KEYWORDS, "Watts_Strogatz(dim, size, nei, p, loops=False, multiple=False)\n--\n\n" + "This function generates networks with the small-world property based on a\n" + "variant of the Watts-Strogatz model. The network is obtained by first creating\n" + "a periodic undirected lattice, then rewiring both endpoints of each edge with\n" + "probability I{p}, while avoiding the creation of multi-edges.\n\n" + "This process differs from the original model of Watts and Strogatz (see\n" + "reference) in that it rewires I{both} endpoints of edges. Thus in the limit\n" + "of C{p=1}, we obtain a G(n,m) random graph with the same number of vertices\n" + "and edges as the original lattice. In comparison, the original Watts-Strogatz\n" + "model only rewires a single endpoint of each edge, thus the network does not\n" + "become fully random even for p=1.\n\n" + "For appropriate choices of I{p}, both models exhibit the property of\n" + "simultaneously having short path lengths and high clustering.\n\n" "@param dim: the dimension of the lattice\n" "@param size: the size of the lattice along all dimensions\n" "@param nei: value giving the distance (number of steps) within which\n" From 92f0abd10fe232a133438fe79d15412223091bb1 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Sun, 20 Aug 2023 18:38:57 +0200 Subject: [PATCH 152/681] fix: use the same macOS deployment target version when compiling the C core as the one that was used when compiling Python --- setup.py | 5 +++++ test.sh | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index ffb0a5913..1165148c5 100644 --- a/setup.py +++ b/setup.py @@ -299,6 +299,11 @@ def _compile_in( # to avoid having the architecture name in the LIBPATH (e.g. lib/x86_64-linux-gnu) args.append("-DCMAKE_INSTALL_PREFIX=" + str(install_folder)) + # On macOS, compile the C core with the same macOS deployment target as + # the one that was used to compile Python itself + if sysconfig.get_config_var("MACOSX_DEPLOYMENT_TARGET"): + args.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=" + sysconfig.get_config_var("MACOSX_DEPLOYMENT_TARGET")) + # Compile the C core with sanitizers if needed if building_with_sanitizers(): args.append("-DUSE_SANITIZER=Address;Undefined") diff --git a/test.sh b/test.sh index 3b3f7b190..8e59d034a 100755 --- a/test.sh +++ b/test.sh @@ -53,8 +53,6 @@ if [ x$CLEAN = x1 ]; then rm -rf vendor/build vendor/install fi -export MACOSX_DEPLOYMENT_TARGET=12.0 - # pip install is called in verbose mode so we can see the compiler warnings if [ "x$USE_SANITIZERS" = x1 ]; then # Do not run plotting tests -- they tend to have lots of false positives in From 2f9b374bfed544765262a05de899ccce429c1c13 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 1 Sep 2023 22:14:39 +0200 Subject: [PATCH 153/681] fix: fix bug in EdgeSeq.select(_incident=...) when the graph is directed --- src/igraph/seq.py | 2 +- tests/test_edgeseq.py | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/igraph/seq.py b/src/igraph/seq.py index 0f0dc2168..950bc473e 100644 --- a/src/igraph/seq.py +++ b/src/igraph/seq.py @@ -601,7 +601,7 @@ def _ensure_set(value): # the vertices specified candidates = set() for v in value: - candidates.update(es.graph.incident(v)) + candidates.update(es.graph.incident(v, mode="all")) if not es.is_all(): # Find those that are in the current edge sequence diff --git a/tests/test_edgeseq.py b/tests/test_edgeseq.py index df14bd490..c3259257a 100644 --- a/tests/test_edgeseq.py +++ b/tests/test_edgeseq.py @@ -85,7 +85,10 @@ def testPhantomEdge(self): self.assertRaises(ValueError, getattr, e, "tuple") self.assertRaises(ValueError, getattr, e, "vertex_tuple") - @unittest.skipIf(is_pypy, "skipped on PyPy because we do not have access to docstrings") + @unittest.skipIf( + is_pypy, + "skipped on PyPy because we do not have access to docstrings" + ) def testProxyMethods(self): g = Graph.GRG(10, 0.5) e = g.es[0] @@ -150,6 +153,8 @@ def testIndexing(self): @unittest.skipIf(np is None, "test case depends on NumPy") def testNumPyIndexing(self): + assert np is not None + n = self.g.ecount() for i in range(n): arr = np.array([i]) @@ -334,6 +339,16 @@ def testIncidentFiltering(self): self.assertTrue(all((e.source in vs3 or e.target in vs3) for e in es_filtered)) self.assert_edges_unique_in(es_filtered) + def testIncidentFilteringDirected(self): + # Test case from https://igraph.discourse.group/t/edge-select-using-incident-on-directed-graphs/1645 + g = Graph([(0, 1), (1, 2), (2, 3)], directed=True) + + vs = (1, ) + es = g.es.select(_incident=vs) + self.assertEqual(2, len(es)) + self.assertTrue(all((e.source in vs or e.target in vs) for e in es)) + self.assert_edges_unique_in(es) + def testIncidentFilteringByNames(self): g = Graph.Lattice([10, 10], circular=False) vs = (0, 1, 10, 11) From ea1c19589f1e24360364bde3dd302ecdd9019d5c Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 4 Sep 2023 15:18:26 +0200 Subject: [PATCH 154/681] ci: update cibuildwheel, skip tests on Python 3.12 until NumPy 1.26 is out --- .github/workflows/build.yml | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6a4d5aa8..5ae731bf0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,16 +29,17 @@ jobs: python-version: '3.8' - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.14.1 + uses: pypa/cibuildwheel@v2.15.0 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" - # Skip tests for Python 3.10 and 3.11 because SciPy does not have - # 32-bit wheels for Linux - CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686" + # Skip tests for Python 3.10 onwards because SciPy does not have + # 32-bit wheels for Linux. Also skip tests for Python 3.12 until + # NumPy 1.26 is out (with Python 3.12 wheels) + CIBW_TEST_SKIP: "cp310-manylinux_i686 cp311-manylinux_i686 cp312-manylinux_i686 cp312-*" - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.14.1 + uses: pypa/cibuildwheel@v2.15.0 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" @@ -68,6 +69,9 @@ jobs: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 CIBW_BUILD: "*-manylinux_aarch64" + # Skip tests for Python 3.12 until NumPy 1.26 is out (with Python + # 3.12 wheels) + CIBW_TEST_SKIP: "cp312-*" - uses: actions/upload-artifact@v3 with: @@ -94,6 +98,9 @@ jobs: CIBW_ARCHS_LINUX: aarch64 CIBW_BUILD: "*-musllinux_aarch64" CIBW_TEST_COMMAND: "cd {project} && pip install --prefer-binary '.[test-musl]' && python -m pytest -v tests" + # Skip tests for Python 3.12 until NumPy 1.26 is out (with Python + # 3.12 wheels) + CIBW_TEST_SKIP: "cp312-*" - uses: actions/upload-artifact@v3 with: @@ -161,6 +168,9 @@ jobs: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_ENVIRONMENT: "LDFLAGS=-L$HOME/local/lib" IGRAPH_CMAKE_EXTRA_ARGS: -DCMAKE_OSX_ARCHITECTURES=${{ matrix.cmake_arch }} ${{ matrix.cmake_extra_args }} -DCMAKE_PREFIX_PATH=$HOME/local + # Skip tests for Python 3.12 until NumPy 1.26 is out (with Python + # 3.12 wheels) + CIBW_TEST_SKIP: "cp312-*" - uses: actions/upload-artifact@v3 with: @@ -248,9 +258,10 @@ jobs: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" CIBW_TEST_COMMAND: "cd /d {project} && pip install --prefer-binary \".[test]\" && python -m pytest tests" - # Skip tests for Python 3.10 and 3.11 because SciPy does not have - # 32-bit wheels for Windows - CIBW_TEST_SKIP: "cp310-win32 cp311-win32" + # Skip tests for Python 3.10 onwards because SciPy does not have + # 32-bit wheels for Windows. Also skip tests for Python 3.12 until + # NumPy 1.26 is out (with Python 3.12 wheels) + CIBW_TEST_SKIP: "cp310-win32 cp311-win32 cp312-win32 cp312-*" IGRAPH_CMAKE_EXTRA_ARGS: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DVCPKG_TARGET_TRIPLET=${{ matrix.vcpkg_arch }}-windows-static-md -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake -A ${{ matrix.cmake_arch }} IGRAPH_EXTRA_LIBRARY_PATH: C:/vcpkg/installed/${{ matrix.vcpkg_arch }}-windows-static-md/lib/ IGRAPH_STATIC_EXTENSION: True From 62b5541040f3d296d7fdcfd75856a99f047b3879 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:19:03 +0000 Subject: [PATCH 155/681] build(deps): bump pypa/cibuildwheel from 2.14.1 to 2.15.0 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.14.1 to 2.15.0. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.14.1...v2.15.0) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5ae731bf0..a4ea62cdb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,7 +64,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (manylinux) - uses: pypa/cibuildwheel@v2.14.1 + uses: pypa/cibuildwheel@v2.15.0 env: CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -92,7 +92,7 @@ jobs: uses: docker/setup-qemu-action@v2 - name: Build wheels (musllinux) - uses: pypa/cibuildwheel@v2.14.1 + uses: pypa/cibuildwheel@v2.15.0 env: CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 @@ -162,7 +162,7 @@ jobs: cmake --install . - name: Build wheels - uses: pypa/cibuildwheel@v2.14.1 + uses: pypa/cibuildwheel@v2.15.0 env: CIBW_ARCHS_MACOS: "${{ matrix.wheel_arch }}" CIBW_BEFORE_BUILD: "python setup.py build_c_core" @@ -253,7 +253,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.14.1 + uses: pypa/cibuildwheel@v2.15.0 env: CIBW_BEFORE_BUILD: "python setup.py build_c_core" CIBW_BUILD: "*-${{ matrix.wheel_arch }}" From dbbe6f7043f5c2ac1caac96edd200968b6920a6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:25:05 +0000 Subject: [PATCH 156/681] build(deps): bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5ae731bf0..233cb05bc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: wheel_arch: [x86_64, i686] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -54,7 +54,7 @@ jobs: runs-on: ubuntu-20.04 if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -82,7 +82,7 @@ jobs: runs-on: ubuntu-20.04 if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -121,7 +121,7 @@ jobs: wheel_arch: arm64 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -181,7 +181,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -219,7 +219,7 @@ jobs: vcpkg_arch: x64 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -276,7 +276,7 @@ jobs: name: Build sdist and test extra dependencies runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 @@ -322,7 +322,7 @@ jobs: env: IGRAPH_CMAKE_EXTRA_ARGS: -DFORCE_COLORED_OUTPUT=ON steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 From f01bd6e88fbb4d2778d3b0a34dff2b4ba53cdd56 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 4 Sep 2023 18:38:27 +0200 Subject: [PATCH 157/681] chore: updated vendored C core --- vendor/source/igraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/source/igraph b/vendor/source/igraph index 7686bc9a3..6559f7e92 160000 --- a/vendor/source/igraph +++ b/vendor/source/igraph @@ -1 +1 @@ -Subproject commit 7686bc9a3bc9d751f6aca8b0445dae15097fd6d7 +Subproject commit 6559f7e92f64d6f71a61063132dace9ce72cf680 From a9c7d900ee0a838e90c14967c2abd987c50e339e Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 4 Sep 2023 18:42:00 +0200 Subject: [PATCH 158/681] chore: updated changelog --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 157ffdb34..2474f0c2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,16 @@ ### Changed +- The C core of igraph was updated to version 0.10.7. + - `Graph.distances()` now uses Dijkstra's algorithm when there are zero weights but no negative weights. Earlier versions switched to Bellman-Ford or Johnson in the presence of zero weights unnecessarily. +### Fixed + +- Fixed a bug in `EdgeSeq.select(_incident=...)` for undirected graphs. + +- Fixed a memory leak in `Graph.distances()` when attempting to use Johnson's algorithm with `mode != "out"` + ## [0.10.6] - 2023-07-13 ### Changed @@ -542,7 +550,8 @@ Please refer to the commit logs at https://github.com/igraph/python-igraph for a list of changes affecting versions up to 0.8.3. Notable changes after 0.8.3 are documented above. -[Unreleased]: https://github.com/igraph/python-igraph/compare/0.10.5...main +[master]: https://github.com/igraph/python-igraph/compare/0.10.6...main +[0.10.6]: https://github.com/igraph/python-igraph/compare/0.10.5...0.10.6 [0.10.5]: https://github.com/igraph/python-igraph/compare/0.10.4...0.10.5 [0.10.4]: https://github.com/igraph/python-igraph/compare/0.10.3...0.10.4 [0.10.3]: https://github.com/igraph/python-igraph/compare/0.10.2...0.10.3 From f0287f5f43c2a2991ba6eb47603dda183ccc6058 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 4 Sep 2023 18:47:36 +0200 Subject: [PATCH 159/681] fix: fix Pandas deprecation warning in unit tests, closes #705 --- src/igraph/io/objects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/igraph/io/objects.py b/src/igraph/io/objects.py index 6cc550a24..7c29cfd9e 100644 --- a/src/igraph/io/objects.py +++ b/src/igraph/io/objects.py @@ -418,8 +418,8 @@ def _construct_graph_from_dataframe( if use_vids: if ( - str(edges.dtypes[0]).startswith(("int", "Int")) - and str(edges.dtypes[1]).startswith(("int", "Int")) + str(edges.dtypes.iloc[0]).startswith(("int", "Int")) + and str(edges.dtypes.iloc[1]).startswith(("int", "Int")) ): # Check pandas nullable integer data type: # https://pandas.pydata.org/docs/user_guide/integer_na.html From 79fe9e60ea3aa66029a3f20fdce9176ef74bff03 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 4 Sep 2023 18:51:26 +0200 Subject: [PATCH 160/681] refactor: use igraph_bipartite_game_gnp() or _gnm() instead of the deprecated igraph_bipartite_game() --- src/_igraph/graphobject.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 28abc2987..069aeb1df 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -3153,11 +3153,11 @@ PyObject *igraphmodule_Graph_Random_Bipartite(PyTypeObject * type, igraph_t g; Py_ssize_t n1, n2, m = -1; double p = -1.0; - igraph_erdos_renyi_t t; igraph_neimode_t neimode = IGRAPH_ALL; PyObject *directed_o = Py_False, *neimode_o = NULL; igraph_vector_bool_t vertex_types; PyObject *vertex_types_o; + igraph_error_t retval; static char *kwlist[] = { "n1", "n2", "p", "m", "directed", "neimode", NULL }; @@ -3179,8 +3179,6 @@ PyObject *igraphmodule_Graph_Random_Bipartite(PyTypeObject * type, return NULL; } - t = (m == -1) ? IGRAPH_ERDOS_RENYI_GNP : IGRAPH_ERDOS_RENYI_GNM; - if (igraphmodule_PyObject_to_neimode_t(neimode_o, &neimode)) return NULL; @@ -3189,10 +3187,16 @@ PyObject *igraphmodule_Graph_Random_Bipartite(PyTypeObject * type, return NULL; } - if (igraph_bipartite_game(&g, &vertex_types, t, n1, n2, p, m, PyObject_IsTrue(directed_o), neimode)) { - igraph_vector_bool_destroy(&vertex_types); - igraphmodule_handle_igraph_error(); - return NULL; + if (m == -1) { + /* GNP model */ + retval = igraph_bipartite_game_gnp( + &g, &vertex_types, n1, n2, p, PyObject_IsTrue(directed_o), neimode + ); + } else { + /* GNM model */ + retval = igraph_bipartite_game_gnm( + &g, &vertex_types, n1, n2, m, PyObject_IsTrue(directed_o), neimode + ); } CREATE_GRAPH_FROM_TYPE(self, g, type); From d3100c8a58eedf6f4a664d782cb99967f98a3b7a Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Mon, 4 Sep 2023 18:58:53 +0200 Subject: [PATCH 161/681] chore: bumped version to 0.10.7 --- CHANGELOG.md | 5 +++-- src/igraph/version.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2474f0c2b..9f016d831 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # igraph Python interface changelog -## [master] +## [0.10.7] - 2023-09-04 ### Added @@ -550,7 +550,8 @@ Please refer to the commit logs at https://github.com/igraph/python-igraph for a list of changes affecting versions up to 0.8.3. Notable changes after 0.8.3 are documented above. -[master]: https://github.com/igraph/python-igraph/compare/0.10.6...main +[master]: https://github.com/igraph/python-igraph/compare/0.10.7...main +[0.10.7]: https://github.com/igraph/python-igraph/compare/0.10.6...0.10.7 [0.10.6]: https://github.com/igraph/python-igraph/compare/0.10.5...0.10.6 [0.10.5]: https://github.com/igraph/python-igraph/compare/0.10.4...0.10.5 [0.10.4]: https://github.com/igraph/python-igraph/compare/0.10.3...0.10.4 diff --git a/src/igraph/version.py b/src/igraph/version.py index a9750c7c7..713f7483f 100644 --- a/src/igraph/version.py +++ b/src/igraph/version.py @@ -1,2 +1,2 @@ -__version_info__ = (0, 10, 6) +__version_info__ = (0, 10, 7) __version__ = ".".join("{0}".format(x) for x in __version_info__) From cddbc558e3b76b7af47230791070fc559a28204f Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 12 Sep 2023 13:31:48 +0200 Subject: [PATCH 162/681] feat: exposed igraph_is_bigraphical(), closes #708 --- CHANGELOG.md | 6 +++++ src/_igraph/igraphmodule.c | 50 +++++++++++++++++++++++++++++++++----- src/igraph/__init__.py | 2 ++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f016d831..ecd0707ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # igraph Python interface changelog +## [master] + +### Added + +- Added `is_bigraphical()` to test whether a pair of integer sequences can be the degree sequence of some bipartite graph. + ## [0.10.7] - 2023-09-04 ### Added diff --git a/src/_igraph/igraphmodule.c b/src/_igraph/igraphmodule.c index 3d22f5415..554523363 100644 --- a/src/_igraph/igraphmodule.c +++ b/src/_igraph/igraphmodule.c @@ -520,19 +520,39 @@ PyObject* igraphmodule_is_graphical_degree_sequence(PyObject *self, } +static PyObject* igraphmodule_i_is_graphical_or_bigraphical( + PyObject *self, PyObject *args, PyObject *kwds, igraph_bool_t is_bigraphical +); + PyObject* igraphmodule_is_graphical(PyObject *self, PyObject *args, PyObject *kwds) { - static char* kwlist[] = { "out_deg", "in_deg", "loops", "multiple", NULL }; + return igraphmodule_i_is_graphical_or_bigraphical(self, args, kwds, /* is_bigraphical = */ false); +} + +PyObject* igraphmodule_is_bigraphical(PyObject *self, PyObject *args, PyObject *kwds) { + return igraphmodule_i_is_graphical_or_bigraphical(self, args, kwds, /* is_bigraphical = */ true); +} + +static PyObject* igraphmodule_i_is_graphical_or_bigraphical( + PyObject *self, PyObject *args, PyObject *kwds, igraph_bool_t is_bigraphical +) { + static char* kwlist_graphical[] = { "out_deg", "in_deg", "loops", "multiple", NULL }; + static char* kwlist_bigraphical[] = { "degrees1", "degrees2", "loops", "multiple", NULL }; PyObject *out_deg_o = 0, *in_deg_o = 0; PyObject *loops = Py_False, *multiple = Py_False; igraph_vector_int_t out_deg, in_deg; igraph_bool_t is_directed, result; int allowed_edge_types; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOO", kwlist, - &out_deg_o, &in_deg_o, &loops, &multiple)) + igraph_error_t retval; + + if (!PyArg_ParseTupleAndKeywords( + args, kwds, + is_bigraphical ? "OO|OO" : "O|OOO", + is_bigraphical ? kwlist_bigraphical : kwlist_graphical, + &out_deg_o, &in_deg_o, &loops, &multiple + )) return NULL; - is_directed = (in_deg_o != 0 && in_deg_o != Py_None); + is_directed = (in_deg_o != 0 && in_deg_o != Py_None) || is_bigraphical; if (igraphmodule_PyObject_to_vector_int_t(out_deg_o, &out_deg)) return NULL; @@ -550,7 +570,11 @@ PyObject* igraphmodule_is_graphical(PyObject *self, PyObject *args, PyObject *kw allowed_edge_types |= IGRAPH_MULTI_SW; } - if (igraph_is_graphical(&out_deg, is_directed ? &in_deg : 0, allowed_edge_types, &result)) { + retval = is_bigraphical + ? igraph_is_bigraphical(&out_deg, is_directed ? &in_deg : 0, allowed_edge_types, &result) + : igraph_is_graphical(&out_deg, is_directed ? &in_deg : 0, allowed_edge_types, &result); + + if (retval) { igraphmodule_handle_igraph_error(); igraph_vector_int_destroy(&out_deg); if (is_directed) { @@ -794,6 +818,20 @@ static PyMethodDef igraphmodule_methods[] = "@return: C{True} if there exists some graph that can realize the given degree\n" " sequence, C{False} otherwise.\n" }, + {"is_bigraphical", (PyCFunction)igraphmodule_is_bigraphical, + METH_VARARGS | METH_KEYWORDS, + "is_bigraphical(degrees1, degrees2, loops=False, multiple=False)\n--\n\n" + "Returns whether two sequences of integers can be the degree sequences of a\n" + "bipartite graph.\n\n" + "The bipartite graph may or may not have multiple and loop edges, depending\n" + "on the allowed edge types in the remaining arguments.\n\n" + "@param degrees1: the list of degrees in the first partition.\n" + "@param degrees2: the list of degrees in the second partition.\n" + "@param loops: whether loop edges are allowed.\n" + "@param multiple: whether multiple edges are allowed.\n" + "@return: C{True} if there exists some bipartite graph that can realize the\n" + " given degree sequences with the given edge types, C{False} otherwise.\n" + }, {"is_graphical", (PyCFunction)igraphmodule_is_graphical, METH_VARARGS | METH_KEYWORDS, "is_graphical(out_deg, in_deg=None, loops=False, multiple=False)\n--\n\n" diff --git a/src/igraph/__init__.py b/src/igraph/__init__.py index 674e20d51..466f7344f 100644 --- a/src/igraph/__init__.py +++ b/src/igraph/__init__.py @@ -65,6 +65,7 @@ arpack_options as default_arpack_options, community_to_membership, convex_hull, + is_bigraphical, is_degree_sequence, is_graphical, is_graphical_degree_sequence, @@ -1183,6 +1184,7 @@ def write(graph, filename, *args, **kwds): 'hsl_to_rgb', 'hsva_to_rgba', 'hsv_to_rgb', + 'is_bigraphical', 'is_degree_sequence', 'is_graphical', 'is_graphical_degree_sequence', From b7d33f229960869f80358032ca5923ac3327ac47 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 12 Sep 2023 13:48:32 +0200 Subject: [PATCH 163/681] fix: added missing error handling to Graph.Random_Bipartite() --- src/_igraph/graphobject.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 069aeb1df..944f6697f 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -3199,6 +3199,11 @@ PyObject *igraphmodule_Graph_Random_Bipartite(PyTypeObject * type, ); } + if (retval) { + igraphmodule_handle_igraph_error(); + return NULL; + } + CREATE_GRAPH_FROM_TYPE(self, g, type); if (self == NULL) { return NULL; From e624df96209e46581792ad38506dea4d7db3ddb6 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 12 Sep 2023 13:56:40 +0200 Subject: [PATCH 164/681] feat: added weights=... argument to Graph.radius() and Graph.eccentricity() --- CHANGELOG.md | 2 ++ src/_igraph/graphobject.c | 66 ++++++++++++++++++++++++++++++--------- tests/test_structural.py | 21 +++++++++++++ 3 files changed, 74 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecd0707ec..a87ef27db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - Added `is_bigraphical()` to test whether a pair of integer sequences can be the degree sequence of some bipartite graph. +- Added `weights=...` keyword argument to `Graph.radius()` and `Graph.eccentricity()`. + ## [0.10.7] - 2023-09-04 ### Added diff --git a/src/_igraph/graphobject.c b/src/_igraph/graphobject.c index 944f6697f..321bd5685 100644 --- a/src/_igraph/graphobject.c +++ b/src/_igraph/graphobject.c @@ -1869,24 +1869,37 @@ PyObject *igraphmodule_Graph_knn(igraphmodule_GraphObject *self, PyObject *igraphmodule_Graph_radius(igraphmodule_GraphObject * self, PyObject * args, PyObject * kwds) { - PyObject *mode_o = Py_None; + PyObject *mode_o = Py_None, *weights_o = Py_None; igraph_neimode_t mode = IGRAPH_OUT; igraph_real_t radius; + igraph_vector_t *weights; - static char *kwlist[] = { "mode", NULL }; + static char *kwlist[] = { "mode", "weights", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, - &mode_o)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &mode_o, &weights_o)) { return NULL; + } - if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) + if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) { return NULL; + } - if (igraph_radius(&self->g, &radius, mode)) { + if (igraphmodule_attrib_to_vector_t(weights_o, self, &weights, ATTRIBUTE_TYPE_EDGE)) { + return NULL; + } + + if (igraph_radius_dijkstra(&self->g, weights, &radius, mode)) { + if (weights) { + igraph_vector_destroy(weights); free(weights); + } igraphmodule_handle_igraph_error(); return NULL; } + if (weights) { + igraph_vector_destroy(weights); free(weights); + } + return igraphmodule_real_t_to_PyObject(radius, IGRAPHMODULE_TYPE_FLOAT_IF_FRACTIONAL_ELSE_INT); } @@ -4862,18 +4875,21 @@ PyObject *igraphmodule_Graph_decompose(igraphmodule_GraphObject * self, */ PyObject *igraphmodule_Graph_eccentricity(igraphmodule_GraphObject* self, PyObject* args, PyObject* kwds) { - static char *kwlist[] = { "vertices", "mode", NULL }; - PyObject *vobj = Py_None, *list = NULL, *mode_o = Py_None; + static char *kwlist[] = { "vertices", "mode", "weights", NULL }; + PyObject *vobj = Py_None, *list = NULL, *mode_o = Py_None, *weights_o = Py_None; igraph_vector_t res; igraph_neimode_t mode = IGRAPH_OUT; igraph_bool_t return_single = false; igraph_vs_t vs; + igraph_vector_t* weights; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist, &vobj, &mode_o)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOO", kwlist, &vobj, &mode_o, &weights_o)) { return NULL; + } - if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) + if (igraphmodule_PyObject_to_neimode_t(mode_o, &mode)) { return NULL; + } if (igraphmodule_PyObject_to_vs_t(vobj, &vs, &self->g, &return_single, 0)) { igraphmodule_handle_igraph_error(); @@ -4885,17 +4901,31 @@ PyObject *igraphmodule_Graph_eccentricity(igraphmodule_GraphObject* self, return igraphmodule_handle_igraph_error(); } - if (igraph_eccentricity(&self->g, &res, vs, mode)) { + if (igraphmodule_attrib_to_vector_t(weights_o, self, &weights, ATTRIBUTE_TYPE_EDGE)) { + igraph_vs_destroy(&vs); + igraph_vector_destroy(&res); + return NULL; + } + + if (igraph_eccentricity_dijkstra(&self->g, weights, &res, vs, mode)) { + if (weights) { + igraph_vector_destroy(weights); free(weights); + } igraph_vs_destroy(&vs); igraph_vector_destroy(&res); igraphmodule_handle_igraph_error(); return NULL; } - if (!return_single) + if (weights) { + igraph_vector_destroy(weights); free(weights); + } + + if (!return_single) { list = igraphmodule_vector_t_to_PyList(&res, IGRAPHMODULE_TYPE_FLOAT); - else + } else { list = PyFloat_FromDouble(VECTOR(res)[0]); + } igraph_vector_destroy(&res); igraph_vs_destroy(&vs); @@ -14786,7 +14816,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { /* interface to igraph_eccentricity */ {"eccentricity", (PyCFunction) igraphmodule_Graph_eccentricity, METH_VARARGS | METH_KEYWORDS, - "eccentricity(vertices=None, mode=\"all\")\n--\n\n" + "eccentricity(vertices=None, mode=\"all\", weights=None)\n--\n\n" "Calculates the eccentricities of given vertices in a graph.\n\n" "The eccentricity of a vertex is calculated by measuring the\n" "shortest distance from (or to) the vertex, to (or from) all other\n" @@ -14797,6 +14827,9 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " that edge directions are followed; C{\"out\"} means that edge directions\n" " are followed the opposite direction; C{\"all\"} means that directions are\n" " ignored. The argument has no effect for undirected graphs.\n" + "@param weights: a list containing the edge weights. It can also be\n" + " an attribute name (edge weights are retrieved from the given\n" + " attribute) or C{None} (all edges have equal weight).\n" "@return: the calculated eccentricities in a list, or a single number if\n" " a single vertex was supplied.\n"}, @@ -15358,7 +15391,7 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { /* interfaces to igraph_radius */ {"radius", (PyCFunction) igraphmodule_Graph_radius, METH_VARARGS | METH_KEYWORDS, - "radius(mode=\"out\")\n--\n\n" + "radius(mode=\"out\", weights=None)\n--\n\n" "Calculates the radius of the graph.\n\n" "The radius of a graph is defined as the minimum eccentricity of\n" "its vertices (see L{eccentricity()}).\n" @@ -15367,6 +15400,9 @@ struct PyMethodDef igraphmodule_Graph_methods[] = { " edge directions, C{IN} considers paths that follow the opposite\n" " edge directions, C{ALL} ignores edge directions. The argument is\n" " ignored for undirected graphs.\n" + "@param weights: a list containing the edge weights. It can also be\n" + " an attribute name (edge weights are retrieved from the given\n" + " attribute) or C{None} (all edges have equal weight).\n" "@return: the radius\n" "@see: L{eccentricity()}" }, diff --git a/tests/test_structural.py b/tests/test_structural.py index 319a6deaa..2b043503d 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -56,6 +56,21 @@ def testEccentricity(self): ) self.assertEqual(Graph().eccentricity(), []) + def testWeightedEccentricity(self): + self.assertEqual( + self.gfull.eccentricity(weights=[2] * self.gfull.ecount()), + [2] * self.gfull.vcount() + ) + self.assertEqual( + self.gempty.eccentricity(weights=[]), + [0] * self.gempty.vcount() + ) + self.assertEqual( + self.g.eccentricity(weights=range(1, self.g.ecount() + 1)), + [4, 5, 6, 6] + ) + self.assertEqual(Graph().eccentricity(), []) + def testRadius(self): self.assertEqual(self.gfull.radius(), 1) self.assertEqual(self.gempty.radius(), 0) @@ -64,6 +79,12 @@ def testRadius(self): self.assertEqual(self.tree.radius(), 3) self.assertTrue(isnan(Graph().radius())) + def testWeightedRadius(self): + self.assertEqual(self.gfull.radius(weights=[2] * self.gfull.ecount()), 2) + self.assertEqual(self.gempty.radius(weights=[]), 0) + self.assertEqual(self.g.radius(weights=range(1, self.g.ecount() + 1)), 4) + self.assertTrue(isnan(Graph().radius())) + def testTransitivity(self): self.assertTrue(self.gfull.transitivity_undirected() == 1.0) self.assertTrue(self.tree.transitivity_undirected() == 0.0) From c61f7f0f501d75466a11329ee6046df439cf4197 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Tue, 12 Sep 2023 14:00:23 +0200 Subject: [PATCH 165/681] chore: bumped version to 0.10.8 --- CHANGELOG.md | 5 +++-- src/igraph/version.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a87ef27db..b520ec928 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # igraph Python interface changelog -## [master] +## [0.10.8] - 2023-09-12 ### Added @@ -558,7 +558,8 @@ Please refer to the commit logs at https://github.com/igraph/python-igraph for a list of changes affecting versions up to 0.8.3. Notable changes after 0.8.3 are documented above. -[master]: https://github.com/igraph/python-igraph/compare/0.10.7...main +[master]: https://github.com/igraph/python-igraph/compare/0.10.8...main +[0.10.8]: https://github.com/igraph/python-igraph/compare/0.10.7...0.10.8 [0.10.7]: https://github.com/igraph/python-igraph/compare/0.10.6...0.10.7 [0.10.6]: https://github.com/igraph/python-igraph/compare/0.10.5...0.10.6 [0.10.5]: https://github.com/igraph/python-igraph/compare/0.10.4...0.10.5 diff --git a/src/igraph/version.py b/src/igraph/version.py index 713f7483f..655891d8a 100644 --- a/src/igraph/version.py +++ b/src/igraph/version.py @@ -1,2 +1,2 @@ -__version_info__ = (0, 10, 7) +__version_info__ = (0, 10, 8) __version__ = ".".join("{0}".format(x) for x in __version_info__) From 0d1fd16db47136ca596b7aa6eb3c46d09cd98299 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 13:18:42 +0000 Subject: [PATCH 166/681] build(deps): bump docker/setup-qemu-action from 2 to 3 Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18cd744c4..7ff2bd4e4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,7 +61,7 @@ jobs: - name: Set up QEMU id: qemu - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Build wheels (manylinux) uses: pypa/cibuildwheel@v2.15.0 @@ -89,7 +89,7 @@ jobs: - name: Set up QEMU id: qemu - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Build wheels (musllinux) uses: pypa/cibuildwheel@v2.15.0 From 01ce84b495962d314f524c74cc68678fa080acb5 Mon Sep 17 00:00:00 2001 From: Fabio Zanini Date: Tue, 19 Sep 2023 15:07:56 +1000 Subject: [PATCH 167/681] Document invert y axis for trees and matplotlib --- doc/examples_sphinx-gallery/spanning_trees.py | 5 +++++ doc/source/tutorial.rst | 5 +++++ doc/source/visualisation.rst | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/doc/examples_sphinx-gallery/spanning_trees.py b/doc/examples_sphinx-gallery/spanning_trees.py index e9b083f60..82f190a8a 100644 --- a/doc/examples_sphinx-gallery/spanning_trees.py +++ b/doc/examples_sphinx-gallery/spanning_trees.py @@ -55,3 +55,8 @@ edge_width=g.es["width"] ) plt.show() + +# %% +# .. note:: +# To invert the y axis such that the root of the tree is on top of the plot, +# you can call `ax.invert_yaxis()` before `plt.show()`. diff --git a/doc/source/tutorial.rst b/doc/source/tutorial.rst index 015e80b91..7a1567adb 100644 --- a/doc/source/tutorial.rst +++ b/doc/source/tutorial.rst @@ -691,6 +691,11 @@ If you prefer to use `matplotlib`_ as a plotting engine, create an axes and use :alt: The visual representation of our social network (matplotlib backend) :align: center +.. note:: + When plotting rooted trees, Cairo automatically puts the root on top of the image and + the leaves at the bottom. For `matplotlib`_, the root is usually at the bottom instead. + You can easily place the root on top by calling `ax.invert_yaxis()`. + Hmm, this is not too pretty so far. A trivial addition would be to use the names as the vertex labels and to color the vertices according to the gender. Vertex labels are taken from the ``label`` attribute by default and vertex colors are determined by the diff --git a/doc/source/visualisation.rst b/doc/source/visualisation.rst index 24b752e36..c2c73d4a3 100644 --- a/doc/source/visualisation.rst +++ b/doc/source/visualisation.rst @@ -129,6 +129,11 @@ You can then further manipulate the axes and figure however you like via the `ax called them). This variant does not use `Cairo`_ directly and might be lacking some features that are available in the `Cairo`_ backend: please open an issue on Github to request specific features. +.. note:: + When plotting rooted trees, Cairo automatically puts the root on top of the image and + the leaves at the bottom. For `matplotlib`_, the root is usually at the bottom instead. + You can easily place the root on top by calling `ax.invert_yaxis()`. + Plotting via `matplotlib`_ makes it easy to combine igraph with other plots. For instance, if you want to have a figure with two panels showing different aspects of some data set, say a graph and a bar plot, you can easily do that:: From eb916c71f69e059b45e2f8780715fabddd02f0a8 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 22 Sep 2023 15:16:24 +0200 Subject: [PATCH 168/681] doc: fix a broken link to Matplotlib's user guide in the gallery --- doc/examples_sphinx-gallery/visualize_communities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/examples_sphinx-gallery/visualize_communities.py b/doc/examples_sphinx-gallery/visualize_communities.py index 7cfd90746..b7b96103f 100644 --- a/doc/examples_sphinx-gallery/visualize_communities.py +++ b/doc/examples_sphinx-gallery/visualize_communities.py @@ -33,7 +33,7 @@ # %% # Last, we plot the graph. We use a fancy technique called proxy artists to # make a legend. You can find more about that in matplotlib's -# :doc:`matplotlib:tutorials/intermediate/legend_guide`: +# :doc:`matplotlib:users/explain/axes/legend_guide`: fig, ax = plt.subplots() ig.plot( communities, From 223863cacee9c988987b460bc1dfff77a285fba6 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Fri, 22 Sep 2023 21:27:18 +0200 Subject: [PATCH 169/681] doc: cleanup documentation generation code, remove obsolete parts --- doc/jekyll_tools/Gemfile | 5 - doc/jekyll_tools/Gemfile.lock | 74 ---- doc/jekyll_tools/Makefile | 130 ------- doc/jekyll_tools/_config.yml | 18 - doc/jekyll_tools/_includes/defaults | 16 - doc/jekyll_tools/_layouts/default.html | 156 -------- doc/jekyll_tools/_layouts/main.html | 75 ---- doc/jekyll_tools/_layouts/pydoctor.html | 18 - doc/jekyll_tools/css/affix.css | 90 ----- doc/jekyll_tools/css/bootstrap.min.css | 1 - doc/jekyll_tools/css/other.css | 205 ----------- doc/jekyll_tools/css/pydoctor.css | 399 --------------------- doc/jekyll_tools/css/syntax.css | 61 ---- doc/jekyll_tools/favicon.ico | Bin 142910 -> 0 bytes doc/jekyll_tools/favicon.svg | 27 -- doc/jekyll_tools/fonts/fonts.css | 32 -- doc/jekyll_tools/img/igraph_logo_black.svg | 1 - doc/jekyll_tools/img/igraph_logo_white.svg | 1 - doc/jekyll_tools/js/affix.js | 10 - doc/jekyll_tools/js/html5shiv.js | 8 - doc/jekyll_tools/js/pydoctor.js | 29 -- doc/jekyll_tools/js/respond.min.js | 6 - doc/jekyll_tools/js/toggle.js | 23 -- doc/source/_templates/breadcrumb.html | 48 --- doc/source/_templates/globaltoc.html | 5 - doc/source/_templates/layout.html | 104 ------ doc/source/_templates/navbar.html | 20 -- doc/source/_templates/relations.html | 18 - doc/source/conf.py | 81 +---- doc/source/requirements.txt | 6 +- doc/source/sphinxext/postprocess_api.py | 94 ----- scripts/mkdoc.sh | 48 +-- setup.py | 6 +- 33 files changed, 22 insertions(+), 1793 deletions(-) delete mode 100644 doc/jekyll_tools/Gemfile delete mode 100644 doc/jekyll_tools/Gemfile.lock delete mode 100644 doc/jekyll_tools/Makefile delete mode 100644 doc/jekyll_tools/_config.yml delete mode 100644 doc/jekyll_tools/_includes/defaults delete mode 100644 doc/jekyll_tools/_layouts/default.html delete mode 100644 doc/jekyll_tools/_layouts/main.html delete mode 100644 doc/jekyll_tools/_layouts/pydoctor.html delete mode 100644 doc/jekyll_tools/css/affix.css delete mode 100644 doc/jekyll_tools/css/bootstrap.min.css delete mode 100644 doc/jekyll_tools/css/other.css delete mode 100644 doc/jekyll_tools/css/pydoctor.css delete mode 100644 doc/jekyll_tools/css/syntax.css delete mode 100644 doc/jekyll_tools/favicon.ico delete mode 100644 doc/jekyll_tools/favicon.svg delete mode 100644 doc/jekyll_tools/fonts/fonts.css delete mode 100644 doc/jekyll_tools/img/igraph_logo_black.svg delete mode 100644 doc/jekyll_tools/img/igraph_logo_white.svg delete mode 100644 doc/jekyll_tools/js/affix.js delete mode 100644 doc/jekyll_tools/js/html5shiv.js delete mode 100644 doc/jekyll_tools/js/pydoctor.js delete mode 100644 doc/jekyll_tools/js/respond.min.js delete mode 100644 doc/jekyll_tools/js/toggle.js delete mode 100644 doc/source/_templates/breadcrumb.html delete mode 100644 doc/source/_templates/globaltoc.html delete mode 100644 doc/source/_templates/layout.html delete mode 100644 doc/source/_templates/navbar.html delete mode 100644 doc/source/_templates/relations.html delete mode 100644 doc/source/sphinxext/postprocess_api.py diff --git a/doc/jekyll_tools/Gemfile b/doc/jekyll_tools/Gemfile deleted file mode 100644 index 3e5e9cbd3..000000000 --- a/doc/jekyll_tools/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'http://rubygems.org' - -gem 'jekyll-sitemap' -gem "webrick", "~> 1.7" -gem 'jekyll-redirect-from' diff --git a/doc/jekyll_tools/Gemfile.lock b/doc/jekyll_tools/Gemfile.lock deleted file mode 100644 index 710e3df51..000000000 --- a/doc/jekyll_tools/Gemfile.lock +++ /dev/null @@ -1,74 +0,0 @@ -GEM - remote: http://rubygems.org/ - specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - colorator (1.1.0) - concurrent-ruby (1.1.9) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - ffi (1.15.4) - forwardable-extended (2.6.0) - http_parser.rb (0.8.0) - i18n (1.8.11) - concurrent-ruby (~> 1.0) - jekyll (4.2.1) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (~> 2.0) - jekyll-watch (~> 2.0) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (~> 0.4.0) - pathutil (~> 0.9) - rouge (~> 3.0) - safe_yaml (~> 1.0) - terminal-table (~> 2.0) - jekyll-redirect-from (0.16.0) - jekyll (>= 3.3, < 5.0) - jekyll-sass-converter (2.1.0) - sassc (> 2.0.1, < 3.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.4.0) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.6) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.5) - rouge (3.27.0) - safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) - terminal-table (2.0.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.8.0) - webrick (1.7.0) - -PLATFORMS - x86_64-linux - -DEPENDENCIES - jekyll-redirect-from - jekyll-sitemap - webrick (~> 1.7) - -BUNDLED WITH - 2.2.26 diff --git a/doc/jekyll_tools/Makefile b/doc/jekyll_tools/Makefile deleted file mode 100644 index aa1a6dbf8..000000000 --- a/doc/jekyll_tools/Makefile +++ /dev/null @@ -1,130 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/igraph.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/igraph.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/igraph" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/igraph" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - make -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/jekyll_tools/_config.yml b/doc/jekyll_tools/_config.yml deleted file mode 100644 index b9a8a09d7..000000000 --- a/doc/jekyll_tools/_config.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: igraph – the network analysis package -destination: jekyll_output -future: true -include: [ _static, _images ] -exclude: [ source, Gemfile, Gemfile.lock, build_old_sources.py ] -keep_files: [ ] -markdown: kramdown -kramdown: - input: GFM -url: "https://igraph.org/python" -plugins: - - jekyll-sitemap -defaults: - - - scope: - path: "" - values: - layout: "post" diff --git a/doc/jekyll_tools/_includes/defaults b/doc/jekyll_tools/_includes/defaults deleted file mode 100644 index 42baf8c90..000000000 --- a/doc/jekyll_tools/_includes/defaults +++ /dev/null @@ -1,16 +0,0 @@ -{% assign lang = "python" %} -{%- assign bodyclass = lang %} -{% assign title = page.title %} -{% assign mainheader = page.mainheader %} -{% assign lead = page.lead %} - -{% assign langname = 'python-igraph' %} -{% assign langversions = version | split: ", " %} -{% if title == nil %}{% assign title = 'python-igraph' %}{% endif %} -{% assign extramenu = '

  • Get started
  • ' %} -{% if mainheader == nil %} - {% assign mainheader = 'Get started with python-igraph' %} -{% endif %} -{% if lead == nil %} - {% assign lead = 'Install and start using igraph from Python' %} -{% endif %} diff --git a/doc/jekyll_tools/_layouts/default.html b/doc/jekyll_tools/_layouts/default.html deleted file mode 100644 index d74c2b8b1..000000000 --- a/doc/jekyll_tools/_layouts/default.html +++ /dev/null @@ -1,156 +0,0 @@ -{% include defaults %} - - - - - - - - - - - - - - {{ title }} - - - - - - - - - - - - - - - - - - - - {{ page.extrahead | default: layout.extrahead }} - - - -
    - - - {% if page.layout != "main" %} - -
    -
    -

    {{ page.mainheader | default: layout.mainheader }}

    -

    {{ page.lead | default: layout.lead }}

    -
    - -
    - - {% endif %} - - {{content}} - - - - -
    - - - - - - - - - -{% if page.animated_header or layout.animated_header %} - - -{% endif %} - - diff --git a/doc/jekyll_tools/_layouts/main.html b/doc/jekyll_tools/_layouts/main.html deleted file mode 100644 index 42c90e4f6..000000000 --- a/doc/jekyll_tools/_layouts/main.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -layout: default -bodyclass: start-page -animated_header: true ---- - -
    -
    -

    igraph – - The network analysis package -

    -

    - igraph is a collection of network analysis tools with the - emphasis on efficiency, - portability and ease of use. igraph is - open source and free. igraph can be - programmed in R, Python, - Mathematica and C/C++. -

    -
    - igraph R package - python-igraph - IGraph/M - igraph C library -
    - -
    - -
    -
    -
    - -
    - -
    -
    - - - - {% for post in site.posts limit:10 %} - -
    -

    -   - {{ post.title }} -

    -
    -
    - - {{ post.content | extract_excerpt: post.url | redir_docs | smallheaders }} - -
    - - {% endfor %} - -

    All news →

    - -
    -
    -
    - -
    diff --git a/doc/jekyll_tools/_layouts/pydoctor.html b/doc/jekyll_tools/_layouts/pydoctor.html deleted file mode 100644 index e70459159..000000000 --- a/doc/jekyll_tools/_layouts/pydoctor.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: default -extrahead: -vmenu: true -doctype: api/ ---- - -
    -
    -
    -
    - - {{ content }} - -
    -
    -
    -
    diff --git a/doc/jekyll_tools/css/affix.css b/doc/jekyll_tools/css/affix.css deleted file mode 100644 index 5b57395ef..000000000 --- a/doc/jekyll_tools/css/affix.css +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Side navigation - * - * Scrollspy and affixed enhanced navigation to highlight sections and secondary - * sections of docs content. - */ - -/* By default it's not affixed in mobile views, so undo that */ -.bs-sidebar.affix { - position: static; -} - -/* First level of nav */ -.bs-sidenav { - margin-top: 30px; - margin-bottom: 30px; - padding-top: 10px; - padding-bottom: 10px; - text-shadow: 0 1px 0 #fff; - background-color: #e9ecef; - border-radius: 5px; -} - -/* All levels of nav */ -.bs-sidebar .nav > li { - width: 100%; -} - -.bs-sidebar .nav > li > a { - display: block; - color: #716b7a; - padding: 5px 20px; -} -.bs-sidebar .nav > li > a:hover, -.bs-sidebar .nav > li > a:focus { - text-decoration: none; - background-color: #d3d9df; - border-right: 2px solid #a7b3bf; -} -.bs-sidebar .nav > li > a.active, -.bs-sidebar .nav > li > a.active:hover, -.bs-sidebar .nav > li > a.active:focus { - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-right: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -.bs-sidebar .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - margin-bottom: 8px; -} -.bs-sidebar .nav .nav > li > a { - padding-top: 3px; - padding-bottom: 3px; - padding-left: 30px; - font-size: 90%; -} - -/* Show and affix the side nav when space allows it */ -@media (min-width: 992px) { - .bs-sidebar .nav .nav-item > a.active + ul { - display: block; - } - /* Widen the fixed sidebar */ - .bs-sidebar.affix, - .bs-sidebar.affix-bottom { - width: 213px; - } - .bs-sidebar.affix { - position: sticky; /* Undo the static from mobile first approach */ - top: 80px; - } - .bs-sidebar.affix-bottom { - position: absolute; /* Undo the static from mobile first approach */ - } - .bs-sidebar.affix-bottom .bs-sidenav, - .bs-sidebar.affix .bs-sidenav { - margin-top: 0; - margin-bottom: 0; - } -} -@media (min-width: 1200px) { - /* Widen the fixed sidebar again */ - .bs-sidebar.affix-bottom, - .bs-sidebar.affix { - width: 263px; - } -} diff --git a/doc/jekyll_tools/css/bootstrap.min.css b/doc/jekyll_tools/css/bootstrap.min.css deleted file mode 100644 index ad8c117b8..000000000 --- a/doc/jekyll_tools/css/bootstrap.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#dc3545;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#dc3545;text-decoration:none;background-color:transparent}a:hover{color:#a71d2a;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#f5c6cb}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#ed969e}.table-hover .table-primary:hover{background-color:#f1b0b7}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#f1b0b7}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#efa2a9;outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-primary:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#dc3545;border-color:#dc3545}.btn-outline-primary:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#dc3545;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#dc3545;text-decoration:none}.btn-link:hover{color:#a71d2a;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#dc3545}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#dc3545;background-color:#dc3545}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#efa2a9}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#f6cdd1;border-color:#f6cdd1}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#dc3545;background-color:#dc3545}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(220,53,69,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(220,53,69,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(220,53,69,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(220,53,69,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#efa2a9;outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#efa2a9;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#dc3545;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#f6cdd1}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#dc3545;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#f6cdd1}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#dc3545;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#f6cdd1}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#dc3545}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#dc3545;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#a71d2a;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#dc3545;border-color:#dc3545}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#dc3545}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#bd2130}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-primary hr{border-top-color:#f1b0b7}.alert-primary .alert-link{color:#491217}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#dc3545;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#dc3545;border-color:#dc3545}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#721c24;background-color:#f5c6cb}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#dc3545!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#bd2130!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#dc3545!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#dc3545!important}a.text-primary:focus,a.text-primary:hover{color:#a71d2a!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} \ No newline at end of file diff --git a/doc/jekyll_tools/css/other.css b/doc/jekyll_tools/css/other.css deleted file mode 100644 index ca975001e..000000000 --- a/doc/jekyll_tools/css/other.css +++ /dev/null @@ -1,205 +0,0 @@ -/* Sticky footer, http://getbootstrap.com/examples/sticky-footer-navbar/ */ - -html { - min-height: 100%; - scroll-padding-top: 80px; -} - -html, -body { - height: 100%; - background-color: #fff; -} - -body { - position: relative; -} - -nav.fixed-top { - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); -} - -span.type { - font-family: monospace; - font-size: 87.5%; -} - -#wrap { - min-height: 100%; - position: relative; - /* Pad top by header height, bottom by footer */ - padding: 57px 0 0 0; -} - -#footer { - width: 100%; -} - -#footer .credit { - text-align: center; -} - -/* -.navbar-brand -{ - padding-right: 5px; -} - -.navbar-brand img -{ - margin-right: 5px; -} -*/ - -.gist { - line-height: 1.2; -} - -@media(min-width:768px) { - .bs-docs-section { - font-size: 140%; - } - .bs-sidebar { - font-size: 120%; - } - .gist .gist-file .gist-data { - font-size: 80% !important; - } -} - -.bs-docs-section .navigation-header { - margin-bottom: 1.5rem; -} -.bs-docs-section h1 { - margin: 2.5rem 0; -} -.bs-docs-section h2 { - margin: 2.5rem 0 1.5rem 0; -} -.bs-docs-section h3 { - margin: 2.5rem 0 1.5rem 0; -} - -.bs-docs-section .page-header:first-child h1, -.bs-docs-section .post-header:first-child h1 -{ - margin-top: 0 !important; -} - -.post-header h1, -.post-header h2 { - margin-bottom: 0.5rem !important; -} -.post-header .post-time { - margin-bottom: 1.5rem; -} - -code { - color: #87556e; -} - -code.rfun:after { - content: "()"; -} - -/* Page headers */ -.bs-header { - padding: 20px 15px 20px; /* side padding builds on .container 15px, so 30px */ - font-size: 16px; - text-align: center; - text-shadow: 0 1px 0 rgba(0,0,0,.15); - color: white; - margin-bottom: 30px; - background: #3e648d; - background-image: -webkit-gradient( - linear, - left top, - left bottom, - color-stop(0, #3e648d), - color-stop(1, #405a6a) - ); - background-image: -o-linear-gradient(bottom, #3e648d 0%, #405a6a 100%); - background-image: -moz-linear-gradient(bottom, #3e648d 0%, #405a6a 100%); - background-image: -webkit-linear-gradient(bottom, #3e648d 0%, #405a6a 100%); - background-image: -ms-linear-gradient(bottom, #3e648d 0%, #405a6a 100%); - background-image: linear-gradient(to bottom, #3e648d 0%, #405a6a 100%); -} -.bs-header p { - font-weight: 300; - line-height: 1.5; -} -.bs-header .container { - position: relative; -} -.bs-header p, .bs-header h1 { - color: white; - text-shadow: - -1px -1px 0 #000, - 1px -1px 0 #000, - -1px 1px 0 #000, - 1px 1px 0 #000; -} - -@media (min-width: 768px) { - .bs-header { - font-size: 21px; - text-align: left; - } - .bs-header h1 { - font-size: 60px; - line-height: 1; - } -} - -@media (min-width: 992px) { - .bs-header p { - margin-right: 380px; - } -} - -.tooltip-inner { - font-size: medium; -} - -span.anchor { - margin-top: -70px; /* Size of fixed header */ - padding-bottom: 70px; - height: 0px; - display: block; -} - -.tr-first-in-group { - border-top: 2px solid; - border-color: lightgray; - padding-top: 10px; -} - -/* To hide the empty python index */ - -#indices-and-tables { - visibility: hidden; - display: none; -} - -.jumbotron { - position: relative; -} -.jumbotron canvas { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #e9ecef; -} -.jumbotron .container { - pointer-events: none; - position: relative; - z-index: 10; -} -.jumbotron .container .btn { - margin-bottom: 0.25em; - pointer-events: auto; -} - - diff --git a/doc/jekyll_tools/css/pydoctor.css b/doc/jekyll_tools/css/pydoctor.css deleted file mode 100644 index 18c3e03b9..000000000 --- a/doc/jekyll_tools/css/pydoctor.css +++ /dev/null @@ -1,399 +0,0 @@ -.pydoctor-navbar { - margin-bottom: 0px; -} - -.page-header { - margin-top: 22px; - position: sticky; - top: 0; - display: flex; - flex-wrap: wrap; - justify-content: space-between; - align-items: baseline; - background-color: #fff; - margin-bottom: 3px; - border-bottom: 0; - box-shadow: 0px 0px 8px 8px #fff; -} -.page-header h1 { - margin-bottom: 0; -} - -.categoryHeader { - font-size: 24px; - color: #777; - margin-bottom: 1.8em; -} - -a[name] { - position: relative; - bottom: 80px; - font-size: 0; -} - -.bs-docs-container ul { - margin-top: 10px; - padding-left: 10px; -} - -.bs-docs-container li { - padding-top: 5px; - padding-bottom: 5px; -} - -.bs-docs-container li a { - text-decoration: none; -} - -.bs-docs-container ul { - margin-left: 10px; -} - -.bs-docs-container ul ul { - border-left-color: #e1f5fe; - border-left-width: 1px; - border-left-style: solid; -} - -.bs-docs-container ul ul ul { - border-left-color: #b3e5fc; -} - -.bs-docs-container ul ul ul ul { - border-left-color: #81d4fa; -} - -.bs-docs-container ul ul ul ul ul { - border-left-color: #4fc3f7; -} - -.bs-docs-container ul ul ul ul ul ul { - border-left-color: #29b6f6; -} - -.bs-docs-container ul ul ul ul ul ul ul { - border-left-color: #03a9f4; -} - -.bs-docs-container ul ul ul ul ul ul ul ul { - border-left-color: #039be5; -} - -.pre { - white-space: pre; -} - -.undocumented { - font-style: italic; - color: #9e9e9e; -} - -.functionBody p { - margin-top: 6px; - margin-bottom: 6px; -} - -#splitTables > p { - margin-bottom: 5px; -} - -#splitTables > table, .fieldTable { - margin-bottom: 20px; - width: 100%; - border: 0; -} - -#splitTables > table { - border: 1px solid #eee; -} - -#splitTables > table tr { - border-bottom-color: #eee; - border-bottom-width: 1px; - border-bottom-style: solid; -} - -#splitTables > table tr td, .fieldTable tr td { - padding: 5px; -} - -#splitTables > table tr td { - border-left-color: #eee; - border-left-width: 1px; - border-left-style: solid; -} - -#splitTables > table tr td:nth-child(1), .fieldTable tr td:nth-child(1) { - border-left: none; - width: 150px; -} - -#splitTables > table tr td:nth-child(2), .fieldTable tr td.fieldArg { - width: 200px; -} - -tr.package { - background-color: #fff3e0; -} - -tr.module { - background-color: #fff8e1; -} - -tr.class, tr.classvariable, tr.baseclassvariable { - background-color: #fffde7; -} - -tr.instancevariable, tr.baseinstancevariable, tr.variable, tr.attribute, tr.property { - background-color: #f3e5f5; -} - -tr.interface { - background-color: #fbe9e7; -} - -tr.method, tr.function, tr.basemethod, tr.baseclassmethod, tr.classmethod { - background-color: #f1f8e9; -} - -tr.private { - background-color: #f1f1f1; -} - -.fieldTable { - margin-top: 10px; -} - -.fieldName { - font-weight: bold; -} - - -#childList > div { - margin: 10px; - padding: 10px; - padding-bottom: 5px; -} - -.functionBody { - margin-left: 15px; -} - -.functionBody > #part { - font-style: italic; -} - -.functionBody > #part > a { - text-decoration: none; -} - -.functionBody .interfaceinfo { - font-style: italic; - margin-bottom: 3px; -} - -.functionBody > .undocumented { - - margin-top: 6px; - margin-bottom: 6px; -} - -/* -- Links to class/function/etc names are nested like this: - label - This applies to inline docstring content marked up as code, - for example L{foo} in epytext or `bar` in restructuredtext, - but also to links that are present in summary tables. -- 'functionHeader' is used for lines like `def func():` and `var =` -*/ -code, .pre, #childList > div .functionHeader, -#splitTables > table tr td:nth-child(2), .fieldTable tr td.fieldArg { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code, #childList > div .functionHeader, .fieldTable tr td.fieldArg { - font-size: 90%; - color: #222222; -} -code > a { - color:#c7254e; - background-color:#f9f2f4; -} -/* top navagation bar */ -.page-header > h1 { - margin-top: 0; -} -.page-header > h1 > code { - color: #971c3a; -} - -/* -This defines the code style, it's black on light gray. -It also overwrite the default values inherited from bootstrap min -*/ -code { - padding:2px 4px; - background-color: #f4f4f4; - border-radius:4px -} - - -a.functionSourceLink { - font-weight: normal; -} - - -#childList > div { - border-left-color: #03a9f4; - border-left-width: 1px; - border-left-style: solid; - background: #fafafa; -} - -.moduleDocstring { - margin: 20px; -} - -#partOf { - margin-top: -13px; - margin-bottom: 19px; -} - -.fromInitPy { - font-style: italic; -} - -pre { - padding-left: 0px; -} - -/* Private stuff */ - -body.private-hidden #splitTables .private, -body.private-hidden #childList .private, -body.private-hidden #summaryTree .private { - /* changed because we don't want to hide members that pydoctor considers - * private; currently igraph._igraph.GraphBase is private according to - * pydoctor because of the underscore */ - /* display: none; */ -} - -#showPrivate { - padding: 10px; -} - -#current-docs-container { - font-style: italic; - padding-top: 11px; -} - -/* Deprecation stuff */ - -.deprecationNotice { - margin: 10px; -} - -/* Syntax highlighting for source code */ - -.py-string { - color: #337ab7; -} -.py-comment { - color: #309078; - font-style: italic; -} -.py-keyword { - font-weight: bold; -} -.py-defname { - color: #a947b8; - font-weight: bold; -} -.py-builtin { - color: #fc7844; - font-weight: bold; -} - -/* Doctest */ - -pre.py-doctest { - padding: .5em; -} -.py-prompt, .py-more { - color: #a8a8a8; -} -.py-output { - color: #c7254e; -} - -/* Admonitions */ - -div.rst-admonition p.rst-admonition-title:after { - content: ":"; -} - -div.rst-admonition p.rst-admonition-title { - margin: 0; - padding: 0.1em 0 0.35em 0em; - font-weight: bold; -} - -div.rst-admonition p.rst-admonition-title { - color: #333333; -} - -div.rst-admonition { - padding: 8px; - margin-bottom: 20px; - background-color: #EEE; - border: 1px solid #CCC; - border-radius: 4px; -} - -div.warning, div.attention, div.danger, div.error, div.caution { - background-color: #ffcf9cb0; - border: 1px solid #ffbbaa; -} - -div.danger p.rst-admonition-title, div.error p.rst-admonition-title, div.caution p.rst-admonition-title { - color: #b94a48; -} - -div.tip p.rst-admonition-title, div.hint p.rst-admonition-title, div.important p.rst-admonition-title{ - color: #3a87ad; -} - -div.tip, div.hint, div.important { - background-color: #d9edf7; - border-color: #bce8f1; -} - - -/* igraph-specific customizations follow from here */ - -.pydoctor-navbar { - display: none; -} - -table.fieldTable tr td { - vertical-align: baseline; -} - -.moduleDocstring { - margin: 20px 0; -} - -.page-header h1 { - font-size: 24px; -} -.categoryHeader { - font-size: 18px !important; - padding: 0 0 0 8px; -} -#showPrivate { - display: none; -} -.undocumented { - font-style: normal !important; -} - - diff --git a/doc/jekyll_tools/css/syntax.css b/doc/jekyll_tools/css/syntax.css deleted file mode 100644 index 67e6ea397..000000000 --- a/doc/jekyll_tools/css/syntax.css +++ /dev/null @@ -1,61 +0,0 @@ -.hll { background-color: #ffffcc } -.c { color: #408080; font-style: italic } /* Comment */ -.err { border: 1px solid #FF0000 } /* Error */ -.k { color: #008000; font-weight: bold } /* Keyword */ -.o { color: #666666 } /* Operator */ -.cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.cp { color: #BC7A00 } /* Comment.Preproc */ -.c1 { color: #408080; font-style: italic } /* Comment.Single */ -.cs { color: #408080; font-style: italic } /* Comment.Special */ -.gd { color: #A00000 } /* Generic.Deleted */ -.ge { font-style: italic } /* Generic.Emph */ -.gr { color: #FF0000 } /* Generic.Error */ -.gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.gi { color: #00A000 } /* Generic.Inserted */ -.go { color: #888888 } /* Generic.Output */ -.gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.gs { font-weight: bold } /* Generic.Strong */ -.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.gt { color: #0044DD } /* Generic.Traceback */ -.kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.kp { color: #008000 } /* Keyword.Pseudo */ -.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.kt { color: #B00040 } /* Keyword.Type */ -.m { color: #666666 } /* Literal.Number */ -.s { color: #BA2121 } /* Literal.String */ -.na { color: #7D9029 } /* Name.Attribute */ -.nb { color: #008000 } /* Name.Builtin */ -.nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.no { color: #880000 } /* Name.Constant */ -.nd { color: #AA22FF } /* Name.Decorator */ -.ni { color: #999999; font-weight: bold } /* Name.Entity */ -.ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.nf { color: #0000FF } /* Name.Function */ -.nl { color: #A0A000 } /* Name.Label */ -.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.nt { color: #008000; font-weight: bold } /* Name.Tag */ -.nv { color: #19177C } /* Name.Variable */ -.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.w { color: #bbbbbb } /* Text.Whitespace */ -.mf { color: #666666 } /* Literal.Number.Float */ -.mh { color: #666666 } /* Literal.Number.Hex */ -.mi { color: #666666 } /* Literal.Number.Integer */ -.mo { color: #666666 } /* Literal.Number.Oct */ -.sb { color: #BA2121 } /* Literal.String.Backtick */ -.sc { color: #BA2121 } /* Literal.String.Char */ -.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.s2 { color: #BA2121 } /* Literal.String.Double */ -.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.sh { color: #BA2121 } /* Literal.String.Heredoc */ -.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.sx { color: #008000 } /* Literal.String.Other */ -.sr { color: #BB6688 } /* Literal.String.Regex */ -.s1 { color: #BA2121 } /* Literal.String.Single */ -.ss { color: #19177C } /* Literal.String.Symbol */ -.bp { color: #008000 } /* Name.Builtin.Pseudo */ -.vc { color: #19177C } /* Name.Variable.Class */ -.vg { color: #19177C } /* Name.Variable.Global */ -.vi { color: #19177C } /* Name.Variable.Instance */ -.il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/doc/jekyll_tools/favicon.ico b/doc/jekyll_tools/favicon.ico deleted file mode 100644 index df709da1aa15e00cf36f79285888a834ab0df8e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142910 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 aWz=cfH9OLW>RYJ?BYxegywt_j^zi>D?NN3B diff --git a/doc/jekyll_tools/favicon.svg b/doc/jekyll_tools/favicon.svg deleted file mode 100644 index 6b2569802..000000000 --- a/doc/jekyll_tools/favicon.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - logo-black - - - - - - - - - - - - diff --git a/doc/jekyll_tools/fonts/fonts.css b/doc/jekyll_tools/fonts/fonts.css deleted file mode 100644 index d4776e902..000000000 --- a/doc/jekyll_tools/fonts/fonts.css +++ /dev/null @@ -1,32 +0,0 @@ -@font-face { - font-family: 'rlogo'; - src:url('/fonts/rlogo.eot'); - src:url('/fonts/rlogo.eot?#iefix') format('embedded-opentype'), - url('/fonts/rlogo.ttf') format('truetype'), - url('/fonts/rlogo.woff') format('woff'), - url('/fonts/rlogo.svg#rlogo') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class*="icon-rlogo"], [class*="icon-rlogo-alt"] { - font-family: 'rlogo'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - color: auto; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-rlogo:before { - content: "\e600"; -} -.icon-rlogo-alt:before { - content: "\e601"; -} diff --git a/doc/jekyll_tools/img/igraph_logo_black.svg b/doc/jekyll_tools/img/igraph_logo_black.svg deleted file mode 100644 index 410ffa84d..000000000 --- a/doc/jekyll_tools/img/igraph_logo_black.svg +++ /dev/null @@ -1 +0,0 @@ -logo-black \ No newline at end of file diff --git a/doc/jekyll_tools/img/igraph_logo_white.svg b/doc/jekyll_tools/img/igraph_logo_white.svg deleted file mode 100644 index cada6f592..000000000 --- a/doc/jekyll_tools/img/igraph_logo_white.svg +++ /dev/null @@ -1 +0,0 @@ -logo-white \ No newline at end of file diff --git a/doc/jekyll_tools/js/affix.js b/doc/jekyll_tools/js/affix.js deleted file mode 100644 index a94c76253..000000000 --- a/doc/jekyll_tools/js/affix.js +++ /dev/null @@ -1,10 +0,0 @@ - -var $window = $(window); -var $body = $(document.body); - -$body.scrollspy({ target: '.bs-sidebar' }); - -$window.on('load', function () { - $body.scrollspy('refresh'); -}); - diff --git a/doc/jekyll_tools/js/html5shiv.js b/doc/jekyll_tools/js/html5shiv.js deleted file mode 100644 index 784f221ca..000000000 --- a/doc/jekyll_tools/js/html5shiv.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); -a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; -c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| -"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); -for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d

    3&d%}xZZW+`g_A~m_IP753kl3u7nInA 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 z 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 mMB}CUMZX3{Qm%)pbLxu literal 19005 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 Ogs#>>&Bq$HSN=bKBxy4M diff --git a/tests/drawing/cairo/baseline_images/graph_mark_groups_directed.png b/tests/drawing/cairo/baseline_images/graph_mark_groups_directed.png index 77106eb56d46320be55f68af9f3cc345a7d8513a..83d6e37647f1b6fe90f88f080974afea8573013d 100644 GIT binary patch literal 17353 zcmZX+2|QNayFR`t5(=3WN~WTSLS)Dr5*bRSgcJ%PL?jd?Bqc*cL`8;(gv?4RMP$mX z%ww5n|7&~C_x#TP9Pj7-RL`^b+H0?M57&L&*Ak$krM8KdiZJ>!BE;?C9h z?Z!h(LN7fb;n%|uMN=tT{l;*SvwQdMId;rsYQc^nWd8<#yAA$Lou1BhQ-hnh_A_!b zi!-Uv#P3#Infu+PxcXC4#8&_C;pQ_XFP8Y#gWB8O^77K=|GYmeR=8b|Pe+brhtFc& zpi7P7e9u&Q`2&yZtYR7upY_Yj?-bI0!oq6#+Ro<$USQUBexg^&tdqgXIqucRpbYgB znMwU=)5EI^L#bBU)WU&$>m41gzjO2M`w-xkVnWw3n8rUnGo@MJ_|&p0!fF$>aL{Ej zVm8yd=E?BttoQHK_M4&nS0bKu_x6r!$6P4Z^EsG_AsE(q%z7PESjjlxY4D0)eq?M# zL+f5{Zmy99g;i-FqmpH=L#NhJtyk6BzTx$e&$b&hU0tiuzg8%Z?X1-lm6MBqXtOdX2@`7w?9K9(vgESTE_GL#{pT2FkAi zqs%@f{fPjGf{QOfTX~!Q+>FVm1m6b7@c?|a6q)dwTtWY*+V&AYSf$Hp;tNUr2>4b!m z?%%(kV#dtG^x9*3$e-71uEu-C`Jq;9#KESnxbT{zb*k)y}fCV@uR{?N=9G4^&=|! z`i=9G{p0SwWB)M7voJINz&gvVW@3VJCCjdc?e9`!dH#6rR|$Q0P>vy1=5McosjkF6 zb0$3ScUE?G$=t6XSg`gZ@$TGCui=iOYtPv^c>Oz;JD$j2<5AaGOuoKo?l3;iKRCvm zCw8okh9M+rxPEZ*SCH1~nPZfVw_fU&O7-^kaw~YsNJ-7~$9a!oI736j*|GN6n3(FA zgOX><*Uuk#^5n_tT%}_9`}e6U$$^1^H44ivgI}W*S0^-*Q*En4w-^+yMEh56+~B|U z-aYSY!|Cd}x?^Kwzdr^qR++6#M3yX7EUoqt0=j-a$MdfYM`$H!96c)Iz2b@Iye}`O zq@;`)f8@T8gFd5p!N%2f28*%(Qp=lbd)JTmPxMw*-s4`JZZgx*(0D9$spaKKA#ZQ* z-v=d{UY*%0ZQrK2I$!hZOu_C&2U>BFK*mfe{HUv|Z``;sNh@}!B_~xsbrUVEQ*q7L z{&!b~CnhF7hVYK}^}VpW8x|I(62z8nlAm??_s1_@66Ok6*9uxXx{z%LEk;VdfB$Y; zD%@{Sot_bn55=s3jA9vNVAib3Qs6QzFQn>YIp95|q$ps;J#%YXbgGchp@ z4VK7-hlOcA5`XHwxcwEJ^wjTvW?M6F+4Af6@8SBF%v@Y44K|OZ z9rnr^q<`|2tgfzpD0qBJELEOZAS0uwyu7@Wl+=zLWv#7p`}e9t{G!m<-aDCy8eY>%XaJIQ4^=>sLN;ZMn&Kv7C ze5tBhw{BgI@ukI?Q5Am)Icn>8#0K+?k$cYshJ+|y{bPRd;zb=DoeLKReupUTl?_w5 z)c$U|tIW45Qq0 zlNnWL>h-<6yzrfgiHV1YN6i!Y@nT9wH`&X-KHQ|D!@VBZy@0z0T~FlPv`klPy&K+K zYJIzI!)9@rb>ZOPviJs31zNK2aewk(;MF<9-Lx#EbXVUezGBI`k{=HK+vi-pZ>xJpz z**52zfNIKXN0`dT+OAXCA31U)h;7f2{w!N8?e;)M*CWN0yQHKVzkS;Se}LJZO4U#J zr`t_PE9TCGCKMN1 zF&#@Czf4LuQwk17#`p%CLB(s^8LBVjv>-;By0A4%1Tqd?nPtr@@|bpVb7POCi`dCf ztr;cJ8zA(AF_uayh|h26lL7JZ<3}DvuNV=>2N4lchy<7nVod$7Y7s)tWq^^1sf;!6 z{yv#?*$Ff|n%fPC+y4GdsRr6Edz0yWCB=CI87;^`@Ya=;Rm)8UZsXLOxb9R_h40?8 zCszEd@{uF!eI<3asn7)dqBVIWDkpbsr1>?r;4;e&(WiB+c~74{#g?C&p*T>{MgR2% zpP&2lq@>D^ADyW7hGm_ryw}`p2n)f6S?w^p!NShoKQ#1()kmlCS4B`&RTXE<4L}fK z^|6xil2y};CjVQvu!tE*P6_{%H6kJa18~bY#$zL?Saz_KvgT!qyF2z3&34ey&|net zL-_m#dqjwH=gv7hJLgj}vPEDO5F{TxderyraZokouqso+N8~YPX6E0&e`lO2XiPN_ zTVP1QTb#pg@7uSJzB*n?SXs~DxrieMu*tmo_g7X{)~=H;?rf$MQDyo?fp|_jDV(N| zGE(GzJP+=e5ms(%O+TIMBFk;irM%1$b9j%g-yCoFE27>e=f;g2d-v{5aHcqQ(7EsH z$j|IZF|+C}dQBxJ!W?+#f$bx$|}}3 zQgrTpR~BAgheFEx7_tSvdMcjg6u+XP;=zLlv4!&TML@OK2;rkVF-C9g zjK~mVedC>u-!IOLQu!-GdP+(@`l-)X3Fqb<+a`b`&X~gjEKkM5UzKiJ`{_L*T$&cK z_lyVf;NXv>$!-FkwJp?fC(^K*!!nTRt_(Le*yI2-z(kWx zE?yjz8!tqn{?c_fHj(DI8zK_ETk0VU9{?KN<&?Z##wn-96s?SSymxPPL&Jgp5sxXv zsf4P1_|k41Gw7NbYcE)HY>MP`5`-bG(N{O`3H(#mvm*DO#LH+vP`>pqF0M5KBtC12DK-mHTaU1*%oV^#MmvfM^ixM0)3+{f zXlB)ld96KT>gVq6?$5w`FF3fD)`SSwE0L5%XHa)!1)>H4iYZza|cjC1=n@ zDQ@BTv7_05N&g+CPHF=+6;-V_F{Y=lKZ9*Rt}mRb(?F8kGLk?;w+7;z`qv`#ulx-@ zi)S4_zG`-2a-!N!JlrR9PSGxtCfI-w6cD&F@O=j#-_4bE<~LWD`W4N*m#=7Q(lgw* zdpyc=*2u`{*fCl>TIYM+bB)Q#$xiRp>(thEj~dvYdQzDK19*BCwt2&|?7zp~7%(C1 zD10SnN{xeHvlNEZzLHWkUjqM(i4cemNcAfHl;%}HY|`gG(qokH29~qH5O#KU%E~u$ zbEWZ|%*?e(T%T_E5-t)|m@RK3R({NYn1Ov_@8QUqYS@_F;cQRayfK#|(+mbWx*s+< z4DwU=2Xu%LV|VxYYvV;t+153P8AdK_!Y@CnT9~dKUtNdU*%3_;-D7Usk+#FGOKw z?q);kI!a1SnjK~o99y?Oe*CzK)rY9RTgKUXGM#Tf2fefPSHs+^f4?RqNYmdg7#FV7 zs8id#dHkBky(co4o%Hk$$RSV3?c1kYOexOK&%d_v@m@%69XYn_Sg%B56^{9jTZM8R zR4i1$6yyvrL(sl{c^N%H9UJ;*2-o1E`=*3ht> zdV132Oa_Xut|qgRN!rry-*u#=b6cKM5v;H_DZNvEmX?;^w(gfXV`%t;`D+&cpsrAo zw`O!b-gXV(g&4nBPh4487|uXe%(rRSO>LbPd5+avY}c+qCTnZv>c4h7)ME<^7iPyZ z8f-2eCZtB9te*_lJ+CUiMc3divoR$xg|G1HUyJ?;rymNle**)9*u|n}Oo>cBM5S*v zHLFXLH7Xl!1f=XP9~l`Dtf+W#-9G!*uT+DKf3E_j|MB8@Ytc0~C#S3dQE`=1Dg&dV zXS#k_wDk8C2u{`b7uFOi$5YnjY7l21!U=L(o*>BerEO7yr_0x85wHH zvefv|K}YEKzpmt2Z0%e@nf9hN*CD9-X7o!NoBeWf1?L`18E70cv7LJ=5L(~XzU*HW zi3nv<j&sgHLdnE%RP^8>c^<_;h4a=!1n+wd}l zMnFA!zuTCeSO(YedqV;j-{sDR4Ggq=pd@TRblpARp~R#x`BgIA^SX6jV^{Zpi$Rl= zmzTEuwBG1V3ZGLp&6#KQ^y(8-g7%sfi^|fa^p^SCo0WJKRsIgq{`xr}E%|C!W%?Bt zle%Z>6H$^#zqA7DiQ#P2Wi^VcG0fI!rWA;g|Sov$N?^8~hjW%E2 zDVFiPpnzY!gpGZ%K2_TMd;HmRA6-!B*d3%OUHD{h01!eevGz{&&BYWWCa&K8ezRgv zcSLp6MrkLL?)`dAlu7~cD(v2E1AD@DF~w5N>ZhwEx}}0pL0CR^EHE-MGV2CW8sRcj ze{t?lx1`nAt`D3I60flb$F#JHFaK6GHjch|ktm%Jmq~QW*{!S|N)~y&<%G{A3rE#& znxf?*2CtT2gQ5JO81kMyJ5qa;Ft_btwk}>-u#MFclBL@%`I;tp^-M?c^~bBG6kRv) z9h;cx*8oYIa~4b;?ss{#)hOa+@A^vKx^*idyNlrk%h}79|Gqq#bl2M*FmY*VcXbQ} zvGfX?SX^98$G-QxqpG~-u5v((tSpJ&W)YE*Lj3%~>>CNYp98gt4k#E0li~t5-|UP! z;pb*1HnBY0DZ)fe*u`aMJHs>(A~-U20=U?pmYK`Aju<{yJOr2s{J;{po{)NV*q0g( za~eMPTqE*`_2F+pe*l)7GR!ij{HcArf!%0TD2di4Ops}(>erZq56d{aZA|=T3tWL& zUNxR2O7C6BF{ZYzkJncj=;`ShC4buCTR;YBX`(9G6h6Voq;Kth^2y#gllpg*8Q3e7 zKfj;=Q8R>Np9L%v_2dC>5@j2uPs@P|-_0A- zj8G>;MMWiKH*ddZxQ-C{^J!-Yg0*0b=sKbislB|W#$jb?p1xW*NG*{tKY&@dqXZ05 zTrqTEd|dun0-yDiMFH#!@bllPwvZ!V=D-8(7^8eA0bj{uPiZJhzi@1@rlqAlV*MJW z4q+H~=MIgx_bQTuzMdX#nFdvxc?`ZKDk5^u@dXMH{1Z$A8C*-e6@4XhKHT;oGWCIK zt?_lU4g;Y-@<5Fz;O^b?jxVG@ITDTOpin3%DCnyn-Q6@zm{0TV+{qcU&nP|cJ4)W# zTHTB$k#K6loD$R|z<~E`JAmUOSds8w7Z#%aDb^Wfnu4#SAhxhn^^I-Qy)sUeE`+%p zUJkX6xXj7xn0s^Br%#_ICY-3PQ!=oXUBW~%t*_*P3Q*>DoA8%%@-K|Ok`0yQUru%w zUq`m8?)th8reL0}dY9vA)9~u@xOdRz1RHWVQOqYfIT_D>QWgdHOPE)2#JHoTBz$a{#(IBVO*5kvtBYP*g?BNxVov#>!DVIOqtQUabD5FJWTV#>lj zskkQ1I47_yN^aMm3t=!1LppayK>%q*MKc$+oUU47qB#;IF|Z&gjF2);PI4&g4|kY0 zZ{Ey%ed@u$_7u`~+Aq7f#K>M5D)ZgI8S{YL9_=eb^-=rI0itaoZ%KtyVgJrM-o|4W zS%LbuZL{n5l_ZVG^%A0=tAfmXywnJckNj+=x_W~(422l+aJ;>R)m z;)P^87*79h8+_88%zp!u?@{w4A&RYHF1zfq|a39lEOH!Zw+5 ziAi?tXK30(rH&x#|3O7mlj)4~wv~!D{t7E@@ zSp*AJJAU9Ilqg^&CtqkD^qk9V*t9l;@cY)*R;~@!G8UVNcn;fbYrCLx0_-4akn{^{ zD<^C>@ck(&P_WTkxStuz7*P}PU_J!*?Yj)tA|d+_2VT`@qOgc8P>asKr=Di0#yb+( z7k<15K1ILwcjt|pH|wu<(Qh51AguV|32k}0F83ELFlq6fU{SzAr2ISSzULEVoLUhS z#G}~ge@#wwhm1@fHV=tOxAos4*d`iJJLJE6mvYJRHoT-%x&ELGf+!(cDI??DT~1YN z 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 mMB}CUMZX3{Qm%)pbLxu literal 19005 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 Ogs#>>&Bq$HSN=bKBxy4M diff --git a/tests/drawing/cairo/baseline_images/graph_mark_groups_squares_directed.png b/tests/drawing/cairo/baseline_images/graph_mark_groups_squares_directed.png index d3168068ef58d289d1fff76b692d9bf2b22ae6fb..c5372745cb597e2bbd728fcaa117abd639f956cb 100644 GIT binary patch literal 14924 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 literal 16548 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 xi_-X%C1OvY)-3|biJ None: @image_comparison(baseline_images=["graph_basic"]) def test_basic(self): g = Graph.Ring(5) - plot(g, target=result_image_folder / "graph_basic.png", backend="cairo") + lo = g.layout("auto") + plot(g, layout=lo, target=result_image_folder / "graph_basic.png", backend="cairo") @image_comparison(baseline_images=["graph_directed"]) def test_directed(self): g = Graph.Ring(5, directed=True) - plot(g, target=result_image_folder / "graph_directed.png", backend="cairo") + lo = g.layout("auto") + plot(g, layout=lo, target=result_image_folder / "graph_directed.png", backend="cairo") @image_comparison(baseline_images=["graph_mark_groups_directed"]) def test_mark_groups(self): g = Graph.Ring(5, directed=True) + lo = g.layout("auto") plot( g, + layout=lo, target=result_image_folder / "graph_mark_groups_directed.png", backend="cairo", mark_groups=True, @@ -51,8 +55,10 @@ def test_mark_groups(self): @image_comparison(baseline_images=["graph_mark_groups_squares_directed"]) def test_mark_groups_squares(self): g = Graph.Ring(5, directed=True) + lo = g.layout("auto") plot( g, + layout=lo, target=result_image_folder / "graph_mark_groups_squares_directed.png", backend="cairo", mark_groups=True, From 6880e25aec46306cc9ee10945dc590627ad9b5e0 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 18:24:46 +0200 Subject: [PATCH 092/681] test: extending test coverage in CI a bit --- .github/workflows/build.yml | 2 +- setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 264db9e2f..bbe9e2699 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -295,7 +295,7 @@ jobs: - name: Test run: | - pip install --prefer-binary numpy scipy pandas networkx pytest pytest-timeout + pip install --prefer-binary cairocffi numpy scipy pandas networkx pytest pytest-timeout python -m pytest -v tests - uses: actions/upload-artifact@v3 diff --git a/setup.py b/setup.py index 7257780d5..36002acd3 100644 --- a/setup.py +++ b/setup.py @@ -978,6 +978,7 @@ def get_tag(self): # pure Python or have musllinux wheels as we don't want to compile wheels # in CI "test-musl": [ + "cairocffi>=1.2.0", "networkx>=2.5", "pytest>=7.0.1", "pytest-timeout>=2.1.0", From 4cd7f8a9b05b8972bbd525675dd0c68eb45c972b Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 18:27:25 +0200 Subject: [PATCH 093/681] ci: install Cairo in CI environment for tests --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bbe9e2699..d29e8cdd4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ jobs: - name: Build wheels (manylinux) uses: pypa/cibuildwheel@v2.13.1 env: - CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" + CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-manylinux_${{ matrix.wheel_arch }}" # Skip tests for Python 3.10 and 3.11 because SciPy does not have # 32-bit wheels for Linux @@ -40,7 +40,7 @@ jobs: - name: Build wheels (musllinux) uses: pypa/cibuildwheel@v2.13.1 env: - CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" + CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_BUILD: "*-musllinux_${{ matrix.wheel_arch }}" CIBW_TEST_COMMAND: "cd {project} && pip install --prefer-binary '.[test-musl]' && python -m pytest -v tests" @@ -65,7 +65,7 @@ jobs: - name: Build wheels (manylinux) uses: pypa/cibuildwheel@v2.13.1 env: - CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel && pip install -U cmake pip wheel && python setup.py build_c_core" + CIBW_BEFORE_BUILD: "yum install -y flex bison libxml2-devel zlib-devel cairo-devel && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 CIBW_BUILD: "*-manylinux_aarch64" @@ -90,7 +90,7 @@ jobs: - name: Build wheels (musllinux) uses: pypa/cibuildwheel@v2.13.1 env: - CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev && pip install -U cmake pip wheel && python setup.py build_c_core" + CIBW_BEFORE_BUILD: "apk add flex bison libxml2-dev zlib-dev cairo-dev && pip install -U cmake pip wheel && python setup.py build_c_core" CIBW_ARCHS_LINUX: aarch64 CIBW_BUILD: "*-musllinux_aarch64" CIBW_TEST_COMMAND: "cd {project} && pip install --prefer-binary '.[test-musl]' && python -m pytest -v tests" From 3a914318e4b0a1f57dfd93c0a190c55378ec3718 Mon Sep 17 00:00:00 2001 From: Tamas Nepusz Date: Thu, 29 Jun 2023 18:28:53 +0200 Subject: [PATCH 094/681] test: fix another failing Cairo test in CI --- .../baseline_images/clustering_directed.png | Bin 33682 -> 31493 bytes tests/drawing/cairo/test_graph.py | 2 ++ 2 files changed, 2 insertions(+) diff --git a/tests/drawing/cairo/baseline_images/clustering_directed.png b/tests/drawing/cairo/baseline_images/clustering_directed.png index 14885e28c4e93b66b41f7ec5884d509c27601dc5..712f1b95f8fdc22b4eb1b2683143634a81146a14 100644 GIT binary patch literal 31493 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