dendrotweaks 0.4.4__py3-none-any.whl → 0.4.6__py3-none-any.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.
- dendrotweaks/__init__.py +1 -1
- dendrotweaks/analysis/__init__.py +2 -1
- dendrotweaks/analysis/ephys_analysis.py +140 -62
- dendrotweaks/biophys/default_mod/vecstim.mod +1 -11
- dendrotweaks/biophys/default_templates/jaxley.py +131 -0
- dendrotweaks/biophys/distributions.py +3 -3
- dendrotweaks/biophys/io/converter.py +4 -0
- dendrotweaks/biophys/mechanisms.py +11 -1
- dendrotweaks/model.py +151 -1088
- dendrotweaks/model_io.py +736 -39
- dendrotweaks/model_simulation.py +326 -0
- dendrotweaks/morphology/io/factories.py +2 -2
- dendrotweaks/morphology/io/reader.py +12 -3
- dendrotweaks/morphology/point_trees.py +1 -1
- dendrotweaks/path_manager.py +2 -2
- dendrotweaks/prerun.py +63 -0
- dendrotweaks/utils.py +148 -40
- {dendrotweaks-0.4.4.dist-info → dendrotweaks-0.4.6.dist-info}/METADATA +1 -1
- {dendrotweaks-0.4.4.dist-info → dendrotweaks-0.4.6.dist-info}/RECORD +22 -19
- {dendrotweaks-0.4.4.dist-info → dendrotweaks-0.4.6.dist-info}/WHEEL +0 -0
- {dendrotweaks-0.4.4.dist-info → dendrotweaks-0.4.6.dist-info}/licenses/LICENSE +0 -0
- {dendrotweaks-0.4.4.dist-info → dendrotweaks-0.4.6.dist-info}/top_level.txt +0 -0
dendrotweaks/utils.py
CHANGED
@@ -26,24 +26,41 @@ SWC_ID_TO_DOMAIN = {
|
|
26
26
|
8: 'reduced',
|
27
27
|
}
|
28
28
|
|
29
|
+
POPULATIONS = {'AMPA': {}, 'NMDA': {}, 'AMPA_NMDA': {}, 'GABAa': {}}
|
30
|
+
|
31
|
+
INDEPENDENT_PARAMS = {
|
32
|
+
'cm': 1, # uF/cm2
|
33
|
+
'Ra': 100, # Ohm cm
|
34
|
+
'ena': 50, # mV
|
35
|
+
'ek': -77, # mV
|
36
|
+
'eca': 140 # mV
|
37
|
+
}
|
38
|
+
|
39
|
+
DOMAIN_TO_GROUP = {
|
40
|
+
'soma': 'somatic',
|
41
|
+
'axon': 'axonal',
|
42
|
+
'dend': 'dendritic',
|
43
|
+
'apic': 'apical',
|
44
|
+
}
|
45
|
+
|
29
46
|
DOMAIN_TO_SWC_ID = {
|
30
47
|
v: k for k, v in SWC_ID_TO_DOMAIN.items()
|
31
48
|
}
|
32
49
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
DOMAINS_TO_NEURON = {
|
51
|
+
'soma': 'soma',
|
52
|
+
'perisomatic': 'dend_11',
|
53
|
+
'axon': 'axon',
|
54
|
+
'apic': 'apic',
|
55
|
+
'dend': 'dend',
|
56
|
+
'basal': 'dend_31',
|
57
|
+
'trunk': 'dend_41',
|
58
|
+
'tuft': 'dend_42',
|
59
|
+
'oblique': 'dend_43',
|
60
|
+
'custom': 'dend_5',
|
61
|
+
'reduced': 'dend_8',
|
62
|
+
'undefined': 'dend_0',
|
63
|
+
}
|
47
64
|
|
48
65
|
DOMAINS_TO_COLORS = {
|
49
66
|
'soma': '#E69F00',
|
@@ -60,11 +77,24 @@ DOMAINS_TO_COLORS = {
|
|
60
77
|
'undefined': '#7F7F7F',
|
61
78
|
}
|
62
79
|
|
63
|
-
def
|
80
|
+
def get_swc_idx(domain_name):
|
64
81
|
base_domain, _, idx = domain_name.partition('_')
|
65
|
-
|
82
|
+
if base_domain == 'reduced':
|
83
|
+
return int(f'8{idx}')
|
84
|
+
elif base_domain == 'custom':
|
85
|
+
return int(f'5{idx}')
|
86
|
+
return DOMAIN_TO_SWC_ID.get(base_domain, 0)
|
66
87
|
|
88
|
+
def get_domain_name(swc_idx):
|
89
|
+
if str(swc_idx).startswith('8'):
|
90
|
+
return 'reduced_' + str(swc_idx)[1:]
|
91
|
+
elif str(swc_idx).startswith('5'):
|
92
|
+
return 'custom_' + str(swc_idx)[1:]
|
93
|
+
return SWC_ID_TO_DOMAIN.get(swc_idx, 'undefined')
|
67
94
|
|
95
|
+
def get_domain_color(domain_name):
|
96
|
+
base_domain, _, idx = domain_name.partition('_')
|
97
|
+
return DOMAINS_TO_COLORS.get(base_domain, '#7F7F7F')
|
68
98
|
|
69
99
|
def timeit(func):
|
70
100
|
def wrapper(*args, **kwargs):
|
@@ -75,7 +105,6 @@ def timeit(func):
|
|
75
105
|
return result
|
76
106
|
return wrapper
|
77
107
|
|
78
|
-
|
79
108
|
def calculate_lambda_f(distances, diameters, Ra=35.4, Cm=1, frequency=100):
|
80
109
|
"""
|
81
110
|
Calculate the frequency-dependent length constant (lambda_f) according to NEURON's implementation,
|
@@ -118,10 +147,6 @@ def calculate_lambda_f(distances, diameters, Ra=35.4, Cm=1, frequency=100):
|
|
118
147
|
# Return section_L/lam (electrotonic length of the section)
|
119
148
|
return section_L / lam
|
120
149
|
|
121
|
-
if (__name__ == '__main__'):
|
122
|
-
print('Executing as standalone script')
|
123
|
-
|
124
|
-
|
125
150
|
def dynamic_import(module_name, class_name):
|
126
151
|
"""
|
127
152
|
Dynamically import a class from a module.
|
@@ -142,20 +167,17 @@ def dynamic_import(module_name, class_name):
|
|
142
167
|
module = import_module(module_name)
|
143
168
|
return getattr(module, class_name)
|
144
169
|
|
145
|
-
|
146
170
|
def list_folders(path_to_folder):
|
147
171
|
folders = [f for f in os.listdir(path_to_folder)
|
148
172
|
if os.path.isdir(os.path.join(path_to_folder, f))]
|
149
173
|
sorted_folders = sorted(folders, key=lambda x: x.lower())
|
150
174
|
return sorted_folders
|
151
175
|
|
152
|
-
|
153
176
|
def list_files(path_to_folder, extension):
|
154
177
|
files = [f for f in os.listdir(path_to_folder)
|
155
178
|
if f.endswith(extension)]
|
156
179
|
return files
|
157
180
|
|
158
|
-
|
159
181
|
def write_file(content: str, path_to_file: str, verbose: bool = True) -> None:
|
160
182
|
"""
|
161
183
|
Write content to a file.
|
@@ -175,38 +197,59 @@ def write_file(content: str, path_to_file: str, verbose: bool = True) -> None:
|
|
175
197
|
f.write(content)
|
176
198
|
print(f"Saved content to {path_to_file}")
|
177
199
|
|
178
|
-
|
179
200
|
def read_file(path_to_file):
|
180
201
|
with open(path_to_file, 'r') as f:
|
181
202
|
content = f.read()
|
182
203
|
return content
|
183
204
|
|
184
|
-
|
185
|
-
def download_example_data(path_to_destination):
|
205
|
+
def download_example_data(path_to_destination, include_templates=True, include_modfiles=True):
|
186
206
|
"""
|
187
|
-
Download
|
207
|
+
Download and extract specific folders from the DendroTweaks GitHub repository:
|
208
|
+
- examples/ <- from examples subfolder (always included)
|
209
|
+
- examples/Templates/ <- from src/dendrotweaks/biophys/default_templates (optional)
|
210
|
+
- examples/Default/ <- from src/dendrotweaks/biophys/default_mod (optional)
|
188
211
|
|
189
212
|
Parameters
|
190
213
|
----------
|
191
214
|
path_to_destination : str
|
192
|
-
The path to the destination folder where the
|
215
|
+
The path to the destination folder where the data will be downloaded and extracted.
|
216
|
+
|
217
|
+
include_templates : bool, optional
|
218
|
+
If True, also extract default_templates/ into examples/Templates/.
|
219
|
+
|
220
|
+
include_modfiles : bool, optional
|
221
|
+
If True, also extract default_mod/ into examples/Default/.
|
193
222
|
"""
|
194
223
|
if not os.path.exists(path_to_destination):
|
195
224
|
os.makedirs(path_to_destination)
|
196
225
|
|
197
226
|
repo_url = "https://github.com/Poirazi-Lab/DendroTweaks/archive/refs/heads/main.zip"
|
198
|
-
zip_path = os.path.join(path_to_destination, "
|
227
|
+
zip_path = os.path.join(path_to_destination, "dendrotweaks_repo.zip")
|
199
228
|
|
200
|
-
print(f"Downloading
|
229
|
+
print(f"Downloading data from {repo_url}...")
|
201
230
|
urllib.request.urlretrieve(repo_url, zip_path)
|
202
231
|
|
203
|
-
print(f"Extracting
|
232
|
+
print(f"Extracting relevant folders to {path_to_destination}...")
|
204
233
|
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
|
205
234
|
for member in zip_ref.namelist():
|
235
|
+
target_path = None
|
236
|
+
|
237
|
+
# === Always extract examples/ folder ===
|
206
238
|
if member.startswith("DendroTweaks-main/examples/"):
|
207
|
-
|
208
|
-
|
209
|
-
|
239
|
+
rel_path = os.path.relpath(member, "DendroTweaks-main/examples")
|
240
|
+
target_path = os.path.join(path_to_destination, rel_path)
|
241
|
+
|
242
|
+
# === Optionally extract Templates/ folder ===
|
243
|
+
elif include_templates and member.startswith("DendroTweaks-main/src/dendrotweaks/biophys/default_templates/"):
|
244
|
+
rel_path = os.path.relpath(member, "DendroTweaks-main/src/dendrotweaks/biophys/default_templates")
|
245
|
+
target_path = os.path.join(path_to_destination, "Templates", rel_path)
|
246
|
+
|
247
|
+
# === Optionally extract Default/ folder ===
|
248
|
+
elif include_modfiles and member.startswith("DendroTweaks-main/src/dendrotweaks/biophys/default_mod/"):
|
249
|
+
rel_path = os.path.relpath(member, "DendroTweaks-main/src/dendrotweaks/biophys/default_mod")
|
250
|
+
target_path = os.path.join(path_to_destination, "Default", rel_path)
|
251
|
+
|
252
|
+
if target_path:
|
210
253
|
if member.endswith('/'):
|
211
254
|
os.makedirs(target_path, exist_ok=True)
|
212
255
|
else:
|
@@ -214,10 +257,8 @@ def download_example_data(path_to_destination):
|
|
214
257
|
with zip_ref.open(member) as source, open(target_path, 'wb') as target:
|
215
258
|
target.write(source.read())
|
216
259
|
|
217
|
-
os.remove(zip_path)
|
218
|
-
print(f"
|
219
|
-
|
220
|
-
|
260
|
+
os.remove(zip_path)
|
261
|
+
print(f"Data downloaded and extracted successfully to {path_to_destination}/.")
|
221
262
|
|
222
263
|
def apply_dark_theme():
|
223
264
|
"""
|
@@ -236,4 +277,71 @@ def apply_dark_theme():
|
|
236
277
|
'ytick.color': 'white',
|
237
278
|
'text.color': 'white',
|
238
279
|
'axes.prop_cycle': plt.cycler(color=plt.cm.tab10.colors), # use standard matplotlib colors
|
239
|
-
})
|
280
|
+
})
|
281
|
+
|
282
|
+
def mse(y_true, y_pred):
|
283
|
+
return np.mean((np.array(y_true) - np.array(y_pred)) ** 2)
|
284
|
+
|
285
|
+
def poly_fit(x, y, max_degree=6, tolerance=1e-6):
|
286
|
+
"""
|
287
|
+
Fit a polynomial to the data and return the coefficients and predicted values.
|
288
|
+
"""
|
289
|
+
for degree in range(max_degree + 1):
|
290
|
+
coeffs = np.polyfit(x, y, degree)
|
291
|
+
y_pred = np.polyval(coeffs, x)
|
292
|
+
if np.all(np.abs(np.array(y) - y_pred) < tolerance):
|
293
|
+
break
|
294
|
+
return coeffs, y_pred
|
295
|
+
|
296
|
+
def step_fit(x, y):
|
297
|
+
"""
|
298
|
+
Fit a single step function with variable-width transition zone.
|
299
|
+
Returns (high_val, low_val, start, end), and predicted y-values.
|
300
|
+
"""
|
301
|
+
x = np.array(x)
|
302
|
+
y = np.array(y)
|
303
|
+
|
304
|
+
sort_idx = np.argsort(x)
|
305
|
+
x = x[sort_idx]
|
306
|
+
y = y[sort_idx]
|
307
|
+
|
308
|
+
best_mse = float('inf')
|
309
|
+
best_params = None
|
310
|
+
best_pred = None
|
311
|
+
|
312
|
+
n = len(x)
|
313
|
+
for i in range(n - 1):
|
314
|
+
for j in range(i + 1, n):
|
315
|
+
start = x[i]
|
316
|
+
end = x[j]
|
317
|
+
inside = (x > start) & (x < end)
|
318
|
+
outside = ~inside
|
319
|
+
|
320
|
+
if not np.any(inside) or not np.any(outside):
|
321
|
+
continue
|
322
|
+
|
323
|
+
high_val = np.nanmean(y[inside])
|
324
|
+
low_val = np.nanmean(y[outside])
|
325
|
+
|
326
|
+
pred = np.where(inside, high_val, low_val)
|
327
|
+
score = mse(y, pred)
|
328
|
+
|
329
|
+
if score < best_mse:
|
330
|
+
best_mse = score
|
331
|
+
best_params = (start, end, low_val, high_val)
|
332
|
+
best_pred = pred
|
333
|
+
|
334
|
+
return best_params, best_pred
|
335
|
+
|
336
|
+
DEFAULT_FIT_MODELS = {
|
337
|
+
'poly': {
|
338
|
+
'fit': poly_fit,
|
339
|
+
'score': mse,
|
340
|
+
'complexity': lambda coeffs: len(coeffs) - 1 # degree of polynomial
|
341
|
+
},
|
342
|
+
'step': {
|
343
|
+
'fit': step_fit,
|
344
|
+
'score': mse,
|
345
|
+
'complexity': lambda params: 4
|
346
|
+
}
|
347
|
+
}
|
@@ -1,32 +1,35 @@
|
|
1
|
-
dendrotweaks/__init__.py,sha256=
|
2
|
-
dendrotweaks/model.py,sha256=
|
3
|
-
dendrotweaks/model_io.py,sha256=
|
4
|
-
dendrotweaks/
|
1
|
+
dendrotweaks/__init__.py,sha256=Dnklmfnnm_8cpcM-cKp-DUOhwFhG3wYFg9FGNORWbqg,384
|
2
|
+
dendrotweaks/model.py,sha256=nj_VjIRCK2z6wx-V-hUS4KDIuYkbg9wUrk-ux8twghA,38351
|
3
|
+
dendrotweaks/model_io.py,sha256=qY9qBs3bxsuvQSokPH_JUpT71KpYbIiLyjIDavTLtzA,27562
|
4
|
+
dendrotweaks/model_simulation.py,sha256=sXYWTgbBOWy0dZfxjmqc_YsOgfn5y5oAfGzLsUK6u9k,9958
|
5
|
+
dendrotweaks/path_manager.py,sha256=Bij2MMHqaBL-s9ckG0Nie5j735DTgApHRx3-ETMxUmA,8783
|
6
|
+
dendrotweaks/prerun.py,sha256=aMNe4xh14gztkw4oCAuiJEBIgckke9oNL8vQjOEQf8s,2451
|
5
7
|
dendrotweaks/simulators.py,sha256=OscZ4H6z9YiNloDtMAgpPx9n2e-9WJyLEWtcSD1YZR8,7411
|
6
|
-
dendrotweaks/utils.py,sha256=
|
7
|
-
dendrotweaks/analysis/__init__.py,sha256=
|
8
|
-
dendrotweaks/analysis/ephys_analysis.py,sha256=
|
8
|
+
dendrotweaks/utils.py,sha256=bZnxiQAUuc1BufBO7f3J2KGvyFCKQMDSFpfrM8_bVEo,10782
|
9
|
+
dendrotweaks/analysis/__init__.py,sha256=tDi4BHtW1fX5iiZVk1OM3gmLo69VFmUN8AEK_F8tDq4,927
|
10
|
+
dendrotweaks/analysis/ephys_analysis.py,sha256=v-T6IxQ48IoK6eEYcyImi9KoFrzAQU5n8k6kFyEAivc,17389
|
9
11
|
dendrotweaks/analysis/morphometric_analysis.py,sha256=5zohjGssyx-wezI-yY3Q-kYM_wzAQLLFBJ9Xk950_JY,3571
|
10
12
|
dendrotweaks/biophys/__init__.py,sha256=k0o2xwyoaJUb1lfO9OHtqxheNP6R-Ya5o0g-bJOdCZg,360
|
11
|
-
dendrotweaks/biophys/distributions.py,sha256=
|
13
|
+
dendrotweaks/biophys/distributions.py,sha256=m3BHHQ-iHrRLQuimIHMY4NdJCTC9cc3JT2KvLaxn28M,10324
|
12
14
|
dendrotweaks/biophys/groups.py,sha256=Q4kBIqL1-piIgrpsVq6ojinAWHiEJ1GzMjSAQ7Ni_E8,3212
|
13
|
-
dendrotweaks/biophys/mechanisms.py,sha256=
|
15
|
+
dendrotweaks/biophys/mechanisms.py,sha256=ZlLTMLY53fmxwIfjEcN6Gg6S82SHXYY3EuLqiY6bGgg,18771
|
14
16
|
dendrotweaks/biophys/default_mod/AMPA.mod,sha256=HY_pWzYvaSDV-w7qruenG2mnll8v79s40HFHjUCIi4U,980
|
15
17
|
dendrotweaks/biophys/default_mod/AMPA_NMDA.mod,sha256=ztv2ePUiEQZ93-23FTkGO2DC91rehQuqo0NUIbHZ368,2318
|
16
18
|
dendrotweaks/biophys/default_mod/CaDyn.mod,sha256=gwc69K_rxu2w_mV7CnOSOnVaCMc8Z-MfdBFf6lAj4kg,1298
|
17
19
|
dendrotweaks/biophys/default_mod/GABAa.mod,sha256=jdGRid-Wzw4y9kHvq74oSMogLhSiS-Ac2DDaLOrxVi8,983
|
18
20
|
dendrotweaks/biophys/default_mod/Leak.mod,sha256=u0lwMYGgl5kNZN5W4N6YHgRSeVxb-z2oM9fqou5rCV8,420
|
19
21
|
dendrotweaks/biophys/default_mod/NMDA.mod,sha256=tT4Q5UPoeztXcQ45uZc2PUO3-8OkDLCmrS7WDsn1yQQ,1185
|
20
|
-
dendrotweaks/biophys/default_mod/vecstim.mod,sha256=
|
22
|
+
dendrotweaks/biophys/default_mod/vecstim.mod,sha256=dcDzI3H_WeB-bO9b3NQuF16CtCaUMymPrTayZGVwRhM,826
|
21
23
|
dendrotweaks/biophys/default_templates/NEURON_template.py,sha256=MWSv2fLKGJxdt2zfSO0b74peuBC8U9j_S6AwM5URXts,14945
|
22
24
|
dendrotweaks/biophys/default_templates/default.py,sha256=7HEbR2GJEOhgiox1QtZUEuHi5ihNAHDLsXQiQk980tI,2201
|
25
|
+
dendrotweaks/biophys/default_templates/jaxley.py,sha256=RFmWyLOwa0GCjkuaT-gBbjVrniu99DD3PPAs3J9os3E,4599
|
23
26
|
dendrotweaks/biophys/default_templates/standard_channel.mod,sha256=sw80c-JyqfXNA7c7v7pZGLY-0MgFUvd3bPvJcAGXNSk,2923
|
24
27
|
dendrotweaks/biophys/default_templates/template_jaxley.py,sha256=t-GsCSUyQ7rDoaLmyuWd9bIxB8W3bCqJdnikD59EVvI,3676
|
25
28
|
dendrotweaks/biophys/default_templates/template_jaxley_new.py,sha256=I62KhnOYNV1bT-nPsDTxjIISYmDcso2X8rnsos28nYs,3631
|
26
29
|
dendrotweaks/biophys/io/__init__.py,sha256=kkmQ4L0SatI3lWd3qE8KqOIKd7x3G2OnqAAW93sWWCU,575
|
27
30
|
dendrotweaks/biophys/io/ast.py,sha256=7x_Kxz1qoQHZeIjovUNyVuKgUo4vAFKm-bd4hn9n1CI,6078
|
28
31
|
dendrotweaks/biophys/io/code_generators.py,sha256=RX0nw5-0CyWR3KOrTZUabKuPAQg2ysQ_nQi2iu9TxiE,11978
|
29
|
-
dendrotweaks/biophys/io/converter.py,sha256
|
32
|
+
dendrotweaks/biophys/io/converter.py,sha256=-BfVFahiwlPLfM7MQiuSS8CyfZ5-PDtAHzya8a8dr3k,3567
|
30
33
|
dendrotweaks/biophys/io/factories.py,sha256=j1Hi2u-NTFFL8ElRYlgGVNHRcfKWH6o5GfKvraMTlwM,5020
|
31
34
|
dendrotweaks/biophys/io/grammar.py,sha256=TJLTDlr8Ajp3J9DJ4IvulOCcpUkYr7HnoI0TGnNuEPc,11677
|
32
35
|
dendrotweaks/biophys/io/loader.py,sha256=Wv9ZkEDyA3MkCdV0sMeRnBffg2WAI7yTV3r6C412GiY,6378
|
@@ -34,13 +37,13 @@ dendrotweaks/biophys/io/parser.py,sha256=boT27lFrn5LYrJnkZFs0SwrZZrkSkwO8efqGPJ4
|
|
34
37
|
dendrotweaks/biophys/io/reader.py,sha256=JWm5WM9illvSfDkhWEmWBcj8Y7PSi8zeZX9j1ARUHVU,6576
|
35
38
|
dendrotweaks/morphology/__init__.py,sha256=JwXmSmdn9e_jqslITEdiU9kWvzxcxT9Aw_kUkXLbm5o,353
|
36
39
|
dendrotweaks/morphology/domains.py,sha256=l57KVR5eo1LlH_fCd1AOMiG_SsYLBPBTGQ5R78BHfdM,2545
|
37
|
-
dendrotweaks/morphology/point_trees.py,sha256=
|
40
|
+
dendrotweaks/morphology/point_trees.py,sha256=aZl5p6FGn6mph9xNo-3L_HC7mIvLhvi3BLJuhuihssk,21605
|
38
41
|
dendrotweaks/morphology/sec_trees.py,sha256=eKLC-yNhsn_rPdTE7w7p6STa1onYkBTGcpBKBpEWZUI,36957
|
39
42
|
dendrotweaks/morphology/seg_trees.py,sha256=-XeSJuD7ZixBJYQDzvmSEiNvOWbVmX_DanyAPkkR-NA,4042
|
40
43
|
dendrotweaks/morphology/trees.py,sha256=NrNvPMR-U0clt63eqwVJqU0H8NJgY53QGA_BkdcwkQI,16033
|
41
44
|
dendrotweaks/morphology/io/__init__.py,sha256=gAZqZdf5VKPb6ksK8Lwt7MbTAq8TDP8uq3Vs_ebNFEY,324
|
42
|
-
dendrotweaks/morphology/io/factories.py,sha256=
|
43
|
-
dendrotweaks/morphology/io/reader.py,sha256=
|
45
|
+
dendrotweaks/morphology/io/factories.py,sha256=YkTCXWuJ6bwUW0kjcV2TSzu43EvkE8N5yC3q-B02kxc,6372
|
46
|
+
dendrotweaks/morphology/io/reader.py,sha256=ApfDdA-L61HLIqGbjOwiIntzO4P0_x3n4wYt8lsQzyU,2127
|
44
47
|
dendrotweaks/morphology/io/validation.py,sha256=lVkYw9y9yG5QpRh_N0YQ3FbZwuSUsQfSqJTMumMcDdc,7872
|
45
48
|
dendrotweaks/morphology/reduce/__init__.py,sha256=p6Mg3KDHxTt8S4DtI0m7L7MqV6dS2pdIYAwB7B-toVw,921
|
46
49
|
dendrotweaks/morphology/reduce/reduce.py,sha256=5czZDrG3xsvHn3c_tbYhUOlXgST989-RS-ntbhlvvA0,6361
|
@@ -49,8 +52,8 @@ dendrotweaks/stimuli/__init__.py,sha256=bFfSEZhCVpwOVEBgLe65iiY3SdpjKPhyLemC1z5O
|
|
49
52
|
dendrotweaks/stimuli/iclamps.py,sha256=NjkhhwZKJR1f_g3N9BVxMVoO9ubBk5WkQ6h9Bnf9xgA,1681
|
50
53
|
dendrotweaks/stimuli/populations.py,sha256=vq2NUOaxaltUwlcT7wuCe8z1JWc8rk6HfPmfEd1kK68,8335
|
51
54
|
dendrotweaks/stimuli/synapses.py,sha256=g4MgWTske2TZ2i9FIIOE8-KXNx_3dWa3zEhB2rcqYig,5470
|
52
|
-
dendrotweaks-0.4.
|
53
|
-
dendrotweaks-0.4.
|
54
|
-
dendrotweaks-0.4.
|
55
|
-
dendrotweaks-0.4.
|
56
|
-
dendrotweaks-0.4.
|
55
|
+
dendrotweaks-0.4.6.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
56
|
+
dendrotweaks-0.4.6.dist-info/METADATA,sha256=OXESFIO9zc6MW9dmNJLg4dY-DrPqF6haGWPf8ut2kSg,2740
|
57
|
+
dendrotweaks-0.4.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
58
|
+
dendrotweaks-0.4.6.dist-info/top_level.txt,sha256=OzT_2BSI5j5zxC447K6Y-0W-GHbued7iX-_hFGAKMxY,13
|
59
|
+
dendrotweaks-0.4.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|