vbi 0.1.3__cp310-cp310-manylinux2014_x86_64.whl → 0.2__cp310-cp310-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  vbi/__init__.py,sha256=jrCuk7WXg9m93yeNUpBYd6YU-ardG_ElbYo7PKOXlC4,925
2
2
  vbi/_version.py,sha256=HzXy6r3mq7QU6lltj6cO46N68LxvGQfYbUUWiv8OH4o,541
3
- vbi/inference.py,sha256=hR-egyjG5xDolxFgaRlgzgpY7DIkGEWCqce6OWptQO4,2560
3
+ vbi/inference.py,sha256=BUM5SE_jlLhYOFmYVkvXnDMFdQHI7EpRLogVrex3XJc,3545
4
4
  vbi/utils.py,sha256=6jOPoomQbgTP8fv0hnt4pAGqDUUrvDtMqtP8rqNmVNw,10993
5
5
  vbi/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  vbi/dataset/connectivity_84/centers.txt,sha256=KJgj_ehlVcq2ydNhI_xmBSh_QJTiFMD_FHAUlv3bobw,3906
@@ -16,8 +16,8 @@ vbi/dataset/connectivity_88/tract_lengths.txt,sha256=T9or8JFl6nETCgF23rOsg2Ldlvg
16
16
  vbi/dataset/connectivity_88/weights.txt,sha256=XQcdJPMk7w1cZ6xDexA6Uzfv6kXXs6-YKJVMuXzk9QE,100672
17
17
  vbi/feature_extraction/__init__.py,sha256=aoewfgGUCvbPeP6dHoeOtXF6vfysGNf7-YUY6KIA99o,37
18
18
  vbi/feature_extraction/calc_features.py,sha256=0LtEMzwRYC47FYP5VRZ-mSKgVf7gXoXgI8ZE1lPDTOE,8777
19
- vbi/feature_extraction/features.json,sha256=t5DG6JjnspxkJkBoPtKStfEvOo56WVgdCKHRtp2SQ0c,14039
20
- vbi/feature_extraction/features.py,sha256=SUZeLWWn2zA1AA2xZWo4vAMiNGcqUOykhgTCbngj1Yk,57197
19
+ vbi/feature_extraction/features.json,sha256=PVhuZb6Ut2dDphSY-PgCvVznmH-xrGWrRJa3hQZgObQ,14085
20
+ vbi/feature_extraction/features.py,sha256=hFeQEov_sKE4am2kO58q7zgGA8qCcel9iGlwhfvSb5E,57421
21
21
  vbi/feature_extraction/features_settings.py,sha256=ZwT8MLscA0UmMyVU2x0a7NMvZjqD_PfesTneqHpR-mU,9919
22
22
  vbi/feature_extraction/features_utils.py,sha256=W5jkkiuf69ny4dK3NSdZ_Y6z5YdHq2y0zXNl2ryG0-E,34256
23
23
  vbi/feature_extraction/infodynamics.jar,sha256=_sp1qeyXTVc7TQ-h7xUZxkxsj6S_7iUCodH0IcLYJeo,613523
@@ -25,19 +25,19 @@ vbi/feature_extraction/utility.py,sha256=VI2Io_AAbT8lb_LMuMNK0pZ-Ipc56A0a6qiabqT
25
25
  vbi/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  vbi/models/cpp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  vbi/models/cpp/damp_oscillator.py,sha256=kj5TKNc5obXhZA4pxaP89ymVnEc1h2xKNJ5v4FBdvRo,3976
28
- vbi/models/cpp/jansen_rit.py,sha256=_XULD5iIHlyTeZAo2IGwEKzcmFEHsv-lcm9mfNUExg8,17382
28
+ vbi/models/cpp/jansen_rit.py,sha256=rBuzdDrpnXQUg0Rins8U5CKOTprlJxX2BSnT_bk9ysw,17128
29
29
  vbi/models/cpp/km.py,sha256=n4dXC2vvAYzAve9xQX8oSwPFiTQg34zX-TcpiMEn2Vs,6181
30
30
  vbi/models/cpp/mpr.py,sha256=lDQCr4n9cAIBrEEtLzNx-JcXoRRC80sHW4rSBygPMO0,8602
31
31
  vbi/models/cpp/vep.py,sha256=TsLTERFhU2dc-ORStSacfaFjMpnfA26-WsHHMk0bQhc,4182
32
32
  vbi/models/cpp/wc.py,sha256=kriqwzdLlTrqRO4us1LqoaAvGuTwHPeSCaQuPb2H4Zc,6721
33
33
  vbi/models/cpp/_src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- vbi/models/cpp/_src/_do.cpython-310-x86_64-linux-gnu.so,sha256=p1TPKVSInyCajYizIZnN5W0ko25i1fRNNnHenQJgjFk,317640
35
- vbi/models/cpp/_src/_jr_sdde.cpython-310-x86_64-linux-gnu.so,sha256=Vur-OfGUU8q8VblLsDxpYrUhmrXtoZVNlUNL_4UPtyg,587144
36
- vbi/models/cpp/_src/_jr_sde.cpython-310-x86_64-linux-gnu.so,sha256=UwtX_q9wHb0sBXQDFmYN3zKzv8KW0WRJkifF5wbvhlc,353640
37
- vbi/models/cpp/_src/_km_sde.cpython-310-x86_64-linux-gnu.so,sha256=6sHipPGT3iWYSCK6eNz8lpqsLtaiSZuXUKzqvmk1BAo,506544
38
- vbi/models/cpp/_src/_mpr_sde.cpython-310-x86_64-linux-gnu.so,sha256=IJaZqHStA5Y7t4PbJMs7aiGpTPsgi-L2U74-fOdFnUw,542264
39
- vbi/models/cpp/_src/_vep.cpython-310-x86_64-linux-gnu.so,sha256=8h6f7vGZHOnyxFLIj3-JQuMsFzXLNjeg2pLlM6VrhsU,371368
40
- vbi/models/cpp/_src/_wc_ode.cpython-310-x86_64-linux-gnu.so,sha256=EfqUaZ781JOI9-MK94VMKJxqLgU0-VJ5oy6RGmbcW2Y,652952
34
+ vbi/models/cpp/_src/_do.cpython-310-x86_64-linux-gnu.so,sha256=yXFIIwmdZwXovYUB8svqgAZW5yNiG90vu2s9fS18T6A,350224
35
+ vbi/models/cpp/_src/_jr_sdde.cpython-310-x86_64-linux-gnu.so,sha256=wzdR-q2XuQ7Sprzqr7KzBThQlosWNETnHST9urWEkSE,590224
36
+ vbi/models/cpp/_src/_jr_sde.cpython-310-x86_64-linux-gnu.so,sha256=Bfhdg-1-Q2zyI-WO25zpvbTzKUUllDk99EciV_i-5dI,382256
37
+ vbi/models/cpp/_src/_km_sde.cpython-310-x86_64-linux-gnu.so,sha256=nTgRHrFrvvqxBEnSgE-VTVqCc-4PbDQZLsEF9ijJumI,552128
38
+ vbi/models/cpp/_src/_mpr_sde.cpython-310-x86_64-linux-gnu.so,sha256=mlgsINg-16CUxW74u8W3v7U1zDJndTfcjjCKH6Ceaok,583920
39
+ vbi/models/cpp/_src/_vep.cpython-310-x86_64-linux-gnu.so,sha256=U0nLS4p48RaD_kr2GpeG-5aieLG1Pr_yWwBUMwdFrIQ,370520
40
+ vbi/models/cpp/_src/_wc_ode.cpython-310-x86_64-linux-gnu.so,sha256=M0lDtg7OHI4sL-c92k2FnzqXVFnqbo9mnote2JwuciY,689792
41
41
  vbi/models/cpp/_src/bold.hpp,sha256=3yO8mYg3f_zpunpoDGtrBJM6rXpO14fDdTfrgghTkR8,9010
42
42
  vbi/models/cpp/_src/do.hpp,sha256=5D4C7mse4c1Z5NMTIASatmMffA3vswut-xKCkTu0dBw,3826
43
43
  vbi/models/cpp/_src/do.i,sha256=R3tvlYU99X9JuzBtkvcBi6awRD2cJZ1V9H4s-qrQJnw,311
@@ -47,10 +47,10 @@ vbi/models/cpp/_src/jr_sdde.hpp,sha256=gkUDKqr0vGsCXXv4mpe4YddUAwMReFMsEAOjJRPe4
47
47
  vbi/models/cpp/_src/jr_sdde.i,sha256=wMB2pN_H4UrfVc7gbYvGWcvgDpGY1NBYlb-1zMNUtEM,423
