Skip to content

Commit 3eed31d

Browse files
committed
add bindings for new traits
1 parent b81d5cd commit 3eed31d

2 files changed

Lines changed: 46 additions & 12 deletions

File tree

src/reticula/__init__.py

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
function_module=_reticula_ext,
2121
api_module_name=__name__)
2222

23-
_pair_vertex_types = set([
23+
_pair_vertex_types = set(
2424
getattr(_reticula_ext, f"pair_{i.__name__}_{i.__name__}")
25-
for i in _simple_vertex_types])
25+
for i in _simple_vertex_types)
2626

2727
_static_edge_prefixes = [
2828
"directed_edge", "undirected_edge",
@@ -32,6 +32,9 @@
3232
_all_vertex_types = set(_reticula_ext.types.vertex_types)
3333

3434
for _e in _static_edge_prefixes:
35+
_vert_types = _simple_vertex_types | _pair_vertex_types
36+
if _e in {"directed_edge", "undirected_edge"}:
37+
_vert_types = _all_vertex_types
3538
setattr(_sys.modules[__name__],
3639
_e, _generic_attribute(
3740
attr_prefix=_e,
@@ -48,6 +51,16 @@
4851
function_module=_reticula_ext,
4952
api_module_name=__name__))
5053

54+
_static_network_types = set(
55+
getattr(_reticula_ext, f"{_e[:-4]}network_{_t.__name__}")
56+
for _e in ["directed_edge", "undirected_edge"]
57+
for _t in _all_vertex_types)
58+
59+
_static_network_types |= set(
60+
getattr(_reticula_ext, f"{_e[:-4]}network_{_t.__name__}")
61+
for _e in ["directed_hyperedge", "undirected_hyperedge"]
62+
for _t in _simple_vertex_types | _pair_vertex_types)
63+
5164
from ._reticula_ext import (
5265
mersenne_twister)
5366

@@ -115,6 +128,13 @@
115128
function_module=_reticula_ext,
116129
api_module_name=__name__))
117130

131+
_temporal_network_types = set(
132+
getattr(_reticula_ext, f"{_e[:-4]}network_{_v.__name__}_{_t.__name__}")
133+
for _e in _temporal_edge_prefixes
134+
for _v in _temporal_edge_verts
135+
for _t in _time_types)
136+
137+
_all_network_types = _static_network_types | _temporal_network_types
118138

119139
_vertex_generic_attrs = [
120140
"component", "component_size", "component_size_estimate"]
@@ -149,37 +169,51 @@
149169
arg_names=("edge_type",),
150170
options={(t,) for t in _all_edge_types},
151171
function_module=_reticula_ext,
152-
api_module_name=__name__)
172+
api_module_name=__name__,
173+
default_callable=_reticula_ext.is_network_edge)
153174
is_static_edge = _generic_attribute(
154175
attr_prefix="is_static_edge",
155176
arg_names=("edge_type",),
156177
options=set((t,) for t in _all_edge_types),
157178
function_module=_reticula_ext,
158-
api_module_name=__name__)
179+
api_module_name=__name__,
180+
default_callable=_reticula_ext.is_static_edge)
159181
is_temporal_edge = _generic_attribute(
160182
attr_prefix="is_temporal_edge",
161183
arg_names=("edge_type",),
162184
options={(t,) for t in _all_edge_types},
163185
function_module=_reticula_ext,
164-
api_module_name=__name__)
186+
api_module_name=__name__,
187+
default_callable=_reticula_ext.is_temporal_edge)
188+
165189
is_instantaneous = _generic_attribute(
166190
attr_prefix="is_instantaneous",
167191
arg_names=("edge_type",),
168-
options={(t,) for t in _all_edge_types},
192+
options={(t,) for t in _all_edge_types | _all_network_types},
169193
function_module=_reticula_ext,
170-
api_module_name=__name__)
194+
api_module_name=__name__,
195+
default_callable=_reticula_ext.is_instantaneous)
171196
is_undirected = _generic_attribute(
172197
attr_prefix="is_undirected",
173198
arg_names=("edge_type",),
174-
options={(t,) for t in _all_edge_types},
199+
options={(t,) for t in _all_edge_types | _all_network_types},
175200
function_module=_reticula_ext,
176-
api_module_name=__name__)
201+
api_module_name=__name__,
202+
default_callable=_reticula_ext.is_undirected)
203+
is_directed = _generic_attribute(
204+
attr_prefix="is_directed",
205+
arg_names=("edge_type",),
206+
options={(t,) for t in _all_edge_types | _all_network_types},
207+
function_module=_reticula_ext,
208+
api_module_name=__name__,
209+
default_callable=_reticula_ext.is_directed)
177210
is_dyadic = _generic_attribute(
178211
attr_prefix="is_dyadic",
179212
arg_names=("edge_type",),
180-
options={(t,) for t in _all_edge_types},
213+
options={(t,) for t in _all_edge_types | _all_network_types},
181214
function_module=_reticula_ext,
182-
api_module_name=__name__)
215+
api_module_name=__name__,
216+
default_callable=_reticula_ext.is_dyadic)
183217

184218

185219
_random_network_generic_attrs = [

src/static_hyperedges.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,5 @@ void declare_typed_static_hyperedges(nb::module_& m) {
5252
types::run_each<
5353
metal::transform<
5454
metal::lambda<declare_static_hyperedges>,
55-
types::all_vert_types>>{}(m);
55+
types::first_order_vert_types>>{}(m);
5656
}

0 commit comments

Comments
 (0)