def test_quantitysimple(): data = [] for (a, b, check_with_gnu) in valid_quantitysimple: A = NeuroUnitParser.QuantitySimple(a) B = NeuroUnitParser.QuantitySimple(b) if check_with_gnu: verify_equivalence_with_gnuunits(a, b) pcA = ((A - B) / A).dimensionless() pcB = ((A - B) / B).dimensionless() assert pcA == 0 assert pcB == 0 data.append([a, b, str(A), str(B), str(pcA), str(pcB)]) header = "A|B|Parsed(A)|Parsed(B)|PC(A)|PC(B)".split("|") return Table(header=header, data=data)
def build_figures(eqnset): plots = {} # Find all assignments only dependant on 1 supplied values and parameters: for a in eqnset.assignedvalues: all_deps = eqnset.getSymbolDependancicesIndirect( a, include_ass_in_output=False) deps_sup = [d for d in all_deps if isinstance(d, SuppliedValue)] deps_params = [d for d in all_deps if isinstance(d, Parameter)] deps_state = [d for d in all_deps if isinstance(d, StateVariable)] deps_reduce_ports = [ d for d in all_deps if isinstance(d, AnalogReducePort) ] assert len(deps_sup + deps_params + deps_state + deps_reduce_ports) == len(all_deps) # Ignore anything deopendant on state variables: if len(deps_state) != 0: continue # We can't be dependant on parameters: if len(deps_params) != 0: continue if len(deps_sup) == 1: sup = deps_sup[0] meta = eqnset.getSymbolMetadata(sup) if not meta: continue print meta if not 'mf' in meta or not 'role' in meta['mf']: continue role = meta['mf']['role'] if role != 'MEMBRANEVOLTAGE': continue F = FunctorGenerator() F.visit(eqnset) f = F.assignment_evaluators[a.symbol] try: vVals = [-80, -70, -60, -40, -20, 0, 20, 40] vVals = np.linspace(-80, 50, 22) #* pq.milli * pq.volt oUnit = None fOut = [] for v in vVals: from neurounits.neurounitparser import NeuroUnitParser vUnit = NeuroUnitParser.QuantitySimple('%f mV' % v) vRes = f(V=vUnit, v=vUnit) if oUnit is None: oUnit = vRes.unit assert vRes.unit == oUnit fOut.append(vRes.magnitude) except ZeroDivisionError: color = 'r' import pylab f = pylab.figure(figsize=(2, 2)) ax = f.add_subplot(1, 1, 1) ax.plot(vVals, vVals, color=color) f.suptitle('ERROR PLOTTING: Graph of %s against %s ' % (a.symbol, 'V')) ax.set_xlabel('Membrane Voltage (mV)') ax.set_ylabel('%s (%s)' % (a.symbol, oUnit)) ax.grid('on') plots[a.symbol] = f else: color = 'b' import pylab f = pylab.figure(figsize=(2, 2)) ax = f.add_subplot(1, 1, 1) ax.plot(vVals, fOut, color=color) f.suptitle('Graph of %s against V' % a.symbol) ax.set_xlabel('Membrane Voltage (mV)') dim = FormatDimensionality(oUnit) ax.set_ylabel('%s (%s)' % (a.symbol, '$%s$' % dim if dim.strip() else '')) ax.grid('on') plots[a.symbol] = f # Build figure groups based on the first term: if len(plots) <= 3: imgs = [Image(f) for f in sorted(plots.values())] F = Figure(caption='Plots for channel', *imgs) return [F] states = set([k.split('_')[0] for k in plots.keys()]) img_sets = [] for s in states: vs = [(k, v) for (k, v) in plots.iteritems() if k.split('_')[0] == s] imgs = [Image(f[1]) for f in sorted(vs)] img_sets.append((imgs, s)) ps = [ Figure(caption='State:%s' % state, *imgs) for (imgs, state) in img_sets ] return ps
""" # Add 'straight.plugin' into the python path try: import straight.plugin except ImportError: import sys, os localdir = os.path.dirname(__file__) ext_deps_dir = os.path.abspath(os.path.join(localdir, '../../ext_deps/')) print ext_deps_dir sys.path.append(os.path.join(ext_deps_dir, 'straight.plugin/')) import straight.plugin # Standard imports: from neurounits.neurounitparser import NeuroUnitParser, MQ1 from neurounits.neurounitparser import NeuroUnitParserOptions from neurounits.unit_expr_parsing.units_expr_yacc import ParseTypes from neurounits.nuts_io import NutsIO from neurounits.locations import Locations from neurounits.ast import NineMLComponent Q1 = lambda o: NeuroUnitParser.QuantitySimple(o).as_quantities_quantity() Q2 = lambda o: NeuroUnitParser.QuantityExpr(o).as_quantities_quantity()