48
48
  vbi/models/cpp/_src/jr_sdde.py,sha256=942Y2ahDr9Pcop5uVzdU7quFSU8IIYBj4U3eegiBHiI,20257
49
49
  vbi/models/cpp/_src/jr_sdde_wrap.cxx,sha256=cr6G-95V7GBnTovucXkxj4ptLFsUP68YewPuXrCTpFY,715796
50
- vbi/models/cpp/_src/jr_sde.hpp,sha256=YdphZl-typ_mU0LEUSsEQAFl7n2lo6oJCR1v705Mpkw,6608
50
+ vbi/models/cpp/_src/jr_sde.hpp,sha256=oOBsv1MTq2Kr6kv1YeWq1eYRP6MCoOO2l0dz2xQNoh8,6576
51
51
  vbi/models/cpp/_src/jr_sde.i,sha256=trkSFHmJL2au7u8XfacgHhAgd83gMpbf8HsTHtaPo2U,323
52
52
  vbi/models/cpp/_src/jr_sde.py,sha256=RY5-gUGMw6tFU6qMVrQiaRYJiCXneMK1WjnSZOtzWq4,13617
53
- vbi/models/cpp/_src/jr_sde_wrap.cxx,sha256=whRg-GV27809tl41WG9JsJX_g2e1oi7gdAuJWfnlRJc,486705
53
+ vbi/models/cpp/_src/jr_sde_wrap.cxx,sha256=zwhtI33yZabbrd-0KHR7WOeiTQrw1JK0NFm3KwQkWsM,486985
54
54
  vbi/models/cpp/_src/km_sde.hpp,sha256=5Gf8Vm0uSPQJncTUDejg6tg_xL88zX5yDpUxXUzqfwI,3657
55
55
  vbi/models/cpp/_src/km_sde.i,sha256=3Mgf0JLu5P9dLjy1qW6W90NrG_1I4h5AA2E2eG090PQ,413
56
56
  vbi/models/cpp/_src/km_sde.py,sha256=N7-51Eg2UZOCH2Knv6LJ-MI6zFWVan6jJE1rkXIW5kU,19249
@@ -71,18 +71,22 @@ vbi/models/cpp/_src/wc_ode.py,sha256=fjJ42VxF2cBO94I-zr9G7UaSZ031tPDxGQ_YyN-ZH3w
71
71
  vbi/models/cpp/_src/wc_ode_wrap.cxx,sha256=sjGmT0GUOchmM4TApS-AyzcR4xAiDq4Q9QzDIbrzAdU,946453
72
72
  vbi/models/cpp/_src/__pycache__/mpr_sde.cpython-310.pyc,sha256=iVa9uKW8InSohi0UMNO2TLWSvwOq83maCCzyQ47G_50,32596
73
73
  vbi/models/cupy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- vbi/models/cupy/bold.py,sha256=atLRdeUo93_NnkoOjwID2W_4-rqnpeCuQWboNBuq8Z4,3077
74
+ vbi/models/cupy/bold.py,sha256=36Sa_iU5njBawtq0iAmMNcZzllE07OvKanNfqpdXHYQ,6469
75
75
  vbi/models/cupy/ghb.py,sha256=azFBqYn2hWS11BjS3M7oGXNRy3pRYhZUNWsJcrqoOZ8,7451
76
- vbi/models/cupy/jansen_rit.py,sha256=Whrw8kTfRwUR5jzv24Mlxf6vD9M88wywTYdSCDob2rY,13223
77
- vbi/models/cupy/km.py,sha256=lj1BhBGR8IGBEJNO04zIErKHdpjeK4p49gdPcyzPMpo,7306
78
- vbi/models/cupy/mpr.py,sha256=yMiPdtmcUpuSneMAJeWy4H-U58BY2jDysb-Os2GVQ8M,13977
76
+ vbi/models/cupy/jansen_rit.py,sha256=DHS2GRSMhVRBgw6s1Zw_YBYqsZSp3M0uvjggF3hOo-Q,13206
77
+ vbi/models/cupy/km.py,sha256=IltJGnVYtg9vxOVm691n5LzUFXXbAHI-27_kb8mH3Rk,7878
78
+ vbi/models/cupy/mpr.py,sha256=5dyoADaZXEnZbrPCZUAtayXCUid97RXNVShAYNtWfyc,14636
79
79
  vbi/models/cupy/mpr_modified_bold.py,sha256=w-mVj0G86GIWTDcUY8rrDz6UgiTAoPZ0vK45VoADEnU,370
