{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING /opt/conda/lib/python3.5/site-packages/Cython/Compiler/Main.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/jovyan/.cache/cython/brian_extensions/_cython_magic_c623251294d243655f5ca77c558577cb.pyx\n", " tree = Parsing.p_module(s, pxd, full_module_name)\n", " [py.warnings]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Starting simulation at t=0. s for a duration of 50. ms\n", "50. ms (100%) simulated in 4s\n", "Starting simulation at t=53. ms for a duration of 50. ms\n", "50. ms (100%) simulated in 2s\n", "Velocity = 12.33 m/s\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "['ALLOW_THREADS',\n", " 'Annotation',\n", " 'Arrow',\n", " 'Artist',\n", " 'AutoLocator',\n", " 'Axes',\n", " 'BUFSIZE',\n", " 'BinomialFunction',\n", " 'BrianLogger',\n", " 'BrianObject',\n", " 'BrianObjectException',\n", " 'BrianPreference',\n", " 'Button',\n", " 'CLIP',\n", " 'Circle',\n", " 'Clock',\n", " 'CodeRunner',\n", " 'ComplexWarning',\n", " 'Cylinder',\n", " 'CythonCodeObject',\n", " 'DAILY',\n", " 'DEFAULT_CONSTANTS',\n", " 'DEFAULT_FUNCTIONS',\n", " 'DEFAULT_UNITS',\n", " 'DataSource',\n", " 'DateFormatter',\n", " 'DateLocator',\n", " 'DayLocator',\n", " 'DimensionMismatchError',\n", " 'EK',\n", " 'ENa',\n", " 'ERR_CALL',\n", " 'ERR_DEFAULT',\n", " 'ERR_IGNORE',\n", " 'ERR_LOG',\n", " 'ERR_PRINT',\n", " 'ERR_RAISE',\n", " 'ERR_WARN',\n", " 'El',\n", " 'Equations',\n", " 'EventMonitor',\n", " 'ExplicitStateUpdater',\n", " 'Expression',\n", " 'FLOATING_POINT_SUPPORT',\n", " 'FPE_DIVIDEBYZERO',\n", " 'FPE_INVALID',\n", " 'FPE_OVERFLOW',\n", " 'FPE_UNDERFLOW',\n", " 'FR',\n", " 'False_',\n", " 'Figure',\n", " 'FigureCanvasBase',\n", " 'FixedFormatter',\n", " 'FixedLocator',\n", " 'FormatStrFormatter',\n", " 'Formatter',\n", " 'FuncFormatter',\n", " 'Function',\n", " 'Gamp',\n", " 'Gcoulomb',\n", " 'Gfarad',\n", " 'Ggram',\n", " 'Ggramme',\n", " 'Ghertz',\n", " 'Gjoule',\n", " 'Gliter',\n", " 'Glitre',\n", " 'Gmeter',\n", " 'Gmetre',\n", " 'Gmolar',\n", " 'Gmole',\n", " 'Gohm',\n", " 'Gpascal',\n", " 'GridSpec',\n", " 'Group',\n", " 'Gsecond',\n", " 'Gsiemens',\n", " 'Gvolt',\n", " 'Gwatt',\n", " 'HOURLY',\n", " 'HourLocator',\n", " 'Hz',\n", " 'ImportExport',\n", " 'In',\n", " 'IndexDateFormatter',\n", " 'IndexLocator',\n", " 'Inf',\n", " 'Infinity',\n", " 'LinAlgError',\n", " 'Line2D',\n", " 'LinearLocator',\n", " 'Locator',\n", " 'LogFormatter',\n", " 'LogFormatterExponent',\n", " 'LogFormatterMathtext',\n", " 'LogLocator',\n", " 'M',\n", " 'MAXDIMS',\n", " 'MAY_SHARE_BOUNDS',\n", " 'MAY_SHARE_EXACT',\n", " 'MHz',\n", " 'MINUTELY',\n", " 'MO',\n", " 'MONTHLY',\n", " 'MachAr',\n", " 'MagicError',\n", " 'MagicNetwork',\n", " 'Mamp',\n", " 'MatplotlibFinder',\n", " 'MaxNLocator',\n", " 'Mcoulomb',\n", " 'Mfarad',\n", " 'Mgram',\n", " 'Mgramme',\n", " 'Mhertz',\n", " 'MinuteLocator',\n", " 'Mjoule',\n", " 'Mliter',\n", " 'Mlitre',\n", " 'Mmeter',\n", " 'Mmetre',\n", " 'Mmolar',\n", " 'Mmole',\n", " 'ModuleDeprecationWarning',\n", " 'Mohm',\n", " 'MonthLocator',\n", " 'Morphology',\n", " 'Mpascal',\n", " 'Msecond',\n", " 'Msiemens',\n", " 'MultipleLocator',\n", " 'Mvolt',\n", " 'Mwatt',\n", " 'NAN',\n", " 'NINF',\n", " 'NZERO',\n", " 'NaN',\n", " 'Nameable',\n", " 'Network',\n", " 'NetworkOperation',\n", " 'NeuronGroup',\n", " 'Normalize',\n", " 'NullFormatter',\n", " 'NullLocator',\n", " 'NumpyCodeObject',\n", " 'Out',\n", " 'PINF',\n", " 'PZERO',\n", " 'PackageLoader',\n", " 'PoissonGroup',\n", " 'PoissonInput',\n", " 'PolarAxes',\n", " 'Polygon',\n", " 'PopulationRateMonitor',\n", " 'PreferenceError',\n", " 'Quantity',\n", " 'RAISE',\n", " 'RRuleLocator',\n", " 'RankWarning',\n", " 'Rectangle',\n", " 'SA',\n", " 'SECONDLY',\n", " 'SHIFT_DIVIDEBYZERO',\n", " 'SHIFT_INVALID',\n", " 'SHIFT_OVERFLOW',\n", " 'SHIFT_UNDERFLOW',\n", " 'SU',\n", " 'ScalarFormatter',\n", " 'ScalarType',\n", " 'SecondLocator',\n", " 'Section',\n", " 'Slider',\n", " 'Soma',\n", " 'SpatialNeuron',\n", " 'SpikeGeneratorGroup',\n", " 'SpikeMonitor',\n", " 'SpikeSource',\n", " 'StateMonitor',\n", " 'StateUpdateMethod',\n", " 'Statements',\n", " 'Subgroup',\n", " 'Subplot',\n", " 'SubplotTool',\n", " 'Synapses',\n", " 'TH',\n", " 'TU',\n", " 'Tamp',\n", " 'Tcoulomb',\n", " 'Text',\n", " 'Tfarad',\n", " 'Tgram',\n", " 'Tgramme',\n", " 'Thertz',\n", " 'TickHelper',\n", " 'TimedArray',\n", " 'Tjoule',\n", " 'Tliter',\n", " 'Tlitre',\n", " 'Tmeter',\n", " 'Tmetre',\n", " 'Tmolar',\n", " 'Tmole',\n", " 'Tohm',\n", " 'TooHardError',\n", " 'Tpascal',\n", " 'Trackable',\n", " 'True_',\n", " 'Tsecond',\n", " 'Tsiemens',\n", " 'Tvolt',\n", " 'Twatt',\n", " 'UFUNC_BUFSIZE_DEFAULT',\n", " 'UFUNC_PYVALS_NAME',\n", " 'Unit',\n", " 'VariableOwner',\n", " 'VisibleDeprecationWarning',\n", " 'WE',\n", " 'WEEKLY',\n", " 'WRAP',\n", " 'WeaveCodeObject',\n", " 'WeekdayLocator',\n", " 'Widget',\n", " 'YEARLY',\n", " 'YearLocator',\n", " '_',\n", " '__',\n", " '___',\n", " '__builtin__',\n", " '__builtins__',\n", " '__doc__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " '_dh',\n", " '_i',\n", " '_i1',\n", " '_i2',\n", " '_ih',\n", " '_ii',\n", " '_iii',\n", " '_oh',\n", " '_sh',\n", " 'absolute',\n", " 'absolute_import',\n", " 'acorr',\n", " 'add',\n", " 'add_docstring',\n", " 'add_newdoc',\n", " 'add_newdoc_ufunc',\n", " 'add_newdocs',\n", " 'alen',\n", " 'all',\n", " 'all_devices',\n", " 'allclose',\n", " 'alltrue',\n", " 'alterdot',\n", " 'amap',\n", " 'amax',\n", " 'amin',\n", " 'amp',\n", " 'angle',\n", " 'angle_spectrum',\n", " 'annotate',\n", " 'any',\n", " 'append',\n", " 'apply_along_axis',\n", " 'apply_over_axes',\n", " 'arange',\n", " 'arccos',\n", " 'arccosh',\n", " 'arcsin',\n", " 'arcsinh',\n", " 'arctan',\n", " 'arctan2',\n", " 'arctanh',\n", " 'argmax',\n", " 'argmin',\n", " 'argpartition',\n", " 'argsort',\n", " 'argwhere',\n", " 'around',\n", " 'array',\n", " 'array2string',\n", " 'array_equal',\n", " 'array_equiv',\n", " 'array_repr',\n", " 'array_split',\n", " 'array_str',\n", " 'arrow',\n", " 'asanyarray',\n", " 'asarray',\n", " 'asarray_chkfinite',\n", " 'ascontiguousarray',\n", " 'asfarray',\n", " 'asfortranarray',\n", " 'asmatrix',\n", " 'asscalar',\n", " 'atleast_1d',\n", " 'atleast_2d',\n", " 'atleast_3d',\n", " 'autoscale',\n", " 'autumn',\n", " 'average',\n", " 'axes',\n", " 'axhline',\n", " 'axhspan',\n", " 'axis',\n", " 'axvline',\n", " 'axvspan',\n", " 'bar',\n", " 'barbs',\n", " 'barh',\n", " 'bartlett',\n", " 'base_repr',\n", " 'bench',\n", " 'beta',\n", " 'binary_repr',\n", " 'bincount',\n", " 'binomial',\n", " 'bitwise_and',\n", " 'bitwise_not',\n", " 'bitwise_or',\n", " 'bitwise_xor',\n", " 'bivariate_normal',\n", " 'blackman',\n", " 'bmat',\n", " 'bone',\n", " 'bool8',\n", " 'bool_',\n", " 'box',\n", " 'boxplot',\n", " 'brian_prefs',\n", " 'broadcast',\n", " 'broadcast_arrays',\n", " 'broadcast_to',\n", " 'broken_barh',\n", " 'busday_count',\n", " 'busday_offset',\n", " 'busdaycalendar',\n", " 'byte',\n", " 'byte_bounds',\n", " 'bytes',\n", " 'bytes0',\n", " 'bytes_',\n", " 'c_',\n", " 'can_cast',\n", " 'cast',\n", " 'cbook',\n", " 'cbrt',\n", " 'cdouble',\n", " 'ceil',\n", " 'center_matrix',\n", " 'cfloat',\n", " 'char',\n", " 'character',\n", " 'chararray',\n", " 'check_cache',\n", " 'check_units',\n", " 'chisquare',\n", " 'choice',\n", " 'cholesky',\n", " 'choose',\n", " 'cla',\n", " 'clabel',\n", " 'clear_cache',\n", " 'clf',\n", " 'clim',\n", " 'clip',\n", " 'clongdouble',\n", " 'clongfloat',\n", " 'close',\n", " 'cm',\n", " 'cm2',\n", " 'cm3',\n", " 'cmeter',\n", " 'cmetre',\n", " 'codegen',\n", " 'cohere',\n", " 'collect',\n", " 'colorbar',\n", " 'colormaps',\n", " 'colors',\n", " 'column_stack',\n", " 'common_type',\n", " 'compare_chararrays',\n", " 'complex128',\n", " 'complex256',\n", " 'complex64',\n", " 'complex_',\n", " 'complexfloating',\n", " 'compress',\n", " 'concatenate',\n", " 'cond',\n", " 'conj',\n", " 'conjugate',\n", " 'connect',\n", " 'contour',\n", " 'contourf',\n", " 'convolve',\n", " 'cool',\n", " 'copper',\n", " 'copy',\n", " 'copysign',\n", " 'copyto',\n", " 'core',\n", " 'corrcoef',\n", " 'correlate',\n", " 'cos',\n", " 'cosh',\n", " 'coulomb',\n", " 'count_nonzero',\n", " 'cov',\n", " 'cross',\n", " 'csd',\n", " 'csingle',\n", " 'csv2rec',\n", " 'ctypeslib',\n", " 'cumprod',\n", " 'cumproduct',\n", " 'cumsum',\n", " 'cycler',\n", " 'date2num',\n", " 'datestr2num',\n", " 'datetime',\n", " 'datetime64',\n", " 'datetime_as_string',\n", " 'datetime_data',\n", " 'declare_types',\n", " 'dedent',\n", " 'defaultclock',\n", " 'deg2rad',\n", " 'degrees',\n", " 'delaxes',\n", " 'delete',\n", " 'demean',\n", " 'deprecate',\n", " 'deprecate_with_doc',\n", " 'deprecated',\n", " 'det',\n", " 'detrend',\n", " 'detrend_linear',\n", " 'detrend_mean',\n", " 'detrend_none',\n", " 'device',\n", " 'devices',\n", " 'diag',\n", " 'diag_indices',\n", " 'diag_indices_from',\n", " 'diagflat',\n", " 'diagonal',\n", " 'diff',\n", " 'digitize',\n", " 'dirichlet',\n", " 'disconnect',\n", " 'disp',\n", " 'dist',\n", " 'dist_point_to_segment',\n", " 'distances_along_curve',\n", " 'divide',\n", " 'division',\n", " 'docstring',\n", " 'dot',\n", " 'double',\n", " 'drange',\n", " 'draw',\n", " 'draw_all',\n", " 'draw_if_interactive',\n", " 'dsplit',\n", " 'dstack',\n", " 'dtype',\n", " 'e',\n", " 'ediff1d',\n", " 'eig',\n", " 'eigh',\n", " 'eigvals',\n", " 'eigvalsh',\n", " 'einsum',\n", " 'einsum_path',\n", " 'emath',\n", " 'empty',\n", " 'empty_like',\n", " 'entropy',\n", " 'epoch2num',\n", " 'eqs',\n", " 'equal',\n", " 'equations',\n", " 'errorbar',\n", " 'errstate',\n", " 'euler',\n", " 'euler_gamma',\n", " 'eventplot',\n", " 'exact',\n", " 'exception_to_str',\n", " 'exit',\n", " 'exp',\n", " 'exp2',\n", " 'exp_safe',\n", " 'expand_dims',\n", " 'expm1',\n", " 'exponential',\n", " 'exponential_euler',\n", " 'extract',\n", " 'eye',\n", " 'fabs',\n", " 'farad',\n", " 'fastCopyAndTranspose',\n", " 'fft',\n", " 'fft2',\n", " 'fftfreq',\n", " 'fftn',\n", " 'fftpack',\n", " 'fftpack_lite',\n", " 'fftshift',\n", " 'fftsurr',\n", " 'figaspect',\n", " 'figimage',\n", " 'figlegend',\n", " 'fignum_exists',\n", " 'figtext',\n", " 'figure',\n", " 'fill',\n", " 'fill_between',\n", " 'fill_betweenx',\n", " 'fill_diagonal',\n", " 'find',\n", " 'find_common_type',\n", " 'findobj',\n", " 'finfo',\n", " 'fix',\n", " 'flag',\n", " 'flatiter',\n", " 'flatnonzero',\n", " 'flatten',\n", " 'flexible',\n", " 'flip',\n", " 'fliplr',\n", " 'flipud',\n", " 'float128',\n", " 'float16',\n", " 'float32',\n", " 'float64',\n", " 'float_',\n", " 'float_power',\n", " 'floating',\n", " 'floor',\n", " 'floor_divide',\n", " 'fmax',\n", " 'fmin',\n", " 'fmod',\n", " 'format_parser',\n", " 'frange',\n", " 'frexp',\n", " 'frombuffer',\n", " 'fromfile',\n", " 'fromfunction',\n", " 'fromiter',\n", " 'frompyfunc',\n", " 'fromregex',\n", " 'fromstring',\n", " 'full',\n", " 'full_like',\n", " 'fv',\n", " 'gK',\n", " 'gNa0',\n", " 'gamma',\n", " 'gca',\n", " 'gcf',\n", " 'gci',\n", " 'generic',\n", " 'genfromtxt',\n", " 'geometric',\n", " 'geomspace',\n", " 'get',\n", " 'get_array_wrap',\n", " 'get_backend',\n", " 'get_cmap',\n", " 'get_current_fig_manager',\n", " 'get_device',\n", " 'get_dimensions',\n", " 'get_figlabels',\n", " 'get_fignums',\n", " 'get_include',\n", " 'get_ipython',\n", " 'get_local_namespace',\n", " 'get_logger',\n", " 'get_or_create_dimension',\n", " 'get_plot_commands',\n", " 'get_printoptions',\n", " 'get_scale_docs',\n", " 'get_scale_names',\n", " 'get_sparse_matrix',\n", " 'get_state',\n", " 'get_unit',\n", " 'get_xyz_where',\n", " 'getbufsize',\n", " 'geterr',\n", " 'geterrcall',\n", " 'geterrobj',\n", " 'getp',\n", " 'ginput',\n", " 'gl',\n", " 'gradient',\n", " 'gram',\n", " 'gramme',\n", " 'gray',\n", " 'greater',\n", " 'greater_equal',\n", " 'grid',\n", " 'griddata',\n", " 'groups',\n", " 'gsl_rk2',\n", " 'gsl_rk4',\n", " 'gsl_rk8pd',\n", " 'gsl_rkck',\n", " 'gsl_rkf45',\n", " 'gumbel',\n", " 'half',\n", " 'hamming',\n", " 'hanning',\n", " 'have_same_dimensions',\n", " 'helper',\n", " 'hertz',\n", " 'heun',\n", " 'hexbin',\n", " 'hfft',\n", " 'hist',\n", " 'hist2d',\n", " 'histogram',\n", " 'histogram2d',\n", " 'histogramdd',\n", " 'hlines',\n", " 'hold',\n", " 'hot',\n", " 'hsplit',\n", " 'hstack',\n", " 'hsv',\n", " 'hypergeometric',\n", " 'hypot',\n", " 'i',\n", " 'i0',\n", " 'identity',\n", " 'ifft',\n", " 'ifft2',\n", " 'ifftn',\n", " 'ifftshift',\n", " 'ihfft',\n", " 'iinfo',\n", " 'imag',\n", " 'implementation',\n", " 'importexport',\n", " 'imread',\n", " 'imsave',\n", " 'imshow',\n", " 'in1d',\n", " 'in_best_unit',\n", " 'in_unit',\n", " 'independent',\n", " 'index_exp',\n", " 'indices',\n", " 'inexact',\n", " 'inf',\n", " 'inferno',\n", " 'info',\n", " 'infty',\n", " 'inner',\n", " 'input',\n", " 'insert',\n", " 'inside_poly',\n", " 'install_repl_displayhook',\n", " 'int0',\n", " 'int16',\n", " 'int32',\n", " 'int64',\n", " 'int8',\n", " 'int_',\n", " 'int_asbuffer',\n", " 'intc',\n", " 'integer',\n", " 'interactive',\n", " 'intercept',\n", " 'interp',\n", " 'intersect1d',\n", " 'intp',\n", " 'inv',\n", " 'invert',\n", " 'ioff',\n", " 'ion',\n", " 'ipmt',\n", " 'irfft',\n", " 'irfft2',\n", " 'irfftn',\n", " 'irr',\n", " 'is_busday',\n", " 'is_closed_polygon',\n", " 'is_dimensionless',\n", " 'is_numlike',\n", " 'is_scalar_type',\n", " 'is_string_like',\n", " 'isclose',\n", " 'iscomplex',\n", " 'iscomplexobj',\n", " 'isfinite',\n", " 'isfortran',\n", " 'ishold',\n", " 'isinf',\n", " 'isinteractive',\n", " 'isnan',\n", " 'isneginf',\n", " 'isposinf',\n", " 'ispower2',\n", " 'isreal',\n", " 'isrealobj',\n", " 'isscalar',\n", " 'issctype',\n", " 'issubclass_',\n", " 'issubdtype',\n", " 'issubsctype',\n", " 'isvector',\n", " 'iterable',\n", " 'ix_',\n", " 'jet',\n", " 'joule',\n", " 'kHz',\n", " 'kaiser',\n", " 'kamp',\n", " 'kcoulomb',\n", " 'kelvin',\n", " 'kfarad',\n", " 'kgram',\n", " 'kgramme',\n", " 'khertz',\n", " 'kilogram',\n", " 'kjoule',\n", " 'kliter',\n", " 'klitre',\n", " 'kmeter',\n", " 'kmetre',\n", " 'kmolar',\n", " 'kmole',\n", " 'kohm',\n", " 'kpascal',\n", " 'kron',\n", " 'ksecond',\n", " 'ksiemens',\n", " 'kvolt',\n", " 'kwatt',\n", " 'l1norm',\n", " 'l2norm',\n", " 'lapack_lite',\n", " 'laplace',\n", " 'ldexp',\n", " 'left_shift',\n", " 'legend',\n", " 'less',\n", " 'less_equal',\n", " 'lexsort',\n", " 'linalg',\n", " 'linear',\n", " 'linked_var',\n", " 'linspace',\n", " 'liter',\n", " 'litre',\n", " 'little_endian',\n", " 'load',\n", " 'loads',\n", " 'loadtxt',\n", " 'locator_params',\n", " 'log',\n", " 'log10',\n", " 'log1p',\n", " 'log2',\n", " 'logaddexp',\n", " 'logaddexp2',\n", " 'logger',\n", " 'logical_and',\n", " 'logical_not',\n", " 'logical_or',\n", " 'logical_xor',\n", " 'logistic',\n", " 'loglog',\n", " 'lognormal',\n", " 'logseries',\n", " 'logspace',\n", " 'long',\n", " 'longcomplex',\n", " 'longdouble',\n", " 'longest_contiguous_ones',\n", " 'longest_ones',\n", " 'longfloat',\n", " 'longlong',\n", " 'lookfor',\n", " 'lstsq',\n", " 'mA',\n", " 'mM',\n", " 'mS',\n", " 'mV',\n", " 'ma',\n", " 'mafromtxt',\n", " 'magic_network',\n", " 'magma',\n", " 'magnitude_spectrum',\n", " 'mamp',\n", " 'margins',\n", " 'mask_indices',\n", " 'mat',\n", " 'math',\n", " 'matmul',\n", " 'matplotlib',\n", " 'matrix',\n", " 'matrix_power',\n", " 'matrix_rank',\n", " 'matshow',\n", " 'maximum',\n", " 'maximum_sctype',\n", " 'may_share_memory',\n", " 'mcoulomb',\n", " 'mean',\n", " 'median',\n", " 'memmap',\n", " 'memory',\n", " 'meshgrid',\n", " 'meter',\n", " 'metre',\n", " 'mfarad',\n", " 'mgram',\n", " 'mgramme',\n", " 'mgrid',\n", " 'mhertz',\n", " 'milstein',\n", " 'min_scalar_type',\n", " 'minimum',\n", " 'minorticks_off',\n", " 'minorticks_on',\n", " 'mintypecode',\n", " 'mirr',\n", " 'mjoule',\n", " 'mlab',\n", " 'mliter',\n", " 'mlitre',\n", " 'mm',\n", " 'mm2',\n", " 'mm3',\n", " 'mmeter',\n", " 'mmetre',\n", " 'mmolar',\n", " 'mmole',\n", " 'mod',\n", " 'modf',\n", " 'mohm',\n", " 'molar',\n", " 'mole',\n", " 'monitors',\n", " 'morpho',\n", " 'movavg',\n", " 'moveaxis',\n", " 'mpascal',\n", " 'mpl',\n", " 'ms',\n", " 'msecond',\n", " 'msiemens',\n", " 'msort',\n", " 'multi_dot',\n", " 'multinomial',\n", " 'multiply',\n", " 'multivariate_normal',\n", " 'mvolt',\n", " 'mwatt',\n", " 'mx2num',\n", " 'nA',\n", " 'nF',\n", " 'nM',\n", " 'nS',\n", " 'namp',\n", " 'nan',\n", " 'nan_to_num',\n", " 'nanargmax',\n", " 'nanargmin',\n", " 'nancumprod',\n", " 'nancumsum',\n", " 'nanmax',\n", " 'nanmean',\n", " 'nanmedian',\n", " 'nanmin',\n", " 'nanpercentile',\n", " 'nanprod',\n", " 'nanstd',\n", " 'nansum',\n", " 'nanvar',\n", " 'nbytes',\n", " 'ncoulomb',\n", " 'ndarray',\n", " 'ndenumerate',\n", " 'ndfromtxt',\n", " 'ndim',\n", " 'ndindex',\n", " 'nditer',\n", " 'negative',\n", " 'negative_binomial',\n", " 'nested_iters',\n", " 'network_operation',\n", " 'neuron',\n", " 'new_figure_manager',\n", " 'newaxis',\n", " 'nextafter',\n", " 'nfarad',\n", " 'ngram',\n", " 'ngramme',\n", " 'nhertz',\n", " 'nipy_spectral',\n", " 'njoule',\n", " 'nliter',\n", " 'nlitre',\n", " 'nmeter',\n", " 'nmetre',\n", " 'nmolar',\n", " 'nmole',\n", " 'nohm',\n", " 'noncentral_chisquare',\n", " 'noncentral_f',\n", " 'nonzero',\n", " 'norm',\n", " 'norm_flat',\n", " 'normal',\n", " 'normpdf',\n", " 'not_equal',\n", " 'np',\n", " 'npascal',\n", " 'nper',\n", " 'npv',\n", " 'nsecond',\n", " 'nsiemens',\n", " 'num2date',\n", " 'num2epoch',\n", " 'number',\n", " 'numpy',\n", " 'numpy_',\n", " 'nvolt',\n", " 'nwatt',\n", " 'obj2sctype',\n", " 'object0',\n", " 'object_',\n", " 'ogrid',\n", " 'ohm',\n", " 'ones',\n", " 'ones_like',\n", " 'only',\n", " 'outer',\n", " 'over',\n", " 'pA',\n", " 'pF',\n", " 'p_value',\n", " 'packbits',\n", " 'pad',\n", " 'pamp',\n", " 'pareto',\n", " 'parsing',\n", " 'partition',\n", " 'pascal',\n", " 'path_length',\n", " 'pause',\n", " 'pcolor',\n", " 'pcolormesh',\n", " 'pcoulomb',\n", " 'percentile',\n", " 'permutation',\n", " 'pfarad',\n", " 'pgram',\n", " 'pgramme',\n", " 'phase_spectrum',\n", " 'phertz',\n", " 'pi',\n", " 'pie',\n", " 'piecewise',\n", " 'pink',\n", " 'pinv',\n", " 'pjoule',\n", " 'pkgload',\n", " 'place',\n", " 'plasma',\n", " 'pliter',\n", " 'plitre',\n", " 'plot',\n", " 'plot_date',\n", " 'plotfile',\n", " 'plotting',\n", " 'plt',\n", " 'pmeter',\n", " 'pmetre',\n", " 'pmolar',\n", " 'pmole',\n", " 'pmt',\n", " 'pohm',\n", " 'poisson',\n", " 'polar',\n", " 'poly',\n", " 'poly1d',\n", " 'poly_below',\n", " 'poly_between',\n", " 'polyadd',\n", " ...]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: lazyarray in /opt/conda/lib/python3.5/site-packages (0.3.2)\n", "Requirement already satisfied: numpy>=1.8 in /opt/conda/lib/python3.5/site-packages (from lazyarray) (1.12.1)\n", "\u001b[31mcryptography 2.2.1 requires asn1crypto>=0.21.0, which is not installed.\u001b[0m\n", "\u001b[31mcffi 1.11.5 requires pycparser, which is not installed.\u001b[0m\n", "\u001b[31mallensdk 0.14.2 has requirement pandas<0.20.0,>=0.16.2, but you'll have pandas 0.23.1 which is incompatible.\u001b[0m\n", "\u001b[33mYou are using pip version 10.0.1, however version 18.1 is available.\n", "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.5/site-packages/pyNN/neuron/__init__.py:14: UserWarning: mpi4py not available\n", " warnings.warn(\"mpi4py not available\")\n" ] } ], "source": [ "from pyNN.neuron import *\n", "from pyNN.neuron import HH_cond_exp\n", "from pyNN.neuron import EIF_cond_exp_isfa_ista\n", "from pyNN.neuron import Izhikevich\n", "\n", "from pyNN import neuron\n", "#\n", "from pyNN.neuron import simulator as sim\n", "from pyNN.neuron import setup as setup\n", "\n", "from pyNN.neuron import DCSource\n", "from types import MethodType\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import io\n", "import math\n", "import pdb\n", "#from numba import jit\n", "from contextlib import redirect_stdout\n", "import numpy as np\n", "#from .base import *\n", "import quantities as qt\n", "from quantities import mV, ms, s\n", "import matplotlib.pyplot as plt\n", "from pyNN.neuron import *\n", "from pyNN.neuron import HH_cond_exp\n", "from pyNN.neuron import EIF_cond_exp_isfa_ista\n", "from pyNN.neuron import Izhikevich\n", "from elephant.spike_train_generation import threshold_detection\n", "\n", "from pyNN import neuron\n", "#\n", "#from pyNN.neuron import simulator as sim\n", "from pyNN.neuron import setup as setup\n", "#from pyNN.neuron import Izhikevich\n", "#from pyNN.neuron import Population\n", "from pyNN.neuron import DCSource\n", "import numpy as np\n", "import copy\n", "from neo import AnalogSignal\n", "import neuronunit.capabilities.spike_functions as sf\n", "\n", "import neuronunit.capabilities as cap\n", "cap.ReceivesCurrent\n", "cap.ProducesActionPotentials\n", "def bind_NU_interface(model):\n", "\n", " def load_model(self):\n", " neuron = None\n", " from pyNN import neuron\n", " self.hhcell = neuron.create(EIF_cond_exp_isfa_ista())\n", " neuron.setup(timestep=self.dt, min_delay=1.0)\n", "\n", "\n", " def init_backend(self, attrs = None, cell_name= 'HH_cond_exp', current_src_name = 'hannah', DTC = None, dt=0.01):\n", " backend = 'HHpyNN'\n", " self.current_src_name = current_src_name\n", " self.cell_name = cell_name\n", " self.adexp = True\n", "\n", " self.DCSource = DCSource\n", " self.setup = setup\n", " self.model_path = None\n", " self.related_data = {}\n", " self.lookup = {}\n", " self.attrs = {}\n", " self.neuron = neuron\n", " self.model._backend = str('ExternalSim')\n", " self.backend = self\n", " self.model.attrs = {}\n", "\n", " #self.orig_lems_file_path = 'satisfying'\n", " #self.model._backend.use_memory_cache = False\n", " #self.model.unpicklable += ['h','ns','_backend']\n", " self.dt = dt\n", " if type(DTC) is not type(None):\n", " if type(DTC.attrs) is not type(None):\n", "\n", " self.set_attrs(**DTC.attrs)\n", " assert len(self.model.attrs.keys()) > 0\n", "\n", " if hasattr(DTC,'current_src_name'):\n", " self._current_src_name = DTC.current_src_name\n", "\n", " if hasattr(DTC,'cell_name'):\n", " self.cell_name = DTC.cell_name\n", " \n", " self.load_model()\n", "\n", " def get_membrane_potential(self):\n", " \"\"\"Must return a neo.core.AnalogSignal.\n", " And must destroy the hoc vectors that comprise it.\n", " \"\"\"\n", " #dt = float(copy.copy(self.neuron.dt))\n", " data = self.hhcell.get_data().segments[0]\n", " volts = data.filter(name=\"v\")[0]#/10.0\n", " #data_block = all_cells.get_data()\n", "\n", " vm = AnalogSignal(volts,\n", " units = mV,\n", " sampling_period = self.dt *ms)\n", " #results['vm'] = vm\n", " return vm#data.filter(name=\"v\")[0]\n", "\n", " def _local_run(self):\n", " '''\n", " pyNN lazy array demands a minimum population size of 3. Why is that.\n", " '''\n", " results = {}\n", " DURATION = 1000.0\n", " \n", " #ctx_cells.celltype.recordable\n", " \n", " \n", " if self.celltype == 'HH_cond_exp':\n", "\n", " self.hhcell.record('spikes','v')\n", "\n", " else:\n", " self.neuron.record_v(self.hhcell, \"Results/HH_cond_exp_%s.v\" % str(neuron))\n", "\n", " #self.neuron.record_gsyn(self.hhcell, \"Results/HH_cond_exp_%s.gsyn\" % str(neuron))\n", " self.neuron.run(DURATION)\n", " data = self.hhcell.get_data().segments[0]\n", " volts = data.filter(name=\"v\")[0]#/10.0\n", " #data_block = all_cells.get_data()\n", "\n", " vm = AnalogSignal(volts,\n", " units = mV,\n", " sampling_period = self.dt *ms)\n", " results['vm'] = vm\n", " results['t'] = vm.times # self.times\n", " results['run_number'] = results.get('run_number',0) + 1\n", " return results\n", "\n", "\n", "\n", "\n", " def set_attrs(self,**attrs):\n", " self.init_backend()\n", " self.model.attrs.update(attrs)\n", " assert type(self.model.attrs) is not type(None)\n", " self.hhcell[0].set_parameters(**attrs)\n", " return self\n", "\n", "\n", " def inject_square_current(self,current):\n", " attrs = copy.copy(self.model.attrs)\n", " self.init_backend()\n", " self.set_attrs(**attrs)\n", " c = copy.copy(current)\n", " if 'injected_square_current' in c.keys():\n", " c = current['injected_square_current']\n", "\n", " stop = float(c['delay'])+float(c['duration'])\n", " duration = float(c['duration'])\n", " start = float(c['delay'])\n", " amplitude = float(c['amplitude'])\n", " electrode = self.neuron.DCSource(start=start, stop=stop, amplitude=amplitude)\n", "\n", "\n", " electrode.inject_into(self.hhcell)\n", " self.results = self._local_run()\n", " self.vm = self.results['vm']\n", "\n", " def get_APs(self,vm):\n", " vm = self.get_membrane_potential()\n", " waveforms = sf.get_spike_waveforms(vm,threshold=-45.0*mV)\n", " return waveforms\n", "\n", " def get_spike_train(self,**run_params):\n", " vm = self.get_membrane_potential()\n", "\n", " spike_train = threshold_detection(vm,threshold=-45.0*mV)\n", "\n", " return spike_train\n", " \n", " def get_spike_count(self,**run_params):\n", " vm = self.get_membrane_potential()\n", " return len(threshold_detection(vm,threshold=-45.0*mV))\n", " \n", " model.init_backend = MethodType(init_backend,model)\n", " model.get_spike_count = MethodType(get_spike_count,model)\n", " model.get_APs = MethodType(get_APs,model)\n", " model.get_spike_train = MethodType(get_spike_train,model)\n", " model.set_attrs = MethodType(set_attrs, model) # Bind to the score.\n", " model.inject_square_current = MethodType(inject_square_current, model) # Bind to the score.\n", " model.set_attrs = MethodType(set_attrs, model) # Bind to the score.\n", " model.get_membrane_potential = MethodType(get_membrane_potential,model)\n", " model.load_model = MethodType(load_model, model) # Bind to the score.\n", " model._local_run = MethodType(_local_run,model)\n", " model.init_backend(model)\n", " #model.load_model() #= MethodType(load_model, model) # Bind to the score.\n", "\n", " return model\n", "HH_cond_exp = bind_NU_interface(HH_cond_exp) \n", "#HH_cond_exp" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "electro_tests = []\n", "obs_frame = {}\n", "test_frame = {}\n", "import os\n", "import pickle\n", "try: \n", "\n", " electro_path = str(os.getcwd())+'all_tests.p'\n", "\n", " assert os.path.isfile(electro_path) == True\n", " with open(electro_path,'rb') as f:\n", " (obs_frame,test_frame) = pickle.load(f)\n", "\n", "except:\n", " for p in pipe:\n", " p_tests, p_observations = get_neab.get_neuron_criteria(p)\n", " obs_frame[p[\"name\"]] = p_observations#, p_tests))\n", " test_frame[p[\"name\"]] = p_tests#, p_tests))\n", " electro_path = str(os.getcwd())+'all_tests.p'\n", " with open(electro_path,'wb') as f:\n", " pickle.dump((obs_frame,test_frame),f)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [ { "ename": "NameError", "evalue": "name 'test_frame' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0muse_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtest_frame\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Neocortex pyramidal cell layer 5-6\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0muse_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobservation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m#from neuronunit.tests import RheobaseP\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mneuronunit\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfi\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mRheobaseTest\u001b[0m\u001b[0;31m# as discovery\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'test_frame' is not defined" ] } ], "source": [ "use_test = test_frame[\"Neocortex pyramidal cell layer 5-6\"]\n", "use_test[0].observation\n", "#from neuronunit.tests import RheobaseP\n", "from neuronunit.tests.fi import RheobaseTest# as discovery\n", "\n", "rtp = RheobaseTest(use_test[0].observation)\n", "use_test[0] = rtp\n", "\n", "\n", "HH_cond_exp.attrs = HH_cond_exp.simple_parameters(HH_cond_exp)\n", "#print(HH_cond_exp.attrs)\n", "HH_cond_exp.scaled_parameters(HH_cond_exp)\n", "dir(HH_cond_exp)\n", "HH_cond_exp.default_initial_values\n", "HH_cond_exp.attrs\n", "NGEN = 10\n", "MU = 10\n", "from neuronunit.optimization import optimization_management as om\n", "explore_ranges = {'e_rev_Na' : (40,70), 'e_rev_K': (-90.0,-75.0), 'cm' : (0.25,1.5)}\n", "npcl, DO = om.run_ga(explore_ranges,NGEN,use_test,free_params=explore_ranges.keys(), NSGA = True, MU = MU,model_type=None)\n", "\n", "#hc = " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#dir(HH_cond_exp)\n", "#HH_cond_exp.get_parameters()\n", "#hhcell[0].get_parameters()\n", "#dir(HH_cond_exp)\n", "HH_cond_exp.attrs = HH_cond_exp.simple_parameters(HH_cond_exp)\n", "HH_cond_exp.celltype = HH_cond_exp\n", "iparams = {}\n", "iparams['injected_square_current'] = {}\n", "#iparams['injected_square_current']['amplitude'] = 1.98156805*pq.pA\n", "iparams['injected_square_current']['amplitude'] = 0.68156805*pq.pA\n", "\n", "DELAY = 100.0*pq.ms\n", "DURATION = 1000.0*pq.ms\n", "iparams['injected_square_current']['delay'] = DELAY\n", "iparams['injected_square_current']['duration'] = int(DURATION)\n", "\n", "HH_cond_exp.inject_square_current(iparams)\n", "print(HH_cond_exp.get_spike_count())\n", "\n", "print(HH_cond_exp.vm)\n", "\n", "import matplotlib.pyplot as plt\n", "plt.plot(HH_cond_exp.vm.times,HH_cond_exp.vm)\n", "\n", "\n", "plt.show()\n", "iparams['injected_square_current']['amplitude'] = 0.8598156805*pq.pA\n", "#iparams['injected_square_current']['amplitude'] = 2000.98156805*pq.pA\n", "\n", "DELAY = 100.0*pq.ms\n", "DURATION = 1000.0*pq.ms\n", "iparams['injected_square_current']['delay'] = DELAY\n", "iparams['injected_square_current']['duration'] = int(DURATION)\n", "\n", "HH_cond_exp.inject_square_current(iparams)\n", "print(HH_cond_exp.get_spike_count())\n", "import matplotlib.pyplot as plt\n", "plt.plot(HH_cond_exp.vm.times,HH_cond_exp.vm)\n", "\n", "plt.show()\n", "pred = use_test[0].generate_prediction(HH_cond_exp)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#dir(HH_cond_exp)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "print(pred)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "iparams['injected_square_current']['amplitude'] = pred['value']\n", "#iparams['injected_square_current']['amplitude'] = 2000.98156805*pq.pA\n", "\n", "DELAY = 100.0*pq.ms\n", "DURATION = 1000.0*pq.ms\n", "iparams['injected_square_current']['delay'] = DELAY\n", "iparams['injected_square_current']['duration'] = int(DURATION)\n", "\n", "HH_cond_exp.inject_square_current(iparams)\n", "print(HH_cond_exp.get_spike_count())\n", "import matplotlib.pyplot as plt\n", "plt.plot(HH_cond_exp.vm.times,HH_cond_exp.vm)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "\n", "import pyNN\n", "from pyNN import neuron\n", "from pyNN.neuron import EIF_cond_exp_isfa_ista\n", "#neurons = pyNN.Population(N_CX, pyNN.EIF_cond_exp_isfa_ista, RS_parameters)\n", "\n", "cell = neuron.create(EIF_cond_exp_isfa_ista())\n", "#cell[0].set_parameters(**LTS_parameters)\n", "cell[0].get_parameters()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\n", "\n", "explore_ranges = {'E_Na' : (40,70), 'E_K': (-90.0,-75.0), 'C_m' : (0.25,1.5), 'g_K':(30,40), 'g_Na':(100,140), 'g_L':(0.1,0.5), 'E_L':(-60.0,-45)}\n", "\n", "attrs = { 'g_K' : 36.0, 'g_Na' : 120.0, 'g_L' : 0.3, \\\n", " 'C_m' : 1.0, 'E_L' : -54.387, 'E_K' : -77.0, 'E_Na' : 50.0, 'vr':-65.0 } \n", "\n", " \n", "from neuronunit.optimization import optimization_management as om\n", "print(test_frame) \n", "MU = 12\n", "NGEN = 25\n", "cnt = 1\n", "#hc = { 'g_L' : 0.3, 'E_L' : -54.387,\n", "hc = {'vr':-65.0 } \n", "\n", "#npcl, DO = om.run_g\n", "npcl, DO = om.run_ga(explore_ranges,NGEN,use_test,free_params=explore_ranges.keys(), hc = hc, NSGA = True, MU = MU,model_type='HH')\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }