History of fungal_networks
The changes to the source code of this entry in the repository, newest first, each with the differences it made to the entry's files. They are also listed on GitLab.
[entries] Use American spelling in the descriptions 802d564
British spellings in the titles and descriptions of 69 entries (e.g. labelled, organisation, millimetres, centres, anonymised, neighbours, analysed, modelled, colour, licence) are replaced by the American ones. Proper names keep their spelling (Otago Harbour, the Centre for Water Systems, the Centre jeunesse de Montréal, the Dutch Ministry of Defence), as do quoted upstream terms, citations, and property names.
diff --git a/entries/fungal_networks/__init__.py b/entries/fungal_networks/__init__.py
index aee2cf2..60be8e8 100644
--- a/entries/fungal_networks/__init__.py
+++ b/entries/fungal_networks/__init__.py
@@ -23,9 +23,9 @@ from scipy.io import loadmat
title = "Fungal and slime mould networks (2016)"
description = r"""Spatial networks formed by the mycelia of saprotrophic woodland fungi and by the slime mould *Physarum polycephalum*, grown in the laboratory under different conditions, from S. H. Lee, M. D. Fricker and M. A. Porter, as distributed by A. R. Benson. The networks were extracted from images of the growing organisms: nodes are located at hyphal tips, branch points and fusions (anastomoses) of the mycelium, and an undirected edge represents a cord (a bundle of hyphae, or a tube for *Physarum*) connecting two of them. Edges are weighted by the conductance of the cord, $G = r^2/L$, where $r$ is the cord's radius and $L$ its length (the release does not state which of the weightings of the paper it contains; its weights are inversely proportional to the Euclidean edge length, as expected for the conductance-based "structural" networks, rather than the "path score" weights). There are 270 networks, each named after its experimental conditions in the form `<species>_<?>_<resources>_<grazing>_<interaction>_<age>_<replicate>`, where:
-- species: `Pp`, *Physarum polycephalum* (an acellular slime mould, taxonomically distinct from fungi); `Pv`, *Phanerochaete velutina*; `Ag`, *Agrocybe gibberosa*; `Pi`, *Phallus impudicus*; `Rb`, *Resinicium bicolor*; `Sc`, *Stropharia caerulea*.
+- species: `Pp`, *Physarum polycephalum* (an acellular slime mold, taxonomically distinct from fungi); `Pv`, *Phanerochaete velutina*; `Ag`, *Agrocybe gibberosa*; `Pi`, *Phallus impudicus*; `Rb`, *Resinicium bicolor*; `Sc`, *Stropharia caerulea*.
- the second field (`M` or `L`) is not explained in the paper; it probably refers to the size of the microcosm (some *P. velutina* networks were grown in large, 57 cm × 57 cm, microcosms).
-- resources: `I`, initial colonised wood block (inoculum) only; `I+R`, inoculum plus one additional wood block; `I+4R` and `I+4xR`, inoculum plus four additional wood blocks (placed either as a cross or together); `5xI`, five inocula in a pentagonal arrangement; `Tokyo` and `UK`, (for *Physarum*) oat flakes placed to match the major cities around Tokyo or in the UK.
+- resources: `I`, initial colonized wood block (inoculum) only; `I+R`, inoculum plus one additional wood block; `I+4R` and `I+4xR`, inoculum plus four additional wood blocks (placed either as a cross or together); `5xI`, five inocula in a pentagonal arrangement; `Tokyo` and `UK`, (for *Physarum*) oat flakes placed to match the major cities around Tokyo or in the UK.
- grazing: `U`, ungrazed; `Fc`, `Fc-L`, `Fc-M`, `Fc-H`, grazed by the collembolan *Folsomia candida* (a small soil arthropod), at low (10 per microcosm), medium (20) or high (40) density.
- interaction: `N`, grown alone; `Hf`, grown in competition with the fungus *Hypholoma fasciculare*.
- age: the age of the network, in days (`d`) or hours (`h`); and the replicate number.
[entries] Lay out spatial networks with cfd_layout() without the SBM partition 9db8d77
Road, power grid, public transport, water and river networks and physical meshes override get_pos() with the default parameters of cfd_layout(), without grouping by the partition of the SBM fit.
diff --git a/entries/fungal_networks/__init__.py b/entries/fungal_networks/__init__.py
index 5794007..aee2cf2 100644
--- a/entries/fungal_networks/__init__.py
+++ b/entries/fungal_networks/__init__.py
@@ -182,3 +182,9 @@ def parse(alts=None):
g.vp.coordinates.set_2d_array(numpy.asarray(m["coordinates"],
dtype="float").T)
yield alt, g
+
+
+def get_pos(g, sbm_fit):
+ # Spatial network: laid out with the default parameters of cfd_layout(),
+ # without the partition of the SBM fit
+ return cfd_layout(g)
[entries] New entry: fungal_networks a6af0ad
diff --git a/entries/fungal_networks/__init__.py b/entries/fungal_networks/__init__.py
new file mode 100644
index 0000000..5794007
--- /dev/null
+++ b/entries/fungal_networks/__init__.py
@@ -0,0 +1,184 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2020-2026 Tiago de Paula Peixoto <tiago@skewed.de>
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the Free
+# Software Foundation, either version 3 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 Affero General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Affero General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+from .. import *
+from scipy.io import loadmat
+
+title = "Fungal and slime mould networks (2016)"
+description = r"""Spatial networks formed by the mycelia of saprotrophic woodland fungi and by the slime mould *Physarum polycephalum*, grown in the laboratory under different conditions, from S. H. Lee, M. D. Fricker and M. A. Porter, as distributed by A. R. Benson. The networks were extracted from images of the growing organisms: nodes are located at hyphal tips, branch points and fusions (anastomoses) of the mycelium, and an undirected edge represents a cord (a bundle of hyphae, or a tube for *Physarum*) connecting two of them. Edges are weighted by the conductance of the cord, $G = r^2/L$, where $r$ is the cord's radius and $L$ its length (the release does not state which of the weightings of the paper it contains; its weights are inversely proportional to the Euclidean edge length, as expected for the conductance-based "structural" networks, rather than the "path score" weights). There are 270 networks, each named after its experimental conditions in the form `<species>_<?>_<resources>_<grazing>_<interaction>_<age>_<replicate>`, where:
+
+- species: `Pp`, *Physarum polycephalum* (an acellular slime mould, taxonomically distinct from fungi); `Pv`, *Phanerochaete velutina*; `Ag`, *Agrocybe gibberosa*; `Pi`, *Phallus impudicus*; `Rb`, *Resinicium bicolor*; `Sc`, *Stropharia caerulea*.
+- the second field (`M` or `L`) is not explained in the paper; it probably refers to the size of the microcosm (some *P. velutina* networks were grown in large, 57 cm × 57 cm, microcosms).
+- resources: `I`, initial colonised wood block (inoculum) only; `I+R`, inoculum plus one additional wood block; `I+4R` and `I+4xR`, inoculum plus four additional wood blocks (placed either as a cross or together); `5xI`, five inocula in a pentagonal arrangement; `Tokyo` and `UK`, (for *Physarum*) oat flakes placed to match the major cities around Tokyo or in the UK.
+- grazing: `U`, ungrazed; `Fc`, `Fc-L`, `Fc-M`, `Fc-H`, grazed by the collembolan *Folsomia candida* (a small soil arthropod), at low (10 per microcosm), medium (20) or high (40) density.
+- interaction: `N`, grown alone; `Hf`, grown in competition with the fungus *Hypholoma fasciculare*.
+- age: the age of the network, in days (`d`) or hours (`h`); and the replicate number.
+
+The growth substrates were agar (*Physarum*), black sand, or compressed soil, depending on the experiment.
+
+The networks have the following properties:
+
+- Nodes: `coordinates`, the horizontal and vertical position of the node in the image (in the units of the source data).
+- Edges: `weight`, the conductance of the cord (in arbitrary units)."""
+tags = ['Biological', 'Weighted', 'Spatial']
+url = 'https://www.cs.cornell.edu/~arb/data/spatial-fungi/'
+citation = [('S. H. Lee, M. D. Fricker, M. A. Porter, "Mesoscale analyses of fungal networks as an approach for quantifying phenotypic traits." Journal of Complex Networks (2016)', 'https://doi.org/10.1093/comnet/cnv034')]
+icon_hash = '603950658ee19e560906dfd3'
+upstream_license = None
+_networks = ['Ag_M_I+4R_U_N_42d_1', 'Pi_M_I_U_N_46d_1', 'Pi_M_I_U_N_46d_2',
+ 'Pi_M_I_U_N_46d_3', 'Pi_M_I_U_N_46d_4', 'Pi_M_I_U_N_46d_5',
+ 'Pi_M_I_U_N_46d_6', 'Pi_M_I_U_N_46d_7', 'Pp_M_Tokyo_U_N_26h_1',
+ 'Pp_M_Tokyo_U_N_26h_11', 'Pp_M_Tokyo_U_N_26h_2',
+ 'Pp_M_Tokyo_U_N_26h_4', 'Pp_M_Tokyo_U_N_26h_6',
+ 'Pp_M_Tokyo_U_N_26h_7', 'Pp_M_Tokyo_U_N_26h_9',
+ 'Pp_M_UK_U_N_15h_1', 'Pp_M_UK_U_N_15h_10', 'Pp_M_UK_U_N_15h_11',
+ 'Pp_M_UK_U_N_15h_12', 'Pp_M_UK_U_N_15h_2', 'Pp_M_UK_U_N_15h_6',
+ 'Pp_M_UK_U_N_15h_7', 'Pp_M_UK_U_N_15h_8', 'Pp_M_UK_U_N_15h_9',
+ 'Pv_L_I+4xR_Fc_N_155d_1', 'Pv_L_I+4xR_Fc_N_155d_2',
+ 'Pv_L_I+4xR_Fc_N_155d_3', 'Pv_L_I+4xR_Fc_N_208d_1',
+ 'Pv_L_I+4xR_Fc_N_208d_2', 'Pv_L_I+4xR_Fc_N_208d_3',
+ 'Pv_L_I+4xR_Fc_N_36d_1', 'Pv_L_I+4xR_Fc_N_36d_2',
+ 'Pv_L_I+4xR_Fc_N_36d_3', 'Pv_L_I+4xR_Fc_N_57d_1',
+ 'Pv_L_I+4xR_Fc_N_57d_2', 'Pv_L_I+4xR_Fc_N_57d_3',
+ 'Pv_L_I+4xR_Fc_N_78d_1', 'Pv_L_I+4xR_Fc_N_78d_2',
+ 'Pv_L_I+4xR_Fc_N_78d_3', 'Pv_L_I+4xR_Fc_N_99d_1',
+ 'Pv_L_I+4xR_Fc_N_99d_2', 'Pv_L_I+4xR_Fc_N_99d_3',
+ 'Pv_L_I+4xR_U_N_155d_1', 'Pv_L_I+4xR_U_N_155d_2',
+ 'Pv_L_I+4xR_U_N_155d_3', 'Pv_L_I+4xR_U_N_155d_4',
+ 'Pv_L_I+4xR_U_N_208d_1', 'Pv_L_I+4xR_U_N_208d_2',
+ 'Pv_L_I+4xR_U_N_208d_3', 'Pv_L_I+4xR_U_N_208d_4',
+ 'Pv_L_I+4xR_U_N_36d_1', 'Pv_L_I+4xR_U_N_36d_2',
+ 'Pv_L_I+4xR_U_N_36d_3', 'Pv_L_I+4xR_U_N_36d_4',
+ 'Pv_L_I+4xR_U_N_57d_1', 'Pv_L_I+4xR_U_N_57d_2',
+ 'Pv_L_I+4xR_U_N_57d_3', 'Pv_L_I+4xR_U_N_57d_4',
+ 'Pv_L_I+4xR_U_N_78d_1', 'Pv_L_I+4xR_U_N_78d_2',
+ 'Pv_L_I+4xR_U_N_78d_3', 'Pv_L_I+4xR_U_N_78d_4',
+ 'Pv_L_I+4xR_U_N_99d_1', 'Pv_L_I+4xR_U_N_99d_2',
+ 'Pv_L_I+4xR_U_N_99d_3', 'Pv_L_I+4xR_U_N_99d_4',
+ 'Pv_M_5xI_U_N_15d_3', 'Pv_M_5xI_U_N_18d_1', 'Pv_M_5xI_U_N_18d_2',
+ 'Pv_M_5xI_U_N_18d_3', 'Pv_M_5xI_U_N_21d_1', 'Pv_M_5xI_U_N_21d_2',
+ 'Pv_M_5xI_U_N_22d_3', 'Pv_M_5xI_U_N_25d_1', 'Pv_M_5xI_U_N_25d_2',
+ 'Pv_M_5xI_U_N_25d_3', 'Pv_M_5xI_U_N_28d_1', 'Pv_M_5xI_U_N_28d_2',
+ 'Pv_M_5xI_U_N_30d_2', 'Pv_M_5xI_U_N_30d_3', 'Pv_M_5xI_U_N_32d_1',
+ 'Pv_M_5xI_U_N_33d_3', 'Pv_M_5xI_U_N_35d_1', 'Pv_M_I+4R_U_N_15d_1',
+ 'Pv_M_I+4R_U_N_15d_2', 'Pv_M_I+4R_U_N_18d_1',
+ 'Pv_M_I+4R_U_N_18d_3', 'Pv_M_I+4R_U_N_18d_4',
+ 'Pv_M_I+4R_U_N_18d_5', 'Pv_M_I+4R_U_N_19d_2',
+ 'Pv_M_I+4R_U_N_21d_1', 'Pv_M_I+4R_U_N_21d_2',
+ 'Pv_M_I+4R_U_N_21d_4', 'Pv_M_I+4R_U_N_21d_5',
+ 'Pv_M_I+4R_U_N_22d_3', 'Pv_M_I+4R_U_N_25d_1',
+ 'Pv_M_I+4R_U_N_25d_2', 'Pv_M_I+4R_U_N_25d_3',
+ 'Pv_M_I+4R_U_N_25d_4', 'Pv_M_I+4R_U_N_25d_5',
+ 'Pv_M_I+4R_U_N_27d_1', 'Pv_M_I+4R_U_N_28d_4',
+ 'Pv_M_I+4R_U_N_28d_5', 'Pv_M_I+4R_U_N_29d_2',
+ 'Pv_M_I+4R_U_N_29d_3', 'Pv_M_I+4R_U_N_30d_4',
+ 'Pv_M_I+4R_U_N_31d_1', 'Pv_M_I+4R_U_N_32d_2',
+ 'Pv_M_I+4R_U_N_32d_3', 'Pv_M_I+4R_U_N_32d_5',
+ 'Pv_M_I+4R_U_N_33d_4', 'Pv_M_I+4R_U_N_35d_1',
+ 'Pv_M_I+4R_U_N_35d_3', 'Pv_M_I+4R_U_N_35d_5',
+ 'Pv_M_I+4R_U_N_36d_2', 'Pv_M_I+4R_U_N_38d_1',
+ 'Pv_M_I+4R_U_N_39d_2', 'Pv_M_I+4R_U_N_39d_3',
+ 'Pv_M_I+4R_U_N_42d_1', 'Pv_M_I+4R_U_N_42d_2',
+ 'Pv_M_I+4R_U_N_42d_5', 'Pv_M_I+4R_U_N_45d_1',
+ 'Pv_M_I+4R_U_N_46d_2', 'Pv_M_I+4R_U_N_50d_2',
+ 'Pv_M_I+R_U_N_18d_1', 'Pv_M_I+R_U_N_18d_2', 'Pv_M_I+R_U_N_18d_3',
+ 'Pv_M_I+R_U_N_18d_4', 'Pv_M_I+R_U_N_25d_1', 'Pv_M_I+R_U_N_25d_2',
+ 'Pv_M_I+R_U_N_25d_3', 'Pv_M_I+R_U_N_25d_4', 'Pv_M_I+R_U_N_31d_1',
+ 'Pv_M_I+R_U_N_31d_2', 'Pv_M_I+R_U_N_31d_3', 'Pv_M_I+R_U_N_31d_4',
+ 'Pv_M_I+R_U_N_39d_1', 'Pv_M_I+R_U_N_39d_2', 'Pv_M_I+R_U_N_39d_3',
+ 'Pv_M_I+R_U_N_39d_4', 'Pv_M_I_Fc_Hf_18d_1', 'Pv_M_I_Fc_Hf_18d_2',
+ 'Pv_M_I_Fc_Hf_18d_3', 'Pv_M_I_Fc_Hf_22d_1', 'Pv_M_I_Fc_Hf_22d_2',
+ 'Pv_M_I_Fc_Hf_22d_3', 'Pv_M_I_Fc_Hf_26d_1', 'Pv_M_I_Fc_Hf_26d_2',
+ 'Pv_M_I_Fc_Hf_26d_3', 'Pv_M_I_Fc_Hf_38d_1', 'Pv_M_I_Fc_Hf_38d_2',
+ 'Pv_M_I_Fc_Hf_38d_3', 'Pv_M_I_Fc_Hf_48d_1', 'Pv_M_I_Fc_Hf_48d_2',
+ 'Pv_M_I_Fc_Hf_48d_3', 'Pv_M_I_Fc_N_20d_1', 'Pv_M_I_U_Hf_18d_1',
+ 'Pv_M_I_U_Hf_18d_2', 'Pv_M_I_U_Hf_18d_3', 'Pv_M_I_U_Hf_22d_1',
+ 'Pv_M_I_U_Hf_22d_2', 'Pv_M_I_U_Hf_22d_3', 'Pv_M_I_U_Hf_26d_1',
+ 'Pv_M_I_U_Hf_26d_2', 'Pv_M_I_U_Hf_26d_3', 'Pv_M_I_U_Hf_30d_1',
+ 'Pv_M_I_U_Hf_38d_1', 'Pv_M_I_U_Hf_38d_2', 'Pv_M_I_U_Hf_38d_3',
+ 'Pv_M_I_U_Hf_48d_2', 'Pv_M_I_U_Hf_48d_3', 'Pv_M_I_U_Hf_52d_1',
+ 'Pv_M_I_U_N_15d_1', 'Pv_M_I_U_N_15d_2', 'Pv_M_I_U_N_18d_1',
+ 'Pv_M_I_U_N_18d_3', 'Pv_M_I_U_N_18d_5', 'Pv_M_I_U_N_18d_6',
+ 'Pv_M_I_U_N_18d_7', 'Pv_M_I_U_N_19d_2', 'Pv_M_I_U_N_20d_4',
+ 'Pv_M_I_U_N_21d_1', 'Pv_M_I_U_N_21d_2', 'Pv_M_I_U_N_22d_3',
+ 'Pv_M_I_U_N_25d_1', 'Pv_M_I_U_N_25d_2', 'Pv_M_I_U_N_25d_3',
+ 'Pv_M_I_U_N_25d_5', 'Pv_M_I_U_N_25d_6', 'Pv_M_I_U_N_25d_7',
+ 'Pv_M_I_U_N_27d_1', 'Pv_M_I_U_N_29d_2', 'Pv_M_I_U_N_29d_3',
+ 'Pv_M_I_U_N_31d_1', 'Pv_M_I_U_N_31d_5', 'Pv_M_I_U_N_31d_6',
+ 'Pv_M_I_U_N_31d_7', 'Pv_M_I_U_N_32d_2', 'Pv_M_I_U_N_32d_3',
+ 'Pv_M_I_U_N_35d_1', 'Pv_M_I_U_N_35d_3', 'Pv_M_I_U_N_36d_2',
+ 'Pv_M_I_U_N_38d_1', 'Pv_M_I_U_N_39d_2', 'Pv_M_I_U_N_39d_3',
+ 'Pv_M_I_U_N_39d_5', 'Pv_M_I_U_N_39d_6', 'Pv_M_I_U_N_39d_7',
+ 'Pv_M_I_U_N_42d_1', 'Pv_M_I_U_N_42d_2', 'Pv_M_I_U_N_43d_3',
+ 'Pv_M_I_U_N_46d_3', 'Rb_M_I_Fc-H_N_16d_1', 'Rb_M_I_Fc-H_N_16d_2',
+ 'Rb_M_I_Fc-H_N_16d_3', 'Rb_M_I_Fc-H_N_18d_1',
+ 'Rb_M_I_Fc-H_N_18d_2', 'Rb_M_I_Fc-H_N_18d_3',
+ 'Rb_M_I_Fc-H_N_20d_1', 'Rb_M_I_Fc-H_N_20d_2',
+ 'Rb_M_I_Fc-H_N_20d_3', 'Rb_M_I_Fc-H_N_26d_1',
+ 'Rb_M_I_Fc-H_N_26d_3', 'Rb_M_I_Fc-H_N_31d_3',
+ 'Rb_M_I_Fc-L_N_16d_1', 'Rb_M_I_Fc-L_N_16d_2',
+ 'Rb_M_I_Fc-L_N_16d_3', 'Rb_M_I_Fc-L_N_18d_1',
+ 'Rb_M_I_Fc-L_N_18d_2', 'Rb_M_I_Fc-L_N_18d_3',
+ 'Rb_M_I_Fc-L_N_20d_1', 'Rb_M_I_Fc-L_N_20d_2',
+ 'Rb_M_I_Fc-L_N_20d_3', 'Rb_M_I_Fc-L_N_26d_1',
+ 'Rb_M_I_Fc-L_N_26d_2', 'Rb_M_I_Fc-L_N_26d_3',
+ 'Rb_M_I_Fc-L_N_31d_1', 'Rb_M_I_Fc-L_N_31d_2',
+ 'Rb_M_I_Fc-L_N_31d_3', 'Rb_M_I_Fc-M_N_16d_1',
+ 'Rb_M_I_Fc-M_N_16d_2', 'Rb_M_I_Fc-M_N_16d_3',
+ 'Rb_M_I_Fc-M_N_18d_1', 'Rb_M_I_Fc-M_N_18d_2',
+ 'Rb_M_I_Fc-M_N_18d_3', 'Rb_M_I_Fc-M_N_20d_1',
+ 'Rb_M_I_Fc-M_N_20d_2', 'Rb_M_I_Fc-M_N_20d_3',
+ 'Rb_M_I_Fc-M_N_26d_1', 'Rb_M_I_Fc-M_N_26d_2',
+ 'Rb_M_I_Fc-M_N_26d_3', 'Rb_M_I_Fc-M_N_31d_1',
+ 'Rb_M_I_Fc-M_N_31d_2', 'Rb_M_I_Fc-M_N_31d_3', 'Rb_M_I_U_N_16d_1',
+ 'Rb_M_I_U_N_16d_2', 'Rb_M_I_U_N_16d_3', 'Rb_M_I_U_N_18d_1',
+ 'Rb_M_I_U_N_18d_2', 'Rb_M_I_U_N_18d_3', 'Rb_M_I_U_N_20d_1',
+ 'Rb_M_I_U_N_20d_2', 'Rb_M_I_U_N_20d_3', 'Rb_M_I_U_N_26d_1',
+ 'Rb_M_I_U_N_26d_2', 'Rb_M_I_U_N_26d_3', 'Rb_M_I_U_N_31d_1',
+ 'Rb_M_I_U_N_31d_2', 'Rb_M_I_U_N_31d_3', 'Sc_M_I_U_N_42d_1']
+
+upstream_prefix = 'gdrive://'
+files = [(f'1P8CZcmGzrf90C0nsAt9UQaJwI6CwoHFm:zip:{n}.mat', n, None) for n in _networks]
+
+def fetch_upstream(force=False):
+ return fetch_upstream_files(__name__.split(".")[-1], upstream_prefix, files,
+ force)
+
+@cache_network()
+@coerce_props()
+@annotate()
+def parse(alts=None):
+ global files
+ name = __name__.split(".")[-1]
+ for fname, alt, fmt in files:
+ if alts is not None and alt not in alts:
+ continue
+ with open_upstream_file(name, fname, "rb", seekable=True) as f:
+ m = loadmat(f)
+ A = m["A"].tocoo()
+ idx = A.row < A.col
+ g = Graph(directed=False)
+ g.add_vertex(A.shape[0])
+ g.ep.weight = g.new_ep("double")
+ g.add_edge_list(numpy.column_stack((A.row[idx], A.col[idx], A.data[idx])),
+ eprops=[g.ep.weight])
+ g.vp.coordinates = g.new_vp("vector<double>")
+ g.vp.coordinates.set_2d_array(numpy.asarray(m["coordinates"],
+ dtype="float").T)
+ yield alt, g