80
- vbi/models/cupy/utils.py,sha256=xb0RTc9qZ6RzQTUnKJPvHb5lL2GvHtss51ZeQbqWMQw,3556
81
- vbi/models/numba/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- vbi/models/numba/_ww_EI.py,sha256=H0LKc4dq4XhYkkg6KIL7qQmxVBsNPW2stqC9xvX5V7Q,11367
80
+ vbi/models/cupy/utils.py,sha256=d_Lo7bguMqxvWDu8bdE5e3J2OVd0LznjiKMeEX5PbMo,7765
81
+ vbi/models/cupy/wilson_cowan.py,sha256=LdRHClPdXDO89lNFyAIZs9zhHIeIYSBup5DEnImToMg,9943
82
+ vbi/models/cupy/ww.py,sha256=_zxLQslY8ni_608gBZPLgjWf2vlkv2LG2YkZaGihtvE,11211
83
+ vbi/models/numba/__init__.py,sha256=NK8M8GGAuy5kslFOPJseoftuPd570Q2R-Pt2tW7qqMY,80
83
84
  vbi/models/numba/damp_oscillator.py,sha256=VLCPCcemDBXjbhtf5wkxXqqwWNPvDsdPQ_-4Ev-2YWg,3966
84
85
  vbi/models/numba/ghb.py,sha256=weLLfhmrwQ9pXec7HD9X3U8Fg-PR74KNOnjECdTyRvA,5898
85
- vbi/models/numba/mpr.py,sha256=MRT4jZ2-Hp_JklRzx_PR-gWo3-xOjoGnNFBm65KiD9w,9912
86
+ vbi/models/numba/jansen_rit.py,sha256=yRTFEIId5YAdl-u5wwfl6i3vqW0BW1Fuuah6panBUbI,16812
87
+ vbi/models/numba/mpr.py,sha256=jpfF4ttqWmuYJrKMDlNgDgSCsWedXIbc-JWTtOzf6Dw,10257
88
+ vbi/models/numba/wilson_cowan.py,sha256=mZue7YBlhtPbW0ljz3s3uwUPIsbNTJgln8K23Cq_qFw,12475
89
+ vbi/models/numba/ww.py,sha256=g8RDxzfJQ4KXbF9yKKcwuQNICdjaWO8ZLkbt_r3XEqw,16557
86
90
  vbi/models/pytorch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
91
  vbi/models/pytorch/ww_sde_kong.py,sha256=M1xm_wCQXAjZ_dJ_aj-g9SYCPH2ReEns2ajUg2mb9oc,17072
88
92
  vbi/models/pytorch/data/default_parameters.npz,sha256=7lUMf6btGWzghl8P2OpT3yebYLBxDpQgdTAeBSCXF-U,820846
@@ -114,8 +118,8 @@ vbi/tests/test_ghb_cupy.py,sha256=IglmkfvM76g-IjkRyG1VJq87Nfn1GJPnjMlrV4jyJJE,21
114
118
  vbi/tests/test_mpr_cupy.py,sha256=X568kl3TkXvV8e8F1_Gt2WP5t8pC5mGAzsMe0ji8_7A,1118
115
119
  vbi/tests/test_mpr_numba.py,sha256=ctaBkGTlzzzM48kKoplJNMJUcMg__F3eNsR47EjJefg,1891
116
120
  vbi/tests/test_suite.py,sha256=3D7NBY2ve29ncT59-VVH88fYYrS0Wqu-G2FFj-m8Lc4,654
