ModularGeneral#
- class braintools.conn.ModularGeneral(intra_conn, inter_conn=None, inter_conn_pair=None, module_ratios=None, **kwargs)#
Modular network using Connectivity instances for both intra and inter-module patterns.
This class creates a modular network structure where:
Intra-module connectivity is defined by a sequence of Connectivity instances
Inter-module connectivity is defined by either a single PointConnectivity instance or a dict mapping (pre_mod, post_mod) tuples to PointConnectivity instances
- Parameters:
intra_conn (
Sequence[PointConnectivity]) – Sequence of connectivity instances for generating connections within each module. The length of the sequence determines the number of modules.inter_conn (
PointConnectivity|None) – Default connectivity instance for inter-module connections. Applied to all module pairs not specified in inter_conn_pair. If None and a pair is not in inter_conn_pair, that pair is skipped.inter_conn_pair (
Dict[tuple[int,int],PointConnectivity] |None) – Dict mapping (pre_module_id, post_module_id) tuples to PointConnectivity instances for specific inter-module connections. Overrides inter_conn for specified pairs.module_ratios (
Sequence[int|float] |None) –Ratios or sizes for the first n_modules-1 modules. Length must be n_modules-1. Each element can be:
int: Fixed size for that module
float: Proportion of total size (e.g., 0.3 means 30% of total)
The last module gets the remaining neurons. If None, modules are evenly divided.
Examples
>>> from braintools.conn import Random, ModularGeneral, SmallWorld >>> import brainunit as u >>> # Different connectivity per module with uniform inter-module connectivity >>> intra_list = [ ... Random(prob=0.3, weight=1.0 * u.nS), ... Random(prob=0.5, weight=1.5 * u.nS), ... SmallWorld(k=6, p=0.3, weight=2.0 * u.nS) ... ] >>> inter = Random(prob=0.01, weight=0.1 * u.nS) >>> mod = ModularGeneral(intra_conn=intra_list, inter_conn=inter) >>> result = mod(pre_size=900, post_size=900) >>> # Different inter-module connectivity for specific module pairs >>> default_inter = Random(prob=0.01, weight=0.1 * u.nS) >>> specific_inter = { ... (0, 1): Random(prob=0.05, weight=0.2 * u.nS), ... (1, 2): Random(prob=0.03, weight=0.15 * u.nS), ... } >>> mod = ModularGeneral( ... intra_conn=intra_list, ... inter_conn=default_inter, ... inter_conn_pair=specific_inter ... ) >>> result = mod(pre_size=900, post_size=900) >>> # Custom module sizes with fixed sizes >>> mod = ModularGeneral( ... intra_conn=intra_list, ... inter_conn=inter, ... module_ratios=[200, 300] # Last module gets remaining 400 ... ) >>> result = mod(pre_size=900, post_size=900) >>> # Custom module sizes with ratios >>> mod = ModularGeneral( ... intra_conn=intra_list, ... inter_conn=inter, ... module_ratios=[0.2, 0.3] # 20%, 30%, and remaining 50% ... ) >>> result = mod(pre_size=900, post_size=900) >>> # Mixed fixed and ratio sizes >>> mod = ModularGeneral( ... intra_conn=intra_list, ... inter_conn=inter, ... module_ratios=[100, 0.5] # 100 neurons, 50% of total, and remainder ... ) >>> result = mod(pre_size=900, post_size=900)