117
- vbi-0.1.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
118
- vbi-0.1.3.dist-info/METADATA,sha256=aazba6jWhC6bQN5t8d2fJCVP56MtXOwxX8j4lW2Fv84,7613
119
- vbi-0.1.3.dist-info/WHEEL,sha256=6Av-02TEI2DNLcOcRjGCxh8k-G28nMv3SqT1sYCGOuI,112
120
- vbi-0.1.3.dist-info/top_level.txt,sha256=fbMk9hUFp5f8kQ5xOFIHlcqpHDO70CUHeJZtSp81RMM,4
121
- vbi-0.1.3.dist-info/RECORD,,
121
+ vbi-0.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
122
+ vbi-0.2.dist-info/METADATA,sha256=vgkTzDNdm7xlvqlKW9hVYvok438FAeDAT87QGGdbjVM,7795
123
+ vbi-0.2.dist-info/WHEEL,sha256=7Cj2XrhsdKMjPi7T0xvQDc5HEcioDLTsKmSWBd8-0YY,112
124
+ vbi-0.2.dist-info/top_level.txt,sha256=fbMk9hUFp5f8kQ5xOFIHlcqpHDO70CUHeJZtSp81RMM,4
125
+ vbi-0.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.1.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-manylinux2014_x86_64
5
5
 
@@ -1,444 +0,0 @@
1
- import warnings
2
- import numpy as np
3
- from numba import njit
4
- from numba.experimental import jitclass
5
- from numba.core.errors import NumbaPerformanceWarning
6
- from numba import float64, boolean, int64, types
7
-
8
- warnings.simplefilter("ignore", category=NumbaPerformanceWarning)
9
-
10
-
11
- w_spec = [
12
- ("G", float64),
13
-
14
- ("a_I", float64),
15
- ("b_I", float64),
16
- ("d_I", float64),
17
- ("tau_I", float64),
18
-
19
- ("a_E", float64),
20
- ("b_E", float64),
21
- ("d_E", float64),
22
- ("tau_E", float64),
23
-
24
- ("w_II", float64),
25
- ("w_EE", float64),
26
- ("w_IE", float64),
27
- ("w_EI", float64),
28
-
29
- ("W_E", float64),
30
- ("W_I", float64),
31
-
32
- ("gamma", float64),
33
- ("dt", float64),
34
- ("J_NMDA", float64),
35
- ("J_I", float64),
36
-
37
- ("I_I", float64[:]),
38
- ("I_E", float64[:]),
39
-
40
- # ("sigma_I", float64),
41
- # ("sigma_E", float64),
42
-
43
- ("initial_state", float64[:]),
44
- ("weights", float64[:, :]),
45
- ("seed", int64),
46
- ("method", types.string),
47
- ("t_end", float64),
48
- ("t_cut", float64),
49
- ("nn", int64),
50
- ("ts_decimate", int64),
51
- ("fmri_decimate", int64),
52
- ("RECORD_TS", boolean),
53
- ("RECORD_FMRI", boolean),
54
- ]
55
-
56
- b_spec = [
57
- ("eps", float64),
58
- ("E0", float64),
59
- ("V0", float64),
60
- ("alpha", float64),
61
- ("inv_alpha", float64),
62
- ("K1", float64),
63
- ("K2", float64),
64
- ("K3", float64),
65
- ("taus", float64),
66
- ("tauo", float64),
67
- ("tauf", float64),
68
- ("inv_tauo", float64),
69
- ("inv_taus", float64),
70
- ("inv_tauf", float64),
71
- ("nn", int64),
72
- ("dt_bold", float64),
73
- ]
74
-
75
-
76
- @jitclass(w_spec)
77
- class ParWW:
78
- def __init__(
79
- self,
80
- G=0.0,
81
- a_I=615.0,
82
- b_I=177.0,
83
- d_I=0.087,
84
- tau_I=0.01,
85
-
86
- a_E=310.0,
87
- b_E=125.0,
88
- d_E=0.16,
89
- tau_E=0.1,
90
-
91
- gamma=0.641,
92
-
93
- w_II=1.0,
94
- w_IE=1.4,
95
- w_EI=1.0,
96
- w_EE=1.0,
97
- dt=0.01,
98
-
99
- W_E=1.0,
100
- W_I =0.7,
101
-
102
- I0 = 0.382,
103
- J_NMDA=0.15,
104
-
105
-
106
- I_I=np.array([0.296]), # 0.296
107
- I_E=np.array([0.377]), # 0.377
108
- sigma_I=0.001,
109
- sigma_E=0.001,
110
- initial_state=np.array([]),
111
- weights=np.array([[], []]),
112
- seed=-1,
113
- method="heun",
114
- t_end=300.0,
115
- t_cut=0.0,
116
- ts_decimate=10,
117
- fmri_decimate=10,
118
- RECORD_TS=True,
119
- RECORD_FMRI=True,
120
- ):
121
- self.G = G
122
- self.a_I = a_I
123
- self.b_I = b_I
124
- self.d_I = d_I
125
- self.tau_I = tau_I
126
-
127
- self.a_E = a_E
128
- self.b_E = b_E
129
- self.d_E = d_E
130
- self.tau_E = tau_E
131
-
132
- self.w_II = w_II
133
- self.w_IE = w_IE
134
- self.w_EI = w_EI
135
- self.w_EE = w_EE
136
- self.gamma = gamma
137
-
138
- self.dt = dt
139
-
140
- self.W_E = W_E
141
- self.W_I = W_I
142
-
143
- self.I0 = I0
144
- self.I_E = I_E
145
- self.I_I = I_I
146
- self.J_NMDA = J_NMDA
147
-
148
- self.sigma_I = sigma_I
149
- self.sigma_E = sigma_E
150
-
151
- self.initial_state = initial_state
152
- self.weights = weights
153
- self.seed = seed
154
- self.method = method
155
- self.t_end = t_end
156
- self.t_cut = t_cut
157
- self.ts_decimate = ts_decimate
158
- self.fmri_decimate = fmri_decimate
159
- self.RECORD_TS = RECORD_TS
160
- self.RECORD_FMRI = RECORD_FMRI
161
- if len(initial_state) > 0:
162
- self.nn = len(initial_state)
163
- else:
164
- self.nn = -1
165
-
166
-
167
- @jitclass(b_spec)
168
- class ParBaloon:
169
- def __init__(
170
- self, eps=0.5, E0=0.4, V0=4.0,
171
- alpha=0.32, taus=1.54, tauo=0.98, tauf=1.44
172
- ):
173
- self.eps = eps
174
- self.E0 = E0
175
- self.V0 = V0
176
- self.alpha = alpha
177
- self.inv_alpha = 1.0 / alpha
178
- self.K1 = 7.0 * E0
179
- self.K2 = 2 * E0
180
- self.K3 = 1 - eps
181
- self.taus = taus
182
- self.tauo = tauo
183
- self.tauf = tauf
184
- self.inv_tauo = 1.0 / tauo
185
- self.inv_taus = 1.0 / taus
186
- self.inv_tauf = 1.0 / tauf
187
- self.dt_bold = 0.01
188
-
189
-
190
- @njit
191
- def f_ww(S, P):
192
- """
193
- system function for Wong-Wang model.
194
- """
195
- coupling = np.dot(P.weights, S)
196
- x = P.w * P.J_N * S + P.I_o + P.G * P.J_N * coupling
197
- H = (P.a * x - P.b) / (1 - np.exp(-P.d * (P.a * x - P.b)))
198
- dS = -(S / P.tau_s) + (1 - S) * H * P.gamma
199
- return dS
200
-
201
-
202
- @njit
203
- def f_fmri(xin, x, t, B):
204
- """
205
- system function for Balloon model.
206
- """
207
- E0 = B.E0
208
- nn = B.nn
209
- inv_tauf = B.inv_tauf
210
- inv_tauo = B.inv_tauo
211
- inv_taus = B.inv_taus
212
- inv_alpha = B.inv_alpha
213
-
214
- dxdt = np.zeros(4 * nn)
215
- s = x[:nn]
216
- f = x[nn : 2 * nn]
217
- v = x[2 * nn : 3 * nn]
218
- q = x[3 * nn :]
219
-
220
- dxdt[:nn] = xin - inv_taus * s - inv_tauf * (f - 1.0)
221
- dxdt[nn : (2 * nn)] = s
222
- dxdt[(2 * nn) : (3 * nn)] = inv_tauo * (f - v ** (inv_alpha))
223
- dxdt[3 * nn :] = (inv_tauo) * (
224
- (f * (1.0 - (1.0 - E0) ** (1.0 / f)) / E0) - (v ** (inv_alpha)) * (q / v)
225
- )
226
- return dxdt
227
-
228
-
229
- @njit
230
- def euler_sde_step(S, P):
231
- dW = np.sqrt(P.dt) * P.sigma_noise * np.random.randn(P.nn)
232
- return S + P.dt * f_ww(S, P) + dW
233
-
234
-
235
- @njit
236
- def heun_sde_step(S, P):
237
- dW = np.sqrt(P.dt) * P.sigma_noise * np.random.randn(P.nn)
238
- k0 = f_ww(S, P)
239
- S1 = S + P.dt * k0 + dW
240
- k1 = f_ww(S1, P)
241
- return S + 0.5 * P.dt * (k0 + k1) + dW
242
-
243
-
244
- @njit
245
- def heun_ode_step(yin, y, t, B):
246
- """Heun scheme."""
247
-
248
- dt = B.dt_bold
249
- k1 = f_fmri(yin, y, t, B)
250
- tmp = y + dt * k1
251
- k2 = f_fmri(yin, tmp, t + dt, B)
252
- y += 0.5 * dt * (k1 + k2)
253
- return y
254
-
255
-
256
- @njit
257
- def integrate_fmri(yin, y, t, B):
258
- """
259
- Integrate Balloon model
260
-
261
- Parameters
262
- ----------
263
- yin : array [nn]
264
- r and v time series, r is used as input
265
- y : array [4*nn]
266
- state, update in place
267
- t : float
268
- time
269
-
270
- Returns
271
- -------
272
- yb : array [nn]
273
- BOLD signal
274
-
275
- """
276
-
277
- V0 = B.V0
278
- K1 = B.K1
279
- K2 = B.K2
280
- K3 = B.K3
281
-
282
- nn = yin.shape[0]
283
- y = heun_ode_step(yin, y, t, B)
284
- yb = V0 * (
285
- K1 * (1.0 - y[(3 * nn) :])
286
- + K2 * (1.0 - y[(3 * nn) :] / y[(2 * nn) : (3 * nn)])
287
- + K3 * (1.0 - y[(2 * nn) : (3 * nn)])
288
- )
289
- return y, yb
290
-
291
-
292
- @njit
293
- def integrate(P, B, intg=heun_sde_step):
294
- """
295
- integrate Wong-Wang model and Balloon model.
296
- """
297
- t = np.arange(0, P.t_end, P.dt)
298
- nt = len(t)
299
- nn = P.nn
300
-
301
- if P.RECORD_TS:
302
- T = np.empty(int(np.ceil(nt / P.ts_decimate)))
303
- S = np.empty((int(np.ceil(nt / P.ts_decimate)), nn))
304
- else:
305
- T = np.empty(0)
306
- S = np.empty((0, 1))
307
-
308
- if P.RECORD_FMRI:
309
- t_fmri = np.empty(int(np.ceil(nt / P.fmri_decimate)))
310
- d_fmri = np.empty((int(np.ceil(nt / P.fmri_decimate)), nn))
311
- else:
312
- t_fmri = np.empty(0)
313
- d_fmri = np.empty((0, 1))
314
-
315
- x0 = P.initial_state
316
- y0 = np.zeros((4 * nn))
317
- y0[nn:] = 1.0
318
-
319
- jj = 0
320
- ii = 0
321
- for i in range(1, nt):
322
-
323
- t = i * P.dt
324
- t_bold = i * B.dt_bold
325
- x0 = intg(x0, P)
326
-
327
- if P.RECORD_TS:
328
- if i % P.ts_decimate == 0:
329
- S[ii, :] = x0
330
- T[ii] = t
331
- ii += 1
332
- if P.RECORD_FMRI:
333
- y0, fmri_i = integrate_fmri(x0, y0, t, B)
334
- if i % P.fmri_decimate == 0:
335
- d_fmri[jj, :] = fmri_i
336
- # t_fmri[jj] = t[i]
337
- t_fmri[jj] = t_bold
338
- jj += 1
339
- S = S[T >= P.t_cut, :]
340
- T = T[T >= P.t_cut]
341
- d_fmri = d_fmri[t_fmri >= P.t_cut, :]
342
- t_fmri = t_fmri[t_fmri >= P.t_cut]
343
-
344
- return T, S, t_fmri, d_fmri
345
-
346
-
347
- class WW_sde(object):
348
- r"""
349
- Wong-Wang model.
350
-
351
- .. math::
352
- x_k &= w\,J_N \, S_k + I_o + G\,J_N \sum_j \, C_{kj} \,Sj \\
353
- H(x_k) &= \dfrac{ax_k - b}{1 - \exp(-d(ax_k -b))}\\
354
- \dot{S}_k &= -\dfrac{S_k}{\tau_s} + (1 - S_k) \, H(x_k) \, \gamma + \sigma \, \Xi_k
355
-
356
- - Kong-Fatt Wong and Xiao-Jing Wang, A Recurrent Network Mechanism of Time Integration in Perceptual Decisions. Journal of Neuroscience 26(4), 1314-1328, 2006.
357
- - Deco Gustavo, Ponce Alvarez Adrian, Dante Mantini, Gian Luca Romani, Patric Hagmann and Maurizio Corbetta. Resting-State Functional Connectivity Emerges from Structurally and Dynamically Shaped Slow Linear Fluctuations. The Journal of Neuroscience 32(27), 11239-11252, 2013. Equations taken from DPA 2013 , page 11242.
358
- """
359
-
360
- def __init__(self, par: dict = {}, parB: dict = {}) -> None:
361
-
362
- self.valid_parW = [w_spec[i][0] for i in range(len(w_spec))]
363
- self.valid_parB = [b_spec[i][0] for i in range(len(b_spec))]
364
- self.valid_par = self.valid_parW + self.valid_parB
365
-
366
- self.check_parameters(par)
367
- self.P = self.get_par_WW_obj(par)
368
- self.B = self.get_par_Baloon_obj(parB)
369
-
370
- def __str__(self):
371
- print("Wong-Wang model of neural population dynamics")
372
- print("Parameters:----------------------------")
373
- for key in self.valid_parW:
374
- print(key, ": ", getattr(self.P, key))
375
- print("---------------------------------------")
376
- for key in self.valid_parB:
377
- print(key, ": ", getattr(self.B, key))
378
- return ""
379
-
380
- def get_par_WW_obj(self, par: dict = {}) -> ParWW:
381
- """
382
- return default parameters for Wong-Wang model.
383
- """
384
- if "initial_state" in par.keys():
385
- par["initial_state"] = np.array(par["initial_state"])
386
- if "weights" in par.keys():
387
- assert par["weights"] is not None
388
- par["weights"] = np.array(par["weights"])
389
- assert par["weights"].shape[0] == par["weights"].shape[1]
390
- parobj = ParWW(**par)
391
-
392
- return parobj
393
-
394
- def get_par_Baloon_obj(self, par: dict = {}) -> ParBaloon:
395
- """
396
- return default parameters for Balloon model.
397
- """
398
- parobj = ParBaloon(**par)
399
- return parobj
400
-
401
- def check_parameters(self, par: dict) -> None:
402
- for key in par.keys():
403
- if key not in self.valid_par:
404
- raise ValueError(f"Invalid parameter {key}")
405
-
406
- def set_initial_state(self, seed=None):
407
- if seed is not None:
408
- np.random.seed(seed)
409
- self.P.nn = self.P.weights.shape[0]
410
- self.initial_state = np.random.rand(self.P.nn)
411
- self.B.nn = self.P.nn
412
-
413
- def check_input(self):
414
-
415
- assert self.P.weights is not None
416
- assert self.P.weights.shape[0] == self.P.weights.shape[1]
417
- assert self.P.initial_state is not None
418
- assert len(self.P.initial_state) == self.P.weights.shape[0]
419
- self.B.nn = self.P.nn
420
- # self.B.dt = self.P.dt
421
-
422
- def run(self, par={}, parB={}, x0=None, verbose=True):
423
-
424
- if x0 is None:
425
- self.seed = self.P.seed if self.P.seed > 0 else None
426
- self.set_initial_state(self.seed)
427
- self.P.initial_state = self.initial_state
428
- else:
429
- self.P.initial_state = x0
430
- self.P.nn = len(x0)
431
-
432
- if par:
433
- self.check_parameters(par)
434
- for key in par.keys():
435
- setattr(self.P, key, par[key])
436
- if parB:
437
- self.check_parameters(parB)
438
- for key in parB.keys():
439
- setattr(self.B, key, parB[key])
440
- self.check_input()
441
-
442
- T, S, t_fmri, d_fmri = integrate(self.P, self.B)
443
-
444
- return {"t": T, "s": S, "t_fmri": t_fmri, "d_fmri": d_fmri}
File without changes